禁止来自某个国家的访问

要让VPS禁止来自某个国家的访问,可以通过多种方法实现,最常见的方式是使用防火墙规则、Nginx或Apache服务器配置,或通过第三方服务来过滤特定国家的IP地址。以下是三种常用方法:

1. 使用 iptables 配置防火墙规则

iptables 是 Linux 系统上常用的防火墙工具,可以根据 IP 地址范围限制访问。你可以使用 IP 数据库(例如 IP2LocationMaxMind)获取特定国家的 IP 范围,然后配置规则阻止这些 IP 地址。

步骤:

  1. 安装 ipset ipset 是一个与 iptables 配合使用的工具,可以管理大量的 IP 地址。

    sudo apt-get install ipset
    
  2. 创建 IP 列表: 假设你有一个包含某个国家的 IP 范围文件(例如 china_ip.txt),可以创建一个名为 blocklist 的 IP 列表。

    ipset create blocklist hash:net
    while read ip; do ipset add blocklist $ip; done < china_ip.txt
    
  3. 将 IP 列表与 iptables 绑定:

    iptables -I INPUT -m set --match-set blocklist src -j DROP
    
  4. 保存配置: 如果重启后希望规则依旧生效,可以将 iptables 规则保存:

    sudo netfilter-persistent save
    sudo netfilter-persistent reload
    

2. Nginx 配置禁止国家访问

使用 Nginx 时,可以通过第三方模块 ngx_http_geoip_modulengx_http_geoip2_module 来根据地理位置阻止特定国家的访问。

步骤:

  1. 安装 GeoIP 模块: 如果你使用的是 GeoIP2 数据库,首先下载数据库:

    wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
    tar -xzvf GeoLite2-Country.tar.gz
    
  2. 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;
            }
        }
    }
    
  3. 重启 Nginx 服务:

    sudo systemctl restart nginx
    

3. 使用 Cloudflare 等 CDN 服务

使用第三方服务如 Cloudflare,你可以利用其提供的 IP 地理位置功能来阻止来自特定国家的流量。设置非常简单,通过 Cloudflare 的防火墙规则可以轻松实现国家级别的封锁。

步骤:

  1. 登录到 Cloudflare 仪表盘,选择你的网站。
  2. 转到 防火墙(Firewall),然后点击 防火墙规则(Firewall Rules)
  3. 创建一个新规则,设置条件为 国家(Country),选择要阻止的国家,如 China,动作选择 阻止(Block)
  4. 保存规则后,Cloudflare 会自动处理来自该国家的流量。

总结

  • 如果想在服务器层面限制访问,iptables 或者 Nginx 配置是不错的选择。
  • 如果希望使用更加简单、直观的方式,Cloudflare 等 CDN 服务是较为便利的解决方案。

ip库:https://github.com/alecthw/mmdb_china_ip_list?tab=readme-ov-file