修改 fail2ban failregex 以通过 ssh 匹配失败的公钥认证

apo*_*poc 14 ssh regex fail2ban

fail2ban无法识别失败的公钥 ssh 登录,我认为这可以通过修改failregexof/etc/fail2ban/filter.d/sshd.config以匹配以下行来解决:

<date> <time> <server-hostname> sshd[25917]: Connection closed by <client-ip> [preauth]
Run Code Online (Sandbox Code Playgroud)

但是我找不到关于如何正确修改所述失败正则表达式的体面介绍。因为我真的不知道像^%(__prefix_line)sinclude 这样的变量很难得到一个有效的正则表达式。

我知道最新版本 0.9.1 包含正则表达式以匹配“由 [preauth] 关闭的连接”行,但我使用的是 Debian 存储库中的 fai2ban,并且 0.9.1 的配置与我的配置不兼容有。

seb*_*bix 11

这一行做到了:

^%(__prefix_line)sConnection closed by <HOST> \[preauth\]$
Run Code Online (Sandbox Code Playgroud)

使用以下日志字符串进行测试:

Apr 29 12:30:12 sendai sshd[25917]: Connection closed by 127.0.0.1 [preauth]
Run Code Online (Sandbox Code Playgroud)

成功测试:

$ fail2ban-regex ~/ssh.log sshd.conf 

Running tests
=============

Use regex file : sshd.conf
Use log file   : /home/user/ssh.log


Results
=======

Failregex
|- Regular expressions:
[...]
|  [12] ^\s*(?:\S+ )?(?:kernel: \[\d+\.\d+\] )?(?:@vserver_\S+ )?(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:)?\s*Connection closed by <HOST> \[preauth\]$
|
`- Number of matches:
[...]
   [12] 1 match(es)

Summary
=======

Addresses found:
[...]
[12]
    127.0.0.1 (Wed Apr 29 12:30:12 2015)
[..]

Success, the total number of match is 1
Run Code Online (Sandbox Code Playgroud)


Spa*_*awk 11

不需要regex hacking(至少从fail2ban 0.10.4开始)。在/etc/fail2ban/jail.conf是以下信息:

[sshd]

# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
Run Code Online (Sandbox Code Playgroud)

因此,通过/etc/fail2ban/jail.local使用其他自定义以及更严格的模式之一进行创建来遵循建议,例如,

[sshd]
mode   = aggressive
Run Code Online (Sandbox Code Playgroud)

此模式现在涵盖失败的公钥。

  • 我必须使用“filter = sshd[mode=aggressive]”才能正常工作,但在其他方面是很好的答案! (3认同)
  • @sebres我的系统实际上_does_显示了“连接已关闭...”消息“使用有效的用户名但错误的公钥连接失败”,这是[最后一行](https://github.com/fail2ban/fail2ban/ blob/f77398c49d4eeb529a1684a27dcfbf5b6aaafa66/fail2ban/tests/files/logs/sshd#L172) 您链接到。 (2认同)

小智 6

至少在 openssh 7.3 中,日志消息还包含端口号。所以我不得不将sebix的解决方案修改为以下内容:

^%(__prefix_line)sConnection closed by <HOST> port \d+ \[preauth\]$
Run Code Online (Sandbox Code Playgroud)