如何模拟源 IP 来测试哪些 iptables 规则正在触发/未触发?

如何模拟源 IP 来测试哪些 iptables 规则正在触发/未触发?

我们有一个相当复杂的 iptables/ipchains 配置,它由有源滤波器到端口 80 的流量应该被阻止,但我们的 Apache 日志显示有人能够探测网页:

[Sun Feb 03 13:08:45 2013] [error] [client 50.57.125.169] File does not exist:     /var/www/w00tw00t.at.blackhats.romanian.anti-sec:)
[Sun Feb 03 13:08:45 2013] [error] [client 50.57.125.169] File does not exist: /var/www/phpMyAdmin
[Sun Feb 03 13:08:45 2013] [error] [client 50.57.125.169] File does not exist: /var/www/phpmyadmin

有没有办法在 iptables 中模拟源 IP 来调试为什么数据包50.57.125.169没有被阻止?该-C | --check选项似乎只报告是否存在明确匹配 IP 的规则,但我想要做的是(伪代码

myserver% iptables --test --source_ip=50.57.125.169 --dest_port=80
Rule #17 matches (ALLOW)    // i.e. this would be the rule that matches

有没有办法做到这一点?

[编辑] 一个部分解决方案是TRACE在 iptables 上启用调试(参见https://serverfault.com/a/126078/67472) 并使用hping3(感谢 Trent) 可以伪造源 IP。但是,当从不同的服务器运行测试时,结果不会显示出来,而当从同一台服务器运行时,它会通过 Loopback 接口。

答案1

您是否可以使用 hping 模拟流量的源 IP 地址,然后检查流量是否仍在通过?可能不是您想要的,但您可以执行以下操作

hping3 --syn --destport 80 --count 3 -a test.ip.address webserver.ip.address

答案2

您可以用scapy它来欺骗您的 IP 地址。

答案3

我知道我没有直接回答您的问题,但是使用 APF 已经有一段时间了,我可以建议您如何阻止 IP,以防您使用不同的方法。

例如:要阻止主机 1.2.3.4 的端口 80,请添加以下行 /etc/apf/deny_hosts.rules

    tcp:in:d=80:s=1.2.3.4

除此之外,与其经历欺骗源 IP 的麻烦,为什么不尝试阻止您自己控制的某些客户端计算机的 IP 地址并尝试从该计算机进行连接呢?

相关内容