宝塔nginx防火墙插件(专业版专属)可高效屏蔽恶意ip,支持单ip、ip段及批量导入,规则注入http/server块,优先级高且无需重启;网站层ip黑名单易因配置覆盖或反向代理失效;系统firewalld封禁更彻底但需同步封80/443端口;geoip地域封禁精度低,建议结合cdn地域控制。

怎么用 Nginx 防火墙插件屏蔽恶意 IP(专业版专属)
宝塔的 Nginx 防火墙 插件是目前最灵活的 IP 封禁方式,支持单 IP、IP 段、地理位置过滤和批量导入,规则直接注入 Nginx 的 http 或 server 块,优先级高于网站层安全设置,且不依赖重启服务。
- 必须先在宝塔「软件商店」安装该插件(仅限专业版,免费但需登录授权)
- 插件启用后,在「全局设置 → IP 黑名单」中填入
203.0.113.45即封单个 IP;填203.0.113.0–203.0.113.255封整个 C 段 - 注意:这里不支持 CIDR 格式(如
/24),只认起始+结束 IP,填错会导致规则无效 - 规则生效后,被封 IP 访问任何站点都会返回
403 Forbidden,日志可在插件「访问日志」页查看
为什么网站安全页的 IP 黑名单有时不生效
网站管理页里的「安全 → 访问控制 → IP 黑名单」看似方便,但它本质是往该站点的 Nginx 配置里插入 deny 指令,属于 location 级别限制,容易被其他配置覆盖或绕过。
- 常见失效场景:站点启用了反向代理、开启了 SSL 重定向、或配置了多个
server块(比如 HTTP/HTTPS 分开写),而黑名单只加在其中一个块里 - 另一个坑:它不拦截 WebSocket 连接或静态资源直链请求,攻击者可能换路径继续打
- 若你发现加了 IP 却还能访问,先检查配置文件末尾是否真出现了
deny 203.0.113.45;,再确认 Nginx 是否重载成功(不是重启)
用系统防火墙(firewalld)封 IP 更彻底,但要注意端口范围
如果你要封的是扫站、爆破类流量,直接在系统层拦截更干净——它在 TCP 连接建立前就丢包,不消耗 Web 服务资源。
- 执行命令:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" port port="80" protocol="tcp" accept',再补一条拒绝所有其他 IP 的规则 - 关键点:必须同时对
80和443端口做同样操作,否则 HTTPS 流量会绕过 - 别忘了
firewall-cmd --reload,否则规则只是写进配置没生效 - 隐患:如果服务器还跑着其他服务(如 FTP、数据库),一并封错端口可能导致连不上
封国外 IP 别只信「禁止海外访问」开关
宝塔 Nginx 防火墙里的「禁止海外访问」功能,底层靠的是 GeoIP 数据库匹配,但这个库更新慢、精度有限,常把港澳台或跨境 CDN 节点误判为境外 IP。
- 开启后,实际生效的是类似
geo $remote_addr $geoip_country_code { default ZZ; …… }+if ($geoip_country_code !~ ^(CN|HK|MO|TW)$) { return 403; }这类逻辑 - 如果你的用户有大量使用 Cloudflare、阿里云全站加速等 CDN,真实 IP 已被隐藏,
$remote_addr变成 CDN 节点 IP,地域判断就完全失准 - 更稳的做法:配合 CDN 自身的「地域访问控制」功能(如腾讯云 WAF 的地域封禁),那才是从入口掐断
error.log 和防火墙插件的实时拦截日志,才是判断封对没封对的唯一依据。











