postfix邮件服务器的关键安全策略

原贴:http://www.pcjx.com/security/anfang/27744.html

邮件系统是Linux网络应用的重要组成,一个完整的邮件系统包括三个部分:底层操作系统(Linux Operation),邮件传送代理(Mail Transport Agent,MTA),邮件分发代理(Mail Delivery Agent,MDA),邮件用户代理(Mail User Agent,MUA)。

    Postfix是一个非常优秀的MTA,她素以高效、安全的特点而著称。Postfix是作者在UNIX上所见过的MTA中在反垃圾邮件(Anti-Spam或Anti-UCE)方面做得最好的一个,甚至有很多公司在Postfix代码的基础上进行二次开发而推出反垃圾邮件网关产品。MTA的反垃圾邮件功能,实际上就是在MTA处理过程中对会话进行过滤。这个过滤不但过滤了发往自身的垃圾邮件,而且还防止了自身被恶意利用发送垃圾邮件。Postfix实现了目前所有主要的MTA过滤技术。postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。和Sendmail相比Postfix更快、更容易管理、更灵活、更安全,同时还与sendmail保持足够的兼容性。Sendmail相比Postfix对比见表1.

    表1 Sendmail与Postfix的对比

    MTA 成熟性 安全性 特色 性能 Sendmail兼容性 模块化设计Postfix 中 中 中 中 支持 是Sendmail 高 低 中 低  否

    垃圾邮件(SPAM) 也称作UCE (Unsolicited Commercial Email,未经许可的商业电子邮件) 或UBE (Unsolicited Bulk Email,未经许可的大量电子邮件) .中国互联网协会对垃圾邮件给出了一个正式的定义,只要是符合下述四条之一的电子邮件都可被称为垃圾邮件:

    (1)收件人事先没有提出要求或同意接收的广告、电子刊物、各种形式的宣传品等宣传性的电子邮件。

    (2)收件人无法拒收的电子邮件。

    (3)隐藏发件人身份、地址、标题等信息的电子邮件;。

    (4)含有虚假的信息源、发件人、路由等信息的电子邮件。

    垃圾电子邮件成为了人们最头疼的问题之一。在Windows操作系统中也许您已经尝够了垃圾邮件给您带来的苦头,不要以为在Linux操作系统平台中就能避免垃圾电子邮件给我们带来的骚扰,反击和过滤垃圾电子

    邮件是一件很重要的工作。下面是一些在Linux中广泛使用的防垃圾邮件技术。

    (1)SMTP用户认证

    目前常见并十分有效的方法是,在邮件传送代理(Mail Transport Agent,MTA)上对来自本地网络以外的互联网的发信用户进行SMTP认证,仅允许通过认证的用户进行远程转发。这样既能够有效避免邮件传送代理服务器为垃圾邮件发送者所利用,又为出差在外或在家工作的员工提供了便利。如果不采取SMTP认证,则在不牺牲安全的前提下,设立面向互联网的Web邮件网关也是可行的。此外,如果SMTP服务和POP3服务集成在同一服务器上,在用户试图发信之前对其进行POP3访问验证(POP before SMTP)就是一种更加安全的方法,但在应用的时候要考虑到当前支持这种认证方式的邮件客户端程序还不多。

    (2)逆向名字解析

    无论哪一种认证,其目的都是避免邮件传送代理服务器被垃圾邮件发送者所利用,但对于发送到本地的垃圾邮件仍然无可奈何。要解决这个问题,最简单有效的方法是对发送者的IP地址进行逆向名字解析。通过DNS查询来判断发送者的IP与其声称的名字是否一致,例如,其声称的名字为mx.hotmail.com,而其连接地址为20.200.200.200,与其DNS记录不符,则予以拒收。这种方法可以有效过滤掉来自动态IP的垃圾邮件,对于某些使用动态域名的发送者,也可以根据实际情况进行屏蔽。但是上面这种方法对于借助Open Relay的垃圾邮件依然无效。对此,更进一步的技术是假设合法的用户只使用本域具有合法互联网名称的邮件传送代理服务器发送电子邮件。例如,若发件人的邮件地址为[email protected],则其使用的邮件传送代理服务器的Internet名字应具有yahoo.com 的后缀。这种限制并不符合SMTP协议,但在多数情况下是切实有效的。需要指出的是,逆向名字解析需要进行大量的DNS查询。

    (3)实时黑名单过滤

    以上介绍的防范措施对使用自身合法域名的垃圾邮件仍然无效。对此比较有效的方法就是使用黑名单服务了。黑名单服务是基于用户投诉和采样积累而建立的、由域名或IP组成的数据库,最著名的是RBL、DCC和Razor等,这些数据库保存了频繁发送垃圾邮件的主机名字或IP地址,供MTA进行实时查询以决定是否拒收相应的邮件。但是,目前各种黑名单数据库难以保证其正确性和及时性。例如,北美的RBL和DCC包含了我国大量的主机名字和IP地址,其中有些是早期的Open Relay造成的,有些则是由于误报造成的。但这些迟迟得不到纠正,在一定程度上阻碍了我国与北美地区的邮件联系,也妨碍了我国的用户使用这些黑名单服务。其中使用BRL认证过程见图1.

 

图1 使用BRL过滤垃圾邮件的过程

     (4)内容过滤

    即使使用了前面诸多环节中的技术,仍然会有相当一部分垃圾邮件漏网。对此情况,目前最有效的方法是基于邮件标题或正文的内容过滤。其中比较简单的方法是,结合内容扫描引擎,根据垃圾邮件的常用标题语、垃圾邮件受益者的姓名、电话号码、Web地址等信息进行过滤。更加复杂但同时更具智能性的方法是,基于贝叶斯概率理论的统计方法所进行的内容过滤,该算法最早由Paul Graham提出(http://www.paulgraham.com/spam.html),并使用他自己设计的Arc语言实现。这种方法的理论基础是通过对大量垃圾邮件中常见关键词进行分析后得出其分布的统计模型,并由此推算目标邮件是垃圾邮件的可能性。这种方法具有一定的自适应、自学习能力,目前已经得到了广泛的应用。最有名的垃圾邮件内容过滤是Spamassassin,它使用Perl语言实现,集成了以上两种过滤方法,可以与当前各种主流的MTA集成使用。内容过滤是以上所有各种方法中耗费计算资源最多的,在邮件流量较大的场合,需要配合高性能服务器使用。 下面以RHEL 4.0为例,介绍上面几种技术应对安全隐患。

    安装postfix

    1、查询Sendmail是否安装:

    #rpm -qa |grep sendmail

    2、强行卸载Sendmail

    # rpm -e sen

    dmail sendmail-cf sendmail-doc –nodeps

    3、用以下命令杀死运行中的sendmail进程:

    # kill all sendmail

    4、下载安装Posfix

    #wget ftp://ftp.midvalleyhosting.com/pub/postfix/official/postfix-2.1.4.t ar.gz /tmp

    #tar -vxf postfix-2.1.4.tar.gz

    #cd postfix-2.1.4

    5.编译源代码包

    # make

    6.建立一个新用户“postfix”,该用户必须具有唯一的用户ID号和组ID号,同时应该让该用户不能登录到系统,也即不为该用户指定可执行的登录外壳程序和可用的用户宿主目录。我们可以先用adduser postfix 添加用户再编辑/etc/passwd文件中的相关条目如下所示:

    # useradd postfix

    # postfix:*:12345:12345:postfix:/no/where:/no/shell

    #groupadd postdrop

    7.确定/etc/aliases文件中包含如下的条目:

    # postfix: root

    8. 以root用户登录,在/tmp/ postfix目录下执行命令:

    # ./INSTALL.sh

    9.启动postfix

    # postfix start

    postfix的配置文件位于/etc/postfix下,这四个文件就是postfix最基本的配置文件,它们的区别在于:mail.cf:是postfix主要的配置文件。Install.cf:包含安装过程中安装程序产生的postfix初始化设置。master.cf:是postfix的master进程的配置文件,该文件中的每一行都是用来配置postfix的组件进程的运行方式。postfix-script:包装了一些postfix命令,以便我们在linux环境中安全地执行这些postfix命令。

 

 

 


    4、命令行下的参数配置:

    1、 1、/etc/postfix/main.cf文件末尾添加如下内容:

    default_process_limit=200

    imss_timeout=10m

    imss_connect_timeout=1s

    content_filter = imss:localhost:10025

    imss_destination_recipient_limit=200

    imss_destination_concurrency_limit=20

    2、在/etc/postfix/master.cf文件末尾添加以下内容:

    #IMSS: content filter smtp transport "imss" for IMSS

    imss unix - - n - - smtp

    -o disable_dns_lookups=yes

    -o smtp_connect_timeout=$imss_connect_timeout

    -o smtp_data_done_timeout=$imss_timeout

    #IMSS: content filter loop back smtpd

    localhost:10026 inet n - n - 20 smtpd

    -o content_filter=

    -o smtpd_timeout=$imss_timeout

    -o local_recipient_maps=

    -o myhostname=localhost.$mydomain

    3. Relay 控制

    a. 允许Relay的Domain设置:

    编辑/etc/postfix/main.cf文件,在如下位置添加允许的任意Relay的Domain,如:

    relay_domains = 263.net

    b. 允许接受的Domain设置:

    编辑/etc/postfix/main.cf文件,在如下位置添加允许接受的Domain

    mydestination = trendmicro.com.cn

    c. 不受Relay限制的地址设置

    编辑/etc/postfix/main.cf文件,在如下位置添加允许接受的Domain

    mynetworks = 10.11.240.0/24, 127.0.0.1

    说明:所谓Relay就是指别人能用这台SMTP邮件服务器,给任何人发信,这样别有用心的垃圾发送者可以使用笔者单位的这台邮件服务器大量发送垃圾邮件,而最后别人投诉的不是垃圾发送者,而是单位的服务器。

    参数relay_domains & mydestination的主要区别在于:

    Postfix会转发目的地符合 $relay_domains及其子域的邮件;

    Postfix会接受目的地符合 $mydestination的邮件,并且在没有smart host的情况下尝试对这些域进行本地落地处理,因而,为了能正常的接受这些邮件,一定要对齐设置smart host;IMSS UNIX的Relay 控制界面设置中的域,即是$mydestination参数值,因而,一定要在IMSS的Domain-Based Delivery中做相应Deliver设置。

    5、重新启动Postfix服务器:

    #postfix start

    重新让postfix读取更改后的配置只需运行“postfix reload”即可。

    打开服务

    器的8081端口:

    # iptables -A FORWARD -i eth0 -p tcp ——dport 8081 -j ACCEPT

    iptables -A FORWARD -i eth0 -p udp ——dport 8081 -j ACCEPT

    6、启用Web方式管理:

    服务器从新启动完毕,可以进行Web方式管理,开Web浏览器中输入:http://yourip:8081/IMSS.html或者http://yourhost:8445/IMSS.html 即可。第一次进入Web界面时系统提示输入密码,此时密码是空的,可以直接用鼠标点击“Enter”键进入Web管理界面后,马上设定管理员密码。见图3.

 

图-3 首次登陆界面

点击“Policy Manager”选项,下面就可以制定自己的邮件服务器邮件管理策略,见图4。

图-4 基于Web方式的IMSS 5.5的邮件管理策略界面

 

 

 

 


    5 、软件升级

    可以采取两种方法Web方式和命令行,这里笔者喜欢在命令行下操作:

    下载升级布丁,链接:http://www.trendmicro.com/ftp/products/

    patches/isem522-imss55-linux-patch1.tar.gz

    #mv isem522-imss55-linux-patch1.tar.gz /tmp

    #cd /tmp

    #gunzip isem522-imss55-linux-patch1.tar.gz

    #./patchinstall install

    软件升级过程中IMSS5.5服务将暂时中止,升级后系统会自动启动IMSS 5.5服务。见图-5.

 

图5 升级IMSS数据库

    三、使用专用工具防止垃圾邮件

    还可以利用其他的专用工具来防止垃圾邮件,比较著名的有由Matt Sergeant、Craig Hughes和Justin Mason于发布的SpamAssassin(SA)。目前最新版本是3.0.2,它是较为流行的反垃圾邮件软件,据SpamAssassin供应商 Deersoft的统计,目前大约有3万台Unix服务器上使用了SpamAssassin.SpamAssassin利用Perl语言来对邮件内容进行规则匹配,从而达到判断过滤垃圾邮件的目的。它的判断方式是基于评分的方式,也就是说如果这封邮件符合某条规则,则给与一定分值;当累计的分值超过了一定限度时,则判定该邮件为垃圾邮件。对Sendmail、Qmail、Postfix和Exim等各种邮件平台都适用。当它被最终用户或系统管理员调用时,它可以方便地与大多数流行的邮件处理系统进行接口互连。SpamAssassin在对一封信件应用了各项规则之后,生成一个分值来表示其为垃圾邮件的可能性。它可以设置上百条规则,包括对邮件头的处理、对邮件内容的处理及对邮件结构的处理等。每条规则都对应一个分值(可正、可负),每封信件的分值就是所匹配规则的分值之和。如果分值为负,表示这封信件是正常的;相反,如果分值为正,则表示信件有问题。如果超过了某个默认的分值,过滤器就会标识其可能为垃圾邮件,然后交由用户做出最终抉择。SpamAssassin的安装过程比较简单。启动SpamAssassin服务器:

    # service spamassassin start (启动SpamAssassin服务器)

    Starting spamd: [ 确定 ]

    配置过程:

    SpamAssassin预设了许多默认规则,可以在/usr/share/spamassassin下找到,用户想添加自己的规则,可以配置通过/etc/mail/spamassassin/local.cf文件实现。要在其中添加白名单(即可以确信不会发送垃圾邮件的发件人列表)。设置代码如下:

    whitelist_from_rcvd [email protected]

    whitelist_from_rcvd @ people.com

    以上两条规则将[email protected] 邮箱和@ people.com 整个域加入了白名单。下面还要把SpamAssassin与Sendmail(此处以Postfix为例、Qmail略有不同)整合在一起。最简单的方法是使用procmail来调用SpamAssassin过滤器。procmail来调用SpamAssassin的过程见图6.

 

 

图6 procmail来调用SpamAssassin的过程

    添加以下内容到/etc/procmailrc文件:

    :0fw

    | /usr/bin/spamassassin

    :0

    * X-Spam-Status: Yes

    spam

    如果希望SpamAssassin不检查大邮件,可以对其做出限制,添加一行:

    :0fw * < 1000000 | /usr/bin/spamassassin

    这段代码表示把邮件检查的大小限制在1000K字节以内。SpamAssassin还提供了一个专门的spamd后台守护程序,可以设置为系统启动时自动启动它。在Mail-SpamAssassin-3.-0.2/spamd/下有一个redhat-rc-script.sh脚本,将此脚本放入Red Hat的启动目录/etc/rc.d/init.d/下即可。同时,还需要对/etc/procmailrc文件做如下修改:

    :0fw

    | /usr/bin/spamc -s 100000

    这样就可以通过控制spamd进程来调整过滤器的运行状态。配置完成后,可以发邮件进行测试。如果看到在邮件头出现与spam检查相关的几项内容,表示SpamAssassin已经开始发挥作用。

    除了设置内部的规则之外,SpamAssassin也可以访问其它外部的垃圾邮件过滤规则集,这样可以进一步增强其适用性。Chinese_rules.cf是用于垃圾邮件过滤系统SpamAssassin的中文垃圾邮件过滤规则集。由于以前没有中文的过滤规则集,SpamAssassin对中文邮件过滤的准确性不高。CCERT反垃圾邮件研究小组推出了第一个基于SpamAssassin的中文垃圾邮件过滤规则集Chinese_rules.cf.该规则集每周更新一次。把Chinese_rules.cf复制到/usr/share/spamassassin配置文档中的命令:

    # wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf

    自动更新:

    CCERT每周更新一次规则集,更新使用CCERT反垃圾邮件服务在6个月内处理过的垃圾邮件为样本。经常更新Chinese_rules.cf会使过滤效果更好。

    Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。例如用 crontab命令实现每周一08:35自动更新:

    首先建立一个文件,文件名称myproject(名称自己设定):

    #crontab -e

 

 

 

 

    文件内容:

    35 08 * * 1 wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf; /etc/init.d/init-script restart

    用vi编辑后存盘退出。

    (3)使用 crontab命令添加到任务列表中:

    #crontab myproject

    这样Linux服务器会在每星期一的8点35分会自动下载Chinese_rules.cf更新规则。

    SpamAssassin使用基于规则的垃圾邮件过滤技术,比分布式黑名单运行得更快,因为分布式黑名单需要查询网络服务器。对大多数用户而言,它能捕捉几乎所有的垃圾邮件,而不需要隔离合法邮件。实际上它还提供了无限的调整和定制选项。

    四、其他措施

    1.隐藏邮件服务器IP地址

    如果网络中有专门发送邮件的中央邮件服务器,为许多主机提供访问,那么必须隐藏邮件地址的主机名部分,(以postfix邮件服务器为例)例如一条名为:pc-jok.cao.com的主机上有一个jok用户那么它的邮件名称是:[email protected] main.cf加入两行:

    masquerade_domain=$mydomian

    masquerade_exceptions=root

    第一行通知postfix邮件服务器对所在德 域允许地址化装,通过$mydomian变量完成,这样[email protected]变为[email protected],第二行将root用户排除,即不对root用户伪装。

    2.防范DOS攻击:

    DOS(拒绝服务攻击)一段时间以来成为许多单位邮件服务器的最大杀手。对于邮件服务器的拒绝服务攻击原理很简单,就是不断地向邮件服务器发送大量的邮件,直到超过最大容量而崩溃为止。拒绝服务攻击有时并非有针对性的黑客行为,现在的病毒常常会利用自身的SMTP引擎,向感染电脑里的存在的地址狂发大量邮件。如果中小企业认为自己的公司小,不会成为攻击目标,这种想法已经不现实了。对于中小企业来说,要预防DOS攻击比大型企业要容易,因为小型企业往往不会有太多的邮件来往,我们可以根据业务量的大小,限制每个连接的邮件数,以及每封邮件的收件人数。这样,用户对于DOS攻击就可以做到尽早地发现并采取措施,而不会等到服务器崩溃的时候才发现被人实施了DOS攻击。步骤如下:

    2. 限制服务器使用的进程数目

    可以通过指定/etc/postfix/main.cf文件的下列参数来控制使用的并发进程总量:

    default_process_limit = 50

    这样服务器被允许同时允许60个并发进程(例如smtp客户端、smtp服务器端和本地分发)。如果希望增加同时接受1000条信息,可以修改 /etc/postfix/ master.cf文件,使smtp服务的最大进程达到1000,如下所示:

    #=============================================================

    # service type private unpriv chroot wakeup maxproc command + args

    # (yes) (yes) (yes) (never) (60)

    # ===========================================

    smtp inet n - n - 1000 smtpd

    3.控制最大邮件尺寸

    可以修改/etc/postfix/main.cf如下参数控制邮件尺寸

    message_size_limit = 1073741824

    这样服务器可以处理最大邮件尺寸是1073741824字节 (10兆)。

    4. 控制同时发送一个远程服务器的邮件数量

    同时向远程服务器发送太多SMTP连接是不合理的,也是危险的(可能会被认为是发送垃圾邮件)。一些大的ISP站点(AOL、 Yahoo!、 Hotmail)通常要求优化等到许可才能使用发送并发连接。Postfix 也能通过下面参数设定一个站点的最大并发连接数量:

    default_destination_concurrency_limit = 20

    这样使到达单一站点的并发连接数量不能超过20个。

    5.安装防病毒软件:

    F-Prot Antivirus软件包安装和配置过程:软件包格式: fp-linux-ws.rpm

    软件包的大小(KB):3970KB,下载地址:http://files.f-prot.com/files/linux-x86/fp-linux-ws.rpm

    安装F-Prot Antivirus软件包前,请先启动SpamAssassin服务器:

    Wget http://files.f-prot.com/files/linux-x86/fp-linux-ws.rpm

    Wget -ivh fp-linux-ws.rpm

    升级的F-Prot Antivirus病毒库的操作:

    # cd /usr/local/f-prot/tools/

    # ./check-updates.pl (升级命令)

    ***************************************

    * F-Prot Antivirus Updater *

    ***************************************

    Nothing to be done……

    总结:Postfix是目前比较流行的,拥有相当好的安全性和高效率的邮件系统。

    Postfix自身带了很多反垃圾邮件的功能可以阻止一部分垃圾邮件,但是面对日益痴狂的垃圾邮件还是需要一些专业软件的支持。

你可能感兴趣的:(linux,服务器,filter,domain,concurrency,邮件服务器)