我需要阻止特定域“megafonpro.ru”和所有子域通过浏览器访问。
这是我写的规则:
sudo iptables -I OUTPUT -p tcp --dport 80 -m string --string "megafonpro.ru" --algo kmp --to 65535 -j REJECT
它可以工作,但并不完美:当我尝试输入匹配的 URL(例如“wap.megafonpro.ru”)时,firefox 尝试连接很长时间(大约 30 秒),然后报告“连接已重置”。如何让它立即拒绝?
更新:我发现我可以将不需要的域添加到 中/etc/hosts
,如下所示:
127.0.0.1 megafonpro.ru
127.0.0.1 m.megafonpro.ru
127.0.0.1 wap.megafonpro.ru
不幸的是,我们不能使用通配符 sumdomains(相关问题:https://serverfault.com/questions/118378/in-my-etc-hosts-file-on-linux-osx-how-do-i-do-a-wildcard-subdomain)。现在,浏览器立即拒绝。
但无论如何,我很感兴趣如何用 iptables 来实现它。
答案1
当您将这些行放入 /etc/hosts 中时,您实际上是在告诉这些名称的 IP 地址是 127.0.0.1(请注意,如果 Web 服务器在 localhost 上运行,则会显示)。
要对 iptables 执行相同的操作,您需要使用目标 NAT(我认为它必须在 PREROUTING 部分完成)。与将其放在 /etc/hosts 中相比,它的优点是它也适用于路由数据包(而不仅仅是源自同一主机的数据包)