![Fail2Ban 在 CentOS 7 上启动失败](https://linux22.com/image/113896/Fail2Ban%20%E5%9C%A8%20CentOS%207%20%E4%B8%8A%E5%90%AF%E5%8A%A8%E5%A4%B1%E8%B4%A5.png)
我正在运行 CentOS 7,全部已完全更新,并且正在尝试让 Fail2Ban 正常工作,但我遇到了问题。
具体来说,我正在尝试阻止暴力 SSH 攻击。我很确定我已经将一切设置正确 - 在 中启用了 sshd 监狱jail.local
,用作firewallcmd-ipset
禁止操作,绝对使用 Firewalld,而不是使用 SELinux。
但是当我启动 Fail2Ban 时,其中的内容如下/var/log/fail2ban.log
:
2017-06-21 06:11:44,186 fail2ban.server [3357]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.6
2017-06-21 06:11:44,186 fail2ban.database [3357]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
2017-06-21 06:11:44,188 fail2ban.jail [3357]: INFO Creating new jail 'sshd'
2017-06-21 06:11:44,206 fail2ban.jail [3357]: INFO Jail 'sshd' uses systemd {}
2017-06-21 06:11:44,230 fail2ban.jail [3357]: INFO Initiated 'systemd' backend
2017-06-21 06:11:44,232 fail2ban.filter [3357]: INFO Set maxRetry = 3
2017-06-21 06:11:44,232 fail2ban.filter [3357]: INFO Set jail log file encoding to UTF-8
2017-06-21 06:11:44,233 fail2ban.actions [3357]: INFO Set banTime = 86400
2017-06-21 06:11:44,233 fail2ban.filter [3357]: INFO Set findtime = 3600
2017-06-21 06:11:44,234 fail2ban.filter [3357]: INFO Set maxlines = 10
2017-06-21 06:11:44,320 fail2ban.filtersystemd [3357]: INFO Added journal match for: '_SYSTEMD_UNIT=sshd.service + _COMM=sshd'
2017-06-21 06:11:44,335 fail2ban.jail [3357]: INFO Jail 'sshd' started
2017-06-21 06:11:44,864 fail2ban.action [3357]: ERROR ipset create fail2ban-sshd hash:ip timeout 86400
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p all -m multiport --dports 44 -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable -- stdout: ''
2017-06-21 06:11:44,865 fail2ban.action [3357]: ERROR ipset create fail2ban-sshd hash:ip timeout 86400
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p all -m multiport --dports 44 -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable -- stderr: '\x1b[91mError: COMMAND_FAILED\x1b[00m\n'
2017-06-21 06:11:44,865 fail2ban.action [3357]: ERROR ipset create fail2ban-sshd hash:ip timeout 86400
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p all -m multiport --dports 44 -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable -- returned 13
2017-06-21 06:11:44,865 fail2ban.actions [3357]: ERROR Failed to start jail 'sshd' action 'firewallcmd-ipset': Error starting action
正如您将注意到的,在firewall-cmd
尝试之前一切都会顺利进行。它尝试运行的命令是:
ipset create fail2ban-sshd hash:ip timeout 86400
其次是
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p all -m multiport --dports 44 -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable
如果我尝试自己运行这些命令,该ipset
命令可以正常工作,但该firewall-cmd
命令会返回Error: COMMAND_FAILED
.所以,我猜测这是 Fail2Ban 尝试发送到的命令的问题firewall-cmd
- 但我对 Firewalld 的了解不够,无法修复它。
(哦,SSH 位于端口 44 上,因为我发现它可以大大减少偷渡式攻击,所以我们不要讨论它的利弊!
此外,systemctl status fail2ban
显示一切运行顺利,没有报告任何问题。我只有在登录时才注意到这一点,并看到有很多登录尝试失败,这种情况很少见,因为端口发生了变化。
最后uname -r
返回,3.10.0-229.14.1.el7.centos.plus.x86_64
所以我相当确定这不是 OpenVZ 问题,我在其他地方已经将其视为导致此问题的原因。)
答案1
来自 faqforge.com:https://www.faqforge.com/linux/how-to-use-iptables-on-centos-7/
Centos 7 使用 Firewalld 服务取代了传统的 IPTables Linux 内核防火墙。仍然有很多可用的脚本需要使用 IPTables。一个常见的例子是软件 Fail2ban。
因此,请尝试停止firewalld( systemctl stop firewalld
)并安装iptables( yum install iptables-services
)和systemctl start iptables
.
然后,像这样设置禁令jail.local
:
banaction = iptables-multiport
banaction_allports = iptables-allports
然后重新启动。