我想阻止所有在源 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 中的字符串?
最佳答案
There is a easy way to match the string only in the source URL of the packet?
it works for some sites (like www.ku.edu), but it don't works from facebook :'(
请注意,Facebook 使用 SSL,因此您不会在数据包中进行任何字符串匹配(它们将被加密)。它可能适用于 ku.edu,因为它是 HTTP 流量而不是 HTTPS。要使用 IP 表执行您想要的操作,您需要根据 IP 地址或主机名进行过滤。您可以尝试类似 -j DROP -d facebook.com
的操作。
同意 DanFromGermany 的观点,即 iptables 不是完成这项工作的正确工具。基于 IP 地址或主机名的阻止最初可能有效,但它可能会失败并且难以维护。我相信当 iptables 加载规则集时,DNS 名称被解析为 IP 地址。这意味着如果 Facebook 更改其外部 IP(可能是由于故障转移或负载问题)或拥有多个 IP,它将无法工作。
关于linux - 如何丢弃与源 URL 匹配的数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25247898/