要让VPS禁止来自某个国家的访问,可以通过多种方法实现,最常见的方式是使用防火墙规则、Nginx或Apache服务器配置,或通过第三方服务来过滤特定国家的IP地址。以下是三种常用方法:
1. 使用 iptables
配置防火墙规则
iptables
是 Linux 系统上常用的防火墙工具,可以根据 IP 地址范围限制访问。你可以使用 IP 数据库(例如 IP2Location 或 MaxMind)获取特定国家的 IP 范围,然后配置规则阻止这些 IP 地址。
步骤:
-
安装
ipset
:ipset
是一个与iptables
配合使用的工具,可以管理大量的 IP 地址。sudo apt-get install ipset
-
创建 IP 列表: 假设你有一个包含某个国家的 IP 范围文件(例如
china_ip.txt
),可以创建一个名为blocklist
的 IP 列表。ipset create blocklist hash:net while read ip; do ipset add blocklist $ip; done < china_ip.txt
-
将 IP 列表与
iptables
绑定:iptables -I INPUT -m set --match-set blocklist src -j DROP
-
保存配置: 如果重启后希望规则依旧生效,可以将
iptables
规则保存:sudo netfilter-persistent save sudo netfilter-persistent reload
2. Nginx 配置禁止国家访问
使用 Nginx 时,可以通过第三方模块 ngx_http_geoip_module
或 ngx_http_geoip2_module
来根据地理位置阻止特定国家的访问。
步骤:
-
安装 GeoIP 模块: 如果你使用的是 GeoIP2 数据库,首先下载数据库:
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz tar -xzvf GeoLite2-Country.tar.gz
-
Nginx 配置文件中添加以下内容:
http { geoip2 /path/to/GeoLite2-Country.mmdb { auto_reload 60m; $geoip2_data_country_code default=US source=$remote_addr; } server { if ($geoip2_data_country_code = CN) { return 403; } } }
-
重启 Nginx 服务:
sudo systemctl restart nginx
3. 使用 Cloudflare 等 CDN 服务
使用第三方服务如 Cloudflare,你可以利用其提供的 IP 地理位置功能来阻止来自特定国家的流量。设置非常简单,通过 Cloudflare 的防火墙规则可以轻松实现国家级别的封锁。
步骤:
- 登录到 Cloudflare 仪表盘,选择你的网站。
- 转到 防火墙(Firewall),然后点击 防火墙规则(Firewall Rules)。
- 创建一个新规则,设置条件为 国家(Country),选择要阻止的国家,如 China,动作选择 阻止(Block)。
- 保存规则后,Cloudflare 会自动处理来自该国家的流量。
总结
- 如果想在服务器层面限制访问,
iptables
或者 Nginx 配置是不错的选择。 - 如果希望使用更加简单、直观的方式,Cloudflare 等 CDN 服务是较为便利的解决方案。
ip库:https://github.com/alecthw/mmdb_china_ip_list?tab=readme-ov-file