我用下面的iptables规则configuration了我的linux路由器
iptables --list-rules -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A FORWARD -i vmbr0 -o eth2 -j ACCEPT -A FORWARD -i vmbr0 -o eth1 -j ACCEPT -A FORWARD -i eth1 -o vmbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i eth2 -o vmbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
eth1和eth2是wan接口。 vmbr0是我的私人networking。 从远程计算机ping eth2 ip地址的请求正在被丢弃,http请求也被丢弃。
我怎样才能解决这个问题?
看来您列出的每个规则都是一个接受规则,包括默认值。 从这一点来说,你的configuration不应该放弃或拒绝任何数据包。 我认为你的问题在别处。
如果你想允许ICMP ping请求,试试这个:
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -d <eth2_ip> -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 0 -s <eth2_ip> -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT
如果主机防火墙没有阻塞任何ICMP报文,请检查与ICMP相关的内核参数。
$ sysctl net.ipv4.icmp_echo_ignore_all net.ipv4.icmp_echo_ignore_all = 0
这通常在/etc/sysctl.conf中设置; 如果此主机在Internet上,则通常不希望它响应ping(ICMP)。
请注意,ICMP既不是TCP也不是UDP – 所以你必须以不同于TCP或UDP的规则来允许它。
为了进行debugging,我使用tcpdump来侦听主机上的networkingstream量 – 查看正在查看的数据包 – 以及执行以下命令:
watch -d iptables -L -v -n
这个命令可能会告诉你哪个规则被选中,只要没有太多的stream量通过防火墙。