iptablesloginurl查询string

我login并丢弃数据包发送到特定的IP /域名。 我想能够logging这些丢弃的数据包的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日志(以文本文件?!)来获取丢弃的数据包的URL查询string? 在这个例子中,这将是:

 param1=test1&param2=test2 

我对这一切的了解都接近于零,所以如果这是一个愚蠢的问题,请原谅。

谢谢

如果仅仅是因为请求URL可能在多个数据包中被分段,你将无法单独使用iptables来正确实现。

既然你正在过滤OUTPUT,可能更强大和更简单的方法是安装本地HTTP代理,如Squid ,并将你的过滤规则添加到鱿鱼。

为了完整起见,你可以使用iptables来阻止一切,但是鱿鱼代理连接到这个被禁止的主机。


根据下面的configuration示例 ,你应该在你的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本身可以代理请求到原来的主机,如果你想让一些通过。

您可以通过查阅由squid生成的默认access.log文件来观察这些请求的URL。 为了实际阻止URL,你应该在squid.conf设置一些ACL:

 acl blocktestphp url_regex test.php http_access deny blocktestphp