Ssh

使用來自 fail2ban 正則表達式的 <F-USER> 值

  • January 13, 2022

我正在嘗試向我和使用者發送電子郵件,有人試圖登錄他們的 ssh 並失敗 - IP 被禁止。但我不明白如何在我嘗試發送的電子郵件中使用該變數。

Sendmail 設置正確,因為電子郵件發送沒有問題。

這是我的 jail.local 配置

[sshd]
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
action  = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
            %(mta)s-whois-lines-ssh[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]

這是我的 action.d/sendmail-whois-lines-ssh.conf

[INCLUDES]

before = sendmail-common.conf
        helpers-common.conf

[Definition]

norestored = 1
actionban = ( printf %%b "Subject: [Fail2Ban] &lt;name&gt;: banned &lt;ip&gt; from &lt;fq-hostname&gt;
           Date: `LC_ALL=C date +"%%a, %%d %%h %%Y %%T %%z"`
           From: &lt;sendername&gt; &lt;&lt;sender&gt;&gt;
           To: &lt;dest&gt;, &lt;F-USER&gt;@mydomain.cz\n
           Hi,\n
           The IP &lt;ip&gt; has just been banned by Fail2Ban after
           &lt;failures&gt; attempts against &lt;name&gt;.\n\n
           Here is more information about &lt;ip&gt; :\n
           `/usr/bin/whois &lt;ip&gt; || echo missing whois program`\n\n
           Lines containing failures of &lt;ip&gt;\n";
           %(_grep_logs)s;
           printf %%b "\n
           Regards,\n
           Fail2Ban" ) | /usr/sbin/sendmail -f &lt;sender&gt;.mydomain.cz &lt;dest&gt; &lt;F-USER&gt;@mydomain.cz

[Init]
name = default
logpath = /dev/null

發送給我的電子郵件很好,因為從配置中正確獲取,但 <F-USER> 沒有價值,因此它被發送到@mydomain.cz

我怎樣才能獲得價值,以便能夠將電子郵件發送給使用者?

編輯 在 SSH 上受到打擊的正則表達式是這個:

^pam_unix\(sshd:auth\):\s+authentication failure;\s*logname=\S*\s*uid=\d*\s*euid=\d*\s*tty=\S*\s*ruser=&lt;F-USER&gt;\S*&lt;/F-USER&gt;\s*rhost=&lt;HOST&gt;\s.*%(__suff)s$

我正在嘗試向我和使用者發送電子郵件,有人嘗試登錄他們的 ssh 並失敗

我對這種方法幾乎沒有疑問,例如可能由此引入的某些“漏洞” - RE&lt;F-USER&gt;\S*&lt;/F-USER&gt;將匹配任何內容,直到第一個空格,因此例如,如果匹配的“使用者名”將是someone@example.com,test您的郵件也將被發送到someone@example.com,這可能是不是您域的使用者。我還可以想像另一種情況,因為您試圖在郵件操作中使用外部輸入(來自日誌) - 所以最好確保這不受某些注入可能性的影響(例如,還要注意GHSA-m985-3f3v-cwmm)。

在 SSH 上受到打擊的正則表達式是這個……

failregex 還必須包含&lt;F-USER&gt;...&lt;/F-USER&gt;以擷取將儲存為使用者名的值,並且它必須匹配某些內容。

是它在目前版本中的外觀範例(請注意,它不是由於&lt;F-NOFAIL&gt;標籤而導致的失敗 RE,它只是為沒有 IP 的消息查找 IP 的助手,有關詳細資訊,請參閱問題/3189#issuecomment-999571654)。

因此,如果部分匹配空值,則&lt;F-ALT_USER&gt;有一個替代使用者名並將其儲存到F-USER票證中擷取的組中。&lt;F-USER&gt;...&lt;/F-USER&gt;

也許(就像上面的問題/3189)你也有錯誤的後端,所以切換到systemd可以幫助你使用另一個 sshd-regex 匹配它。

與您的正則表達式相關,它可以像這裡一樣更改(從目前的 sshd-filter 向後移植):

- ^pam_unix\(sshd:auth\):\s+authentication failure;\s*logname=\S*\s*uid=\d*\s*euid=\d*\s*tty=\S*\s*ruser=&lt;F-USER&gt;\S*&lt;/F-USER&gt;\s*rhost=&lt;HOST&gt;\s.*%(__suff)s$
+ ^pam_unix\(sshd:auth\):\s+authentication failure;(?:\s+(?:(?:logname|e?uid|tty)=\S*)){0,4}\s+ruser=&lt;F-ALT_USER&gt;\S*&lt;/F-ALT_USER&gt;\s+rhost=&lt;HOST&gt;(?:\s+user=&lt;F-USER&gt;\S*&lt;/F-USER&gt;)?%(__suff)s$

但這更像是pam-generic過濾器/監獄的 RE,正如在issues/3189中已經說過的,因此將其用於 sshd 監獄並不完全正確(通常您會在日誌或 auth.log 中看到不同的消息)。

無論如何,要深入調查,需要消息範例(或者更好的日誌摘錄,其中包含導致禁令的所有 sshd-session 消息)。

引用自:https://serverfault.com/questions/1089175