🎬 HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

✅ 首选方案:ipset + iptables(系统级精准控制)

🔧 实施步骤

🔄 定期更新 IP 列表(crontab 示例)

🌐 备选方案(按场景选择)

⚠️ 关键注意事项(必读!)

💡 推荐实践组合


在 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 等付费库 + 自动化更新脚本(成本高但准确率高)

⚠️ 关键注意事项(必读!)

  1. 防锁死自己

    • 添加规则前务必保留运维 IP、内网段、已建立连接规则
    • 强烈建议:通过服务器控制台(VNC)操作,或设置 5 分钟后自动清空规则的保险脚本
    (sleep 300 && iptables -F) &  # 测试时后台执行
    
  2. IP 库时效性

    • 免费列表(如 clang.cn)更新频率约 1-7 天,建议每周更新
    • 验证工具:curl ifconfig.me + 在线 IP 归属查询对比
  3. 业务影响评估

    • ❌ 会阻断:海外用户访问、调用海外 API(如 Google Maps)、使用海外 CDN 资源
    • ✅ 建议:仅限制高危端口(如 SSH 22),Web 服务可结合应用层限流
  4. 合规与误杀

    • 部分中国机构使用海外 IP(如 CDN 节点)
    • 检查是否有合作方需白名单(如支付回调 IP)
    • 遵守《网络安全法》,避免过度拦截
  5. 性能验证

    • 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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐