我正在使用 DD-WRT,并且可以 telnet 到它来添加 iptable 规则。
我正在寻找一条规则,允许从端口 80 上的特定地址(例如 mydomain.com)输入,该地址将指向内部 IP(例如 192.168.0.200)。注意:我已向 mydomain.com 添加一条 A 记录以指向我的 IP 地址。
我试过了:
iptables -I INPUT -p tcp --src mydomain.com --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --port 80 -m string --hex-string "|08|mydomain|03|com" -algo bm -j ACCEPT
我知道我可以登录 DD-WRT Web 界面并使用端口转发来执行此操作。如果我这样做,它会起作用,但我不想允许端口 80 上的所有请求,而只允许带有 mydomain.com 的请求。这可能吗?
答案1
你不能那样做。 TCP 请求由 SYN 数据包启动,其中包含没有数据。您可以获得端口号和 IP 地址,但不能获得主机名。
您也许可以编写一些复杂的规则来接受连接,并查找第一个包含与Host
标头匹配的数据的数据包,这不能保证位于第一个数据包中,但通常是这样。然后,如果第一个数据包不是对您的域的请求,您将终止连接。当然,如果第二连接上的请求。并且实际上试图绕过您的防火墙的人可以使用各种伎俩。例如,将您的域填充到数据包中的其他位置。
如果你确实需要进行这样的过滤,那么你需要一个 HTTP 代理。
PS:我不确定你想与该十六进制字符串匹配什么。标Host
头采用纯 ASCII,而不是 DNS 的长度字符串格式。所以就这样吧--hex-string "mydomain.com"
。