有条件就上行业专业版...另外一种方式:如何实现“仅限中国大陆访问”之 nginx + apnic 版
1.安装 ipset
为什么用 ipset ?普通防火墙添加1000条规则就会卡顿,而ipset可以轻松处理10万+条规则,性能提升100倍!
ipset的详细的使用方法:https://www.xlsys.cn/2664.html
# Debian/Ubuntu系统
sudo apt-get update && sudo apt-get install ipset -y
# CentOS/RHEL系统
sudo yum install ipset -y
2.创建中国 IP 防火墙
#IPV6 这里没有写需要的自行修改。
sudo ipset create china hash:net
curl https://ftp.apnic.net/stats/apnic/delegated-apnic-latest |
grep "CN|ipv4" |
awk -F'|' '{print $4 "/" (32 - log($5)/log(2))}' |
while read ip; do sudo ipset add china $ip; done
等待1-2分钟,系统会自动下载并处理约中国IP段,完成后输入:
ipsetdsyff
list china | wc -l
8699 # 这就是中国IP段的数量!
3.定时自动更新
中国IP段会变化,建议每周自动更新一次:
# 编辑定时任务
sudo crontab -e
添加这一行(每周日凌晨2点自动更新):
# 有 IPV6 需求的自行调整
0 2 * * 0 /usr/bin/ipset flush china && /usr/bin/curl https://ftp.apnic.net/stats/apnic/delegated-apnic-latest | grep "CN|ipv4" | awk -F'|' '{print $4 "/" (32 - log($5)/log(2))}' | while read ip; do /usr/bin/ipset add china $ip; done
4.配置防火墙规则
让防火墙只允许中国IP访问关键服务
# 允许中国IP访问SSH(22端口)
sudo iptables -A INPUT -p tcp --dport 22 -m set --match-set china src -j ACCEPT
# 拒绝其他国家的SSH访问
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
# 同样设置网站端口(80/443)
sudo iptables -A INPUT -p tcp --dport 80 -m set --match-set china src -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -m set --match-set china src -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
sudo iptables -A INPUT -p tcp --dport 443 -j DROP
5.注意事项
1.防止"自我锁定"
执行前务必确认:您当前的IP是否在中国范围内?可以通过这个命令检查:
curl ifconfig.me
如果不在(比如您在海外出差),先添加您的IP到白名单:
sudo iptables -I INPUT -s 您的IP地址 -j ACCEPT
2.CDN/云服务用户注意
如果您使用Cloudflare、阿里云CDN、腾讯云CDN等服务,需要额外允许它们的IP:
# 以Cloudflare为例
curl https://www.cloudflare.com/ips-v4 -o cf-ips.txt
while read ip; do sudo ipset add china $ip; done < cf-ips.txt
3.一键恢复方案(小白)
创建一个紧急恢复脚本,保存在安全位置
echo "iptables -F" > /root/firewall-restore.sh
chmod +x /root/firewall-restore.sh
当你被锁在服务器外时,通过控制台执行这个脚本即可恢复访问。