RHEL 6.6 权威 DNS 服务器。目前,在 IPtables 中,我的 INPUT 链默认为 ACCEPT。
:INPUT ACCEPT [0:0]
最近我遇到了一些受到攻击的问题,我只是想知道如果我将默认策略更改为 DROP,从 DNS 服务的角度来看会发生什么影响?
:INPUT DROP [0:0]
我也在考虑对输出链进行同样的操作,但我又担心,因为这是一个公共 DNS 服务器,如果我更改它,是否会对服务器与其他 DNS 服务器的通信方式产生负面影响,例如执行区域传输、缓存之类的操作?
为了让您了解我现在所拥有的内容,这里是 /etc/sysconfig/iptables 的内容。
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1015316:198598633]
-A INPUT -m state --state INVALID -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s X.X.X.X/24 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -s X.X.X.X/18 -p icmp -m icmp --icmp-type 8 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT
-A INPUT -s X.X.X.X/32 -j DROP
-A INPUT -s X.X.X.X/32 -j DROP
-A INPUT -j DROP
-A OUTPUT -d X.X.X.X/20 -j DROP
COMMIT
答案1
由于您没有透露所遭受攻击的性质,因此我的建议也将更加通用。
- 您正在使用
--state
,它将加载 conntrack 模块。这不是常识,但对于在正常运行过程中可能会看到大量查询的服务,这应始终被视为最后的选择。一旦会话表填满,您的服务器将开始丢弃数据包,并且此类警告将开始出现在 dmesg 中。即使我们假设除非您在攻击中被利用(因此您不会利用 sysctl 来提高限制),否则这种情况不会发生在权威 DNS 服务器上,这也是一个糟糕的策略,因为您正在丢弃好的数据包和坏数据包一起被丢弃。使用 BIND 较新的客户端速率限制功能进行调查会更好,因为您正在丢弃正确的那时的交通状况。 - RE:OUTPUT 表中的默认 DROP 策略,期望看到有关无法解析名称的日志消息。
NS
您提供的记录会触发对这些记录的内部查找(称为附加部分处理),除非您 100% 确定没有委派,否则您将看到这些日志消息。即使您没有委派,也可以合理地预期它们将来会出现。因此,尽管您的服务器不是递归的,但仍建议将端口 53 添加到 OUTPUT 表中。
最后,也许是最重要的一点,你实际上不太可能得到任何益处在这里放置基于数据包的防火墙。
- 大多数基于 DNS 的攻击都利用普通手术DNS 服务器。防火墙无法阻止这种情况。最小化 DNS 攻击面的关键在于您的名称服务器和网络配置。
- 防火墙不会让数据包消失。它只是在接收程序看到它们之前丢弃它们。如果您的线路被入站流量淹没,洪水仍在发生,您仍处于瘫痪状态。如果您的线路被来自服务器的出站流量淹没,这是攻击的一部分,您需要直接解决问题,而您的问答实际上并没有解释攻击的性质。
考虑到上述因素,在这种情况下启用 iptables 可能不会带来太多好处,因为其他策略无法更好地解决这个问题。因此,采用这种方法主要会增加您在攻击事件期间丢弃合法流量的可能性,而这种情况本来是可以避免的。