/var/log/auth.log
我在(Debian Buster)中看到很多类似的日志:
Jan 2 17:10:17 mybox sshd[16304]: Received disconnect from 1.2.3.4 port 37792:11: Bye Bye [preauth]
Jan 2 17:10:17 mybox sshd[16304]: Disconnected from authenticating user root 1.2.3.4 port 37792 [preauth]
Jan 2 17:10:20 mybox sshd[16306]: Received disconnect from 5.6.7.8 port 63061:11: Bye Bye [preauth]
Jan 2 17:10:20 mybox sshd[16306]: Disconnected from authenticating user root 5.6.7.8 port 63061 [preauth]
Jan 2 17:12:38 mybox sshd[16380]: Received disconnect from 9.10.11.12 port 55224:11: Normal Shutdown, Thank you for playing [preauth]
Jan 2 17:12:38 mybox sshd[16380]: Disconnected from authenticating user root 9.10.11.12 port 55224 [preauth]
我知道这些都是试图闯入,因为没有人应该试图登录该机器(除了我)。
中没有相应的规则/etc/fail2ban/filter.d/sshd.conf
,因此这些尝试不会导致 fail2ban 禁止有问题的 IP 地址。
我已经禁用密码登录,因此我猜测这里发生的情况是这些尝试在尝试进行身份验证之前就被丢弃了,因此 fail2ban 不会接收它们。
然而,因为我知道这些都是入侵尝试,我仍然想禁止该 IP,以阻止他们尝试其他事情并填满我的日志。
对于我来说,添加与其中某些行匹配的正则表达式是否安全,或者我是否会冒险匹配合法(基于密钥)的登录尝试?哪些部分可以构成安全的组合?匹配单词“Disconnected”和标签“[preauth]”是否必然表示基于密码的暴力破解失败?
答案1
/etc/fail2ban/filter.d/sshd.conf 中没有相应的规则,因此这些尝试不会导致 fail2ban 禁止有问题的 IP 地址。
你使用的是哪个版本?Fail2Ban 附带了有关此问题的预定义规则,包含在所有模式使用的通用 failregex 中。
我的一个系统中的 Fail2Ban v0.10.2 包含此规则:
^<F-NOFAIL>Received <F-MLFFORGET>disconnect</F-MLFFORGET></F-NOFAIL> from <HOST>: 11:
Fail2Ban v0.11.2 包含这个(更好):
^<F-NOFAIL>Received <F-MLFFORGET>disconnect</F-MLFFORGET></F-NOFAIL> from <HOST>%(__on_port_opt)s:\s*11:
显然,开发人员认为以下任何一行
Received disconnect from <HOST>: 11:
Received disconnect from <HOST> port XXXXX:11:
就足够了。相关关键字是Received disconnect from
和: 11:
部分(而不是后缀[preauth]
)。
这<F-NOFAIL>
意味着此行并非失败,并且会期待另一次匹配而不会<F-NOFAIL>
禁止 IP,因此您必须删除周围的标签。
答案2
对于我来说,添加与其中某些行匹配的正则表达式是否安全,或者我是否会冒险匹配合法(基于密钥)的登录尝试?哪些部分可以构成安全的组合?匹配单词“Disconnected”和标签“[preauth]”是否必然表示基于密码的暴力破解失败?
合法的成功连接和身份验证不会触发此类日志行。这些条目可能来自扫描仪,它们不会造成危害,但也可以被阻止。预认证意味着这些客户端尚未开始身份验证。
即使您自己导致登录失败(使用错误的密钥或输入错误的密码),使用 fail2ban 仍然是可以的。fail2ban 仅在可配置数量的匹配日志行之后并且仅在特定时间范围内进行阻止。
您可以在 Debian buster 中使用这个代码片段(例如 cmdfailre):
^Received disconnect from <HOST>%(__on_port_opt)s:11: \s* %(__suff)s$
^Disconnected from authenticating user <F-USER>.*?</F-USER> <HOST>%(__on_port_opt)s %(__suff)s$
答案3
我通过在 jail.local 文件中的 [sshd] 下设置 mode = assault 来启用此功能