![iptables 如何处理主机名?](https://linux22.com/image/122025/iptables%20%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E4%B8%BB%E6%9C%BA%E5%90%8D%EF%BC%9F.png)
我有一个 Python 脚本,用于将规则写入 iptables,以防止 IP 块访问我的服务器上的端口 22。
编写这些规则后,其中一个块的主机名是“localhost/22”。 iptables 会将其视为 127.0.0.1 还是仍然会承认实际的 IP 地址?我不想因此而被锁定在我的服务器之外。
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- *****/14 anywhere
DROP all -- localhost/22 anywhere
DROP all -- ****/20 anywhere
另外,还有一个简单的问题:为什么 iptables 不显示每个规则的端口?我指定 22 作为 dport。
答案1
iptables
是一个配置netfilter的工具,netfilter不处理主机名。
当您修改规则时,iptables
将主机名解析为 ip,并且当您列出规则时,iptables
执行 ip 的反向查找(除非您使用该-n
选项)。
如果 localhost 解析为 127.0.0.1 之后的任何其他内容,或者是其他任何内容的反向查找的结果,则您的设置非常奇怪,并且可能会感到惊讶。
答案2
为什么没有规则来确定允许来自环回接口的流量?
iptables -I INPUT 1 -i lo -m comment --comment "ALLOW loopback interface" -j ACCEPT
你可以看到“localhost”的IP
iptables -L -v -n