将amavisd-new集成到Postfix中进行垃圾邮件和病毒扫描
版本1.0
作者:Falko Timme
本文介绍如何将amavisd-new集成到Postfix邮件服务器中进行垃圾邮件和病毒扫描。 amavisd-new是诸如Postfix和内容检查器之间的高性能接口:病毒扫描程序和/或SpamAssassin。 本教程将使用ClamAV进行病毒扫描和SpamAssassin进行垃圾邮件扫描。
我想先说说这不是建立这样一个系统的唯一途径。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
1初步说明
在本教程中,我将介绍如何在Debian Etch / Ubuntu 6.10 Edgy Eft上安装/配置amavisd-new(两个版本的步骤都相同)和Debian Sarge。 amavisd-new配置适用于系统用户用于电子邮件帐户的系统; 如果您使用虚拟用户,可能需要或可能不需要对amavisd-new配置进行一些修改(但这取决于实际设置)。 如果您使用虚拟电子邮件用户,请查看这两个教程:
amavisd这样的新工作:Postfix在25端口接收一封电子邮件,将其传递到端口10024上的amavisd-new,然后调用ClamAV和SpamAssassin,之后,amavisd-new将邮件重新注入到端口10025上的Postfix,然后终端提供邮件(如果是干净的)。 这是一个小的布局的过程:
[SpamAssassin]
^
|
Email --> [(Port 25) Postfix] --> [(10024) amavisd-new] --> [(10025) Postfix] --> Mailbox
|
v
[ClamAV]
我认为Postfix和您的电子邮件帐户已经被设置和工作,因为我没有在这里覆盖Postfix的安装/配置。
本教程中的所有步骤都以root身份完成,因此请确保以root用户身份登录。
2 Debian Etch / Ubuntu 6.10 Edgy Eft
首先,我们安装amavisd-new,SpamAssassin和ClamAV以及其他一些程序(主要是程序,这些程序是新的需要打开存档,因为电子邮件可以包含存档作为附件):
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 unzoo libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop
之后我们必须配置amavisd-new。 该配置在各种文件中分开,这些文件驻留在/etc/amavis/conf.d
目录中。 看看他们每个人熟悉配置。 大多数设置都不错,但是我们必须修改两个文件:
首先,我们必须通过取消注释@bypass_virus_checks_maps
和@bypass_spam_checks_maps
行,在/etc/amavis/conf.d/15-content_filter_mode
中启用ClamAV和SpamAssassin:
vi /etc/amavis/conf.d/15-content_filter_mode
该文件应如下所示:
use strict; # You can modify this file to re-enable SPAM checking through spamassassin # and to re-enable antivirus checking. # # Default antivirus checking mode # Uncomment the two lines below to enable it back # @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); # # Default SPAM checking mode # Uncomment the two lines below to enable it back # @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); 1; # insure a defined return |
然后,您应该查看垃圾邮件设置以及/etc/amavis/conf.d/20-debian_defaults
中垃圾邮件/病毒邮件的操作
。 如果您的默认设置不错,则无需更改任何内容。 该文件包含许多说明,因此无需在此处说明设置:
vi /etc/amavis/conf.d/20-debian_defaults
$QUARANTINEDIR = "$MYHOME/virusmails"; $log_recip_templ = undef; # disable by-recipient level-0 log entries $DO_SYSLOG = 1; # log via syslogd (preferred) $syslog_ident = 'amavis'; # syslog ident tag, prepended to all messages $syslog_facility = 'mail'; $syslog_priority = 'debug'; # switch to info to drop debug output, etc $enable_db = 1; # enable use of BerkeleyDB/libdb (SNMP and nanny) $enable_global_cache = 1; # enable use of libdb-based cache if $enable_db=1 $inet_socket_port = 10024; # default listenting socket $sa_spam_subject_tag = '***SPAM*** '; $sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level $sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level $sa_kill_level_deflt = 6.31; # triggers spam evasive actions $sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent $sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger $sa_local_tests_only = 0; # only tests which do not require internet access? [...] $final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine) $final_banned_destiny = D_BOUNCE; # D_REJECT when front-end MTA $final_spam_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; # False-positive prone (for spam) [...] |
之后,运行这些命令将clamav
用户添加到amavis
组并重新启动amavisd-new和ClamAV:
adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart
接下来,我们必须编辑Freshclam守护程序的配置文件(这是守护进程,它定期自动从ClamAV镜像中获取最新的病毒签名),因为它包含一个小错误。 打开/etc/clamav/freshclam.conf
并修改NotifyClamd
行,如下所示:
vi /etc/clamav/freshclam.conf
[...] NotifyClamd /etc/clamav/clamd.conf [...] |
然后重新启动Freshclam(确保没有其他的Freshclam进程(也许是另一个ClamAV安装)正在运行,因为那么我们的Freshclam将无法启动):
/etc/init.d/clamav-freshclam restart
现在我们必须通过amavisd-new配置Postfix来管理传入的电子邮件:
postconf -e 'content_filter = amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options = no_address_mappings'
之后添加以下行到/etc/postfix/master.cf
:
vi /etc/postfix/master.cf
[...] amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes 127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtpd_bind_address=127.0.0.1 |
然后重新启动Postfix:
/etc/init.d/postfix restart
现在跑
netstat -tap
您应该看到Postfix( 主
)在端口25( smtp
)和10025上监听,而在端口10024上的amavisd-new:
server1:~# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:4069 *:* LISTEN 3457/rpc.statd
tcp 0 0 localhost.localdo:10024 *:* LISTEN 6886/amavisd (maste
tcp 0 0 localhost.localdo:10025 *:* LISTEN 7268/master
tcp 0 0 *:sunrpc *:* LISTEN 3083/portmap
tcp 0 0 *:auth *:* LISTEN 3417/inetd
tcp 0 0 *:smtp *:* LISTEN 7268/master
tcp6 0 0 *:imaps *:* LISTEN 4952/couriertcpd
tcp6 0 0 *:pop3s *:* LISTEN 4872/couriertcpd
tcp6 0 0 *:pop3 *:* LISTEN 4815/couriertcpd
tcp6 0 0 *:imap2 *:* LISTEN 4905/couriertcpd
tcp6 0 0 *:ssh *:* LISTEN 3438/sshd
tcp6 0 0 *:smtp *:* LISTEN 7268/master
tcp6 0 148 server1.example.com:ssh localhost:3117 ESTABLISHED3519/0
如果您喜欢,现在可以将Razor,Pyzor和DCC添加到SpamAssassin,以提高其过滤性能。 Razor,Pyzor和DCC是使用协作过滤网络的垃圾邮件过滤器。 要安装它们,运行
apt-get install razor pyzor dcc-client
现在我们要告诉SpamAssassin使用这三个程序。 编辑/etc/spamassassin/local.cf
并添加以下行:
vi /etc/spamassassin/local.cf
[...] # dcc use_dcc 1 dcc_path /usr/bin/dccproc dcc_add_header 1 dcc_dccifd_path /usr/sbin/dccifd #pyzor use_pyzor 1 pyzor_path /usr/bin/pyzor pyzor_add_header 1 #razor use_razor2 1 razor_config /etc/razor/razor-agent.conf #bayes use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 |
以后重新启动:
/etc/init.d/amavis restart
已经这样了 现在看你的邮件日志( /var/log/mail.log
)看看amavisd-new是否正常工作。 amavisd-new会在发现垃圾邮件或病毒电子邮件时记录。 当你(重新)启动amavisd-new时,它也应该记录它加载其垃圾邮件和病毒扫描代码(如果不是,你可能做错了)。
要实时查看您的邮件日志,可以使用以下命令:
tail -f /var/log/mail.log
(按CTRL + c
离开日志。)