我正在尝试将 iptables 配置为dns 服务器的DROP
默认策略INPUT
,但出现了问题。OUTPUT
这是我的 iptables 脚本
iptables -P INPUT DROP
iptables -I INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT
iptables -P OUTPUT DROP
iptables -I OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --sport 53 -j ACCEPT
有一些数据包丢失,因为依赖此服务 dns 的计算机仅在清理 iptables 时才能导航。我哪里错了?
如果您的策略是“仅允许对服务器的入站 DNS 查询和来自服务器的 DNS 回答用于 IPv4”,那么您的规则集看起来不错。但这可能不是你想要的。例如,该策略意味着您的 DNS 服务器有一个神奇的本地数据库,它可以用来回答所有 DNS 查询。
一些有根据的猜测可能会导致问题:
当您的 DNS 服务器尝试回答您的客户的一个查询时,它是否需要执行递归 DNS 查询?如果是这样,您应该允许这样做(来自您的 DNS 服务器的传出 DNS 查询)。
您的某些客户端是否使用 IPv6 来查询 DNS。我假设您的服务器没有为 IPv6 设置防火墙?
由于服务器递归地使用 IPv6 进行查询,您的某些客户端的 IPv4 查询是否正常工作?
你有比
eth0
和更多的接口lo
吗?是否有一些 ICMP 错误消息因为您的 iptables 阻止而导致您的服务器未发送/接收?如果出于某种原因某些客户端可能需要 IPv4 分段或存在 MTU 问题,您的客户端无法解决此问题,因为您的服务器没有通过 ICMP 告诉他们。
另外:您可能希望允许您的服务器获取系统更新。此外,您希望您的服务器能够响应某些 ICMP 请求,并且您肯定需要您的服务器能够处理 IPv6 的 ICMP。
编辑:试试这个(你可能想微调 icmp 处理):