如何使用iptable过滤包含字符串的网址?

时间:2016-02-12 01:44:32

标签: iptables

阻止对xxx.com的所有请求:

sudo iptables -A OUTPUT -p tcp -m string --string" xxx.com" --algo kmp -j DROP

什么会阻止对包含xxx的任何网址的请求?

google.com?q=xxx& ...

不阻止google.com。

2 个答案:

答案 0 :(得分:2)

您可能希望使用kpcre,iptables PCRE扩展名。

例如,要过滤您指出的示例:

iptables -I INPUT -p tcp -m string --string "/\/.+xxx.+/i" --algo pcre -j DROP

字符串“//.+xxx.+/i”表示不区分大小写的字符串,以“/”开头并包含“xxx”。

答案 1 :(得分:0)

您建议的方法可能会阻止DNS请求,但是如果有人直接使用可以绕过的IP地址。

如上所述,您可以使用http代理。

或者,我使用dnsmasq和ipset在没有代理的情况下实现了您提到的类型的限制。我在此列出了如何执行此操作的高级步骤:

  1. 创建一个名为myprohibitedsites的空ipset
  2. 运行你自己的dnsmasq实例(你不需要dnscq的dhcp部分,只需要dns缓存)
  3. 将您的所有计算机配置为使用您的dnsmasq(或通过iptables将udp端口53重定向到您的dnsmasq)
  4. 配置你的dnsmasq以登录ipset myprohibitedsites所有dns xxx.com类型的请求(请参阅dnsmasq用户指南)
  5. 配置iptables过滤器以丢弃所有具有目标的数据包 myprohibitedsites中包含的IP