1

我已经安装了 fail2ban 以减少对我在 Debian 10 LAMP 上托管的 WordPress 页面的暴力攻击。过滤器搜索 IP 并将此 IP 地址添加到 ipset。事实上,它捕获了一些 IP 地址,它仍然可以正常工作,但我的问题是它只阻止 https (443),而不是 HTTP (80)
过滤器在这里:

[Definition]
failregex = ^<HOST> .* "POST .*wp-login.php
            ^<HOST> .* "POST .*xmlrpc.php

关于 wopress 的 jail.conf 部分:

[wordpress]
enabled = true
port = https,http
logpath = /opt/logs/*/access.log
bantime = 1w
maxretry = 1

wordpress.local 看起来是这样的:

[wordpress]
action   = iptables-ipset-proto6[name=wordpress, port=https,http, protocol=tcp, bantime=604800]
port = https,http
enabled   = true
filter    = wordpress
maxretry  = 1
findtime  = 1d
bantime   = 1w
ignoreip  = 127.0.0.1/8

iptables -L -n -v 给我下一个输出:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   16   868 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 443 match-set f2b-wordpress src reject-with icmp-port-unreachable
  354 21240 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22 match-set f2b-ssh src reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

显示只有443被阻塞,80没有被阻塞。我希望阻止这两个端口以防止从http://example.com重定向到https://example.com
如果我将 更改port = https,httpport = http,https,它只会阻止 80 端口,而不是 443。还尝试以数字方式(443,80)写入端口,但行为没有区别。
是否有可能仅使用一条监狱规则来阻止两个端口(80 和 443),或者我需要两条规则,一条用于 http,一条用于 https?

4

1 回答 1

1

您确实覆盖了操作条目中的端口值(并且做错了):

- action = iptables-ipset-proto6[..., port=https,http, ...]
+ action = iptables-ipset-proto6[..., port="https,http" ...]

所以 http 只是您的情况下的另一个参数名称,而且您现在直接在监狱中指定哪些端口也无关紧要。

此外,已经为您准备了正确的插值变量actionaction_(例如,请参阅jail.conf)。

无论如何,如果您不需要它,请不要覆盖它......在您的情况下,banaction像这里一样设置就足够了:

[wordpress]
banaction = iptables-ipset-proto6

顺便说一句,您的正则表达式非常脆弱,最好是更精确地重写它,至少消除 catch-alls .*

于 2021-01-26T14:24:03.927 回答