如何在 Postfix 郵件服務器上設置灰名單服務

許多年前,垃圾郵件已成為郵件服務器的一種明顯享受。 今天沒有服務器可以在沒有針對垃圾郵件進行強化的情況下運行:根據一些報告,高達 75% 的所有電子郵件流量都是垃圾郵件。 即使您運行小型公司郵件系統,網絡容量、硬件和電力消耗也很明顯。 儘管分析反垃圾郵件解決方案的商業內容可能繁重且昂貴,而開源解決方案可能繁重而復雜,但從資源的角度來看,有幾種技術可以大約免費消除大約 80% 的垃圾郵件流量。 灰名單是這些技術之一。

灰名單解決方案背後的想法非常簡單而優雅:發送垃圾郵件的主機不是真正的郵件服務器,它們不受真正的系統管理員控制:它們是在隨機主機上運行的機器人。 由於即使對於殭屍網絡的所有者,他們的生活也是不可預測的,因此他們不遵守普通郵件服務器所做的規則。 如果您嘗試禮貌地要求這樣的主持人將消息推遲 5 分鐘,它要么永遠消失,要么立即再試一次。 這就是灰名單的全部思想:要求在 3 或 5 分鐘內再試一次並分析發件人的行為。 如果它正確地服從,那麼它很可能是一個合法的郵件代理,否則——它絕對是一個垃圾郵件機器人。 如果我們已經看到發件人從特定主機(即三元組)發送此收件人消息——那麼我們不應該再用任何檢查來打擾他們,也不會為他們延遲消息。

在本文中,我將向您展示如何為 Postfix 郵件服務器配置灰名單服務。 我們將使用 CentOS 7.4,但在其他版本的 Linux 上,過程幾乎相同。 在 Centos 上用 Postfix 實現這個技術最方便的方法是使用 後灰.

由於 postgrey 已添加到主存儲庫中,我們可以在運行時安裝它

    # yum install postgrey

然後運行守護進程並在啟動時啟用它:

    #systemctl start postgrey
    #systemctl enable postgrey

它使用標準的 smtpd_recipient_restriction 機制通過 UNIX 套接字處理 postgrey。 只需將套接字路徑添加到 check_policy_service 那裡:

  smtpd_recipient_restrictions =
   permit_mynetworks,
   check_policy_service unix:postgrey/socket,
   permit

這將告訴 smtpd 進程在所有其他檢查之後將消息發送到 postgrey 的套接字(我們不想簡單地檢查過濾的電子郵件),並且只有在 postgrey 接受它之後才接受它。

Postgrey 本身沒有真正的配置文件,您真正需要的唯一選項是您希望消息延遲多長時間。 所以在 /etc/sysconfig/postgrey 中我們可以定義守護進程的啟動選項。 默認情況下,延遲為 300 秒,但對於大多數機器人來說,即使是 60 秒也可能足夠。

    OPTIONS="--unix=/var/spool/postfix/postgrey/socket --delay=60"

如果您看到“訪問被拒絕”,這是 SELinux 問題,可以使用 audit2allow 修復它,它會告訴 SELinux postgrey 守護程序可以寫入 UNIX 套接字:

    # grep smtpd_t /var/log/audit/audit.log | audit2allow -m postgreylocal > postgreylocal.te
    # cat postgreylocal.te
    module postgreylocal 1.0;
    require {
            type postfix_smtpd_t;
            type postfix_spool_t;
            type initrc_t;
            class sock_file write;
            class unix_stream_socket connectto;
    }
    #============= postfix_smtpd_t ==============
    allow postfix_smtpd_t initrc_t:unix_stream_socket connectto;
    allow postfix_smtpd_t postfix_spool_t:sock_file write; 

在這裡我們可以看到 example 發件人、收件人和發件人的主機已經存在的消息的

Sep 21 14:38:04 andreybondarenko postgrey[518]: action=pass, reason=triplet found, client_name=mail2.static.mg.example.com, client_address=192.127.58.166, sender=bounce+d58b.00a37-me=andrey[email protected], [email protected]

這是一個 example 延遲消息:

Sep 22 11:20:31 andreybondarenko postgrey[518]: action=greylist, reason=new, client_name=ppp91-122-100-196.pppoe.avonddsl.com, client_address=91.12.10.196, [email protected], [email protected]

正如我們從 PTR 中看到的,它是一個 xDSL 池,所以它絕對是一個機器人。

postgrey 的缺點是從新服務器發送的第一封郵件會延遲幾分鐘。 如果您正在運行多個 MX’ex,那麼這個問題可能會更糟,因為發送郵件服務器將轉到下一個 MX,如果在那裡啟用了灰名單,那麼它會在該主機上單獨延遲,因此延遲會增加.

總之,我想說灰名單可以免費退回大部分垃圾郵件,因為它背後的想法和軟件是免費的,並且不會像貝葉斯過濾器那樣添加誤報。