iptables 允许所有传出 - 仍然无法解析 DNS 或发出 http 请求

iptables 允许所有传出 - 仍然无法解析 DNS 或发出 http 请求

我已经这样设置了 iptables:

Table: mangle
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination

Table: filter
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    VZ_INPUT   all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP)
num  target     prot opt source               destination
1    VZ_FORWARD  all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    VZ_OUTPUT  all  --  0.0.0.0/0            0.0.0.0/0

Chain VZ_FORWARD (1 references)
num  target     prot opt source               destination

Chain VZ_INPUT (1 references)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  12.123.12.myip       0.0.0.0/0           tcp dpt:22
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:53
7    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53
8    ACCEPT     tcp  --  127.0.0.1            127.0.0.1
9    ACCEPT     udp  --  127.0.0.1            127.0.0.1
13   ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255


Chain VZ_OUTPUT (1 references)
num  target     prot opt source               destination
1    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
4    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:53
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:53

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

我可以通过 IP ping 主机,但是无法通过名称 ping 主机,也无法wget http://ipaddress/通过命令行 ping 主机。

root ~ # ping google.com

root ~ # ping 89.33.254.54
PING 89.33.254.54 (89.33.254.54) 56(84) bytes of data.
64 bytes from 89.33.254.54: icmp_seq=1 ttl=54 time=82.2 ms

--- 89.33.254.54 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 82.263/82.263/82.263/0.000 ms
root ~ # wget http://89.33.254.50
--2011-12-09 17:21:03--  http://89.33.254.50/
Connecting to 89.33.254.50:80...

为什么如果允许所有输出流量,我却无法连接到远程主机?我想我必须打开更多 INPUT 端口,但这些端口是什么呢?

答案1

我建议您向 INPUT 链添加允许 ESTABLISHED 和 RELATED 数据包的规则:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

如果稍后您进一步锁定 OUTPUT 链,那么您也将需要相应的 OUTPUT 规则:

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

这些规则是安全的,您会发现它们通常是几乎所有防火墙脚本中添加的第一批规则之一。ESTABLISHED 表示“一旦我允许建立连接,就让此连接的所有数据包通过”,它不允许创建其他不允许的连接。“RELATED”允许有用的数据包,例如“由于我发送了启动连接的请求,因此允许返回 ICMP 数据包,告诉我此主机不可访问”或“由于我允许 ftp 连接,因此也允许 ftp 数据连接”。同样,它不应允许创建其他规则尚未允许的其他连接。

现在您允许发出 DNS 查询,但不允许回复。您目前允许 dpt:53,这将允许某人查询您的 DNS 服务器,但对 DNS 响应没有帮助(您期望源端口为 53,但目标端口不是)

另一件需要注意的事情是,由于您的默认 OUTPUT 策略是 ACCEPT,所以您的所有其他规则都没有用(因为它们也都是 ACCEPT)。因此,您实际上是在说“如果数据包是以下类型的数据包之一,则接受它们,否则也接受它们”,在这种情况下,您可以跳过所有规则,只说“接受所有传出数据包”。不过,这听起来只是暂时的,直到您的 DNS 流量运行得更好。

相关内容