MTA |
成熟性 |
安全性 |
特色 |
性能 |
模块化 |
Sendmail兼容性 |
Sendmail |
高 |
低 |
中 |
低 |
否 |
一般 |
Postfix |
中 |
中 |
中 |
中 |
是 |
支持 |
Qmail |
中 |
高 |
高 |
高 |
是 |
插件实现 |
表1 Sendmail与Postfix Qmail的对比
MTA 成熟性 安全性 特色 性能 模块化 Sendmail兼容性
Sendmail 高 低 中 低 否 一般
Postfix 中 中 中 中 是 支持
Qmail 中 高 高 高 是 插件实现
表1 Sendmail与Postfix Qmail的对比
二、基本邮件服务器搭建
Postfix的安装与配置
■ 停止已经运行的MTA并使之失效。安装Postfix之前,请检查是否有其他MTA程序在运行,如果有则删除系统原有的MTA,或者停止原有的MTA,并禁止init.d下该MTA的启动脚本,避免重新引导的时候再次启动。操作如下:
[root@cecmail opt]# ps -ef | grep Sendmail
root 1919 1 0 May18 00:00:00 Sendmail: accepting connections
smmsp 1927 1 0 May18 00:00:00 Sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
root 9014 8835 0 22:14 pts/3 00:00:00 grep Sendmail
显示的信息说明系统正在运行Sendmail,可以直接删除Sendmail。操作如下:
#killall sendmail
Sendmail: no process killed
[root@cecmail ]# rpm -e Sendmail --nodeps
■ 添加组用户。操作如下:
[root@cecmail opt]# groupadd Postfix
[root@cecmail opt]# groupadd postdrop
[root@cecmail opt]# cat /etc/group
mysql:x:500: www:x:501: luanzhaodong:x:502: Postfix:x:503: postdrop:x:504:
通过查看Group文件,可以判断添加组是否成功。
■ 添加Postfix用户。操作如下:
[root@cecmail opt]#useradd Postfix -g Postfix -c "Postfix user" -d /dev/null -s /sbin/nologin
[root@cecmail opt]#cat /etc/passwd mysql:x:500:500::/home/mysql:/bin/bash
www:x:501:501::/home/www:/bin/bash
Postfix:x:502:503:Postfix user:/dev/null:/sbin/nologin
通过查看passwd文件,可以判断添加用户是否成功。
■ 到Postfix官方网站(http://www.postfix.org/)下载Postfix源码文件,并复制到服务器的某个目录下,比如,可以下载到/opt/postfix目录。操作如下:
[root@cecmail Postfix-2.6.5]# mkdir /opt/postfix/
[root@cecmail Postfix-2.6.5]# /opt/postfix/
[root@cecmail Postfix-2.6.5]# tar xzvf Postfix-2.6.5.tar.gz
■ 编译安装Postfix。操作如下:
[root@cecmail Postfix-2.6.5]# cd Postfix-2.6.5
[root@cecmail Postfix-2.6.5]#make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_TLS -DUSE_SASL_AUTH -I/usr/include/sasl' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib -lssl -lcrypto -lsasl2'
查看Makefile文件是否成功生成。
[root@cecmail Postfix-2.6.5]# ls Makefile
Makefile
上面代码说明Makefile文件已经生成。可以进行编译及安装了。
[root@cecmail Postfix-2.6.5]# make
[root@cecmail Postfix-2.6.5]# make install
安装时系统会提示用户输入一些参数,比如队列文件的路径、户和组信息,但是,安装程序本身会提供默认的参数,一般情况下不需要手动修改这些默认参数,直接回车即可。这样,Postfix就成功安装完毕。 ■ 编辑main.cf
在启动Postfix之前,需要简单的配置一下Postfix。Postfix的主要配置文件是/etc/Postfix/main.cf,为了实现最简单功能,只需修改以下几个参数即可:
mydomain
该参数指明域名,在这里指定:
mydomain = cec-cn.com
myorigin
myorigin参数指明发件人所在的域名。如果用户的邮件地址为user@domain.com,则该参数指定@后面的域名。这个参数通常这样设置:
myorigin = $mydomain
mydestination
mydestination参数指定Postfix接收邮件时收件人的域名。简单地说,也就是Postfix系统要接收什么样的邮件,一般只希望接受发给自己这个域名的邮件,所以,通常mydestination与myorigin一样:
mydestination = $mydomain
mynetworks 该参数定义可以使用此SMTP服务器发信的客户IP地址,一般设置为本机,或者本公司IP段,比如:
mynetworks = 192.168.1.0/24
myhostname
myhostname参数用于描述运行C-Link系统的服务器所符合规则的域名全称。
可以在sh下运行命令查看域名:
[root@cecmail Postfix-2.6.5]# hostname Cecmail
本文按照下面内容来配置main.cf文件:
myhostname = cecmail
mydomain = cec-cn.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost,
$mydomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8
■ 运行Postfix,操作如下:
[root@cecmail Postfix-2.6.5]#/opt/Postfix/Postfix-2.6.5/bin/Postfix start
Postfix/Postfix-script: starting the Postfix mail system
如果是安装的postfix的rpm包,则
#service postfix start
Starting postfix:[确定]
#service dovecot start
启动Dovecot Imap:[确定]
■ 测试MTA,操作如下:
[root@cecmail Postfix-2.6.5]# telnet localhost 25
Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 cecmail ESMTP Postfix (2.6.5)----说明连接成功
helo cec-cn.com #向服务器标识用户身份#
mail from: #标明发信人地址#
250 ok #命令执行成功#
rcpt to: #邮件投递地址 test2@cec-cn.com#
250 ok #命令执行成功#
data #数据传输初始化#
354 End data with . #开始传输数据 #
From: test1@aaa.com
To: test2@cec-cn.com
Subject: test mail
Hi, this is a test . #数据内容, 包括BASE64加密后的邮件内容, 以 CRLF.CRLF 结束数据传输#
250 OK: queued as 2F6DE3929 #命令执行成功#
Quit #结束会话#
221 Bye Connection closed by foreign host. #断开连接#
这样,Postfix就可以运行了。但是,Postfix到底是怎样处理邮件的呢?Postfix的各个模块如何对邮件处理流程产生作用呢?下面,本文就从Postfix的机制上分析这些问题。
三、Postfix常见问题指南
■Postfix中如何让修改后的配置生效?
以root用户身份执行Postfix的reload命令即可。
■使用Postfix如何刷新邮件队列?
以root用户身份执行 Postfix的命令 flush即可。
■如何让Postfix开机后自己运行,而不必手工启动?
可以通过ntsysv工具,选中Postfix。
■如何设置Postfix的队列延迟?
可以在Postfix的主要配置文件/etc/postifx/main.cf中修改下列参数:
queue_run_delay (默认值 1000秒) 设置多长时间队列管理进程去扫描无法投递的邮件。
Maximal_queue_lifetime (默认值 5天) 设置邮件在队列里的最长时间。
Minimal_backoff_time (默认值 1000秒) 在这个时间内,邮件不能够被锁定。
Maximal_backoff_time (默认值 4000秒) 在这个时间之后,如果邮件仍然没有被投递,就认为是无法投递。
qmgr_message_recipient_limit (默认值 1000)。
■ 如何禁止Postfix对客户端IP做反向域名解析?
以root用户身份登录运行如下命令:
postconf -e disable_client_ dns_lookup = 1
postfix reload
■ Postfix如何设置取消Delivered-To头部信息?
在main.cf中设置:
smtpd_recipient_restrictions = ... regexp:/etc/postfix/access_regexp ...
smtpd_recipient_restrictions = ... pcre:/etc/postfix/access_regexp ...
/etc/postfix/access_regexp: /^(.*)-outgoing@(.*)/ 554 Use $1@$2 instead prepend_delivered_header配置参数也控制Delivered-To的使用。缺省的设置是command、file、forward(在把信件发送给命令,发送给文件,或者转发的时候使用Delivered-To)。不推荐在转发邮件的情况下取消Delivered-To头部信息。
■ 如何让Postfix支持maildir?
在main.cf中设置: home_mailbox = Maildir/ 任何相对路径末尾加上“/”号都表示打开了maildir支持,home_mailbox设置的值将会追加到用户的home目录,也就是如果你指定home_mailbox = mymail/,那么Postfix也认为打开了maildir支持,并把信件投递到用户home目录下的mymail目录中。
■ Postfix如何设置发送邮件延迟通知?
在main.cf中设置: delay_warning_time = 4
■ 如何增加Postfix的进程数?
下面的设置依赖于内核版本:要在引导的时候修改参数,修改/etc/sysctl.conf添加:
fs.file-max = 16384 kernel.threads-max = 2048
■ 如何在拨号环境下使用Postfix?
在main.cf中做如下设置:
relayhost = smtprelay.yourisp.com
defer_transports = smtp
disable_dns_lookups = yes
并在拨号脚本中加入: /usr/sbin/sendmail -q
■ 如何拒收附件某些扩展名的邮件?
创建body_checks文件内容如下:
# vi /etc/postfix/body_checks /^((Content-(Disposition: attachment;|Type:).*|\ +)| *)(file)?name\ *=\ *"?.*\.(lnk|asd|hlp|ocx|reg|bat|c[ho]m|cmd|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|wmf)"?\ *$/ REJECT attachment type not allowed
四、Postfix的反垃圾配置
SpamAssassin是目前成功的反垃圾框架,它是利用Perl的字符串处理来实现垃圾邮件判别。通过判断目标邮件是否符合SpamAssassin的规则配置文件中的各项规则,并给邮件进行评分,SpamAssassin就会告诉用户哪些邮件是垃圾邮件。而用户所需要做的只是配置SpamAssassin的规则集,以及评分标准。
安装SpamAssassin十分简单,请参考以下步骤:
■ 下载SpamAssassin。
■解压缩Mail-SpamAssassin-3.2.5.tar.gz。
■ 用如下命令编译安装:
#perl Makefile.PL
#make
#make install SpamAssassin安装完毕后,就开始配置SpamAssassin的local.cf文件,SpamAssassin就是通过这个配置文件来设置规则。并进行垃圾邮件评判。如果想仔细了解SpamAssassin的规则配置,可以访问http://spamassassin.apache.org。当然,简单的配置一下这个文件,也会起到一定的反垃圾效果,可以如下修改:
■ 垃圾邮件的评分标准,超过该评分即被判别为垃圾邮件。
required_hits 5.0
■ 白名单,用户可根据自己的需要配置,比如,如果认为来自本域(本文中设定的#本域是test)的都是安全邮件,那么就可以如下修改。
whitelist_from *@cec-cn.com
■ 在垃圾邮件的主体上做一个标记。
rewrite_subject 1
■ 处理垃圾邮件的方式:
#0 将信息写入邮件头。
#1 将垃圾邮件作为附件。
#2 垃圾邮件以正文形式存在。
report_safe 0
■ 是否使用贝叶斯运算:
use_bayes 1
■ 贝叶斯的存储信息,根据用户自己的实际情况而定。
bayes_path /var/lib/amavis/.spamassassin/bayes
■ 是否启用贝叶斯的自动学习。
auto_learn 1
■ 是否略过实时黑名单的检查。
skip_rbl_checks 0
■ 检查是否是本域发送的邮件,如果是,则认为是正常邮件,评分减去50。
header LOCAL_RCVD Received =~ /.*\(\S+\.test\.com\s+\[.*\]\)/
describe LOCAL_RCVD Received from local machine score LOCAL_RCVD -50
配置好的SpamAssassin完全可以由Postfix直接调用。但是,如果以服务的形式启动,即spamd的形式,则可以有效地降低服务器资源占用。
如下修改/etc/default/SpamAssassin,将ENABLED设为1,这样SpamAssassin才可以spamd的形式启动注。然后,还需要修改 /etc/postfix/master.cf,来通知Postfix去使用SpamAssassin 来扫描邮件:
Smtp inet n - n - - smtpd -v -o
content_filter=spamassassin
这样,重新启动smtpd和Postfix守护进程将启用SpamAssassin来进行垃圾邮件到扫描。 #P#
五、Postfix的反病毒配置
Clamav是一款免费的反病毒工具包,实际运用中也十分有效。大家也可以安装F-Prot Antivirus软件
下面以Clamav为例子,可以如下操作:
■ 下载clamav-0.95.tar.gz:
■ 解压缩clamav-0.95.tar.gz:
■ 用如下命令添加用户:
#groupadd clamav
#useradd -g clamav -s/bin/false -d/dev/null clamav
■ 用如下命令编译安装:
#./configure --prefix=/usr/local/clamav --with-dbdir=/usr/local/share/clamav
#make
#make check
#make install
■ 打开/usr/local/clamav/etc/clamd.conf,注释掉Example行,并进行如下配置:
LogSyslog
LogVerbose
LogFacility LOG_MAIL
LogFile /var/log/clamav/clamd.log
PidFile /var/run/clamav/clamd.pid
DatabaseDirectory /usr/local/share/clamav
LocalSocket /var/run/clamav/clamd
StreamMaxLength 10M
User amavis
ScanMail
ScanArchive
ScanRAR
■ 打开 /usr/local/clamav/etc/freshclam.conf,注释掉Example行,并使用如下命令进行配置:
DatabaseDirectory /usr/local/share/clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogSyslog
LogVerbose
DatabaseOwner amavis
Checks 12
DatabaseMirror db.CN.clamav.net
DatabaseMirror database.clamav.net
NotifyClamd
■ 使用如下命令创建日志文件夹,并设置权限:
#mkdir /var/log/clamav
#chmod -R 744 /var/log/clamav
#chown -R amavis:amavis /var/log/clamav
#chown -R amavis.amavis /usr/local/share/clamav
#mkdir /var/run/clamav
#chmod 700 /var/run/clamav
#chown amavis.amavis /var/run/clamav
■ 编辑crontab,并设置自动更新病毒库
#crontab -e 0 4 * * * root /usr/local/clamav/bin/freshclam --quiet -l /var/log/clamd.log
■ 启动Clamav 如图1
#/usr/local/clamav/sbin/clamd
图1 Clamav 启动界面
■最后病毒检测
从网站http://www.eicar.gor/anti_anti_virus_test_file.htm下载一个测试病毒文件eicar.com编写一个邮件附件中带上eicar.com,这样就可以检验防病毒系统的作用了。
这样,Clamav就可以根据病毒库信息对邮件进行扫描了。当然,为了让Postfix能够运用Clamav去扫描邮件,实际上还需要安装Amavisd,这是比较常用的MTA和邮件扫描软件的一个接口软件,使用该软件可以让MTA方便地启用邮件扫描程序。安装Amavisd的方法请参考有关资料。
六、自动监控Postfix邮件服务器
这个功能是增强postfix 的管理性的 ,可以自动监控postfix的日志文件。
下载 mailgraph-1.14.tar.gz并安装上系统。修改配置文件/etc/init.d/mailgraph,并修改启动程序权限:
#chmod 755 /etc/ini.d/mailgraph
#chkconfig –levels 235 mailgraph on
#/etc/init.d/mailgraph start
移动CGI脚本
#mv mailgraph.cgi /var/www/your IP/cgi-bin/
修改CGI脚本
My $rrd=`/var/lib/mailgraph.rrd`; #RRD数据库路径
My $rrd_virus=`/var/lib/mailgraph_virus.rrd`; #Virus RD数据库路径
修改CGI权限
#chmod 755 /var/ww/www.example.cm/cgi-bin/mailgraph.cgi
浏览日志网页http://ip/cgi-bin/mailgraph.cgi, 如图 2所示。
图2
图3 Postfix搭建分布式邮件系统架构图
2.邮件接收服务器配置与设计
这里的邮件接收服务器是本网域MX记录所指向的服务器,MTA通过SMTP协议进行邮件传输时,实际上就是通过DNS的MX记录来找到邮件接收服务器的。对于大型的邮件系统往往需要一组服务器构成。邮件接收服务器接收其他MTA邮件的流程为:接收服务器接收邮件→查询用户注册在哪一台用户邮件服务器→将邮件转发到用户邮件服务器的MTA。那么当接收服务器收到邮件后,如何执行查询动作和转发动作呢?这个问题可以通过Postfix提供的强大的配置文件来解决。在main.cf中有两个重要的配置参数在大型的分布式邮件系统中起到了非常重要的作用,一个是local_recipient_ maps,另一个是transport_ maps。local_recipient_maps参数值由SMTP服务使用,当邮件接收服务器收到新邮件时,它会检查该参数指定的查询表确定是否该接收该邮件,这里的查询表可以是键值型的索引表,也可以是查询程序。比如,可以这样配置main.cf:
local_recipient_maps = usersever:smtpcheck
发送方MTA发出“RCPT ”指令时,如果接受服务器上的Postfix,就可以调用smtpcheck对应的程序去确认该用户是否存在。如果存在,就开始准备接收“DATA”指令发过来的邮件正文。那么成功收到邮件后,如何实现转发呢?这就需要配置 transport_maps这个参数。Postfix中可以通过transport_maps这个参数对应的查询表来判断如何处理邮件,继而修改默认的邮件投递流程,这里的查询表可以是键值型的索引表,也可以是查询程序。比如,可以这样配置main.cf:
transport_maps = usersever:transportmx
Postfix可以通过transportmx对应的程序获得下一步处理邮件的指令。比如,输入收件人邮件地址“user2 @cec-cn.com”,输出“smtp: usersever06.cec-cn.com”,这就会让Postfix通过SMTP把信转投到usersever 06.cec-cn.com域名的这台机器上,也就是第6台用户邮件服务器。
3.用户邮件服务器的配置与设计
邮件系统中的用户在注册时被分配到不同的服务器上,并在数据库中记录这些信息。这些服务器负责接收从邮件接收服务器转投过来的信件,并最终放入存储系统中。这里邮件的处理流程为:用户邮件服务器上的MTA接收邮件→查询用户在邮件服务器上的存储位置→存邮件至用户路径。
在这里,一样会使用local_ recipient_maps检查收件人是否真实存在。但与邮件接收服务器不同的是,这是信件的最终目的地,transport_maps查询的结果就不能再是“smtp: usersever06.cec-cn.com ”,要设置成合适的本地处理程序,比如local或者指定mda的名称(在etc/master.cf中设置)等。main.cf的主要配置为:
local_recipient_maps = userserver:smtpcheck
transport_maps = usersever:transportusersever
这样,一个大型的分布式邮件系统的MTA框架就搭建成功,在用户邮件服务器上部署MUA,用户可以进行阅读收信及发送邮件等操作了。
本文从安装配置和实现机制向读者概要地介绍了Postfix,并在这个基础上设计了一个大型的邮件系统。但是,本文对Postfix的介绍还远远不够,比如Postfix来如何实现高效地反垃圾、反病毒,Postfix的详细配置与管理等。读者可以通过实践来学习使用Postfix,并在实践中探索Postfix的原理,从而更好地优化和配置Postfix,以实现更加强大的邮件系统。
自由广告区 |
分类导航 |
邮件新闻资讯: IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮 电子邮箱 | 反垃圾邮件|邮件客户端|网络安全 行业数据 | 邮件人物 | 网站公告 | 行业法规 网络技术: 邮件原理 | 网络协议 | 网络管理 | 传输介质 线路接入 | 路由接口 | 邮件存储 | 华为3Com CISCO技术 | 网络与服务器硬件 操作系统: Windows 9X | Linux&Uinx | Windows NT Windows Vista | FreeBSD | 其它操作系统 邮件服务器: 程序与开发 | Exchange | Qmail | Postfix Sendmail | MDaemon | Domino | Foxmail KerioMail | JavaMail | Winwebmail |James Merak&VisNetic | CMailServer | WinMail 金笛邮件系统 | 其它 | 反垃圾邮件: 综述| 客户端反垃圾邮件|服务器端反垃圾邮件 邮件客户端软件: Outlook | Foxmail | DreamMail| KooMail The bat | 雷鸟 | Eudora |Becky! |Pegasus IncrediMail |其它 电子邮箱: 个人邮箱 | 企业邮箱 |Gmail 移动电子邮件:服务器 | 客户端 | 技术前沿 邮件网络安全: 软件漏洞 | 安全知识 | 病毒公告 |防火墙 攻防技术 | 病毒查杀| ISA | 数字签名 邮件营销: Email营销 | 网络营销 | 营销技巧 |营销案例 邮件人才:招聘 | 职场 | 培训 | 指南 | 职场 解决方案: 邮件系统|反垃圾邮件 |安全 |移动电邮 |招标 产品评测: 邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端 |