Iptables 内容阻止防火墙

Iptables 内容阻止防火墙

我已经使用 iptables 设置了防火墙,以根据内容限制连接速率。以下是我的一条阻止 wordpress 暴力攻击的规则的示例。

iptables -A INPUT  -p tcp -m tcp --dport 80 -m string --algo bm --string "POST /wp-login.php" -m recent --set --name wp_brute --rsource
iptables -A INPUT  -p tcp -m tcp --dport 80 -m string --algo bm --string "POST /wp-login.php" -m recent --name wp_brute --rcheck --seconds 60 --hitcount 4 -j LOG --log-level=6 --log-prefix="Wordpress Attack:"
iptables -A INPUT  -p tcp -m tcp --dport 80 -m string --algo bm --string "POST /wp-login.php" -m recent --name wp_brute --rcheck --seconds 60 --hitcount 4 -j REJECT --reject-with tcp-reset

我正在尝试获取另一条规则,这条规则有点棘手,因为我想根据传入连接的响应数据包进行阻止。例如,如果有人尝试使用 pop3 登录,并且响应是身份验证失败,那么我想阻止原始 IP。但是,上述规则显然不起作用,因为 sport 是原始 dport。

我尝试过这个但我认为它应该是输出表而不是输入表。

iptables -A INPUT  -p tcp -m tcp --dport 110 -m string --algo bm --string "Password supplied for " -m recent --set --name pop3_brute --rsource
iptables -A INPUT  -p tcp -m tcp --dport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j LOG --log-level=6 --log-prefix="POP3 Attack:"
iptables -A INPUT  -p tcp -m tcp --dport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j REJECT --reject-with tcp-reset

所以我尝试了这个

iptables -A OUTPUT  -p tcp -m tcp --sport 110 -m string --algo bm --string "Password supplied for " -m recent --set --name pop3_brute --rsource
iptables -A OUTPUT  -p tcp -m tcp --sport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j LOG --log-level=6 --log-prefix="POP3 Attack:"
iptables -A OUTPUT  -p tcp -m tcp --sport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j REJECT --reject-with tcp-reset

我对 iptables 还不太熟悉,因此在弄清楚如何根据我在计数器上返回的响应包来阻止远程 IP 时遇到了一些麻烦。

答案1

通常,你会在应用程序级别记录故障,然后使用一个实用程序,例如失败2ban解析日志并生成/管理防火墙规则。

答案2

已经有一段时间了;但是,wp 在登录页面上使用 SSL,不是吗?相反,您是否设置了 SSL?我之所以这么说,是因为 iptables 在堆栈中的位置。

如果您进入登录页面并发现它正在使用 SSL,则以下规则将无法匹配您能够设置的任何字符串。SSL 将由 apache 处理,而不是 netfilter 部分。因此,iptables 只会看到乱码。

最好将大量内容放入 vhost 或 htaccess 文件中,以便在 POST 时使用排除地址来匹配。我建议直接在 vhost 条目中(假设您正在使用 vhost),因为它仅在 vhost 加载时读取它。共享主机中常见的 htaccess 选项将在每次调用 htaccess 块上的匹配时进行检查。在对共享主机帐户进行暴力破解期间,您可能会生成一些负载。

再次,我已经有一段时间没有使用 WP 了。

至于 pop3 匹配,您是否在观看 tcpdump 时尝试过自己进行暴力破解?类似这样的:

tcpdump -xxV port 110

执行上述操作将准确给出 iptables 能够匹配的内容。我会检查一下https://danielmiessler.com/study/tcpdump/以获得一些指点。

相关内容