PostFix+Dovecot部署邮件系统
Postfix 是一种电子邮件服务器是一个开放源代码的软件. Postfix 是MTA邮件传输代理软件.是sendmail提供替代品的一个尝试,在Internet世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100万用户使用sendmail,每天投递上亿封邮件,Postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性.
生活中常用的邮件服务器
Sendmail: 资格最古老,运行稳定,但安全性欠佳.
Postfix: 采用模块化设计,在投递效率、稳定性、性能及安全性方面表现优秀,与sendmail保持足够的兼容性.
Qmail: 采用模块化设计,速度快、执行效率高,配置稍微复杂点.
Outook:是一个客户端代理.
FoxMail:也是客户端代理.
PostFix的特点
1.PostFix是免费,开源的,并且兼容sendmail
2.性能好,大约比sendmail快三倍,一台运行postfix的台式pc每天可收发上百万邮件.
3.安全性,PostFix具有多层防御结构,可以有效地抵御恶意入侵者,可以运行在较低的权限之下.
4.灵活性好,postfix是由超过一打的小程序组成的,每个程序完成特定功能.可以通过配置设置每个程序的运行参数.
5.健壮稳定,postfix被设计成在重负荷之下仍然可以正常工作.当系统运行超出了可用的内存或磁盘空间时,postfix会自动减少运行进程的数目.当处理的邮件数目增长时,Postfix运行的进程不会跟着增加.
PostFix工作流程图解
1.客户端通过Outlook或网页客户端软件,向邮件服务器发送一封邮件,首先邮件服务器会检查是发往本域,还是发往其他域.
2.如果发送到本域直接存放到Mailbox中,另外一个用户上线,需要收取这封邮件,借助dovecot软件,通过dovecot进入数据库验证身份,验证通过以后,就可以通过MRA调用POP3或者IMAP4的协议,进入邮箱收取邮件,并且将邮件转发给用户.
3.如果发送到其他域,转发之前验证用户身份,是否要为其转发邮件,验证的时候是用到了SASL函数库,用户的信息是放到了数据库中,此时我们需要一个中间层authlib,通过authlib替SASL函数库向数据库进行验证,做”发信认证”,认证通过允许转发,验证不通过拒绝转发.
4.通过浏览器访问邮件服务器(EXtmall/FoxMali),转发到其他域,放到邮箱,到数据库验证.
关于邮件系统中的角色
MUA:邮件用户代理 (sendmail qmail postfix)
MTA:邮件传输代理 (outlook)
MDA:邮件分发代理 (maildrop)
MRA:邮件检索代理 (dovecot)
postfix: 实现邮件发送服务器的角色.
dovecot: 作为邮件接收服务器的角色.
extmail: 实现利用web界面收发信件.
extman: 用户注册同个extman的页面.
mysql: 存放用户的账户信息.
cyrus-sasl,courier-authlib: 实现用户的身份验证.
邮件应用使用协议
1.SMTP,简单邮件传输协议,TCP 25端口,加密时使用TCP 465端口,(发送邮件),客户端向其他服务器发送邮件或者服务器向其他服务器转发邮件,发送方使用的都是SMTP协议.
2.POP3,第3版邮局协议,TCP 110端口,加密时使用TCP 995端口,(收邮件) 收取邮件的时候,先将服务器的邮件下载到本地,所有的操作都是在本地完成.
3.IMAP4,第4版互联网消息访问协议,TCP 143端口,加密时使用 993端口,(比POP3灵活)接收邮件,客户端和服务器端交互了以后,在服务器端处理,好处能实现更多的功能,例如查看邮件的信息,但是消耗的系统的资越高.
服务器接收邮件的过程
在开始讲述本例的内容之前,我们先来看看Postfix+Dovecot+MySQL是如何相互协作以实现邮件服务器的各项功能。我们假设 张三通过oschina.net的邮箱zhangsan@oschina.net发送一份邮件给 李四lisi@mydomain.com,则服务器接收邮件的过程大致如下图所示:
1.zhangsan@oschina.net发送邮件到lisi@mydomain.com
2.oschina.net服务器会通过DNS查询mydomain.com的MX记录并找到Postfix所在的服务器
3.邮件被发送给Postfix
4.Postfix转向MySQL求助,以查询mydomain.com是不是需要处理的域名
5.MySQL返回确认信息给Postfix
6.Postfix将接受到的邮件投递给Dovecot的LMTP服务以便做处理
7.Dovecot将邮件内容保存到lisi@mydomain.com用户对应的磁盘路径
用户查收邮件的过程
上述例子中我们看到了服务器接收邮件的过程,接下来我们看看,当大家通过用户名密码登录邮箱查看邮件时,会发生什么事情:
1.邮件客户端 to Dovecot:尊敬的Dovecot大人,您好!我阔以建立一个IMAP加密连接吗?
2.Dovecot to 邮件客户端:当然阔以。这是我的SSL证书,请您告诉我帐号和密码!
3.邮件客户端 to Dovecot:好滴!这是我的用户名和密码,千万不要告诉别人哦!
4.Dovecot to MySQL:Hi 美女!请问下,这个用户名和密码是正确的嘛?
5.MySQL to Dovecot:好的,请稍后!呃……这个用户名和密码是正确的哦!
6.Dovecot打开存放在本地磁盘/var/mail/mydomain.com/llisi的mailbox
7.Dovecot获取到最新的邮件及其他相关信息
8.Dovecot将邮件及其相关的其他信息通过IMAP协议发送给客户端
用户发送邮件的过程
查收了最新的邮件之后,李四lisi@mydomain.com发现张三给他发来了邮件。现在,李四回复一封邮件给张三,会发生什么事情:
1.邮件客户端 to Postfix:尊敬的Postfix大人,您好!我阔以建立一个安全的SMTP连接嘛?
2.Postfix to 邮件客户端:说人话!可以就是可以,干嘛要说「阔以」啊!你丫贱啊,找抽啊!想建立SMTP连接可以,不过要加密。这是我的SSL证书,告诉我你的帐号和密码!
3.邮件客户端 to Postfix:对不起,大人,我错鸟!这是我的帐号和密码,不要告诉别人哦!
4.Postfix to Dovecot:Hi 帅哥,帮我查一下这个帐号和密码!
5.Dovecot to MySQL:Hi 美女,这个帐号和密码是正确的呢?!还是正确的呢?!还是……
6.MySQL to Dovecot:好啦,你乖啦!我查过啦,这个帐号密码是正确的啦!表卖萌哦,Dovecot君!
7.Dovecot to Postfix:大锅,则个帐号密码斯正缺滴!
8.Postfix to 邮件客户端:贱人,过来!你给的帐号密码是正确的,允许你发送邮件!
9.邮件客户端将编写好的邮件通过SMTP协议发送给Postfix
10.Postfix将收到的邮件转发给对方
面试技巧
SMTP 简单邮件传输协议(发邮件)TCP 25端口,加密时使用TCP 465端口
POP3 第三版邮局协议(收邮件)TCP 110 端口,加密时使用 TCP 995端口
IMAP4 第四版互联网邮件访问协议(收邮件)TCP 143端口,加密时使用TCP 993端口
配置DNS域名解析
首先我们需要配置bind为客户端提供dns域名解析
1.安装bind,为客户提供解析服务
[root@localhost ~]# yum install -y bind |
2.修改dns主配置文件,区域文件和域名配置文件等
[root@localhost ~]# vim /etc/named.conf |
3.修改named.rfc1912.zones区域配置文件,或者写在named.conf的底部也可以
[root@localhost ~]# vim /etc/named.rfc1912.zones |
4.拷贝默认区域配置文件,修改成lyshark.com.zone并做邮件交换记录配置
[root@localhost ~]# cd /var/named/ |
5.重启named解析服务,并设置成开机自启动
[root@localhost named]# systemctl restart named |
6.此处在其他电脑配置好,dns解析地址,解析到本机,并测试是否能解析
C:\Users\LyShark>ping 192.168.1.20 |
配置PostFix服务程序
postfix是由IBM赞助研发的一款免费开源的电子邮件服务程序,它能够很好的兼容sendmail,可以很方便的将sendmail用户迁移到postfix服务上,postfix服务的收发邮件能力强于sendmail,而且能够自动,增加,减少进程的数量来保证邮件服务器的高性能运转,postfix有许多小模块组成,方便了功能的添加,拓展和删除,提高了可用性,用户可以灵活搭配使用.
1.安装postfix服务程序,rhel7系统默认集成,这里只做演示
[root@localhost ~]# yum install -y postfix |
2.配置邮局系统的主机名,在第76行,一个名为myhostname的变量,用来保存服务器主机名
[root@localhost ~]# vim /etc/postfix/main.cf |
3.配置邮局系统的域名,在第83行,一个名为mydomain的变量,用来定义邮件域
[root@localhost ~]# vim /etc/postfix/main.cf |
4.配置本机发出的域名称,在第99行,一个名为myorigin的变量,用来定义邮件域
[root@localhost ~]# vim /etc/postfix/main.cf |
5.配置侦听网卡接口,在第116行,一个名为inet_interfaces的变量,用来定义网卡接口
[root@localhost ~]# vim /etc/postfix/main.cf |
6.配置接收邮件的主机名或域名,在第164行,一个名为mydestination的变量,用来定义可接收邮件的主机名或域名列表,这里可以直接调用前面的两个变量myhostname和mydomain变量(如果不想调用变量,也可直接调用变量中的值)
[root@localhost ~]# vim /etc/postfix/main.cf |
7.配置邮件存储位置,在第619行,一个名为home_mailbox的变量,用来定义邮件保存位置
[root@localhost ~]# vim /etc/postfix/main.cf |
8.最后,创建一个邮件测试账号admin,重启postfix服务,并设置成开机自启动
[root@localhost ~]# useradd -s /sbin/nologin admin |
配置Dovecot服务程序
dovecot是一款能够为linux系统提供IMAP和POP3电子邮件服务的开源服务程序,安全性极高,配置简单,执行效率高,而且占用服务器资源极低,是一款很好的收件服务器.
1.通过yum安装dovecot服务程序的软件包,和依赖
[root@localhost ~]# yum install -y dovecot dovecot-devel clucene-core |
2.配置dovecot服务,在第24行,把服务的电子邮件协议改为 imap,pop3和lmtp,在这一行下面添加 disable_plaintext_auth 允许用户明文使用邮件系统.
[root@localhost ~]# vim /etc/dovecot/dovecot.conf |
3.配置允许登陆的网段,在第48行,设置允许来自于指定网段的主机使用,如果想任何人则无需修改本参数
[root@localhost ~]# vim /etc/dovecot/dovecot.conf |
4.配置邮箱位置,子配置文件中,在第24行
[root@localhost ~]# vim /etc/dovecot/conf.d/10-mail.conf |
5.重启收件服务器,并设置开机自启动
[root@localhost ~]# systemctl restart dovecot |
配置SSL加密传输
由于上面的过程配置的邮件服务器使用的是明文传输,无法将其用于生产环境,下面的步骤将开启邮件服务器的SSL加密模式,让其可以在生产环境中使用
1.生成SSL密钥文件,并自行放入合适的位置
[root@localhost ~]# openssl genrsa -des3 -out server.key 1024 |
2.修改PostFix配置文件,在文件中修改以下几个位置,启用SSL加密参数
[root@localhost ~]# vim /etc/postfix/main.cf |
3.接着修改dovecot额配置文件,指定开启SSL模式,并指定证书位置.
[root@localhost ~]# vim /etc/dovecot/conf.d/10-ssl.conf |
4.重启PostFix和Dovecot服务,并设置开机自启动.
[root@localhost ~]# systemctl restart postfix |
5.如果iptables在开启状态,那么设置iptables开放SMTPS/POP3S/IMAPS的端口.
[root@localhost ~]# iptables -I INPUT 1 -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT |