這是 Ubuntu 郵件服務器系列教程的第 10 部分。在本文中,我將向您展示如何使用它。 阿馬比斯 什麼時候 蛤蜊AV 掃描您的電子郵件中的病毒。

阿馬比斯 (Email Virus Scanner) 是郵件傳輸代理 (MTA) 之間的高性能接口,例如: 後綴 和內容過濾器。內容過濾器是掃描電子郵件標題和正文的程序,通常會根據發現的內容採取一些措施。最常見的例子是 ClamAV 病毒掃描程序 什麼時候 垃圾郵件殺手..

Amavis 使用標準的 SMTP 協議,也可以使用 Sendmailmilter 接口。 通常用於以下目的:

  • 通過與 ClamAV (Clam AntiVirus) 集成進行病毒掃描
  • 通過與 SpamAssassin 集成進行垃圾郵件檢查
  • DKIM 簽名和驗證。 (事實上,我更喜歡使用 OpenDKIM 進行 DKIM 簽名和驗證。)

先決條件

從本教程系列開始,您必須至少完成 Ubuntu 郵件服務器的第 1 部分(Postfix SMTP 服務器)和第 2 部分(Dovecot IMAP 服務器)。 如果您使用 iRedMail 或 Modoboa 來設置您的郵件服務器,則無需遵循本教程,因為 Amavis 和 ClamAV 已經安裝和配置。

溫暖的: Amavis 和 ClamAV 需要相當多的 RAM。 在安裝 Amavis 和 ClamAV 之前,請確保您的服務器至少有 1.3GB 的可用 RAM。至少對於整個郵件服務器堆棧(Postfix、Dovecot、Amavis、ClamAV、SpamAssassin、OpenDKIM、MySQL / MariaDB、PostfixAdmin、Roundcube Webmail) 3 GB 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 用戶。檢查版本號

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 將所有傳入的郵件消息發送到在 127.0.0.1:10024 監聽的 Amavis 以打開內容過濾。

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在 .postfix 設置中,前一個空格字符表示該行是前一行的延續。

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 安裝了兩個 systemd 服務。

  • clamav-daemon.service: ClamAntiVirus 用戶空間守護進程
  • clamav-freshclam.service: ClamAV 病毒庫更新程序

一、查看狀態 clamav-freshclam.service..

systemctl status clamav-freshclam

clamav-freshclam-ubuntu-20.04

如您所見,它處於活動狀態,正在使用郵件服務器上的 217.6M 內存。然後檢查日誌/日誌。

sudo journalctl -eu clamav-freshclam

輸出:

ClamAV 病毒庫更新程序

提示:如果上述命令沒有立即退出,請按Q退出。

我們可以看到 freshclam 我下載了三個病毒庫。 CVD 代表 ClamAV 病毒數據庫。

  • 每日.cvd
  • 主文件
  • 字節碼.cvd

但, clamd 您不會收到任何通知,因為freshclam 無法通過以下方式連接到clamd /var/run/clamav/clamd.ctl..檢查狀態 clamav-daemon.service..

systemctl status clamav-daemon

輸出:

clamav 守護進程 ubuntu20.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 的內存。如果郵件服務器沒有足夠的內存,服務就會失敗。

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);

ubuntuamavis 啟用病毒檢查

保存並關閉文件。有許多防病毒掃描程序 /etc/amavis/conf.d/15-av_scanners 文檔。 ClamAV 是默認設置。 Amavis 有 ClamAV /var/run/clamav/clamd.ctl Unix 套接字。需要添加用戶 clamav 到達 amavis 團體。

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 客戶端的電子郵件被傳遞到 Amavis 監聽端口 10026。覆蓋此行 (-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 服務。

保存並關閉文件。重新啟動 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

兩個可以在 Linux 上執行 DKIM 簽名和驗證的流行軟件是 OpenDKIM 和 Amavis。 我更喜歡使用 OpenDKIM,因為它適用於 OpenDMARC。因此,我們不會解釋如何使用 DKIM 與 Amavis 簽署電子郵件。

默認情況下,Amavis 可以驗證傳入電子郵件的 DKIM 簽名。如果您的郵件服務器正在運行 OpenDKIM,您可以在 Amavis 中禁用 DKIM 驗證。

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

查找並修改以下行 1 到達 0因此,Amavis 不會驗證 DKIM 簽名。

$enable_dkim_verification = 1;

保存並關閉文件。然後重新啟動 Amavis。

sudo systemctl restart amavis

Postfix 收到郵件後,通過 sendmail milter 接口調用 OpenDKIM 驗證 DKIM 簽名,並將郵件傳遞給 Amavis 進行病毒檢查。發送出站郵件時,Postfix 調用 OpenDKIM 對郵件進行簽名並將其傳遞給 Amavis 進行病毒檢查。

提高 Amavis 性能

默認情況下,Amavis 運行兩個進程。如果您在郵件日誌中看到以下行 (/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 運行四個進程。 如果您有 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

然後運行以下命令:您現在應該看到四個 Amavis 進程。

sudo amavisd-nanny

sudoamavisd 保姆

根據 Ctrl+C 阻止amavisd-nanny。

跳過時事通訊中的病毒檢查

如果您使用郵件服務器發送時事通訊並啟用了 Amavis 和 ClamAV,當您將時事通訊發送給訂閱者時,許多 CPU 和 RAM 資源將用於病毒檢查。郵件服務器可能變得無響應。您可以使用以下方法繞過時事通訊病毒檢查:

編輯 Postfix 主配置文件。

sudo nano /etc/postfix/master.cf

將以下行添加到此文件的開頭:這將導致 smtpd 在 localhost 端口 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 postscreen_greet_action=ignore
  -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 主機。

故障排除

如果 Postfix SMTP 服務器無法發送出站郵件並且您在郵件日誌中收到以下錯誤消息 (/var/log/mail.log),

relay=none, delay=239, delays=239/0.04/0/0, dsn=4.3.0, status=deferred (server unavailable or unable to receive mail)

您可能沒有運行 amavis,因此您需要檢查其狀態。

sudo systemctl status amavis

您可以使用以下命令重新啟動:

sudo systemctl restart amavis

此錯誤的另一個原因是您在使用以下設置發送出站郵件時將 TLS 連接應用到 Postfix: /etc/postfix/main.cf 文檔。

smtp_tls_security_level = enforce

郵件延遲是因為 Postfix 無法與 Amavis 建立 TLS 連接。您需要使用以下設置:

smtp_tls_security_level = may

然後重新啟動 Postfix。

包起來

我們希望本教程能幫助您在 Ubuntu 郵件服務器上設置 Amavis 和 ClamAV。與往常一樣,如果您覺得本文有用,請訂閱我們的免費新聞通訊以獲取更多提示和技巧。照顧好自己?