Postfix进阶管理-MDA部分

前面讲的都属于MTA基于smtp特征的过滤。我们还可以使用增加MDA套件,实现对邮件更深层的过滤和分析。下面针对病毒附件、广告邮件内容过滤进行的配置。

下面的内容包括三部分:

引用

1、amavisd-new套件

2、clamav套件

3、Spamassassin套件

一、amavisd-new插件

amavisd-new是一个内容过滤插件,其可以在sendmail、postfix作为MDA,配置防病毒软件、防广告邮件系统等对邮件进行更一步的分析。

amavisd-new注意依赖perl对邮件进行分析,所以需要依赖大量的perl模块。

以红旗DC Server 5.0 for x86为例,下面是其需要的所有perl模块和软件包:

1、安装:

rpm -Uvh *.rpm

2、配置/etc/amavisd.conf

amavisd-new配置的内容比较多,但关键配置主要有:

引用

$mydomain = 'linuxfly.org';  #域名

$MYHOME = '/var/amavis';  #工作目录

$inet_socket_port = 10024;  #内部端口

$myhostname = 'dc5test.linuxfly.org';   #以FQDN定义的主机名

$notify_method  = 'smtp:[127.0.0.1]:10025';  #外部连接端口

$forward_method = 'smtp:[127.0.0.1]:10025';    #外部连接端口

然后是配置对病毒邮件、垃圾邮件执行的动作:

引用

$final_virus_destiny      = D_BOUNCE;   #对病毒邮件的动作

$final_banned_destiny     = D_BOUNCE;  #对自定义禁止项目的动作

$final_spam_destiny       = D_PASS;  #对广告邮件的动作

$final_bad_header_destiny = D_PASS;  #对带有不良邮件头的动作

◎相关动作的定义:

引用

D_PASS    无论邮件的内容是否有问题,该邮件都会转给收件人;

D_DISCARD 邮件被丢弃,而且不会告知收件者与寄信人;

D_BOUNCE  邮件不会传给收件人,但无法传递的讯息会告知寄信人;

D_REJECT  邮件不会传给收件者,但寄信人会收到拒绝的讯息。

3、配置/etc/postfix/master.cf

引用

smtp-amavis unix -      -       n        -       2    smtp

-o smtp_data_done_timeout=1200

-o smtp_send_xforward_command=yes

-o disable_dns_lookups=yes

-o max_use=20

127.0.0.1:10025 inet n  -       n        -       -    smtpd

-o content_filter=

-o smtpd_restriction_classes=

-o smtpd_delay_reject=no

-o smtpd_client_restrictions=permit_mynetworks,reject

-o smtpd_helo_restrictions=

-o smtpd_sender_restrictions=

-o smtpd_recipient_restrictions=permit_mynetworks,reject

-o smtpd_data_restrictions=reject_unauth_pipelining

-o smtpd_end_of_data_restrictions=

-o mynetworks=127.0.0.0/8

-o smtpd_error_sleep_time=0

-o smtpd_soft_error_limit=1001

-o smtpd_hard_error_limit=1000

-o smtpd_client_connection_count_limit=0

-o smtpd_client_connection_rate_limit=0

-o smtpd_milters=

-o local_header_rewrite_clients=

-o local_recipient_maps=

-o relay_recipient_maps=

4、配置/etc/postfix/main.cf

最后增加:

引用

content_filter = smtp-amavis:[127.0.0.1]:10024

分别定义上述master.cf中的两个服务名称。

◎可以从系统中下面的地方获得详细帮助信息:

引用

/usr/share/doc/amavisd-new-2.5.2/README.postfix

5、启动服务

service amavisd start

状态:

引用

# telnet localhost 10024

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 [127.0.0.1] ESMTP amavisd-new service ready

二、安装防病毒套件

amavisd-new内置的接口,几乎支持目前国际上所有的防病毒软件。而且同时可以有主、备两个接口分别配置,也可以与多个防病毒软件连接。

1、以免费的Clamav为例,可以从这里下载:

安装后,修改/etc/clamd.conf文件,并确认下面的路径:

引用

LocalSocket /tmp/clamd

AllowSupplementaryGroups yes

注释3310端口:

引用

#TCPSocket 3310

◎这部分在新版本的Clamav中是可选的。

启动服务:

service clamd start

2、修改amavisd-new的接口是否已经激活:/etc/amavisd.conf

主病毒引擎:

引用

@av_scanners = (

['ClamAV-clamd',

&ask_daemon, ["CONTSCAN {}n", "/tmp/clamd"],

qr/bOK$/, qr/bFOUND$/,

qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

)

副病毒引擎:

引用

@av_scanners_backup = (

['ClamAV-clamscan', 'clamscan',

"--stdout --no-summary -r --tempdir=$TEMPBASE {}",

[0], qr/:.*sFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

)

◎注意:

上面两个引擎默认都应该是打开的,但其执行效率有点不同。主引擎使用的是unix socks方式,速度和效率比较高;而备引擎是以clamscan命令扫描,效率比较低。建议打开主引擎即可。

3、把clamav用户加入amavis组中

因为clamav使用clamav用户启动服务,而amavis的工作目录是:

引用

ll /var/amavis/tmp/ -d

drwxr-x---  8 amavis amavis 4096  8月 30 15:08 /var/amavis/tmp/

如果不修改,则会再邮件日志中报类似的错误:

引用

Aug 30 14:19:32 dc5test amavis[6350]: (06350-01) (!!)ask_av (ClamAV-clamd) FAILED -unexpected result: /var/amavis/tmp/amavis-20070830T141930-06350/parts: lstat() failed.

ERRORn

所以,请执行:

引用

usermod -G amavis clamav

4、增加别名

修改:/etc/alias

引用

virusalert:     root

生成数据库:

# newaliases

先停止amavisd服务:

# service amavisd stop

查看运行状态:

引用

# amavisd debug

......

Using primary internal av scanner code for ClamAV-clamd

......

Found secondary av scanner ClamAV-clamscan at /usr/bin/clamscan

......

三、配置SpamAssassin插件

SpamAssasin是最常见得广告信过滤系统,简称SA。其会对邮件进行评估,如果符合某一过滤内容,则计算一个分数,当整个邮件的总分超过我们预设的分数的时候,就把这封邮件作为广告邮件。

而红旗DC Server 5.0上默认已经安装有SA,从上面的命令中也可以看到信息输出:

引用

SpamControl: initializing Mail::SpamAssassin

SpamControl: init_pre_fork done

可以看到,amavisd-new是通过Mail::SpamAssassin模块调用SA的,所以,不需要启动spamassassin服务的,已经启动的可以关闭:

# chkconfig spamassassin off

1、修改amavisd-new的默认分数:/etc/amavisd.conf

引用

$sa_tag_level_deflt  = 2.0;  # 这个值比较低,达到后就会在邮件标题加上SPAM的标识

$sa_tag2_level_deflt = 6.2;   #这个是第二允许值,达到后会加上'spam detected'字样

把$sa_tag_level_deflt修改为5比较合适。

这个是SPAM邮件会修改成的邮件头:

引用

$sa_spam_subject_tag = '***SPAM*** ';

2、确认SpamAssassin的配置

根据调用的不同而修改:

引用

# cat /etc/mail/spamassassin/local.cf

report_safe             1

use_bayes               0

auto_learn              0

bayes_auto_expire       1

skip_rbl_checks         1

use_razor2              0

use_dcc                 0

use_pyzor               0

dns_available           no

3、测试

# mail -s 'spam test' qkboy < /usr/share/doc/spamassassin-3.0.4/sample-spam.txt

日志中会显示:

引用

Aug 30 18:49:25 dc5test amavis[8162]: (08162-01) Passed SPAM, <[email protected]>-> <[email protected]>, quarantine: spam-ht44LJS9wF-L.gz, Message-ID: <[email protected]>, mail_id: ht44LJS9wF-L, Hits: 997.18, size: 1119, queued_as: DE9898F3A, 7627 ms

Aug 30 18:49:25 dc5test postfix/smtp[8125]: BB9068F2C: to=<[email protected]>, orig_to=, relay=127.0.0.1[127.0.0.1], delay=50, status=sent (250 Ok: queued as DE9898F3A)

其动作,由amavisd.conf中的$final_spam_destiny决定。

收到的邮件有点像这样:

点击在新窗口中浏览此图片

证明amavisd-new也和SA接上了。

4、增加中文支持

由于以前没有中文的过滤规则集,SpamAssassin对中文邮件过滤的准确性不高。CCERT反垃圾邮件研究小组利用CCERT所掌握的最新和丰富的样本数据,推出了第一个基于SpamAssassin的中文垃圾邮件过滤规则集Chinese_rules.cf。该规则集每周更新一次,时效性非常好。

相关的介绍可以看这里:点击

使用:

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

# service amavisd restart

因SA由amavisd-new调用的,所以请重启一下amavisd,让其通知SA激活新规则。

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

只要把上述下载命令以及重起amavisd-new的命令放在crontab中,并定期运行就可以完成自动更新功能。

引用

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