iptables - 如何提高安全性并允许 DNS?

iptables - 如何提高安全性并允许 DNS?

我不太了解 iptables,我正在运行一个仅用于运行 vpn 的服务器。这是我的 iptables-save:

# Generated by iptables-save v1.4.7 on Sat Jun  1 00:14:41 2013
*security 
:INPUT ACCEPT [5009091:774424925] 
:FORWARD ACCEPT [12157619:10323709607] 
:OUTPUT ACCEPT [7902591:10593610117] 
COMMIT
# Completed on Sat Jun  1 00:14:41 2013
# Generated by iptables-save v1.4.7 on Sat Jun  1 00:14:41 2013
*raw 
:PREROUTING ACCEPT [17169079:11098272834] 
:OUTPUT ACCEPT [7902591:10593610117] 
COMMIT
# Completed on Sat Jun  1 00:14:41 2013
# Generated by iptables-save v1.4.7 on Sat Jun  1 00:14:41 2013
*nat 
:PREROUTING ACCEPT [2:104] 
:INPUT ACCEPT [0:0] :OUTPUT ACCEPT [4:268] 
:POSTROUTING ACCEPT [4:268]
-A PREROUTING -p udp -m udp --dport 1800:2000 -j REDIRECT --to-ports 1888 
-A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source 192.73.240.212  COMMIT
# Completed on Sat Jun  1 00:14:41 2013
# Generated by iptables-save v1.4.7 on Sat Jun  1 00:14:41 2013
*mangle 
:PREROUTING ACCEPT [17169079:11098272834] 
:INPUT ACCEPT [5011455:774563027] :FORWARD ACCEPT [12157624:10323709807] 
:OUTPUT ACCEPT [7902591:10593610117] 
:POSTROUTING ACCEPT [20060210:20917319724] 
COMMIT
# Completed on Sat Jun  1 00:14:41 2013
# Generated by iptables-save v1.4.7 on Sat Jun  1 00:14:41 2013
*filter 
:INPUT ACCEPT [0:0] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [410:134179]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -i tun0 -p icmp -m icmp --icmp-type 8 -j ACCEPT 
-A INPUT -p udp -m udp --dport 1888 -j ACCEPT 
-A INPUT -j DROP 
-A FORWARD -s 10.8.0.0/24 -i tun0 -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -d 10.8.0.0/24 -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -j DROP  
COMMIT
# Completed on Sat Jun  1 00:14:41 2013

这不允许我从服务器 ping 或使用 yum update。有什么建议吗?还想知道是否存在任何明显的安全漏洞。

答案1

的输出iptables -L -nv包括规则匹配的次数(和字节数)。上面方括号中的数字是每个表策略的计数。

运行该命令,尝试pingyum update,再次运行该命令,查看哪个规则计数已增加一。现在您知道哪个规则阻止了您想要执行的操作。

我猜它会是你的两条带目标的规则之一DROP,但实际上它并没有告诉你太多信息。接下来你需要知道的是它是什么类型的数据包,以及你需要为此记录。将其放在规则之前DROP

-A INPUT -j LOG

符合此规则的数据包的元数据将被记录/var/log/messages

一旦您知道哪种类型的数据包yum updateping原因会攻击您的防火墙并被丢弃,添加一条规则来允许该数据包应该是一件简单的事情。


由于没有出站过滤,因此 DNS 查询可以离开您的系统,但 DNS 查询通常是 UDP,而 UDP 是无状态的,因此任何RELATED,ESTABLISHED规则都不允许响应返回。您将需要专门针对 UDP 的规则,其源端口或目标端口为 53。TCP 上的 DNS 请求可以用规则覆盖RELATED,ESTABLISHED


允许所有出站流量并不是最多安全配置,但这是一种常见的配置,因为限制它最终会需要大量工作来添加例外。如果您的机器确实如您所说的那样用途单一,那么您应该能够非常有效地限制出站流量,例如仅允许端口 80 上的 TCP 请求发送到一组 rpm 镜像,仅允许 DNS 请求发送到您配置的 DNS 解析器,而不允许任何其他类型的出站流量。

类似地,您的 INPUT 链可以列出它将接受 SSH 连接的 IP 地址或范围并拒绝所有其他地址。

相关内容