linux - 如何丢弃与源 URL 匹配的数据包

标签 linux firewall iptables

我想阻止所有在源 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/

相关文章:

linux - 如何通过查看文件名的一部分来移动文件

security - Web 服务器的防火墙是否应该阻止通过端口 80 的出站 HTTP 流量?

windows - 使用 Delphi 删除 Windows 防火墙规则(异常)

linux - 如何使用 DPDK 运行 Netfilter(iptables、nftables)

apache - 端口 80 已打开,但 Iptables 阻止了 Apache 连接

linux - linux x86_64 上的简单堆栈溢出利用

linux - 运行第一个 shellscript 时出现问题

linux - bash 替换附件的 ${} 占位符

python - Django、防火墙、Selenium、[Errno 10061] 和implicitly_wait()

linux - libnetfilter_queue recv() 函数