在 Ubuntu 14.04 Server 上运行。
因此我已正确配置 fail2ban 来处理/var/log/auth.log
SSH 登录尝试。
经过 3 次尝试失败后,我在 fail2ban 日志中看到了以下内容:
2014-11-19 15:22:56,822 fail2ban.actions: WARNING [ssh] Ban BANNED_IP_ADDY
iptables -L
显示此链:
Chain fail2ban-ssh (1 references)
target prot opt source destination
REJECT all -- BANNED_IP_ADDY anywhere reject-with icmp-port-unreachable
RETURN all -- anywhere anywhere
但从该 IP 我仍然可以通过 SSH 登录,没有任何问题。
同样的情况也适用于我所有的 fail2ban jail。例如 Apache,我可以看到 fail2ban 正确检测日志并声称它禁止了 IP。该 IP 最终进入 iptables 链,但实际上并未被拒绝。
我感觉这些情况是因为 SSH 不在标准端口上。它在另一个端口上。
因此,如果我强制 ssh jail 规则使用新端口:
[ssh]
enabled = true
port = 32323
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
然后我看到这个错误:
2014-11-19 15:30:06,775 fail2ban.actions.action: ERROR iptables -D INPUT -p tcp -m multiport --dports 32323 -j fail2ban-ssh
iptables -F fail2ban-ssh
iptables -X fail2ban-ssh returned 400
2014-11-19 15:30:06,778 fail2ban.actions.action: ERROR iptables -N fail2ban-ssh
iptables -A fail2ban-ssh -j RETURN
iptables -I INPUT -p tcp -m multiport --dports 32323 -j fail2ban-ssh returned 400
2014-11-19 15:30:06,779 fail2ban.actions.action: ERROR iptables -n -L INPUT | grep -q 'fail2ban-ssh[ \t]' returned 100
2014-11-19 15:30:06,780 fail2ban.actions.action: CRITICAL Unable to restore environment
如果我把它保留为
port = ssh
然后它正确进入 iptables 但链条无法正常工作REJECT
(如上所述)。
更新:
如果我改变:
banaction = iptables-multiport
到:
banaction = iptables-allports
那么它似乎起作用了。这个改变会带来什么影响?
看来,fail2ban
由于 SSH 而导致 IP 被禁止,allports
它禁止了该 IP 的每个端口。由于反复 ssh 登录失败而被故意禁止。在其他所有服务上也被禁止。
答案1
fail2ban 链未正确链接到您的 INPUT 和 OUTPUT 链。请编辑您的问题并提供输出:
iptables -n -L INPUT
iptables -n -L OUTPUT
以及所有 fail2ban 链,这样我就能更加精确。
答案2
我刚刚遇到了同样的问题,这是解决方法。使用 banaction = iptables-multiport 被禁止的默认 ssh 端口是 22。我假设你像我一样更改了默认 ssh 端口。
只需在 sshd 配置上指向正确的端口即可。
[sshd]
enabled = true
banaction = iptables-multiport
port = ###
....
答案3
INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh