在我多次 *成功* 登录后,fail2ban 禁止了我

在我多次 *成功* 登录后,fail2ban 禁止了我

我使用authorized_keys文件为我的其中一台服务器创建了无密码的ssh登录。

服务器上有 fail2ban,我注意到在几次成功登录后,我无法再登录(连接超时)。如果我禁用 fail2ban,我可以再次登录。有没有办法配置 fail2ban 不将我的成功登录次数计入我的账户?

谢谢!

答案1

我遇到过类似的情况。即使成功登录,sshd 日志文件 (/var/log/messages) 中也会显示“失败”消息。这是由这个正则表达式引起的(请参阅 Chris S 的回答):

^%(__prefix_line)sFailed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$

与 /var/log/messages 文件中的以下行匹配:

Apr 18 14:07:02 hostname sshd[20972]: Failed none for root from 123.45.67.89 port 
50472 ssh2

当用户成功登录时,消息文件中仍会出现“无失败”消息。

为了解决这个问题,我更改了 sshd_config 文件(/etc/ssh/sshd_config)以指定

LogLevel INFO

而不是

LogLevel VERBOSE

这将在登录成功时停止显示“无失败”消息,但在登录失败时保留该消息。

我还考虑过更新 sshd.conf fail2ban 配置文件并在“ignoreregex”行中添加一些内容,但更新 sshd 是一个更简洁的解决方案。

答案2

您可以使用 ignoreip 配置选项来告诉 fail2ban 忽略您的 IP。

http://www.fail2ban.org/wiki/index.php/Commands

在 /etc/fail2ban/jail.conf 中添加类似

ignoreip = 127.0.0.1 192.168.0.0/24

答案3

我的 sshd.local 文件有此行来修复类似的问题。比较一下你的,应该类似:

failregex = ^%(__prefix_line)s(?:error: PAM: )?[A|a]uthentication (?:failure|error) for .* from <HOST>\s*$
            ^%(__prefix_line)sDid not receive identification string from <HOST>$
            ^%(__prefix_line)sFailed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
            ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
            ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
            ^%(__prefix_line)sUser \S+ from <HOST> not allowed because not listed in AllowUsers$
            ^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
            ^%(__prefix_line)srefused connect from \S+ \(<HOST>\)$

答案4

这并不能解决您的问题,但希望能让您了解发生这种情况的原因。

ssh 客户端正在使用您描述的 ssh 密钥。我假设您的客户端在列出的 ssh 代理 (ssh-add -l) 中拥有多个 ssh 密钥。在这样的设置中,ssh 客户端正在连接到服务器并尝试使用“其中一个密钥”进行身份验证。

因此,所发生的情况是,ssh 客户端会接连尝试一个密钥,直到服务器接受一个密钥。

假设有 3 个 ssh 密钥,最坏的情况是 2 次尝试失败后成功登录。使用 fail2ban 的“findtime”多次连接...然后你就被禁止了。

我目前也在寻找解决方案。找到后我会分享。;)

相关内容