Linux下开源邮件系统Postfix+Extmail+Extman环境部署记录

一、基础知识梳理 MUA (Mail User Agent)  MUA 既是"邮件使用者代理人",因为除非你可以直接利用类似 telnet 之类的软件登入邮件主机来主动发出信件,否则您就得要透过 MUA 来帮你送信到邮件主机上头去。 最常见的 MUA 像是 Mozilla 推出的Thunderbird ( 雷鸟 ) 自由软件, 或者是 Linux 桌面 KDE 常见的 Kmail ,及Windows 内件的 Outlook Express (OE) 等 。MUA 主要的功能就是收受邮件主机的电子邮件,以及提供用户浏览与编写邮件的功能!

MTA (Mail Transfer Agent) MUA 帮用户传送邮件到邮件主机上,那这部邮件主机如果能够帮用户将这封信寄出去, 那它就是一部邮件传送主机 (MTA) 啦!这个 MTA 就是『邮件传送代理人』的意思。也来顾名思义一下,既然是『传送 代理人』, 那么使用者寄出的信,与使用者要收信时,就是找它 (MTA) 就对啦!基本上, MTA 的功能有这些: 1)收受信件:使用简单邮件传送协议 (SMTP) MTA 主机最主要的功能就是将来自客户端或者是其它 MTA 的来信收下来,这个时候 MTA 使用的是 Simple Mail Transfer Protocol (SMTP) ,它使用的是25端口。 2) 转递信件 如果该封信件的目的地并不是本身用户,且该封信的相关数据符合使用 MTA 的权力, 那么MTA 就会将该封信再传送到下一部主机上。这即是所谓的转递 (Relay) 的功能。 3)响应使用者的收信要求 POP 或 IMAP 协定用户可以透过 MTA 主机提供的邮政服务协议 (Post Office Protocol, POP) 来收下自己的信件, 也可以透过IMAP (Internet Message Access Protocol) 协议将自己的信件保留在邮件主机上面, 并进一步建立邮件数据匣等进阶工作。

总之,一般提到的 Mail Server 就是 MTA !而严格来说, MTA 其实仅是指 SMTP 这个协议而已。 而达成 MTA的 SMTP 功能的主要套件包括老牌的 sendmail ,后起之秀的 postfix ,还有qmail等等。

MDA (Mail Delivery Agent)  字面上的意思是『邮件递送代理人』的意思。事实上,这个 MDA 是挂在 MTA 底下的一个小程序, 最主要的功能就是: 分析由 MTA 所收到的信件表头或内容等数据, 来决定这封邮件的去向。 所以说,上面提到的MTA 的信件转递功能,其实是由 MDA 达成的。 举例来说,如果 MTA 所收到的这封信目标是自己,那么MDA 会将这封信给它转到使用者的信箱 (Mailbox) 去, 如果不是呢?那就准备要转递出去了。此外, MDA 还有分析与过滤邮件等功能喔!如:过滤垃圾邮件,自动回复,自动转发等……。

各主要的 MTA 程序 (sendmail,postfix...) 都有自己的 MDA 功能,不过有些外挂的程序功能更强大, 举例来说 procmail就是一个过滤的好帮手,另外 Mailscanner + Spamassassion 也是可以使用的一些 MDA 喔。

Mailbox  就是电子邮件信箱!简单的说,就是某个账号专用的信件收受档案。我们的 Linux 系统默认的信箱都是放在 /var/spool/mail/ 使用者账号 中! 若 MTA 所收到的信件是本机的使用者, MDA 就会将信件送到该 mailbox 当中去!

POP3 (Post Office Protocol 3)即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

IMAP Interactive Mail Access Protocol(交互式邮件存取协议)是由美国华盛顿大学所研发的一种邮件获取协议。它的主要作用是邮件客户端(例如MS Outlook Express)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。无论是POP3还是IMAP都是描述如何从邮箱取出邮件。

请注意:POP3/IMAP和SMTP可以组建在不同的服务器上,经常使用MUA的用户肯定记得软件的设置中经常将POP3/IMAP和SMTP进行分开设置。

——————————SMTP、POP3、IPMAP三者说明——————————

简单来说:SMTP是邮件发送协议;POP3和IMAP是邮件接收协议。其中:

1)SMTP
全称是"Simple Mail Transfer Protocol",目标是向用户提供高效、可靠的邮件传输。它是一组用于由源地址到目的地址传送邮件的规则,
通过它来控制邮件的中转方式。SMTP协议属于TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

SMTP服务器就是遵循SMTP协议的发送邮件服务器。 SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 

增加SMTP认证的目的是为了使用户避免受到垃圾邮件的侵扰。

2)POP3
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。
它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的
邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的

3)IMAP
IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子
邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应
的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。

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

而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
同时,IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、
发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。
总之:
IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件,但 IMAP 通过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。

注意:
若在web邮箱中设置了“保存到已发送”,使用客户端POP服务发信时,已发邮件也会自动同步到网页端“已发送”文件夹内。

网易163免费邮箱相关服务器信息:

Maildirs Maildirs是使用非常广泛的e-mail邮件存储格式。也可以说是一种基于目录的邮件存储格式。它在添加,移动或删除时并不依赖于应用程序级的文件锁定来维护消息的完成性。每一个消息(每一封邮件)被保存在一个独立的且名称唯一的文件中。所有的更改均使用基于文件系统的原子操作(atomic filesystem operations )因此文件系统来控制文件锁定从而避免一致性问题。通常Maildir为一个目录(名称为Maildir)其下包含三个子目录,分别为tmp,new和cur。

Courier IMAP Courier IMAP server 是使用Maildir存储格式的高速,可扩展,企业级 IMAP 服务器。许多E-mail提供商使用Courier IMAP server来处理几十万的邮件用户,使用它建立IMAP和POP3集合代理,可以说Courier IMAP server 简直具有无限的水平扩展能力。在代理配置环境中,一些Courier 服务器提供IMAP和POP3服务,它们等待客户端登陆请求,查找并操作邮件用户的mailbox,与服务器建立代理连接,所有的这些操作都在一个单独的,无缝连接的进程中。

Courier-IMAP主要特点: - 小巧而高效; - 提供多种用户认证模块和方式; - 支持虚拟邮箱; - 可限制IMAP同时登录的总数目及同一个IP地址同时登录的数目,能有效保护系统在受到拒绝服务(Denial-of-service)攻击时不致因超载而瘫痪;

maildrop 具有过滤功能的邮件投递代理(MDA)。

Courier-Authlib Courier authentication library 为其他 Courier 应用程序提供验证服务。

SASL SASL的英文全称是Simple Authentication and Security Layer,即简单验证和安全层。SMTP 协议并没有提供用户验证功能,很容易匿名中转邮件。即使限制了可以转发的网段,也不安全。他的定义是: a method for adding authentication support to connection-based protocols,为基于连接的协议提供认证功能。SASL是一个胶合(glue)库,通过这个库把应用层 与 形式多样的认证系统整合在一起。这有点类似于PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。

Open-Relay是什么? Open-Relay(开放转发或匿名转发)是指由于邮件服务器不理会邮件发送者或邮件接受者的是否为系统所设定的用户,而对所有的入站邮件一律进行转发(RELAY)的功能。通常,若邮件服务器的此功能开放,则我们一般称此邮件服务器是Open-Relay的。

由于Internet E-mail采用开放式标准,所以MTA、MDA、MUA等不同角色,可分别由许多不同的软件包来扮演。实现相同协议的不同包,可以彼此互相交流,而不管它们是在什么系统上运行。如果将一个完整的E-mail邮件系统集中在一起,可以发现的是处理SMTP的是一套软件,处理POP/IMAP的是另一套软件。但邮件系统中的每一种角色,都有许多不同的软件可以选择。

二、Postfix+Extmail+Extman环境部署过程 1)基础环境准备

[root@mail ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)

[root@mail ~]# ifconfig|grep addr|grep Bcast|cut -d":" -f2|awk -F" " '{print $1}'
192.168.10.202

[root@mail ~]# hostname                                                          
mail.kevin.com

[root@mail ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.202 mail.kevin.com

[root@mail ~]# /etc/init.d/iptables stop
[root@mail ~]# setenforce 0
[root@mail ~]# getenforce 
[root@mail ~]# cat /etc/sysconfig/selinux
......
SELINUX=disabled


软件部署说明
------------------------------------------------------------------------------
软件名称                  功能
Postfix                  MTA
MySQL                    存储postfix虚拟用户信息
courier-authlib          搭配SASL做验证
cyrus-sasl               把应用(E-Mail)与验证(courier-authlib)结合在一起
courier-imap             结合postfix提供imap/imaps与pop3/pop3s服务
perl                     解释器
pcre                     安装Imap需要-- Perl兼容正则表达式
httpd                    web服务器
Extmail                  webmail服务器
Extman                   结合extmail管理邮件用户
Clamav                   杀毒软件
amavisd-new              扫描邮件病毒
Spamassassin             防垃圾邮件

2)软件下载

web服务器软件
这里我安装了LAMP环境,其实只需要http、mysql,不需要php。
LAMP安装包下载地址:https://pan.baidu.com/s/1pYo9X7f1vy5d70eV0RDYWA
提取密码:ebj8

邮件服务器软件
相关软件下载地址:https://pan.baidu.com/s/1Ai6FlJoUzeWGLXjGjeV0sg
提取密码:c4ft

3)LAMP环境安装 安装文档:http://www.cnblogs.com/kevingrace/p/6395131.html

apache的配置
下载地址:https://pan.baidu.com/s/1f8kMhADiOzAYqxv990136g
提取密码:g1vy


[root@mail extra]# pwd
/usr/local/apache/conf/extra

[root@mail extra]# cat extmail.conf 
<VirtualHost *:80>
ServerName mail.kevin.com
DocumentRoot /data/web/
</VirtualHost>

[root@mail extra]# cat /data/web/test.php 
<?php
phpinfo()
?>

如上,在后面的extmail和extman还没安装之前,extmail.conf配置暂时如上所示内容,这样便于进行httpd服务的测试。

解析mail.kevin.com到192.168.10.202机器上(或做hosts绑定),然后访问http://mail.kevin.com/test.php即可测试!

待安装完extmail和extman之后,上面的extmail.conf文件配置如下:
[root@mail extra]# cat extmail.conf       
<VirtualHost *:80>
ServerName mail.kevin.com
DocumentRoot /data/web/
ScriptAlias /extmail/cgi  /data/web/extmail/cgi
ScriptAlias /extman/cgi  /data/web/extman/cgi
Alias /extmail  /data/web/extmail/html
Alias /extman  /data/web/extman/html
</VirtualHost>

4)Mysql安装 安装文档:http://www.cnblogs.com/kevingrace/p/6109679.html mysql一键安装脚本下载地址:https://pan.baidu.com/s/1oRePULz4gu_y7oFuc4mB9A          提取密码:bhcw

安装mysql的时候,要卸载系统自带的mysql,但要记住,最好不要卸载mysql-libs
[root@mail ~]# rpm -qa | grep mysql
mysql-libs-5.1.73-8.el6_8.x86_64

如果卸载了mysql-libs,那么就会把默认的libmysqlclient.so.16库文件删除,而编译安装的mysql,库文件是libmysqlclient.so.18。
但是登录extmail时会依赖libmysqlclient.so.16这个库文件,这样就会报如下错:
install_driver(mysql) failed: Can't load '/usr/lib64/perl5/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.16: 
cannot open shared object file: No such file or directory at /usr/lib64/perl5/DynaLoader.pm line 200. at (eval 17) line 3 Compilation 
failed in require at (eval 17) line 3. Perhaps a required shared library or dll isn't installed where expected at 
/data/web/extmail/libs/Ext/Auth/MySQL.pm line 45

这时候解决办法:https://www.cnblogs.com/kevingrace/p/9378776.html
其实也就是重新安装mysql,重新生成libmysqlclient.so.16库文件。

所以最好还是不要删除mysql-libs,免得后面再重新安装自带的mysql,重新生成libmysqlclient.so.16的库文件。

5)创建相关用户

用户      组        简介                            备注
mysql    mysql     mysql用户和组                    安装mysql时创
vmail    vmail     Postfix虚拟账户所使用的用户和组     无home目录不可能登陆系统。uid: 1001,gid: 1001
无       postdrop  Postfix专用组                    该组不能包含任何成员,包括前面的postfix虚拟帐号也不例外。gid:1002
postfix  postfix   Postfix主程序使用的用户和组        uid:1000,gid:1000
clamav   clamav    clamav 杀毒软件用户               无
amavis   amavis    邮件扫描用户                      无
------------------------------------------------------------------------------------

[root@mail ~]# groupadd -g 1001 vmail
[root@mail ~]# useradd -g 1001 -u 1001 -s /sbin/nologin -M vmail
[root@mail ~]# groupadd -g 1002 postdrop
[root@mail ~]# yum remove postfix
[root@mail ~]# userdel -r postfix
[root@mail ~]# groupadd -g 1000 postfix 
[root@mail ~]# useradd -g 1000 -u 1000 -s /sbin/nologin -M postfix
[root@mail ~]# useradd clamav
[root@mail ~]# useradd amavis

6)卸载系统中相关软件

如果系统自带了postfix,就卸载了(上面已卸载)
[root@mail ~]# yum remove postfix
[root@mail ~]# userdel -r postfix

接着卸载sendmail
CentOS系统安装后,默认是装好了Sendmail服务,其目的是为root用户发送一些有用的信息。那么,在安装Postfix之前一定要先卸载Sendmail。
[root@mail ~]# service sendmail stop
[root@mail ~]# rpm -qa | grep sendmail
sendmail-8.13.8-2.el5
[root@mail ~]# rpm -e --nodeps sendmail-8.13.8-2.el5

卸载sasl
[root@mail ~]# rpm -qa |grep sasl
cyrus-sasl-lib-2.1.22-4
cyrus-sasl-devel-2.1.22-4
cyrus-sasl-2.1.22-4
cyrus-sasl-plain-2.1.22-4
[root@mail ~]# rpm -e --nodeps cyrus-sasl-lib-2.1.22-4 cyrus-sasl-devel-2.1.22-4 cyrus-sasl-2.1.22-4 cyrus-sasl-plain-2.1.22-4

7)安装相关系统环境

[root@mail ~]# vim /etc/ld.so.conf
......
/usr/local/lib
/usr/local/mysql/lib/
/usr/lib64/

[root@mail ~]# ldconfig

8)创建相应目录

虚拟用户的邮件存放路径
[root@mail ~]# mkdir -p /var/mailbox
[root@mail ~]# chown vmail.vmail /var/mailbox
[root@mail ~]# chmod 700 /var/mailbox

apache的base目录
[root@mail ~]# mkdir -p /data/web
[root@mail ~]# chown vmail.vmail /data/web

extman的临时目录
[root@mail ~]# mkdir /tmp/extman
[root@mail ~]# chown vmail.vmail /tmp/extman

clamav临时目录
[root@mail ~]# mkdir -p /dev/shm/clamav/tmp
[root@mail ~]# chown -R amavis.amavis /dev/shm/clamav/
[root@mail ~]# echo " mkdir -p /dev/shm/clamav/tmp" >>/etc/rc.local
[root@mail ~]# echo " chown -R amavis.amavis /dev/shm/clamav/" >>/etc/rc.local

9)安装必要组件

先安装epel源(百度云盘下载地址:https://pan.baidu.com/s/1JucsbDuYwedEb4kGvN6MPg     提取密码:pxn7)
[root@mail ~]# cd /usr/local/src/
[root@mail src]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
[root@mail src]# rpm -ivh epel-release-latest-6.noarch.rpm

[root@mail src]# yum install perl-Unix-Syslog perl-DBI perl-Class-DBI-mysql perl-DBD-MySQL rrdtool perl-rrdtool perl-File-Tail perl-IO-stringy perl-MIME-* perl-Net-Server perl-BerkeleyDB perl-Crypt-* perl-Mail-DKIM perl-Convert-TNEF perl-Convert-UUlib perl-Archive-Zip

===============================================================
在使用yum过程中,遇到下面问题:
libsasl2.so.2: cannot open shared object file: No such file or directory

这是因为在上面已经提前卸载了cyrus-sasl-lib所致!
解决办法:
从别的机器上拷贝这个库文件到本机上

比如从192.168.10.201机器上拷贝到本机:
[root@localhost ~]# find / -name libsasl2.so.2           
/usr/lib64/libsasl2.so.2
[root@localhost ~]# ll /usr/lib64/libsasl2.so.2          
lrwxrwxrwx. 1 root root 18 Jan 16  2018 /usr/lib64/libsasl2.so.2 -> libsasl2.so.2.0.23
[root@localhost ~]# ll /usr/lib64/libsasl2.so.2.0.23
-rwxr-xr-x. 1 root root 108728 Mar 25  2015 /usr/lib64/libsasl2.so.2.0.23

[root@localhost ~]# rsync -e "ssh -p22" -avpgolr /usr/lib64/libsasl2.so.2.0.23 root@192.168.10.202:/usr/lib64/
[root@localhost ~]# rsync -e "ssh -p22" -avpgolr /usr/lib64/libsasl2.so.2 root@192.168.10.202:/usr/lib64/

到本机上查看:
[root@mail ~]# ll /usr/lib64/libsasl2.so.2        
lrwxrwxrwx. 1 root root 18 Jan 16  2018 /usr/lib64/libsasl2.so.2 -> libsasl2.so.2.0.23

再次使用yum就正常了!
===============================================================

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏申龙斌的程序人生

零基础学编程035:群发邮件并不难

我是GTD的重度用户,GTD中讲究将所有事情先收集起来再说,所以收集操作越快越好,这样才不至于把手边的工作打断。很多老牌的GTD工具软件支持发邮件实现快速收集,...

4886
来自专栏Hadoop数据仓库

HAWQ技术解析(五) —— 连接管理

        服务器启动后,还要经过一系列配置,才能被客户端程序所连接。本篇说明如何配置客户端身份认证,HAWQ的权限管理机制,HAWQ最常用的命令行客户端工...

2639
来自专栏阿北的知识分享

浅谈csrf攻击以及yii2对其的防范措施

今天北哥就给大家普及下csrf是啥?如果你已经知道了可以直接拉文章到底部点个赞。:smile:

1966
来自专栏FreeBuf

你的Outlook真的安全?一条恶意规则远程攻陷你的工作站!

背景 当前,构建恶意Outlook规则的限制条件都比较苛刻,至少需要访问被入侵系统的交互GUI,或者拥有登录凭证,而且还要求攻击方直接与Exchange服务器进...

3557
来自专栏公有云大数据平台弹性 MapReduce

Presto内存调优及原理(基础篇)

Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。

1.8K8
来自专栏信安之路

Mimikatz 攻防杂谈

前几天看到了老外一篇讲 mimikatz 防御的文章,感觉行文思路还不错,但是内容稍有不足,国内也有一篇翻译,但是只是照着错误翻译的,所以就萌生了把那篇优秀文章...

4362
来自专栏互联网杂技

HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事

作为一个经常和web打交道的程序员,了解这些协议是必须的,本文就向大家介绍一下这些协议的区别和基本概念,文中可能不局限于前端知识,还包括一些运维,协议方面的知识...

54211
来自专栏信安之路

Linux 应急响应流程及实战演练

当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵...

7433
来自专栏FreeBuf

云存储平台&服务安全分析报告

1. 概要 本报告展示了一种新型的攻击,我们称之为“Man in the cloud(MITC)”。MITC攻击将常见的文件同步服务(如GoogleDrive、...

3309
来自专栏小白安全

渗透一个网站需要做的事情

一,开始信息收集 1,获取域名的whois信息,获取注册者邮箱姓名电话等。 2,查询服务器旁站,因为主站一般比较难,所以先看看旁站有没有通用性的cm...

3959

扫码关注云+社区

领取腾讯云代金券