我不太了解 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
包括规则匹配的次数(和字节数)。上面方括号中的数字是每个表策略的计数。
运行该命令,尝试ping
或yum update
,再次运行该命令,查看哪个规则计数已增加一。现在您知道哪个规则阻止了您想要执行的操作。
我猜它会是你的两条带目标的规则之一DROP
,但实际上它并没有告诉你太多信息。接下来你需要知道的是它是什么类型的数据包,以及你需要为此记录。将其放在规则之前DROP
:
-A INPUT -j LOG
符合此规则的数据包的元数据将被记录/var/log/messages
。
一旦您知道哪种类型的数据包yum update
或ping
原因会攻击您的防火墙并被丢弃,添加一条规则来允许该数据包应该是一件简单的事情。
由于没有出站过滤,因此 DNS 查询可以离开您的系统,但 DNS 查询通常是 UDP,而 UDP 是无状态的,因此任何RELATED,ESTABLISHED
规则都不允许响应返回。您将需要专门针对 UDP 的规则,其源端口或目标端口为 53。TCP 上的 DNS 请求可以用规则覆盖RELATED,ESTABLISHED
。
允许所有出站流量并不是最多安全配置,但这是一种常见的配置,因为限制它最终会需要大量工作来添加例外。如果您的机器确实如您所说的那样用途单一,那么您应该能够非常有效地限制出站流量,例如仅允许端口 80 上的 TCP 请求发送到一组 rpm 镜像,仅允许 DNS 请求发送到您配置的 DNS 解析器,而不允许任何其他类型的出站流量。
类似地,您的 INPUT 链可以列出它将接受 SSH 连接的 IP 地址或范围并拒绝所有其他地址。