为什么使用 -m string "example.com" 时 iptables 能够匹配字符串?

为什么使用 -m string "example.com" 时 iptables 能够匹配字符串?

据我所知,最好不要使用该命令:

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

相关内容