iptables的规则,只有白名单dns和其他一切

我试图configurationiptablesDROP作为INPUTOUTPUT在dns服务器上的默认策略,但出了问题。

这是我的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 

有一些数据包丢失,因为依赖这个服务的计算机只能在清理iptables时导航。 我哪里错了?

如果您的策略是“只允许服务器的入站DNS查询并且DNS服务器为IPv4答复”,则您的规则集看起来很好。 但这可能不是你想要的。 例如,该政策意味着你的DNS服务器有一个神奇的本地数据库,它可以用来回答所有的DNS查询。

一些教育猜测什么可能会导致问题:

  • 您的DNS服务器在尝试回答客户的某个查询时是否需要执行recursionDNS查询? 如果是这样,你应该允许这个(从你的DNS服务器传出的DNS查询)。

  • 有些客户使用IPv6来查询DNS。 我假设你的服务器不是IPv6的防火墙?

  • 你的一些客户的IPv4查询是否工作,因为服务器recursion地用IPv6进行查询?

  • 你有更多的接口比eth0lo

  • 有没有一些ICMP错误消息,你的服务器不发送/接收,因为你的iptables阻止它? 如果由于某些原因某些客户端可能需要IPv4碎片或者存在MTU问题,则客户端无法解决此问题,因为您的服务器不会通过ICMP告知它们。

另外:您可能希望允许您的服务器获取系统更新。 另外,您希望服务器能够响应某些ICMP请求,并且您肯定需要您的服务器能够处理IPv6的ICMP。

编辑:试试这个(你可能想要微调icmp处理):

 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -m state --state ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i eth0 -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT -A OUTPUT -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p icmp -j ACCEPT -A OUTPUT -o eth0 -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT COMMIT