一般情况下,封闭一个 IP 范围会使用 IP 的 CIDR 记法,比如:
[Plain Text] 纯文本查看 复制代码 iptables -A INPUT -p all -s 192.168.1.0/26 -j DROP
上面这条规则中指示的子网范围为 192.168.1.1 ~ 192.168.1.61 。假如,我们要封锁的 IP 范围是 192.168.1.10~192.168.1.13 那么应该怎么办呢?一个做法是将 192.168.1.0/24 这个网段划分为 32 个子网,每个子网中有 6 台主机(主机 IP 地址范围为 “子网地址+1” 到 “广播地址-1”),而该子网子的网掩码为 255.255.255.248 , 因此要适应 192.168.1.10~192.168.1.13 这个地址范围,用 CIDR 记法就为 192.168.1.8/29 (此时子网范围为:192.168.1.8~192.168.1.15)。那么,上面的防火墙规则就改为:
[Plain Text] 纯文本查看 复制代码 iptables -A INPUT -p all -s 192.168.1.8/29 -j DROP
但是上面的规则已经包含了 192.168.1.9 和 192.168.1.14 这两个“无辜”的 IP,因此还要添加规则将其去掉:
[Plain Text] 纯文本查看 复制代码 iptables -A INPUT -p all 192.168.1.9 -j ACCEPT
iptables -A INPUT -p all 192.168.14 -j ACCEPT
从上面可以看到,划分着么多个子网有点不现实。如果不细化这个子网,那么要排除掉“无辜”的 IP 就会很多,因此使用 CIDR 记法来表示 IP 范围就显得笨拙许多。
还好,有一个 xt_iprange.ko 模块,它可以为我们提供 --src-range 和 --dst-range 这两个选项,这样就省事多了,比如只要如下添加规则:
[Plain Text] 纯文本查看 复制代码 iptables -A INPUT -m iprange --src-range 192.168.1.10~192.168.1.13 -j DROP
这样就不用再辛苦计算子网或者是辛苦排除“无辜” IP 了。同样的 --dst-range 也一样道理的使用。 |