
我正在運行一個基於 postfix 的郵件伺服器。類似這樣的連線失敗的情況還有很多:
Transcript of session follows.
Out: 220 hostname.tld ESMTP Postfix
In: .
Out: 502 5.5.2 Error: command not recognized
In:
Out: 500 5.5.2 Error: bad syntax
Session aborted, reason: lost connection
這些連線來自不同的 IP,但在大多數情況下,每個 IP 都會有數十到數百次嘗試。
是什麼導致了這些聯繫?如果這是病毒、蠕蟲或殭屍網路“敲門”,為什麼每個主機要多次敲門?還是發送一個點進行某種功能測試,而我的伺服器以錯誤的方式做出反應?再次強調,多次嘗試是沒有意義的。而且它距離任何 DoS 規模都還很遠。
也許你們中的一些人知道那裡發生了什麼事?
答案1
點用於終止 SMTP 協定中的電子郵件訊息:一個空白行(CR、LF),後面接著一個點,然後是一個帶有 CR 和 LF 的換行符。但這裡的情況顯然並非如此。
要找出這些 SMTP 用戶端是否只是殭屍網路或合法寄件者,您可以查看它們 IP 的 PTR,它們都會被記錄。如果 PTR 是來自提供者的通用 PTR,則類似於192-0-2-1.broadband.customers.example.com
.然後你真的可以忽略它並使用fail2ban來阻止它們。
HELO 應該與 PTR 相匹配,至少這是最佳實踐。但如果它們不相似,那麼它也可能是殭屍網路。
在另一種情況下,有人可能會在您的伺服器上進行掃描並探測 TLS 協定和密碼。
若要在此類請求後禁止用戶端,您可以使用fail2ban,它會在出現過多錯誤請求後暫時封鎖 IP。
filter.d/postfix-syntax.conf
[INCLUDES]
before = common.conf
[Definition]
failregex = reject: RCPT from (.*)\[<HOST>\]: 502 5.5.2
reject: RCPT from (.*)\[<HOST>\]: 500 5.5.2
ignoreregex =
並將其添加到您的jail.conf
:
[postfix-syntax]
enabled = true
port = smtp,ssmtp,submission
filter = postfix-syntax
logpath = /var/log/mail.log
maxretry = 10
答案2
如果您已將郵件伺服器暴露在 Internet 上,則預期大多數連線都來自垃圾郵件機器人和其他非法寄件者。
我會考慮只匹配fail2ban中任何錯誤的拒絕。合法寄件者應該很少產生和出錯,並且如果確實被禁止,則會稍後重試。我對可疑的垃圾郵件發送者做了一些令人討厭的事情,而合法發件人已經有很多年沒有遇到過遞送延遲之外的問題了。
我使用一些測試來檢查寄件者的合法性:
- 該 IP 未在 中列出
zen.spamhaus.org
。 (包括廣泛的動態 IP 選擇。) - IP有一個
PTR
通過rDNS的DNS。合法郵件很少沒有記錄PTR
,而且rDNS
IP 位址幾乎總是會通過。 - HELO/EHLO 指令中的名稱是傳遞 rDNS 的完全限定網域名稱 (FQDN)。除了一家大公司之外,這種情況幾乎總是會過去。通常該名稱與 IP 位址使用的名稱相同。
- PTR 記錄和 HELO 指令中的名稱直接或針對其父域以 SPF HELO 驗證。沒有 SPF 記錄的領域也可以通過,但沒有可信度。這會阻止使用大型組織的網域來識別自己的垃圾郵件機器人。
我想使用 DKIM 進行驗證,但很大一部分寄件者沒有在 DNS 中正確發布其公鑰。
如果您無法執行這些測試,則在連線仍處於開啟狀態時,請勿退回郵件,除非您可以驗證寄件者未被欺騙。 (我確實感謝聯邦調查局、聯合國、銀行等提供的所有資金,但他們仍然沒有兌現。)