LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

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

admin
2025年11月26日 10:35 本文热度 806

你的服务器是否每天被 /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/null 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 原生能力,就能构建一道高效、透明、低成本的“数字国境线”。


阅读原文:https://mp.weixin.qq.com/s/OPgXnX-kLiEifyqb_dOCZQ


该文章在 2025/11/26 10:35:54 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved