Amavis

来自 ArchWiki

来自 Amavis 官方网站

amavisd-new 是邮件传输代理 (MTA) 和内容检查器(病毒扫描器和/或 SpamAssassin)之间的高性能接口。它使用 Perl 编写以实现可维护性,而不会在速度方面付出巨大的代价。它通过 (E)SMTP 或 LMTP 与 MTA 通信,或通过使用辅助程序通信。最适用于 Postfix,与双 sendmail 设置和 Exim v4 配合良好,可与 sendmail/milter 或任何 MTA 作为 SMTP 中继一起使用。

安装与设置

在此设置中,假定您使用 ClamAV 作为防病毒扫描器。

  • 安装 amavisd-new。明智的做法是同时安装可选依赖项,例如 7zipunrar,以便您的过滤器可以真正查看压缩文件内部。
  • 安装 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 可以将检查后的电子邮件发送回该端口。

您还必须在您的 smtpsubmission 部分中添加其他配置

-o content_filter=amavisfeed:[127.0.0.1]:10024

使用此选项意味着 Postfix 将在端口 10024 上将电子邮件发送到 Amavis,以便可以检查这些邮件。如果邮件通过检查,则会将这些邮件发送到端口 10025,如前所述。

我们现在可以 重启 postfix.serviceamavisd.service

要检查 Postfix 是否正在端口 10025 上监听,请执行与端口 10024 情况相同的操作。

SpamAssassin 支持

本文或本节需要扩充。

原因: 待办 (在 Talk:Amavis 中讨论)

安装 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

最终测试

本文或本节需要扩充。

原因: 待办 (在 Talk:Amavis 中讨论)

要检查一切是否按预期工作

  • 发送一封普通电子邮件。
  • 发送一封带有 EICAR 测试文件 作为附件的电子邮件。
  • 发送一封会被判定为垃圾邮件的电子邮件。
  • 检查 Postfix 和 Amavis 日志。

参见