iptables 记录 url 查询字符串

iptables 记录 url 查询字符串

我记录并丢弃发送到特定 IP/域名的数据包。我希望能够记录这些丢弃的数据包的 URL 参数。

这是一个示例 URL:

http://somedomain.com/test.php?param1=test1&param2=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&param2=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

相关内容