HoRain云--CentOS7中国IP访问限制实战指南
本文介绍了在CentOS7系统中实现"仅允许中国IP访问"的完整方案。推荐使用ipset+iptables白名单方案,通过创建中国IP集合并配置iptables规则,高效实现精准控制。文章详细说明了安装工具、获取中国IP段、配置规则及定期更新的步骤,并提供了备选方案(如Nginx GeoIP模块、云平台安全组等)。关键注意事项包括防锁死机制、IP库时效性、业务影响评估等。最佳实
·

🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录
✅ 首选方案:ipset + iptables(系统级精准控制)

在 CentOS 7 系统中实现“仅允许中国 IP 访问,拒绝海外 IP”,强烈推荐使用 ipset + iptables 白名单方案(高效、可维护),而非黑名单(海外 IP 段海量且动态变化)。以下是经过生产验证的完整方案:
✅ 首选方案:ipset + iptables(系统级精准控制)
🔧 实施步骤
# 1. 安装必要工具
sudo yum install -y ipset iptables-services
sudo systemctl enable iptables
sudo systemctl start iptables
# 2. 创建中国 IP 白名单集合(避免锁死自己!)
sudo ipset create china_ip hash:net maxelem 65536
sudo ipset flush china_ip
# 3. 获取最新中国 IP 段(任选其一)
# 方案A:使用维护良好的开源列表(推荐)
curl -L https://ispip.clang.cn/all_cn.txt | while read cidr; do
sudo ipset add china_ip $cidr 2>/dev/null || true
done
# 方案B:从 APNIC 官方解析(需安装 jq)
# wget https://ftp.apnic.net/stats/apnic/delegated-apnic-latest
# awk -F\| '/CN/ && /ipv4/ {print $4 "/" 32-log($5)/log(2)}' delegated-apnic-latest | while read cidr; do ipset add china_ip $cidr; done
# 4. 配置 iptables 规则(关键:顺序!)
sudo iptables -F INPUT
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -s 192.168.0.0/16 -j ACCEPT # 保留内网(按需调整)
sudo iptables -A INPUT -s YOUR_TRUSTED_IP/32 -j ACCEPT # 保留运维IP(必加!)
sudo iptables -A INPUT -p tcp --dport 22 -m set --match-set china_ip src -j ACCEPT # 仅开放SSH给国内
sudo iptables -A INPUT -p tcp --dport 80 -m set --match-set china_ip src -j ACCEPT # HTTP
sudo iptables -A INPUT -p tcp --dport 443 -m set --match-set china_ip src -j ACCEPT # HTTPS
sudo iptables -A INPUT -j DROP # 拒绝其他所有
# 5. 保存规则(持久化)
sudo service iptables save
# 或:sudo iptables-save > /etc/sysconfig/iptables
🔄 定期更新 IP 列表(crontab 示例)
# 每周一凌晨3点更新
0 3 * * 1 /bin/bash /opt/update_china_ip.sh && systemctl restart iptables
/opt/update_china_ip.sh 内容:
#!/bin/bash
ipset flush china_ip
curl -s https://ispip.clang.cn/all_cn.txt | while read cidr; do
ipset add china_ip "$cidr" 2>/dev/null || true
done
iptables-save > /etc/sysconfig/iptables
🌐 备选方案(按场景选择)
| 场景 | 方案 | 说明 |
|---|---|---|
| 仅限制 Web 服务 | Nginx + GeoIP 模块 | location / { if ($geoip_country_code !~ "CN") { return 403; } }需安装 nginx-module-geoip + MaxMind 数据库 |
| 云服务器 | 云平台安全组 | 阿里云/腾讯云控制台导入 CIDR 列表(注意:安全组规则数量有限制,需合并 CIDR) |
| 临时应急 | firewalld 富规则 | firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset=china_ip accept'(需先将 ipset 导入 firewalld) |
| 高精度需求 | 商业 IP 库 + 脚本 | 使用 IP2Location、MaxMind 等付费库 + 自动化更新脚本(成本高但准确率高) |
⚠️ 关键注意事项(必读!)
-
防锁死自己
- 添加规则前务必保留运维 IP、内网段、已建立连接规则
- 强烈建议:通过服务器控制台(VNC)操作,或设置 5 分钟后自动清空规则的保险脚本
(sleep 300 && iptables -F) & # 测试时后台执行 -
IP 库时效性
- 免费列表(如 clang.cn)更新频率约 1-7 天,建议每周更新
- 验证工具:
curl ifconfig.me+ 在线 IP 归属查询对比
-
业务影响评估
- ❌ 会阻断:海外用户访问、调用海外 API(如 Google Maps)、使用海外 CDN 资源
- ✅ 建议:仅限制高危端口(如 SSH 22),Web 服务可结合应用层限流
-
合规与误杀
- 部分中国机构使用海外 IP(如 CDN 节点)
- 检查是否有合作方需白名单(如支付回调 IP)
- 遵守《网络安全法》,避免过度拦截
-
性能验证
- ipset 查询为 O(1),万级 CIDR 规则对性能影响极小
- 验证:
ipset list china_ip \| wc -l(通常 5000~8000 条)
💡 推荐实践组合
graph LR
A[服务器] --> B{访问端口?}
B -- SSH/数据库 --> C[ipset+iptables 白名单]
B -- Web 服务 --> D[Nginx GeoIP 二次校验]
C --> E[仅放行中国IP+运维IP]
D --> F[返回403或跳转提示页]
E --> G[安全加固]
F --> G
📌 最后强调:
- 不要直接执行
iptables -A INPUT -j DROP!务必按顺序添加允许规则- 生产环境先在测试机验证
- 保留至少两种远程接入方式(如控制台 + 备用 IP 白名单)
- 定期审计日志:
grep DROP /var/log/messages | awk '{print $NF}' | sort | uniq -c
按此方案实施,可高效、稳定地实现“仅中国 IP 可访问”,同时规避常见运维风险。如需具体脚本或某环节详解,可进一步补充说明!
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐



所有评论(0)