> CentOS > CentOS服务器 > 环境配置 >

Centos 7.1搭建postfix 邮件系统

学习一个服务的流程;

                 1、此服务器的概述:名字,功能,特点,端口号

                 2、安装

                 3、配置文件的位置

                 4、服务启动关闭脚本,查看端口

                 5、此服务的使用方法

                 6、修改配置文件,实战举例

                 7、服务的安全

                 8、排错(从下到上,从内到外)

                 9、模拟错误<对服务的原理要精通>

 

背景介绍;

         

RHEL5默认,地位已失

      地位失守原因:

 第一个重要的缺点是它的安全性较差,这是因为当其作者Eric Allman最初开始写作这个软件的时候,Internet的用户还很少,因而安全性并不没有得到大家的重视。

由于邮件系统需要处理的是外部发送来的各种各样的信息,甚至包含一些恶意数据,然而sendmail在大多数系统中都是以root身份运行,一旦出现问题,就会对系统安全造成严重影响。在这种情况下,要防止出现安全问题,仅仅依赖程序本身是不可取的,应该从系统结构出发,使程序拥有的特殊权限限制到最小。

第二个,使用Sendmail还会遇到的另一个问题是它的设置相当复杂,对于使用缺省设置来收发电子邮件,问题并不存在。当管理员打算进行一些特殊设置,以便利用Sendmail提供的复杂邮件处理能力时,就不得不面对复杂的宏和正则表达式。

 

Qmail可以替代Sendmail

Qmail,为了解决sendmail的安全问题,整个系统结构需要重新设计。基本的原则是将系统划分为不同的模块,有负责接收外部邮件的,有管理缓冲目录中待发送的邮件队列的,有将邮件发送到远程服务器或本地用户的。Qmail就是按照这个原则进行的设计,它由多个不同功能的小程序组成,只有必要的程序才是setuid程序(即以root用户权限执行),这样就减少了安全隐患,并且由于这些程序都比较简单一些,因此就可以达到较高的安全性。Qmail已经许多年没有更新了,用户已经习惯于通过第三方的插件及补丁来使qmail增加新的功能.

 

postfix 介绍:

 

另一种替换软件:Postfix  可以替代sendmail
postfix同样也是采用了模块化的方式,但与Qmail不同的是,Postfix使用了一个主控进程进行监控。Postfix在很多方面都考虑到了安全问题,它甚至不向root分发电子邮件,以避免以root身份读写文件或启动外部程序。考虑到它的作者Wietse Venema曾编写了著名的安全软件TcpWrapper,Postfix的安全性是非常值得信赖的。

 

Postfix的性能也非常不错,甚至在Qmail作者自己进行的测试中也表明,Postfix的性能和Qmail基本相当。postfix在性能上大约比sendmail快三倍

 

官网:http://www.postfix.org/

logo

 

作者:Wietse  Venema

作者介绍:http://www.porcupine.org/wietse/

 

前面我们说的都是邮件发送服务器

接下来我们看看邮件接收服务器

 

Dovecot: 邮件接收服务器:

Dovecot 是一个开源的 IMAP 和 POP3 邮件服务器,支持 Linux/Unix 系统。

POP / IMAP4 是 MUA 从邮件服务器中读取邮件时使用的协议。

POP3 是从邮件服务器中下载邮件存起来,IMAP 则是将邮件留在服务器端直接对邮件进行管理、操作。比POP3更先进。

由 Timo Sirainen 开发,最初发布于 2002年7月。作者将安全性考虑在第一,所以 Dovecot 在安全性方面比较出众。

IMAP4是TCP/IP协议族中的一员,现在的版本是“IMAP第四版第一次修订版”。

一个完整的邮件服务器由以下内容构成:

postfix(作为发送邮件服务器)+dovecot(作为接收邮件服务器)+mysql(作为数据库)

 

25 端口:SMTP协议。  发送邮件

 

是本地邮件传输协议,与SMTP类似,但不支持邮件队列(queue),主要应用于非广域网的邮件网关。

 

110端口:POP3协议

 

是本地邮件传输协议,与SMTP类似,但不支持邮件队列(queue),主要应用于非广域网的邮件网关。

 

143:IMAP

 

IMAP: (InternetMail Access Protocol Internet邮件访问协议) 。IMAP是斯坦福大学在1986年开发的一种邮件获取协议。它的主要作用是邮件客户端(例如Outlook)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。

当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。两者之前的区别

POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。

而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

 

邮件功能组件

MUA:邮件用户代理(Mail User Agent)   收邮件

MTA:邮件传输代理(Mail Transfer Agent)  发邮件

rhel5默认采用sendmail做为MTA,rhel6则采用postfix

MDA:邮件递送代理(Mail Delivery Agent)


 

名称

全名

基于协议

作用

常见软件

MUA

Mail User Agent 用户邮件代理

 

替用户收发邮件的

Outlook  Foxmail Thunderbird mutt

MTA

Mail Transfer Agent 邮件传输代理

SMTP

服务器中接受邮件

Sendmail qmail   postfix(IBM)   exchange

MDA

Mail Deliver Agent 邮件投递代理

 

把SMTP收到的邮件投递的用户邮箱

Procmail   maildrop

MRA

Mail Retrival Agent邮件检索代理

POP3/IMAP

帮用户去邮箱取邮件

dovecot  courier-imap cyrus-imap

 

工作原理图

 

 

 

 

搭建postfx服务端

 

[root@post-test ~]# hostname
postfix-server
[root@postfix-server ~]# rpm -qa |grep sendmail
[root@postfix-server ~]# yum remove sendmail -y 
 

 

[root@postfix-server ~]# alternatives --config mta

共有 1 个提供“mta”的程序。

  选项    命令
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix
 

按 Enter 保留当前选项[+],或者键入选项编号:  # 如果有多个输入数字进行选择

 

[root@postfix-server ~] alternatives --display mta  #查看所有详细的版本

[root@postfix-server ~] #yuminstall postfix –y  # postfix服务的主程序包,服务器端必须安装该

[root@postfix-server ~] #yuminstall dovecot –y  #接收邮件软件包。 安装在服务端用于测试收邮件。 安装客端用于收邮件。

[root@postfix-server ~] #vim  /etc/postfix/main.cf  

 

[root@postfix-server ~] # vim/var/log/maillog

 

[root@postfix-server ~]#service postfix start

 

[root@postfix-server ~]#lsof -i :25

COMMAND  PID USER  FD   TYPE DEVICE SIZE/OFF NODENAME

master  2336 root  12u  IPv4  13216     0t0  TCP localhost:smtp (LISTEN)

master  2336 root  13u  IPv6  13218     0t0  TCP localhost:smtp (LISTEN)

 

服务的使用方法:

      linux:

           发送:

            [root@postfix-server ~]# mail -s 'Postfix'1684067131@qq.com < /etc/passwd                   

               -s:指定邮件主题名

接收:

                 mail

      windows:

           通过浏览器访问或 foxmail


案例一;

 配置postfix邮件服务器,实现邮件发送功能。实现给邮箱:1684067131@qq.com 发送邮件。

1)修改主机名和对应关系:

[root@postfix-server~]# hostname

xuegod63.cn

 

[root@postfix-server ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
postfix-server 172.16.1.201

2.修改postfix服务配置文件

[root@postfix-server ~]#vim /etc/postfix/main.cf

 

 

queue_directory= /var/spool/postfix   #队列目录,也是运行的根目录

mydomain =postfix-server#指定邮件域,接收用来识别的

myhostname= postfix-server#发送邮件的主机名

mynetworks= 192.168.1.0/24, 127.0.0.0/8   #指定允许使用的ip地址段

myorigin =$mydomain   #发信地址,此设置显示为@postfix-server

inet_interfaces= all  #对外提供MTA服务设置为监听所有网卡,默认只监听本地

#inet_interfaces= localhost  #注释掉,这个是只监听本地的

mydestination= $myhostname, localhost.$mydomain, localhost, $mydomain

mynetworks_style= subnet #允许转发的来源网段,可选subnet子网,class网段,host本机

local_recipient_maps =  //209行,把前面的注释拿掉

relay_domains= $mydestination #允许转发的目标域

alias_maps= hash:/etc/aliases  #对某个用户发,文件中的用户都可以收到邮件

alias_database= hash:/etc/aliases 

smtpd_banner= $myhostname ESMTP "postfix mail server" #自定服务器信息


3.启动postfix服务;

 

[root@postfix-server ~]#servicepostfix restart

 

1)测试给123456789@qq.com发送邮件:

 

[root@xuegod63 ~]# mail -s 'Postfix'123456789@qq.com< /etc/postfix/main.cf

由于要经过很多域名解析发送中转,所以会有些延迟

-s:邮件主题

#

[root@postfix-server ~] #mail

HeirloomMail version 12.4 7/29/08.  Type ? forhelp.

"/var/spool/mail/root":12 messages 1 new 2 unread

>N 12 Mail Delivery System  Sun Nov 29 21:14 752/29445 "UndeliveredMail Returned to S"

&

 

没有发送出去,经验证是网络ip的问题

http://www.anti-spam.org.cn/  反垃圾邮件联盟,看看你的ip是否被拉入黑名单

用别的地方的一台机器,一样的配置文件,可以发送

 

[root@postfix~]# mail -s 'Postfix' 123567890@qq.com </etc/postfix/main.cf


1.我们怎样才能让我们的邮件服务器给别人发送邮件不显示垃圾邮件?

 

需要为邮件服务器添加DNS解析

虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件。根据我们的实际经验,需要添加三条DNS解析记录:A记录、MX记录、TXT记录比如域名cnblogs.info,对应的DNS记录如下

 

 

 

 

例2:配置postfix给一个人发送邮件多个人可以收到

需求:

我们先创建2个用户,创建一个组HA,当我们给HA送邮件的时候,alice和bob两个用户可以收到邮件

别名功能

 

1)添加测试用户:

[root@postfix-server ~]# groupadd HA

[root@postfxi-server ~]# useradd alice

[root@postfix-server ~]#  echo "123456" | passwd --stdinalice

[root@postfix-server ~]# useradd bob

[root@postfix-server~]#  echo "123456" | passwd --stdin bob

[root@postfix-server~]# vim /etc/aliases

HA:             alice,bob

[root@postfix-server ~]# service postfixrestart

3)发送测试邮件:

[root@postfix-server ~]# mail HA

Subject: Test 

This is a Test-mail

lllloo

kllll

lll

EOT   按ctrl-D结束输入

4) 切换用户查看:

 

[root@postfix-server ~]# su - alice

[alice@postfix-server ~]$ mail

 配置dovecot服务器,实现发邮件和接收邮件

  • 修改dovecot配置文件:

[root@postfix-server ~]# vim /etc/dovecot/dovecot.conf

protocols = imap pop3 lmtp  #启用,lmtp被淘汰的地步。可能不被支持,不用就删掉

login_trusted_networks = 192.168.1.0/24   //指定允许登录的网段地址

  或login_trusted_networks = 0.0.0.0  设置为四个零,允许所有网络

[root@postfix-server ~]# grep -v '^#' /etc/dovecot/dovecot.conf |grep-v '^$' |grep -v '#'

protocols= imap pop3 lmtp

login_trusted_networks= 192.168.1.0/24

dict {

}

!includeconf.d/*.conf

 

  • 设置邮件存放目录:

[root@postfix-server~]# vim/etc/dovecot/conf.d/10-mail.conf

mail_location = mbox:~/mail:INBOX=/var/mail/%u  #指定邮件的位置

  • 重启dovecot服务

[root@postfix ~]# service dovecot restart

  • 修改创建用户模板文件,使用户创建时自动生成mail存放目录

[root@postfix ~]# vim /etc/skel/.bash_profile

if[ ! -d ~/mail/.imap/INBOX ] ; then

        mkdir -p ~/mail/.imap/INBOX

fi 

[root@postfix-server ~]# source .bash_profile

5)测试:

      先创建用户

            [root@postfix-server~]# useradd alice

            [root@postfix-server~]# echo alice:123456 |chpasswd

       [root@postfix-server~]# useradd bob

           [root@postfix ~]# echobob:123456 |chpasswd 

 

测试发邮件

测试发邮件:

mail发邮件三种用法

1:以文件中的内容为邮件内容发信

[root@postfix-server ~]# su - alice

[alice@postfix-server ~]$ mail -s'Posfix1' bob@postfix-server < /etc/hosts

       2:手动输入内容作为发送内容

      [alice@postfix-server ~]$ echo"2222222222" | mail -s 'Postfix2' bob@postfix-server

       3:手动输入一串作为发送内容

[alice@postfix-server~]$ mail -s 'Postfix3' bob@postfix-server

yyyuuu

hhhhhkkk

jjjnnnn

EOT

      通过mail命令查看邮件:

[root@postfix-server~]# su - bob

[bob@postfix-serve~]$ mail

&      #mail命令的提示符为 &

& 1    # 输入数字1,查看第一封邮件

& h    #查看邮件列表

& l     #查看所有支持的命令

& d 2  #删除第二个邮件; d 2-4  删除第2-4的邮件

& ?   #查看 所有用法。



(责任编辑:IT)