宝塔面板提供四种限制特定国家用户访问网站的方法:一、启用系统防火墙并配置地区规则;二、安装Nginx免费防火墙插件设置地域封禁;三、手动编译GeoIP2模块并配置Nginx规则;四、通过云防火墙或第三方WAF补充拦截。

如果您希望限制特定国家的用户访问您的网站,宝塔面板提供了基于IP地理库的拦截能力。以下是实现该目标的具体操作步骤:
一、启用宝塔系统防火墙并配置地区规则
宝塔面板内置的系统防火墙支持通过IP地理库识别访问者所属国家,并据此执行拦截策略。该方法无需编译Nginx模块,适用于大多数标准安装环境。
1、登录宝塔面板后台,进入「安全」页面。
2、点击「系统防火墙」,等待防火墙服务启动完成(若未开启请先启用)。
3、切换至「地区规则」选项卡。
4、在「禁止地区」栏中勾选需拦截的国家,例如美国、日本、德国等。
5、务必勾选「更新IP池」选项,确保地理IP库为最新版本。
6、点击「保存」,防火墙将立即应用新规则。
二、使用Nginx免费防火墙插件设置地域封禁
该插件由宝塔官方提供,集成更完善的IP段匹配逻辑与实时更新机制,支持精细化控制,且不依赖手动编译。
1、进入宝塔「软件商店」,搜索关键词「Nginx防火墙」。
2、找到「Nginx免费防火墙」插件,点击「安装」。
3、安装完成后,点击「设置」进入全局配置。
4、在「禁止海外访问」开关处,选择「开启」;若需自定义国家,则切换至「高级设置」→「地域黑名单」。
5、在地域黑名单中输入需屏蔽的国家代码,例如:US、JP、KR、GB(ISO 3166-1 alpha-2格式)。
6、保存设置并重启防火墙服务。
三、手动编译GeoIP2模块并配置Nginx规则
此方法可实现最精准的国家级识别,基于MaxMind官方GeoLite2数据库,支持毫秒级查询与高并发场景,适用于对拦截准确性要求极高的部署。
1、以root身份登录服务器,执行命令安装依赖:yum install libmaxminddb-devel -y。
2、克隆GeoIP2 Nginx模块:git clone https://github.com/leev/ngx_http_geoip2_module.git /usr/local/ngx_http_geoip2_module。
3、前往宝塔面板「软件管理」→「Nginx」→「编译扩展」,在「自定义模块」中填入路径:/usr/local/ngx_http_geoip2_module,点击「编译」。
4、下载GeoLite2-Country.mmdb文件,上传至服务器路径:/www/server/panel/vhost/nginx/GeoIP/GeoLite2-Country.mmdb。
5、编辑站点配置文件,在http块内添加以下配置:
geoip2 /www/server/panel/vhost/nginx/GeoIP/GeoLite2-Country.mmdb { auto_reload 5m; $geoip2_data_country_code country iso_code; }
6、在server块内添加拦截逻辑:
map $geoip2_data_country_code $allowed_country { default no; CN yes; }
if ($allowed_country = no) { return 403; }
7、保存配置后执行:/etc/init.d/nginx reload。
四、通过云防火墙或第三方WAF补充拦截
当服务器前置部署了腾讯云、阿里云等云厂商的WAF或云防火墙时,可利用其地域封禁功能作为第二层防护,弥补本地IP库更新延迟或覆盖盲区。
1、登录对应云平台控制台,进入「Web应用防火墙」或「云防火墙」服务。
2、定位至「访问控制」→「地域封禁」或「地理位置规则」。
3、新建规则,选择「拒绝」动作,并添加需拦截的国家列表,例如:俄罗斯、加拿大、澳大利亚。
4、设置规则优先级高于其他策略,确保生效顺序正确。
5、启用规则并观察日志确认拦截效果。










