据我所知,最好不要使用该命令:
iptables -A INPUT -s example.com -j DROP
因为example.com
会实时的被替换成一个ip地址,所以不会覆盖所有可能的ip地址。
但如果我使用:
iptables -A INPUT -m string --string "example" --algo kmp -j DROP
摘自回答我自己测试过了,那么我不再需要担心 IP 替换,因为“example”将匹配“example.com”并且它会阻止它。
因此,如果iptables
只对 IP 地址有效,为什么在第二种情况下它会对名称有效?
答案1
如果使用-m string --string example
,它将匹配所有有效载荷包含字符串的 IP 数据包example
。
如果您通过 HTTP 访问某个页面,且该页面包含单词example
,则该页面仅显示部分,因为您的规则删除了包含单词 的数据包example
。
该规则还可以破坏许多其他使用纯文本的协议。如果加密的有效负载与匹配,它还可以破坏加密连接example
。
您应该使用过滤代理来阻止您的流量,它是准确的并且不会引起不良的副作用。
如果您不想实现过滤代理,那么穷人的版本是阻止目标域的 DNS 查询:
编辑.com
由于 DNS 数据包不包含点而是长度指示符,因此被删除。
iptables -I OUTPUT -p udp --dport 53 -m string --string example -j DROP
这将删除目标域的 DNS 查询,从而有效地阻止对这些域的访问。客户端将超时等待 DNS 回复,因此阻止非常具有侵略性。
答案2
example.com
您无法在 URL 中搜索,因为现在大多数网站都仅通过 HTTPS 运行。
是的,在您的示例中,iptables
将在第一次调用时解析example.com
,并且如果其 IP 地址发生变化,该规则将不再起作用,但您可以通过运行例如解析 example.com 的 cron 脚本来解决它,如果有新的 IP 地址,则它会通过-I
或添加到您的 iptables 规则中-A
。
答案3
因为它是字符串的模式。是的,你达到了目的。但是!如果你尝试在 google.com 上搜索包括“example”在内的任何内容,你也无法搜索到。请谨慎使用此设置。
答案4
因为example.com
必须存在于标题对服务器的大多数请求示例.com:
如果你发送了一封电子邮件,你会把它放入邮件头中。
to: [email protected]
如果你做了一些HTTP请求反对示例.com一旦 DNS 解析完成,最小请求必须包含目标主机:
host example.com example.com has address 123.45.78.89
DNS 请求在 DNS 服务器上完成,不一定在 example.com 上完成。(如果没有缓存!)
nc 123.45.67.89 80 <<eoRequest GET /index.html HTTP/1.0 Host: example.com eoRequest
当然,你的iptable
规则只会丢弃头数据包,但后面的数据包不会被服务器理解,因此会被服务器自己丢弃。服务器日志和客户端窗口可能会提示类似400 Bad Request