Amavis
来自 Amavis 官方网站
- amavisd-new 是邮件传输代理 (MTA) 和内容检查器(病毒扫描器和/或 SpamAssassin)之间的高性能接口。它使用 Perl 编写以实现可维护性,而不会在速度方面付出巨大的代价。它通过 (E)SMTP 或 LMTP 与 MTA 通信,或通过使用辅助程序通信。最适用于 Postfix,与双 sendmail 设置和 Exim v4 配合良好,可与 sendmail/milter 或任何 MTA 作为 SMTP 中继一起使用。
安装与设置
在此设置中,假定您使用 ClamAV 作为防病毒扫描器。
- 安装 amavisd-new。明智的做法是同时安装可选依赖项,例如 7zip 和 unrar,以便您的过滤器可以真正查看压缩文件内部。
- 安装 clamav。
基本配置
如果您的主机名不是 FQDN,您必须在 /etc/amavisd/amavisd.conf
中相应地设置 $myhostname
和 $mydomain
。
您可以通过注释掉以下行来启用 ClamAV 支持(不要忘记放入与 /etc/clamav/clamd.conf
中相同的 clamd.sock
)
/etc/amavisd/amavisd.conf
# ### http://www.clamav.net/ ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/lib/clamav/clamd.sock"], qr/\bOK$/m, qr/\bFOUND$/m, qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ], # # NOTE: run clamd under the same user as amavisd - or run it under its own # # uid such as clamav, add user clamav to the amavis group, and then add # # NOTE: match socket name (LocalSocket) in clamav.conf to the socket name in # # this entry; when running chrooted one may prefer a socket under $MYHOME.
在此行添加注释以启用防病毒扫描
# @bypass_virus_check_maps = (1); # controls running of anti-virus code
之后,将 clamav
用户添加到 amavis
组以避免权限问题
# usermod -a -G amavis clamav
最后重启服务
使用以下命令检查错误
# systemctl status amavisd # journalctl -u amavisd
测试
要测试新配置,只需 telnet 到 amavisd 默认监听端口
$ telnet 127.0.0.1 10024
您应该看到类似以下内容
Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]' 220 [127.0.0.1] ESMTP amavisd-new service ready
输入 ehlo 127.0.0.1
EHLO localhost 250-[127.0.0.1] 250-VRFY 250-PIPELINING 250-SIZE 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 XFORWARD NAME ADDR PORT PROTO HELO IDENT SOURCE
现在只需输入 quit
退出。
与 Postfix 集成
快速开始
要为 Postfix 配置 amavis,请将以下内容添加到 /etc/postfix/master.cf
# # anti spam & anti virus section # amavisfeed 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 - y - - smtpd -o content_filter= -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 smtpd_restriction_classes= -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 receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters -o local_header_rewrite_clients=
在此配置中,我们假设 postfix 和 Amavis 在同一台机器上运行(即 127.0.0.1
)。如果不是这种情况,请相应地编辑 /etc/amavisd/amavisd.conf
和之前的 Postfix 条目。
Postfix 将监听端口 10025
,以便 Amavis 可以将检查后的电子邮件发送回该端口。
您还必须在您的 smtp
或 submission
部分中添加其他配置
-o content_filter=amavisfeed:[127.0.0.1]:10024
使用此选项意味着 Postfix 将在端口 10024
上将电子邮件发送到 Amavis,以便可以检查这些邮件。如果邮件通过检查,则会将这些邮件发送到端口 10025
,如前所述。
我们现在可以 重启 postfix.service
和 amavisd.service
。
要检查 Postfix 是否正在端口 10025
上监听,请执行与端口 10024
情况相同的操作。
SpamAssassin 支持
安装 spamassassin
Spamassassin 已集成在 Amavis 中,因此您不必启动 spamassassin.service
。要启用 Spamassassin 支持,请像这样注释掉 /etc/amavis/amavis.conf
中的以下行
# @bypass_spam_checks_maps = (1); # controls running of anti-spam code
根据您的需要编辑 SpamAssassin 配置
$sa_tag_level_deflt = 1.0; # add spam info headers if at, or above that level $sa_tag2_level_deflt = 1.0; # add 'spam detected' headers at that level $sa_kill_level_deflt = 5.0; # triggers spam evasive actions (e.g. blocks mail) $sa_dsn_cutoff_level = 8; # spam level beyond which a DSN is not sent # $sa_quarantine_cutoff_level = 25; # spam level beyond which quarantine is off $penpals_threshold_high = $sa_kill_level_deflt; # do not waste time on hi spam $bounce_killer_score = 100; # spam score points to add for joe-jobbed bounces
在您 重启 amavisd
服务之前,运行 sa-update
。
最终测试
要检查一切是否按预期工作
- 发送一封普通电子邮件。
- 发送一封带有 EICAR 测试文件 作为附件的电子邮件。
- 发送一封会被判定为垃圾邮件的电子邮件。
- 检查 Postfix 和 Amavis 日志。