我们有一个相当复杂的 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 地址并尝试从该计算机进行连接呢?