【发布时间】:2014-08-11 16:21:28
【问题描述】:
我想阻止所有在源 URL 中包含某些字符串的传入 tcp 数据包。例如,我想阻止源 url 包含“facebook.com”的所有包。
使用下面的命令,我可以阻止任何包含字符串“facebook.com”的包(输入、输出、转发)。问题是如果字符串“facebook.com”在数据包的 html 正文中,这也会被阻止。
# iptables -A INPUT -i eth0 -m string --algo bm --string "facebook.com" -j DROP
# iptables -A OUTPUT -m string --algo bm --string "facebook.com" -j DROP
# iptables -A FORWARD -i eth0 -m string --algo bm --string "facebook.com" -j DROP
有没有一种简单的方法可以只匹配数据包的源 URL 中的字符串?
【问题讨论】:
-
不确定是否可以深入研究这一层,匹配
--string "Host: facebook.com"(来自 HTTP 请求标头)是否有帮助? -
它适用于某些网站(如 www.ku.edu),但不适用于 facebook :'(
-
好的,那么我还有一条评论。 IPtables 不是您尝试做的事情的正确工具。调查这部分流量不是防火墙的工作。您需要的是具有内容过滤功能的代理服务器。喜欢 Squid+Dansguardian
-
除非我严重误解了您的措辞(“在源 URL 中包含某些字符串的 tcp 数据包”),否则您似乎不了解 TCP 或防火墙。 TCP(或就此而言的 IP)不包含 URL,它们是位于顶部的另一个协议(例如 HTTP)的一部分。从 TCP 的角度来看,URL 是有效负载的一部分(它是一个不透明的 blob)。
-
并非所有 TCP 数据包都有与其相关的 URL 或 URI。您正在寻找 TCP 级别以上的过滤...