我有一台装有 FirewallD 的 Centos 7 机器,并且 net.ipv4.conf.icmp_echo_ignore_all 设置为 0。我正在寻找一些防火墙配置来禁用对外部 IP 地址的 ping 回复,但允许某些 IP 块(如 192.168.1.0/24、10.0.0.0/8 等)获取 ping 回复。
我怎样才能做到这一点?
答案1
这是一个解决方案iptables
[root@ttucker ~]# iptables -A INPUT -m iprange --src-range 192.168.0.0-192.168.255.255 -p ICMP --icmp-type 8 -j ACCEPT
[root@ttucker ~]# iptables -A INPUT -m iprange --src-range 10.0.0.0-10.255.255.255 -p ICMP --icmp-type 8 -j ACCEPT
[root@ttucker ~]# iptables -A INPUT -p ICMP --icmp-type 8 -j DROP
之后的样子应该是这样的:
[root@ttucker ~]# iptables -v -n -L INPUT | grep icmp
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 192.168.0.0-192.168.255.255 icmptype 8
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 10.0.0.0-10.255.255.255 icmptype 8
0 0 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
Iptables 的工作方式是按照给定链上从上到下的顺序评估其拥有的规则。在本例中,它是 INPUT 链。当 iptables 找到与其条件匹配的规则时,它会采取 中指定的操作-j
。
因此,在这个例子中,我们规定如果源来自 10.0.0.0/8 或 192.168.0.0/16,则操作为ACCEPT
。如果源地址不在该范围内,则它会触发第三条规则,该规则规定DROP
。
注意:您还需要确保当前没有任何当前规则接受先于这些规则的所有 ICMP 流量。
-A INPUT
附加到链中的方法。INPUT
因此,您首先要列出整个输入链,并删除其中存在的任何其他 ICMP 规则。
以下是列出 INPUT 链规则的方法:
iptables -v -n -L INPUT
如果这对您有用或者您有任何其他问题,请告诉我。