案例介绍
本文介绍如何通过配置iptables实现对特定国家IP地址段的访问限制。为了保护未成年人身心健康,本文以限制中国大陆IP访问为例,限制端口为TCP:5000~6000。
实现步骤
1. 获取对象国的IP地址
可以在ipdeny.com获取各个国家的IP地址列表。此外,这个网站也提供了IPv6地址。将需要屏蔽的IP列表下载到服务器中,本例中为/etc/cn-aggregrated.zone
(IPv4地址)和/etc/cn-aggregrated_v6.zone
(IPv6地址)。
2. 创建iptables配置脚本
在适当的目录用vi block_ip.sh
创建新脚本,粘贴以下内容:
PORT_RANGE="5000:6000"
CHINA_IP_FILE="/etc/cn-aggregated.zone"
ipset create china_ip hash:net
while read -r ip; do
ipset add china_ip $ip
done < "$CHINA_IP_FILE"
iptables -I IN_public_allow -p tcp --dport $PORT_RANGE -m set --match-set china_ip src -j DROP
# 以下内容为IPv6配置,可按需添加
CHINA_IP6_FILE="/etc/cn-aggregated_v6.zone"
ipset create china_ip6 hash:net family inet6
while read -r ip; do
ipset add china_ip6 $ip
done < "$CHINA_IP6_FILE"
ip6tables -I IN_public_allow -p tcp --dport $PORT_RANGE -m set --match-set china_ip6 src -j DROP
这里需要注意的是,脚本编辑了名为IN_public_allow
的链。这个链对CentOS7的公网接口(public)有效。其他系统可能需要修改,典型名称应为INPUT
。
3. 执行脚本
执行上述block_ip.sh
将设置写入iptables。
chmod +x ./block_ip.sh
./block_ip.sh
由于iptables重启后会初始化,以上脚本可设置为开机启动,或者使用各种保存iptables的命令和工具。这里不再赘述。