您所在的位置:读书频道 > 操作系统 > Linux > 19.7.2 简单的广告邮件抵挡机制

19.7.2 简单的广告邮件抵挡机制

2007-12-06 19:56 鸟哥 机械工业出版社华章公司 字号:T | T
一键收藏,随时查看,分享好友!

《鸟哥的Linux私房菜——服务器架设篇》(第二版)第19章的主要介绍的是以Postfix为主的邮件主机架设。本文主要介绍的是简单的广告邮件抵挡机制。

AD:

19.7.2  简单的广告邮件抵挡机制

早期的广告邮件很多都是通过“僵尸”计算机(已经被当作跳板但管理员却没有发现或没有处理的主机)来发送的,这些“僵尸”计算机所发送的信件有个很明显的特征,即它只会尝试传送该封电子邮件一次,不论成功与否,该信件将被移出队列。不过,合法的Mail Server运作流程就如之前分析的一般,在邮件无法顺利寄出时该邮件会暂时放置到队列中一段时间,并一直尝试将信件寄出的操作,默认直到5天后若还是无法寄出才会将信件退回。
根据这个合法与非法的邮件服务器运作流程而发展出一个名为曙光(postgrey)的软件,可以参考下面的几个说明来了解这个软件:

· http://isg.ee.ethz.ch/tools/postgrey/
· http://www.Postfix.org/SMTPD_POLICY_README.html

postgrey主要的功能是在记录发信来源,若发信来源同一封信第一次寄来时,postgrey默认会抵挡它,并且将来源地址记录起来,在约5分钟后,若该信件又传来一次时,则该信件会被收下来。如此则可以杜绝非法邮件服务器单次发送的问题。但对于您确定合法的主机则可以开放所谓的白名单(whitelist)来优先通过而不予抵挡。所以,它主要是按照如下方式进行操作的(参考http://projects.puremagic.com/greylisting/whitepaper.html)。

(1)确认发信来源是否在白名单中,若是则予以通过。

(2)确认收信者是否在白名单中,若是则予以通过。

(3)确定这封信是否已经被记录起来,放行的依据如下:

· 若无此信件的记录,则将发信地址记录起来,并将信件退回。

· 若有此信件的记录,但是记录的时间尚未超过指定的时间(默认5分钟),则依旧退回信件。

· 若有信件的记录,且记录时间已超过指定的时间,则予以通过。

不过为了快速实现postgrey的记录能力,所以数据库系统又是不可避免的选择。postgrey是由perl写成的,您可能也需要加入很多相关的perl模块。总之至少需要如下软件。

· BerkeleyDB:包括db4、db4-utils、db4-devel等软件。

· Perl:使用yum install perl即可。

· Perl模块:perl-Net-DNS是CentOS提供的,其他没有提供的可以到http://rpmfind.net/搜索下载。

除了可使用yum来安装的软件之外,其他的软件鸟哥下面作了链接,您可以直接下载:

· FTP://rpmfind.net/linux/dag/redhat/el4/en/i386/dag/RPMS/ perl-BerkeleyDB-0.31-1.el4. rf.i386.rpm。
· FTP://rpmfind.net/linux/dag/redhat/el4/en/i386/dag/RPMS/ perl-IO-Multiplex-1.08-3. el4.rf.noarch.rpm。
· FTP://rpmfind.net/linux/dag/redhat/el4/en/i386/dag/RPMS/perl-Net-Server-0.94-1.el4.rf. noarch.rpm。
· http://www.lfarkas.org/linux/packages/centos-4/i386/RPMS/ postgrey-1.27-0.noarch. rpm。

使用“rpm -ivh*.rpm”将下载的4个RPM安装即可。然后就可尝试启动postgrey:

[root@linux ~]# /etc/init.d/postgrey
[root@linux ~]# netstat -anlp | grep grey
unix  2 … /var/spool/Postfix/postgrey/socket

由于Postfix需要连接到postgrey进行一些名单的确认,而且两者连接的方式除了网络IP之外,传统的Unix socket也是可以连接的。由于传统socket不需要额外启动网络联机的端口,鸟哥认为这样也比较符合本机的操作,所以我们使用这一版postgrey的默认unix socket来连接。接下来需要修改Postfix的main.cf,方法如下。

[root@linux ~]# vi /etc/Postfix/main.cf
# 如果曾经有过这个设置值,请对它进行修改,否则请自行增加下面的字样
SMTPd_recipient_restrictions=
     permit_mynetworks
     reject_unauth_destination
     check_policy_service unix:/var/spool/Postfix/postgrey/socket
# 重点是最后那一行,即指定使用unix socket来连接到postgrey
# 后续还有一些广告邮件的抵挡机制,特别建议将这个postgrey的设置值写在最后
# 因为它可以算是最后一个检验的机制

[root@linux ~]# /etc/init.d/Postfix restart
[root@linux ~]# chkconfig postgrey on

然后可以从外台主机寄一封信给自己这台邮件服务器,记得去日志文件内查一查(/var/log/Maillog),应该会出现类似的信息:

Nov 27 15:17:09 linux Postfix/SMTPd[16132]:NOQUEUE:reject:
RCPT from sun.linux.tsai[192.168.1.101]: 
450: Recipient address rejected: Greylisted,see
http://isg.ee.ethz.ch/tools/postgrey/help/linux.vbird.tsai.html;
from=to=dmtsai@linux.vbird.tsai
proto=ESMTP helo=

这表示postgrey已经开始顺利运行了,并且来源主机的相关记录也已经记载在 /var/spool/Postfix/postgrey/目录下了。如此一来Postfix将可以通过postgrey来抵挡一些莫名其妙的广告邮件了。

不过postgrey也是有缺点的,由于postgrey默认会先将信件退回去,所以您的信件就可能会发生延迟的问题,延迟的时间可能是数分钟到数小时,这要由MTA的设置而定。如果想要让某些信任的邮件主机不需要经过postgrey的阻止机制时,就需要开放白名单了。

白名单的开启也很简单,直接编写/etc/Postfix/postgrey_whitelist_Clients文件即可。假设要让鸟哥的邮件主机可以自由的将信寄到您的MTA的话,那么您可以在这个文件内加入如下代码:

[root@linux ~]# vi /etc/Postfix/postgrey_whitelist_Clients
Mail.vbird.idv.tw
sun.linux.tsai
# 将主机名称写进去

[root@linux ~]# /etc/init.d/postgrey restart

如果您还有更多信任的主机,将它写入此文件中即可。那它就可以略过postgrey的分析了。更高级的用法需要靠您自己去发掘了。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

分享到:

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>

读书

软件设计师考试考前冲刺预测卷及考点解析
本书依据最新版《软件设计师考试大纲》的考核要求,深入研究了历年软件设计师考试试题的命题风格和试题结构,对考查的知识点进行

最新热帖

更多>>

51CTO旗下网站

领先的IT技术网站 51CTO 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院 区块链第一聚合媒体 zhijiapro