我记录并丢弃发送到特定 IP/域名的数据包。我希望能够记录这些丢弃的数据包的 URL 参数。
这是一个示例 URL:
http://somedomain.com/test.php?param1=test1¶m2=test2
这就是我正在做的事情,例如:
iptables -A OUTPUT -p tcp -d somedomain.com --dport 80 -m string --string 'param1=' --algo bm -j LOGGING
在 LOGGING 链中:
iptables -A LOGGING -j LOG --log-prefix "somedomain.com Packet Dropped: " --log-level 7
我尝试了这些选项,但没有成功:
--log-ip-options
--log-tcp-options
基本上,我希望能够获得相同的相关信息,tcpdump
但是因为我丢弃了数据包,你知道这个故事,我不能在这里使用 tcpdump(据我所知)......
是否可以使用 iptables log(到文本文件?!)获取丢弃数据包的 URL 查询字符串?在此示例中,它将是:
param1=test1¶m2=test2
我对这一切的了解几乎为零,所以如果这是一个愚蠢的问题,请原谅我。
谢谢
答案1
如果请求 URL 可能分散在多个数据包中,那么仅使用 iptables 是无法正确实现这一点的。
由于您正在对 OUTPUT 进行过滤,因此更强大且更简单的方法是安装本地 HTTP 代理,例如乌贼,并将你的过滤规则添加到 squid 中。
为了完整起见,您可以使用 iptables 来阻止除 squid 代理之外的所有内容连接到此禁止主机。
根据以下配置示例,你应该在你的squid.conf
http_port 3129 intercept
然后拦截请求
iptables -t nat -A OUTPUT -p tcp -d somedomain.com --dport 80 -m owner --uid-owner squid -j ACCEPT
iptables -t nat -A OUTPUT -p tcp -d somedomain.com --dport 80 -j DNAT --to-destination 127.0.0.1:3129
第一条规则是必需的,以便如果您想让某些请求通过,squid 本身可以将请求代理到原始主机。
access.log
您可以通过查阅squid 生成的默认文件来观察请求的 URL 。要真正阻止 URL,您应该在以下位置设置一些 ACL squid.conf
:
acl blocktestphp url_regex test.php
http_access deny blocktestphp