我正在使用 iptables 来阻止所有端口。但是为了允许 ping www.google.com 我使用以下代码
filter -A INPUT -p tcp --dport 53 -j ACCEPT
filter -A OUTPUT -p tcp --sport 53 -j ACCEPT
filter -A INPUT -p udp --dport 53 -j ACCEPT
filter -A OUTPUT -p udp --sport 53 -j ACCEPT
这工作正常,但保存它会给我错误,因为在启动中使用过滤器不是正确的方法。但是,当我使用没有字过滤器的代码时,对 www.google.com 的 ping 操作不起作用。 PS我直接保存到/etc/sysconfig下的iptables文件中
编辑:好吧,过滤器似乎破坏了整个代码,并且 iptables 正在删除整个规则。问题是,尽管打开了 DNS 端口,我仍无法 ping www.google.com。
答案1
该ping
实用程序使用ICMP(互联网消息控制协议), 不是UDP(用户数据报协议)或者TCP(传输控制协议)。要允许传出ping
请求通过防火墙,您可以添加如下规则:
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ALLOW
您可能还想添加如下规则以允许返回流量:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
答案2
iptables 规则的顺序很重要:第一的与-j ACCEPT
,-j DROP
或的匹配规则-j REJECT
将决定数据包的命运。在“丢弃所有内容”规则之后添加新规则将不会产生任何效果,因为匹配的数据包永远不会到达该规则。
答案3
好的,正确的规则是这些。从论坛得到的问题已解决。
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
-A OUTPUT -p udp --sport 53 -j ACCEPT
-A OUTPUT -p udp --dport 53 -j ACCEPT