Answers:
从0.10.0版本开始,fail2ban-client
该unban
命令可以以两种方式使用:
unban --all unbans all IP addresses (in all
jails and database)
unban <IP> ... <IP> unbans <IP> (in all jails and
database)
此外,restart <JAIL>
,reload <JAIL>
并reload
命令现在也有--unban
选择。
fail2ban用于iptables
阻止流量。如果要查看当前被阻止的IP地址,请键入
iptables -L -n
并查找名为的各种链fail2ban-something
,其中something
指向fail2ban监狱(例如,Chain f2b-sshd
指的是监狱sshd
)。如果您只想删除<IP>
给定监狱的单个IP地址的阻止<JAIL>
,则fail2ban提供其自己的客户端:
fail2ban-client set <JAIL> unbanip <IP>
或者,您可以使用行号。首先,列出iptables
带有行号的规则:
iptables -L -n --line-numbers
接下来可以使用
iptables -D fail2ban-somejail <linenumber>
从表格中删除一行。据我所知,没有选择行号范围的选项,所以我想您将必须将此命令包装在for循环中:
for lin in {200..1}; do
iptables -D fail2ban-somejail $lin
done
在这里,我把数字增加了200。使用检查您自己的命令输出,--line-numbers
并注意最后一行(带有RETURN
)应该保留。有关递减计数的原因,请参见下面的@roaima评论。
echo {5..1}
将导致5 4 3 2 1
。
取消禁止所有IP的最佳方法是将禁止时间设置为1秒,然后将立即释放所有IP。
fail2ban-client set JailName bantime 1
之后,您可以设置适当的禁止时间。
最好让fail2ban为您进行取消禁止。不要自己手动编辑iptables。
fail2ban-client status
在最新的fail2ban-client
(0.10)有一个unban -all
命令。还可以单独“重新启动”监狱,从而有效地清除禁令。
如果您使用的是较旧的版本,此技巧可能适用于自动临时禁令:删除包含该禁令的监狱,然后重新启动fail2ban,以便重新创建(现在为空)监狱。
$ fail2ban-client stop sshd
Jail stopped
$ systemctl restart fail2ban
将iptable配置保存到文件
$ iptables-save > iptables.conf
使用任何喜欢的编辑器进行编辑,而不是将配置加载回iptables
$ iptables-restore < iptables.conf
不要忘记将配置存储在iptables中,这样它将在重新启动时被提取
$ service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
这是一个简单的oneliner,用于以适当方式取消对整个fail2ban监狱的禁令:
iptables -L f2b-recidive -n | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | grep -v 0.0.0.0 | xargs -n 1 fail2ban-client set recidive unbanip
注意:iptables命令在监狱名称之前使用“ f2b-”前缀,而“ fail2ban-client”是实际监狱名称
这是我用来取消ssh监狱的所有IP地址的脚本(只需将sshd占用替换为所需的监狱名称即可,例如mysqld-auth)
#!/bin/bash
j=$(iptables -L f2b-sshd | grep -c 'REJECT')
for ((i=1;i<=j;i++))
do
fail2ban-client set sshd unbanip $(fail2ban-client status sshd | grep 'Banned IP list:' | cut -c23-)
done