将amavisd-new集成到Postfix中以进行垃圾邮件和病毒扫描

将amavisd-new集成到Postfix中以进行垃圾邮件和病毒扫描 本文介绍如何将amavisd-new集成到Postfix邮件中 服务器...

将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离开日志。)