Pam

sendmail SMTP 身份驗證日誌是如何控制的?

  • August 13, 2020

我收到大量失敗的 SMTP 登錄嘗試。我真的很想防禦它,但是這些嘗試的記錄很差。

我正在使用 sendmail 8.15、cyrus-sasl 2.1.26。SASL 設置是最簡單的方法,預設使用 pam_unix 進行身份驗證。

我經常收到這樣的日誌消息:

saslauthd[8292]: pam_unix(smtp:auth): check pass; user unknown
saslauthd[8292]: pam_unix(smtp:auth): authentication failure; logname= uid=0 euid=0 tty= ruser= rhost=
saslauthd[8292]: DEBUG: auth_pam: pam_authenticate failed: Authentication failure
saslauthd[8292]: do_auth         : auth failure: [user=colby] [service=smtp] [realm=] [mech=pam] [reason=PAM auth error]

這意味著,雖然我知道正在發生虛假登錄嘗試,但我真的無能為力,比如讓 fail2ban 監禁他們。

我真的無法判斷問題是否是 Sendmail 正在告訴 pam_unix 事情,並且它正在轉儲它們,或者 sendmail 是否沒有告訴 pam 正在嘗試的位置。

我想要的是使用它來自的 IP 地址記錄身份驗證嘗試,所以如果有很多失敗,fail2ban 可以監禁 IP。

這裡的會話在郵件傳輸代理和以下之間分開saslauthd

testhost saslauthd[17177]: do_auth         : auth failure:
 [user=AzureDiamond] [service=smtp] [realm=] [mech=pam]
 [reason=PAM auth error]

您想要的完整日誌可能預設不可用,或者需要在某些日誌聚合服務下重建。(使用 Postfix 時,日誌記錄也很糟糕saslauthd;一些日誌最終出現在郵件日誌中,而其他日誌則出現在其他地方。) Sendmail 確實支持自定義系統日誌規則;但是,如果客戶端僅發出EHLO nurse, AUTH LOGIN, QXp1cmVEaWFtb25k,SHVudGVyMg==然後失敗(使用 aquit或簡單地斷開連接),則可能不會給任何通常的規則集鉤子執行機會。

當設置LogLevel為 11(或更高)時,會出現包含中繼地址的登錄失敗:

testhost sendmail[20684]: wA6KuRRJ020684: AUTH failure
 (LOGIN): authentication failure (-13) SASL(-13):
 authentication failure: checkpass failed,
 relay=localhost [127.0.0.1]

這來自sendmail/srvrsmtp.c並發生在LogLevel > 9. 或者您可以修補該文件以避免增加LogLevel,但這可能會引入不同的問題。

其他限制 SMTP AUTH 的方法如下。

pam 限製到特定組

調整 PAM 配置並禁止SMTP AUTH,除非使用者屬於特定組;這將防止大多數密碼猜測攻擊,但如果您的使用者只有一小部分可預測的子集需要使用,這是可行的SMTP AUTH

account     required      pam_access.so accessfile=/etc/security/smtp_access.conf

然後在/etc/security/smtp_access.conf

+ : ok-sasl : ALL
- : ALL : ALL

然後將使用者放入ok-sasl組中。

隱藏 SMTP AUTH 服務

另一種選擇是在 SMTP 前面放置一個 VPN 或其他東西,以便 Internet 根本無法使用該服務;這應該可以減少如今面向公眾的服務所收到的日誌噪音。

pam_tally

我也嘗試過pam_tally2,但這非常適合鎖定帳戶,包括已登錄且沒有任何明顯錯誤的合法帳戶……也許它對您更有效?

引用自:https://unix.stackexchange.com/questions/480000