找回密码
 立即注册

境外IP天天扫你网站?3步彻底封杀,还不用编译Nginx!

[复制链接]
69伙伴 发表于 2025-11-21 17:26:31 | 显示全部楼层 |阅读模式
https://www.toutiao.com/article/7575040771099771426/?app=news_article&category_new=__all__&module_name=Android_tt_others&share_did=MS4wLjACAAAAAhsO-kbMTjfs3yZOr4KUri-RWK9kLi9wryI4nuFQc-w&share_uid=MS4wLjABAAAAgRVZ1TsMAq1lLY1kzUPAsPb5W7rRSKAqaD6O7g6nBx6JokIDJk1F46hQ40YpAbCd×tamp=1763716658&tt_from=wechat&upstream_biz=Android_wechat&use_new_style=1&utm_campaign=client_share&utm_medium=toutiao_android&utm_source=wechat&share_token=96917f42-9d89-4b70-a5b2-2798364a006b&source=m_redirect&wid=1763717137555
你的服务器是否每天被 /admin、/wp-login.php、/.env 扫描刷屏?
这些攻击 90% 来自境外。如果你的业务只服务中国大陆用户,那完全没必要开放全球访问!
更重要的是:你不需要编译 Nginx ,不需要 MaxMind 账号,甚至不用装额外模块
只需利用 亚太网络信息中心( APNIC )公开的官方 IP 数据,配合 Nginx 原生功能, 3 步 实现精准拦截!

为什么推荐 APNIC 方案?
对比项
MaxMind GeoIP2
手动维护 IP
APNIC 官方方案

是否免费

❌ 需注册账号

✅ 是

✅ 完全公开免费


是否需编译 Nginx

⚠️ 需要

✅ 否

✅ 否(原生支持)


数据权威性

商业数据库

易过时

✅ 亚太官方机构发布


适用系统

依赖模块

通用

✅ 所有 Linux + 任意 Nginx 版本



重点是,我上一篇文章中 3种 Nginx 动态封禁方案 有人觉得太麻烦,反应慢不准确等,还有人需求是国内外IP直封堵的需求,个人觉得推荐这个比较简单方便的。(计划明天写一篇防火墙结合 APNIC )

实战:3 步实现“仅限中国大陆访问”
本方案适用于:任何 Linux 系统 + 任何来源的 Nginx(官方源、宝塔、LNMP、手动编译等)

第一步:获取中国大陆 IP 段(来自 APNIC 官方)
APNIC 每天更新各国 IP 分配清单,地址永久免费开放:
http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest
# 下载到文件
wget http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest# 直接输出到终端curl -sSL https://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest
创建自动转换脚本(保存为
/usr/local/bin/gen-cn-allow.sh ):
#!/bin/bash
# 从 APNIC 官方数据生成 Nginx allow 规则# 小柳实验室 xlsys.cn# 适用于任意 Linux 系统(CentOS/Ubuntu/Debian/Alma/Rocky 等)OUTPUT_DIR="/etc/nginx/conf.d"mkdir-p "$OUTPUT_DIR"
echo"正在下载 APNIC 最新数据..."
wget -qO- http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest | \awk -F'|' '$2 == "CN" && $3 == "ipv4" {prefix = $4;len = 32 - log($5) / log(2);print "allow " prefix "/" len ";";}$2 == "CN" && $3 == "ipv6" {print "allow " $4 "/" $5 ";";}' > /tmp/cn_allow.list# 分离 IPv4 和 IPv6(避免混合导致 Nginx 报错)grep -E 'allow [0-9]+\.' /tmp/cn_allow.list > "$OUTPUT_DIR/china-ipv4.conf"
grep -E 'allow [0-9a-fA-F:]+' /tmp/cn_allow.list > "$OUTPUT_DIR/china-ipv6.conf"
# 添加注释头sed -i "1i# Auto-generated from APNIC — $(date)" "$OUTPUT_DIR/china-ipv4.conf"
sed -i "1i# Auto-generated from APNIC — $(date)" "$OUTPUT_DIR/china-ipv6.conf"
rm-f /tmp/cn_allow.list
echo"✅ 中国 IP 白名单已生成:"
echo" IPv4: $OUTPUT_DIR/china-ipv4.conf"
echo" IPv6: $OUTPUT_DIR/china-ipv6.conf"
赋权并运行:
chmod+x /usr/local/bin/gen-cn-allow.sh
sudo/usr/local/bin/gen-cn-allow.sh
建议每日自动更新(防止新 IP 段遗漏):
echo"0 3 * * * root /usr/local/bin/gen-cn-allow.sh >/dev/ 2>&1" | sudo tee/etc/cron.d/update-cn-ip
第二步:配置 Nginx 仅放行中国 IP
编辑你的站点配置文件(如
/etc/nginx/conf.d/your-site.conf ):
server {
listen 80;listen [::]:80;server_name your-domain.com;# 引入中国 IP 白名单(顺序很重要!)include /etc/nginx/conf.d/china-ipv4.conf;include /etc/nginx/conf.d/china-ipv6.conf;# 可选:放行本地回环(避免自己被拦)allow 127.0.0.1;allow ::1;# 拒绝所有未匹配的请求deny all;location / {root /var/www/html;index index.html;# 你的其他配置...}}
⚠️ 关键规则: Nginx 按顺序匹配 allow/deny ,必须先写 allow ,再写 deny all !

第三步:重载生效 & 验证
# 检查语法
nginx -t# 重载配置(平滑生效,不影响在线用户)nginx -s reload# 或 systemctl reload nginx
验证方法:
国内手机 4G 访问 → 应正常打开;
使用境外代理或 VPS 访问 → 应返回 403 Forbidden;
查看日志: tail -f /var/log/nginx/access.log | grep '403'

⚠️ 重要注意事项
1. CDN 用户请特别注意!
如果你使用了 Cloudflare 、 阿里云 CDN 、 腾讯云 CDN 等:
用户真实 IP 被隐藏, Nginx 看到的是 CDN 节点 IP (多为境外);直接启用此规则会导致 所有用户被拦截!

✅ 解决方案:
在 CDN 后台开启 “回源携带真实 IP ”(如 Cloudflare 的 CF-Connecting-IP);或改用 CDN 自带的地域封禁功能(更简单可靠)。
2. IPv6 支持按需启用
若服务器未启用 IPv6 ,可删除 listen [::]:80; 和 china-ipv6.conf 引用。
3. 性能影响极小
中国大陆 IP 段约 6000+ 条, Nginx 使用高效前缀匹配,实测无明显延迟。

其他方案对比(供参考)
方案
优点
缺点
推荐场景

本文方案(APNIC + allow/deny)

免费、开源、无需模块、全平台兼容

需定期更新 IP 段

自主运维、无 CDN、追求可控


CDN 地域封禁

5 分钟上线、自动更新、抗 DDoS

依赖第三方、高级功能收费

已接入 CDN 的网站


iptables + ipset

内核层拦截,性能极高

配置复杂,Docker/NAT 环境需调试

高并发、安全敏感业务


GeoIP2(MaxMind)

支持国家/城市级判断

需账号、需编译 Nginx

需要精细地理分析的场景




写在最后:
屏蔽境外访问,不等于“技术复杂”。
用官方数据 + Nginx 原生能力,就能构建一道高效、透明、低成本的“数字国境线”。
你试过哪种防境外攻击的方法?有没有因为 CDN 导致误拦的经历?欢迎评论区分享!

临时交流 ⇨点我留言
【附件·直下】非必要·勿注册

联系我们 ( 京ICP备16001788号 ) | 网站地图 | 2012- UID.Cool |

GMT+8, 2026-1-2 16:00

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表