在Ubuntu Mail Server上设置Amavis和ClamAV

这是Ubuntu邮件服务器从头开始教程系列的第10部分。 在本文中,我将向您展示如何使用 阿马维斯ClamAV 扫描电子邮件中的病毒。

阿马维斯 (邮件病毒扫描程序)是邮件传输代理(MTA)之间的高性能接口,例如 后缀 和内容过滤器。 内容过滤器是一个程序,它扫描电子邮件的标题和正文,通常根据发现的内容采取一些措施。 最常见的例子是 ClamAV病毒扫描程序垃圾邮件刺客

Amavis使用标准的SMTP协议,也可以使用Sendmail milter界面。 通常用于

  • 与ClamAV(Clam AntiVirus)集成进行病毒扫描
  • 通过与SpamAssassin集成进行垃圾邮件检查
  • DKIM签名和验证。 (实际上,我更喜欢使用OpenDKIM进行DKIM签名和验证。)

先决条件

从头开始教程系列,您应该至少已经完成了Ubuntu邮件服务器的第1部分(Postfix SMTP服务器)和第2部分(Dovecot IMAP服务器)。 请注意,如果您使用iRedMail或Modoboa来设置邮件服务器,则已经安装和配置了Amavis和ClamAV,因此您无需遵循本教程。

警告:Amavis和ClamAV需要大量RAM。 在安装Amavis和ClamAV之前,请确保服务器上至少有1.3 GB的可用RAM。 整个邮件服务器堆栈(Postfix,Dovecot,Amavis,ClamAV,SpamAssassin,OpenDKIM,MySQL / MariaDB,PostfixAdmin和Roundcube Webmail)至少需要 3 GB RAM运行平稳。 如果您的RAM用完了,您将遇到麻烦,例如邮件服务器脱机或无响应。

步骤1:在Ubuntu上安装Amavis

Amvis可从默认的Ubuntu存储库中获得,因此请运行以下命令进行安装。

sudo apt install amavisd-new -y

安装后,它将自动启动。 您可以通过以下方式查看其状态:

systemctl status amavis

输出:

● amavis.service - LSB: Starts amavisd-new mailfilter
     Loaded: loaded (/etc/init.d/amavis; generated)
     Active: active (running) since Fri 2020-08-07 15:43:40 HKT; 1min 1s ago
       Docs: man:systemd-sysv-generator(8)
      Tasks: 3 (limit: 9451)
     Memory: 75.4M
     CGroup: /system.slice/amavis.service
             ├─1794260 /usr/sbin/amavisd-new (master)
             ├─1794263 /usr/sbin/amavisd-new (virgin child)
             └─1794264 /usr/sbin/amavisd-new (virgin child)

如果它没有运行,则可以使用以下命令启动它:

sudo systemctl start amavis

在启动时启用自动启动。

sudo systemctl enable amavis

默认情况下,它在127.0.0.1:10024上侦听,可以看到:

sudo netstat -lnpt | grep amavis

amavis监听端口

它作为 amavis 用户。 要检查版本号,请运行

amavisd-new -V

样本输出:

amavisd-new-2.11.0 (20160426)

要查看Amavis的日志,可以运行

sudo journalctl -eu amavis

病毒通常作为电子邮件的附件传播。 为Amavis安装以下软件包,以提取和扫描电子邮件中的存档文件,例如 .7z.cab.doc.exe.iso.jar.rar 文件。

sudo apt install arj bzip2 cabextract cpio rpm2cpio file gzip lhasa nomarch pax rar unrar p7zip-full unzip zip lrzip lzip liblz4-tool lzop unrar-free

如果您使用Ubuntu 18.04,请同时安装 ripole 包。

sudo apt install ripole

请注意,如果您的服务器没有使用完全限定的域名(FQDN)作为主机名,则Amavis可能无法启动。 而且操作系统主机名可能会更改,因此建议直接在Amavis配置文件中设置一个有效的主机名。

sudo nano /etc/amavis/conf.d/05-node_id

找到以下行。

#$myhostname = "mail.example.com";

删除注释字符(#)并进行更改 mail.example.com 到您的真实主机名。

$myhostname = "mail.linuxbabe.com";

保存并关闭文件。 重新启动Amavis,以使更改生效。

sudo systemctl restart amavis

步骤2:将Postfix SMTP服务器与Amavis集成

Amavisd-new用作SMTP代理。 电子邮件通过SMTP反馈给它,经过处理,然后通过新的SMTP连接反馈给MTA。

编辑Postfix主配置文件。

sudo nano /etc/postfix/main.cf

在文件末尾添加以下行。 这告诉Postfix通过将所有传入的电子邮件发送给Amavis来打开内容筛选,Amavis侦听127.0.0.1:10024。

content_filter = smtp-amavis:[127.0.0.1]:10024

另外,添加以下行。

smtpd_proxy_options = speed_adjust

这将延迟Postfix与内容过滤器的连接,直到接收到整个电子邮件为止,这可以防止内容过滤器浪费时间和资源用于速度较慢的SMTP客户端。

保存并关闭文件。 然后编辑 master.cf 文件。

sudo nano /etc/postfix/master.cf

在文件末尾添加以下行。 这指示Postfix使用称为的特殊SMTP客户端组件。 smtp-amavis 将电子邮件传递给Amavis。 请在每个字符前至少留一个空格字符(制表符或空格键) -o。 在后缀配置中,前一个空格字符表示该行是前一行的延续。

smtp-amavis   unix   -   -   n   -   2   smtp
    -o syslog_name=postfix/amavis
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20
    -o smtp_tls_security_level=none

然后在文件末尾添加以下行。 这告诉Postfix运行一个额外的smtpd守护程序,该守护程序在127.0.0.1:10025上侦听以接收来自Amavis的电子邮件。

127.0.0.1:10025   inet   n    -     n     -     -    smtpd
    -o syslog_name=postfix/10025
    -o content_filter=
    -o mynetworks_style=host
    -o mynetworks=127.0.0.0/8
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o strict_rfc821_envelopes=yes
    -o smtp_tls_security_level=none
    -o smtpd_tls_security_level=none
    -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_end_of_data_restrictions=
    -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_address_mappings

保存并关闭文件。 重新启动Postfix,以使更改生效。

sudo systemctl restart postfix

步骤3:将Amavis与ClamAV集成

现在Postfix可以将传入的电子邮件传递给Amavis,我们需要安装ClamAV病毒扫描程序并将其与Amavis集成,以便ClamAV可以扫描传入的电子邮件。

在Ubuntu上安装ClamAV。

sudo apt install clamav clamav-daemon

ClamAV将安装两个系统服务:

  • clamav-daemon.service:Clam AntiVirus用户空间守护程序
  • clamav-freshclam.service:ClamAV病毒数据库更新程序

首先,检查状态 clamav-freshclam.service

systemctl status clamav-freshclam

clamav-freshclam-ubuntu-20.04

如您所见,它处于活动状态(正在运行),并在我的邮件服务器上使用了217.6M RAM。 然后检查日志/日志。

sudo journalctl -eu clamav-freshclam

输出:

ClamAV病毒数据库更新程序

提示:如果上述命令没有立即退出,请按Q键使其退出。

我们可以看到 freshclam 下载了3个病毒数据库。 CVD代表ClamAV病毒数据库。

  • 日报
  • main.cvd
  • 字节码

然而, clamd 未收到通知,因为freshclam无法通过连接到clamd /var/run/clamav/clamd.ctl。 检查状态 clamav-daemon.service

systemctl status clamav-daemon

输出:

clamav-daemon Ubuntu 20.04

如您所见,由于未满足条件,它无法启动。 在里面 /lib/systemd/system/clamav-daemon.service 文件,有两个条件:

ConditionPathExistsGlob=/var/lib/clamav/main.{c[vl]d,inc}
ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc}

clamav-daemon.service 无法启动,因为main.cvd和daily.cvd在启动时尚未下载。 因此,我们只需要重新启动该服务即可。

sudo systemctl restart clamav-daemon

现在它应该正在运行。 顺便说一句,它在我的邮件服务器上使用了731.4M RAM。 如果您的邮件服务器没有足够的RAM,则该服务将失败。

systemctl status clamav-daemon.service

clamav-daemon.service Ubuntu 20.04

clamav-freshclam.service 将每小时检查一次ClamAV病毒数据库更新。

现在,我们需要在Amavis中打开病毒检查功能。

sudo nano /etc/amavis/conf.d/15-content_filter_mode

取消注释以下行以启用病毒检查。

#@bypass_virus_checks_maps = (
#      %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re);

ubuntu amavis打开病毒检查

保存并关闭文件。 在其中有很多防病毒扫描程序 /etc/amavis/conf.d/15-av_scanners 文件。 ClamAV是默认设置。 Amavis将通过以下方式致电ClamAV /var/run/clamav/clamd.ctl Unix套接字。 我们需要添加用户 clamavamavis 组。

sudo adduser clamav amavis

然后重新启动Amavis和ClamAV守护程序,以使更改生效。

sudo systemctl restart amavis clamav-daemon

检查日志。

sudo journalctl -eu amavis

您可以看到Amavis现在正在使用ClamAV扫描病毒。

Aug 08 17:26:19 mail.linuxbabe.com amavis[1233432]: Using primary internal av scanner code for ClamAV-clamd
Aug 08 17:26:19 mail.linuxbabe.com amavis[1233432]: Found secondary av scanner ClamAV-clamscan at /usr/bin/clamscan

现在,如果您将电子邮件从其他邮件服务器(例如Gmail)发送到您自己的邮件服务器并检查电子邮件标题,则可以在下面找到一行,表明该电子邮件已被Amavis扫描。

X-Virus-Scanned: Debian amavisd-new at linuxbabe.com

您还应该检查邮件日志(/var/log/mail.log)以查找是否有任何错误。

步骤4:使用专用端口进行电子邮件提交

ClamAV现在可以同时扫描传入和传出的电子邮件。 Amavis在端口10024上侦听传入和传出的电子邮件消息。 但是,最好使用其他端口(例如10026)从经过身份验证的用户提交电子邮件。 编辑Amavis配置文件。

sudo nano /etc/amavis/conf.d/50-user

自定义设置应在 use strict;1; 线。 默认情况下,Amavis仅侦听端口10024。添加以下行以使其也侦听端口10026。

$inet_socket_port = [10024,10026];

然后添加以下行,为端口10026设置“ ORIGINATING”策略。

$interface_policy{'10026'} = 'ORIGINATING';

接下来,添加以下几行,这些行定义了“ ORIGINATING”策略。

$policy_bank{'ORIGINATING'} = {  # mail supposedly originating from our users
  originating => 1,  # declare that mail was submitted by our smtp client
  allow_disclaimers => 1,  # enables disclaimer insertion if available

  # notify administrator of locally originating malware
  virus_admin_maps => ["[email protected]$mydomain"],
  spam_admin_maps  => ["[email protected]$mydomain"],
  warnbadhsender   => 1,

  # force MTA conversion to 7-bit (e.g. before DKIM signing)
  smtpd_discard_ehlo_keywords => ['8BITMIME'],
  bypass_banned_checks_maps => [1],  # allow sending any file names and types
  terminate_dsn_on_notify_success => 0,  # don't remove NOTIFY=SUCCESS option
};

保存并关闭文件。 重新启动Amavis。

sudo systemctl restart amavis

检查其状态以查看重新启动是否成功。

systemctl status amavis

接下来,编辑Postfix主配置文件。

sudo nano /etc/postfix/master.cf

将以下行添加到 submission 服务,因此来自经过身份验证的SMTP客户端的电子邮件将被传递到侦听端口10026的Amavis。此行将覆盖(-o) content_filter 在参数 /etc/postfix/main.cf 文件。

 -o content_filter=smtp-amavis:[127.0.0.1]:10026

像这样:

ubuntu postfix提交amavis端口10026

如果启用了 smtps Microsoft Outlook用户的服务,那么您还需要将此行添加到 smtps 服务。

在Ubuntu Mail Server上设置Amavis和ClamAV

保存并关闭文件。 重新启动Postfix,以使更改生效。

sudo systemctl restart postfix

检查其状态以查看重新启动是否成功。

systemctl status postfix

Amavis中的垃圾邮件过滤

注意:如果您已遵循SpamAssassin教程,则无需在Amavis中启用垃圾邮件检查功能。 如果启用它,SpamAssassin将对每封电子邮件进行两次检查。

要在Amavis中启用垃圾邮件检查,请安装SpamAssassin和相关软件包。

sudo apt install spamassassin libnet-dns-perl libmail-spf-perl pyzor razor

编辑一个Amavis配置文件。

sudo nano /etc/amavis/conf.d/15-content_filter_mode

取消注释以下行以启用垃圾邮件检查。

#@bypass_spam_checks_maps = (
#   %bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re);

保存并关闭文件。 然后重新启动Amavis。

sudo systemctl restart amavis

DKIM在Amavis

在Linux上可以执行DKIM签名和验证的两个常见软件是OpenDKIM和Amavis。 我更喜欢使用OpenDKIM,因为它与OpenDMARC更好地协同工作。 因此,我将不解释如何DKIM在Amavis中对您的电子邮件进行签名。

默认情况下,Amavis可以验证传入电子邮件的DKIM签名。 如果您的邮件服务器上运行了OpenDKIM,则可以在Amavis中禁用DKIM验证。

sudo nano /etc/amavis/conf.d/21-ubuntu_defaults

找到以下行并进行更改 10,因此Amavis不会验证DKIM签名。

$enable_dkim_verification = 1;

保存并关闭文件。 然后重新启动Amavis。

sudo systemctl restart amavis

收到传入的电子邮件时,Postfix将通过sendmail milter界面调用OpenDKIM以验证DKIM签名,然后将电子邮件传递给Amavis进行病毒检查。 发送外发电子邮件时,Postfix将调用OpenDKIM对电子邮件进行签名,然后将其传递给Amavis进行病毒检查。

改善Amavis的性能

默认情况下,Amavis运行2个进程。 如果您在邮件日志中看到以下几行(/var/log/mail.log),这意味着Amavis无法足够快地处理电子邮件。

postfix/qmgr[1619188]: warning: mail for [127.0.0.1]:10024 is using up 4001 of 4008 active queue entries
postfix/qmgr[1619188]: warning: you may need to reduce smtp-amavis connect and helo timeouts
postfix/qmgr[1619188]: warning: so that Postfix quickly skips unavailable hosts
postfix/qmgr[1619188]: warning: you may need to increase the main.cf minimal_backoff_time and maximal_backoff_time
postfix/qmgr[1619188]: warning: so that Postfix wastes less time on undeliverable mail
mail postfix/qmgr[1619188]: warning: you may need to increase the master.cf smtp-amavis process limit
mail postfix/qmgr[1619188]: warning: please avoid flushing the whole queue when you have
mail postfix/qmgr[1619188]: warning: lots of deferred mail, that is bad for performance

为了提高性能,请编辑Amavis配置文件。

sudo nano /etc/amavis/conf.d/50-user

在文件之间添加以下行 use strict;1; 线。 这将使Amavis运行4个流程。 如果您有10个CPU核心,则可以将4更改为10。请注意,运行10个以上的Amavis进程对性能几乎没有影响。

$max_servers = 4;

保存并关闭文件。 然后编辑Postifx主配置文件。

sudo nano /etc/postfix/master.cf

找出 smtp-amavis 服务定义,并将流程限制从2更改为4。

smtp-amavis   unix   -   -   n   -   4   smtp
    -o syslog_name=postfix/amavis
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20
    -o smtp_tls_security_level=none

保存并关闭文件。 然后重新启动Amavis和Postfix,以使更改生效。

sudo systemctl restart amavis postfix

现在运行以下命令。 您应该看到现在有4个Amavis进程。

sudo amavisd-nanny

苏多·阿马维斯·保姆

Ctrl+C 停止被害的保姆。

跳过病毒检查您的时事通讯

如果您使用邮件服务器发送新闻稿,并且启用了Amavis和ClamAV,则在将新闻稿发送给订户时,大量的CPU和RAM资源将用于病毒检查。 它可能使您的邮件服务器无响应。 您可以使用以下方法跳过对时事通讯的病毒检查。

编辑Postfix主配置文件。

sudo nano /etc/postfix/master.cf

在此文件的开头添加以下行。 这将启用 smtpd 在本地主机的端口2525上,它可以接受从同一服务器启动的客户端连接。 如果还有另一个进程正在监听端口2525,则可以将127.0.0.1:2525更改为其他名称,例如127.0.0.1:2552。 请注意 content_filter 参数设置为 none,这意味着ClamAV不会扫描电子邮件。

127.0.0.1:2525      inet  n       -       -       -       1       smtpd
  -o syslog_name=postfix/2525
  -o content_filter=

然后在此文件的末尾添加以下行。 将12.34.56.78替换为邮件服务器的公用IP地址。 这将创建另一个侦听端口10587的Postfix提交守护程序。这用于来自另一台服务器的客户端连接。

12.34.56.78:10587     inet     n    -    y    -    -    smtpd
  -o syslog_name=postfix/10587
  -o smtpd_tls_security_level=encrypt
  -o smtpd_tls_wrappermode=no
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o content_filter=

保存并关闭文件。 然后重新启动后缀。

sudo systemctl restart postfix

如果您的新闻通讯应用程序在邮件服务器上运行,请指定 127.0.0.1:2525 作为SMTP主机,无需SMTP身份验证。 如果您的新闻通讯应用程序在其他服务器上运行,请指定 12.34.56.78:10587 作为SMTP主机,并带有SMTP身份验证。

包起来

我希望本教程可以帮助您在Ubuntu邮件服务器上设置Amavis和ClamAV。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar