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/

 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... 

为什么,如果所有输出stream量都被允许,我无法连接到远程主机? 我想我必须打开一些更多的input端口,但那些是什么?

我build议你将规则添加到允许ESTABLISHED和RELATED数据包的INPUT链中:

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

如果以后你locking你的OUTPUT链,你也会想要相应的OUTPUT规则:

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

这些规则是安全的,您会发现它们通常是几乎所有防火墙脚本中添加的第一个规则。 ESTABLISHED的意思是“一旦我允许连接build立,让所有的连接通过这个连接”,它不允许build立不允许的连接。 “相关”允许有用的数据包,如“因为我发送请求开始连接,允许ICMP数据包回来,告诉我这个主机不可达”或“因为我允许一个FTP连接,也允许FTP数据连接”。 同样,它不应允许创build其他规则尚未允许的其他连接。

现在你正在允许DNS查询出去,但不是回复。 您目前允许dpt:53这将允许某人查询您的DNS服务器,但不帮助DNS响应(您希望有一个源端口53,但不是一个dest端口)

另外值得注意的是,由于你的OUTPUT默认策略是ACCEPT,所有其他的规则都没有用(因为它们都是ACCEPT)。 所以你基本上是说“如果数据包是以下types的数据包之一,然后接受它们,否则也接受它们”,你可以跳过所有的规则,只是说“接受所有传出的数据包”但是,这是暂时的,直到你获得DNSstream量更好的工作。