這是第 10 部分 從頭開始創建 CentOS 8/RHEL 8 郵件服務器 教程系列。本文介紹如何使用 阿瑪比斯 什麼時候 蛤蜊 AV 掃描電子郵件中的病毒。

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

Amavis 使用標準的 SMTP 協議,也可以使用 Sendmail milter 接口。 它通常用於

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

先決條件

從教程系列的開始,您應該至少完成了 CentOS 8/RHEL 8 郵件服務器的第 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)至少有 3GB RAM 運行順暢。 RAM 不足會導致郵件服務器脫機、停止響應和其他問題。

第 1 步:在 CentOS 8/RHEL 8 上安裝 Amavis

Amavis 是用 Perl 編寫的。 EPEL(企業 Linux 的額外軟件包)和 CodeReady Linux Builder 存儲庫必須啟用。 RHEL8 為 Amavis 安裝一些 Perl 依賴項。

sudo dnf install epel-release

sudo subscription-manager repos --enable=codeready-builder-for-rhel-8-x86_64-rpms

存在 CentOS 8,啟用 EPEL(企業 Linux 的額外軟件包)和 PowerTools 存儲庫,並安裝 Amavis 的 Perl 依賴項。

sudo dnf install epel-release -y
sudo dnf config-manager --set-enabled powertools

然後安裝 amavis 盒。

sudo dnf install amavis -y

要檢查版本號,請運行

amavisd -V

樣本輸出:

amavisd-new-2.12.0 (20190725)

病毒通常以電子郵件附件的形式傳播。 要讓 Amavis 提取和掃描電子郵件中的存檔文件,請安裝以下軟件包: .7z, .cab, .doc, .exe, .iso, .jar, 什麼時候 .rar 文檔。

sudo dnf -y install arj bzip2 cpio file gzip nomarch spax unrar p7zip unzip zip lrzsz lzip lz4 lzop

請注意,如果您的服務器不使用完全限定域名 (FQDN) 作為其主機名,Amavis 可能無法啟動。此外,由於操作系統主機名可以更改,因此建議直接在 Amavis 配置文件中設置有效的主機名。

sudo nano /etc/amavisd/amavisd.conf

找到這一行:

$mydomain = 'example.com';   # a convenient default for other settings

我們還建議將默認 mydomain 值更改為您自己的域名。

$mydomain = 'linuxbabe.com'; # a convenient default for other settings

然後找到這一行:

# $myhostname="host.example.com";  # must be a fully-qualified domain name!

通過刪除第一個註釋字符 (#) 來更改它 host.example.com 到郵件服務器的主機名,如下圖所示。

$myhostname="mail.linuxbabe.com"; # must be a fully-qualified domain name!

保存並關閉文件。現在您可以啟動 Amavis。

sudo systemctl start amavisd

啟動時啟用自動啟動。

sudo systemctl enable amavisd

檢查狀態。

systemctl status amavisd

樣本輸出:

 amavisd.service - Amavis mail content checker
   Loaded: loaded (/usr/lib/systemd/system/amavisd.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2020-11-19 01:21:26 EST; 8s ago
     Docs: https://www.ijs.si/software/amavisd/#doc
 Main PID: 18782 (/usr/sbin/amavi)
    Tasks: 3 (limit: 12502)
   Memory: 149.5M
   CGroup: /system.slice/amavisd.service
           ├─18782 /usr/sbin/amavisd (master)                                                                                                                                                              
           ├─18806 /usr/sbin/amavisd (virgin child)                                                                                                                                                        
           └─18807 /usr/sbin/amavisd (virgin child)

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

如您所見,Amavis 正在運行。如果它沒有運行,(sudo journalctl -eu amavisd)。

Amavisd 正在監聽 127.0.0.1:10024,您可以看到:

sudo ss -lnpt | grep amavi

那是 amavis 用戶。

第 2 步:將 Postfix SMTP 服務器與 Amavis 集成

Amavis 充當 SMTP 代理。電子郵件通過 SMTP 發送、處理並通過新的 SMTP 連接反饋給 MTA。

運行以下命令:此命令告訴 Postfix 通過將所有傳入的電子郵件消息發送到在 127.0.0.1:10024 上偵聽的 Amavis 來打開內容過濾。

sudo postconf -e "content_filter = smtp-amavis:[127.0.0.1]:10024"

另外,運行以下命令:這會延遲 Postfix 與內容過濾器的連接,直到收到整個電子郵件,防止內容過濾器在慢速 SMTP 客戶端上浪費時間和資源。

sudo postconf -e "smtpd_proxy_options = speed_adjust"

下一步編輯 master.cf 文檔。

sudo nano /etc/postfix/master.cf

將以下行添加到文件末尾:這告訴 Postfix 使用一個特殊的 SMTP 客戶端組件。 smtp-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 在 127.0.0.1:10025 上運行一個額外的 smtpd 守護進程來接收來自 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 可以掃描傳入的電子郵件。

在 CentOS 8/RHEL 8 上安裝 ClamAV。

sudo dnf install clamav clamav-lib clamav-data clamav-update -y

ClamAV 安裝了兩個 systemd 服務。

  • [email protected]: Clam AntiVirus 用戶空間守護進程
  • clamav-freshclam.service: ClamAV 病毒庫更新器

第一次開始 clamav-freshclam.service.

sudo systemctl start clamav-freshclam.service

啟動時啟用自動啟動。

sudo systemctl enable clamav-freshclam.service

檢查狀態。

systemctl status clamav-freshclam

clamav-freshclam-centos-8

如您所見,它處於活動狀態(正在運行)並在郵件服務器上使用 27.8 RAM。然後檢查日誌/日誌。

sudo journalctl -eu clamav-freshclam

輸出:

ClamAV 病毒庫更新程序 centos 8

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

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

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

這個 clamav-freshclam.service ClamAV 病毒庫更新每小時檢查一次。

現在你可以開始了 [email protected].

sudo systemctl start [email protected]

啟動時啟用自動啟動。

sudo systemctl enable [email protected]

檢查狀態。

systemctl status [email protected]

蛤蜊掃描儀(amavisd)守護進程centos 8

如您所見,它正在工作。順便說一句,我的郵件服務器使用 1.2G 的 RAM。如果郵件服務器沒有足夠的內存,服務就會失敗。

打開 Amavis 配置文件。

sudo nano /etc/amavisd/amavisd.conf

該文件有以下幾行並且啟用了病毒檢查。

# @bypass_virus_checks_maps = (1);  # controls running of anti-virus code

取消註釋此行將禁用病毒檢查。

定義了許多防病毒掃描程序 @av_scanners 部門。 ClamAV 是默認設置。 Amavis 調用 ClamAV。 /run/clamd.amavisd/clamd.sock Unix 套接字。 ClamAV 和 Amvis amavis 用戶。

關閉文件並重新啟動 Amavis。

sudo systemctl restart amavisd

檢查日誌。

sudo journalctl -eu amavisd

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

 mail.linuxbabe.com amavis[1233432]: Using primary internal av scanner code for ClamAV-clamd
 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/maillog) 查看是否有任何錯誤。

第 4 步:使用專用端口發送電子郵件

ClamAV 現在可以掃描傳入和傳出的電子郵件。 Amavis 在端口 10024 上偵聽傳入和傳出的電子郵件消息。但是,我們建議使用不同的端口(例如 10026)從經過身份驗證的用戶傳出電子郵件。

編輯 Amavis 主配置文件。

sudo nano /etc/amavisd/amavisd.conf

找到這一行:

$inet_socket_port = 10024;   # listen on this local TCP port(s)

添加一個 # 字符的開頭被註釋掉。

#$inet_socket_port = 10024;   # listen on this local TCP port(s)

然後找到這一行:

# $inet_socket_port = [10024,10026]; # listen on multiple TCP ports

先刪除 # Amavisd 還在端口 10026 上偵聽,因為該字符未註釋。

$inet_socket_port = [10024,10026]; # listen on multiple TCP ports

向下滾動一點,您會發現以下行為端口 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,
  # forward to a smtpd service providing DKIM signing service
  forward_method => 'smtp:[127.0.0.1]:10027',
  # 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 將電子郵件轉發到提供 DKIM 簽名服務的 SMTPD 服務。 Postfix 和 OpenDKIM 處理 DKIM 簽名,所以應該註釋掉 forward_method 指導。

# forward_method => 'smtp:[127.0.0.1]:10027',

保存並關閉文件。接下來,我們需要告訴 SELinux 允許 Amavis 使用 10026 端口。安裝以下軟件包: semanage 命令。

sudo dnf install policycoreutils-python-utils -y

然後將 10026 的端口類型更改為 amavisd_recv_port_t,所以 Amavis 可以監聽 10026 端口。

sudo semanage port -m -t amavisd_recv_port_t -p tcp 10026

檢查端口 10026。

sudo semanage port -l | grep 10026

事實證明,端口 10026 也可用於 Amavisd。

amavisd_recv_port_t centos 8

重啟amabis

sudo systemctl restart amavisd

檢查狀態以查看重新啟動是否成功。

systemctl status amavisd

接下來,編輯 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

像這樣:

centos8 postfix-submissions-amavis-port-10026

如果啟用 smtps Microsoft Outlook 用戶的服務,您還應該添加此行 smtps 服務。

centos8-postfix-smtps-amavis-port-10026

保存並關閉文件。重新啟動 Postfix 以使更改生效。

sudo systemctl restart postfix

檢查狀態以查看重新啟動是否成功。

systemctl status postfix

在 Amavis 中禁用垃圾郵件過濾

默認情況下啟用 Amavis 垃圾郵件過濾。如果您按照我的 SpamAssassin 教程進行操作,則無需在 Amavis 中啟用垃圾郵件檢查。啟用後,SpamAssassin 將檢查每封電子郵件兩次。

要在 Amavis 中禁用垃圾郵件檢查,請編輯 Amavis 配置文件。

sudo nano /etc/amavisd/amavisd.conf

找到這一行:

# @bypass_spam_checks_maps = (1); # controls running of anti-spam code

要禁用垃圾郵件檢查,請刪除第一個註釋字符 (#)。

@bypass_spam_checks_maps = (1); # controls running of anti-spam code

保存並關閉文件。然後重啟amabis。

sudo systemctl restart amavisd

在 Amavis 中禁用 DKIM

可以在 Linux 上執行 DKIM 簽名和驗證的兩種流行軟件是: 打開 DKIM 什麼時候 阿瑪比斯我更喜歡使用 OpenDKIM,因為它適用於 OpenDMARC。因此,我們不會介紹如何使用 DKIM 與 Amavis 簽署電子郵件。

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

sudo nano /etc/amavisd/amavisd.conf

找到以下兩行並將它們都更改。 1 到達 0Amavis 不會驗證傳入電子郵件的 DKIM 簽名或將 DKIM 簽名添加到傳出的電子郵件。

$enable_dkim_verification = 1;  # enable DKIM signatures verification
$enable_dkim_signing = 1;       # load DKIM signing code, keys defined by dkim_key

保存並關閉文件。然後重啟amabis。

sudo systemctl restart amavisd

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

提高 Amavis 性能

默認情況下,Amavis 運行兩個進程。如果您在郵件日誌中看到以下行 (/var/log/maillog),這意味著 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/amavisd/amavisd.conf

找到這一行:改變 2 到達 4,這會導致 Amavis 運行四個進程。 如果您有 10 個 CPU 內核,則可以將 4 更改為 10。

$max_servers = 2;            # num of pre-forked children (2..30 is common), -m

保存並關閉文件。接下來,編輯 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 amavisd postfix

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

sudo amavisd-nanny

sudo amavisd-nanny

根據 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 提交守護進程。這是用於來自另一台服務器的客戶端連接。這個 content_filter 參數也設置了 none.

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 身份驗證。

包起來

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