我有一台服务器运行着许多 WordPress 网站,这些网站在多次登录失败后都会拒绝来自 IP 的登录。步骤如下:
- 来自某个 IP 的 3 次登录失败 = WP 拒绝来自该 IP 的登录 10 分钟(1 级锁定)
- 第二次 1 级锁定后,将转至 2 级,届时 IP 将被拒绝 1 小时
此外,WP 安全插件会写入服务器上的一个文件(级别 3?)。这意味着我们可以跨该服务器上托管的站点汇集数据。现在使用 Fail2Ban,我们会在 1 个月内查找 3 次 3 级锁定,然后在服务器级别禁止 3 个月。
然而,WP 插件仍然显示这些相同 IP 地址重复被锁定。这意味着犯罪者仍在访问此服务器上托管的网站。
如果我查看服务器日志,我可以看到锁定信息被写入正确的文件。我还可以看到 Fail2Ban 和相关 jail/操作正在检测重复的 IP/违规者并禁止他们。
现在,如果我运行以下命令:
iptables -L
我得到类似这样的输出(为简洁起见进行了编辑):
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-WordPress tcp -- anywhere anywhere multiport dports http,https
f2b-Http-Get-Dos tcp -- anywhere anywhere multiport dports http,https
.....
并进一步如下:
Chain f2b-WordPress (1 references)
target prot opt source destination
REJECT all -- dedic980.hidehost.net anywhere reject-with icmp-port-unreachable
REJECT all -- dedic693.hidehost.net anywhere reject-with icmp-port-unreachable
RETURN all -- anywhere anywhere
因此,我可以看到我的监狱被触发了,并且与所用 IP 相关的主机名被拒绝了,但用户仍然可以通过重复使用的相同 IP 访问服务器。因此,很明显他们仍然可以访问服务器上的网站,并试图强行进入网站管理员。
这需要尽快停止。
因此,我假设 iptables 阻止的是主机名而不是 IP。由于此主机名似乎来自旨在隐藏真实主机名的服务,因此我认为这是问题的原因,即:iptables 阻止了错误的主机名。但也许我错了……如果是这样的话,我欢迎更好的解决方案。
在此基础上,我对 /etc/fail2ban/jail.conf 进行了如下编辑(我知道我应该创建一个本地版本):
# "usedns" specifies if jails should trust hostnames in logs,
# warn when DNS lookups are performed, or ignore all hostnames in logs
#
# yes: if a hostname is encountered, a DNS lookup will be performed.
# warn: if a hostname is encountered, a DNS lookup will be performed,
# but it will be logged as a warning.
# no: if a hostname is encountered, will not be used for banning,
# but it will be logged as info.
# usedns = warn
usedns = no
然后,我保存了所有内容并重新启动了 fail2ban 服务。日志文件表明一切运行正常,并且 wordpress jail 完成了其工作并禁止了此特定用户使用的 2 个 IP。
然而,从另一个角度看iptables -L
,主机名已被阻止,而不是 IP .....
那么,我现在该做什么?
更新
我刚刚通过 Webmin > Linux 防火墙(我认为它使用了防火墙)将两个 IP 手动添加到 iptables,然后运行,iptables -L
显示的是主机名而不是我输入的 IP。那么,这是 iptables 将 IP 转换为主机名而不是 fail2ban 吗?如果是这样,为什么我手动添加规则的其他 20 个 IP 都显示为其 IP 而不是主机名?
答案1
规则将阻止新连接,而不是现有连接。只要保持连接处于活动状态,它们就能够进行查询。
要断开现有连接,请在已建立连接的接受规则上方添加拒绝规则的副本。一旦连接断开,就删除该规则。
您应该能够在命令“netstat -ant | grep EST”的输出中看到连接。
如果他们继续尝试,您可能需要手动添加规则。Fail2ban 只会在 bantime 设置指定的时间段内禁止连接。手动添加的规则应该有效。