
前言
在服务器运维过程中,我们经常遇到恶意扫描、CC攻击、刷流量等安全威胁。宝塔面板作为国内最流行的服务器管理面板,提供了多种封禁恶意IP的方法。本文将系统介绍三种主流方案,从最直观的图形界面操作到底层命令配置,帮助你根据实际场景选择最合适的防护策略。
适用版本:宝塔面板 7.x / 8.x 版本,Linux系统(CentOS/Ubuntu等)
一、方法对比:哪种方式最适合你?
| 方法 | 防护范围 | 生效速度 | 操作难度 | 适用场景 |
|---|---|---|---|---|
| 系统防火墙(推荐) | 全端口(SSH/面板/网站全封) | 即时生效 | ⭐ 简单 | 封禁扫站、爆破类恶意IP |
| Nginx防火墙插件 | 仅HTTP/HTTPS网站 | 即时生效 | ⭐ 简单 | 网站层精准拦截,需专业版 |
| 手动修改Nginx配置 | 仅当前站点 | 重载后生效 | ⭐⭐ 中等 | 单站点精细化控制 |
核心原则:如果要封的IP正在扫描你所有端口(SSH、面板、网站等),务必使用系统防火墙——它在网络层直接丢包,恶意IP连连接都建立不起来。如果只涉及网站访问层面的封禁,用Nginx防火墙插件更灵活。

二、方法一:通过系统防火墙封禁IP(最彻底、最推荐)
系统防火墙(基于iptables/firewalld)是宝塔面板内置的最核心安全模块,规则写入底层防火墙,对整个服务器所有端口生效,包括面板、网站、SSH等。它不依赖Nginx配置,也不需要重启服务,保存即刻拦截。
操作步骤
第1步:登录宝塔面板,点击左侧导航栏的「安全」。
第2步:找到「系统防火墙」模块,确认状态为「已启动」。
第3步:点击「屏蔽IP」按钮(部分版本显示为「添加IP规则」)。
第4步:在IP输入框中填入要封禁的IP或IP段:
- 封单个IP:直接输入IP地址,如
203.203.203.203 - 封IP段(CIDR格式) :输入网段,如
203.203.203.0/24(封C段256个IP) - 封多个IP:换行分隔,每行一个
第5步:在「备注」栏填写来源说明,如「高频扫描IP段」,方便后续排查。
第6步:点击「提交」,规则立即生效。
封禁IP段的CIDR速查
| 要封的范围 | CIDR写法 | 包含IP数 |
|---|---|---|
| 单个IP | 203.203.203.203/32 | 1个 |
| C段(256个) | 203.203.203.0/24 | 256个 |
| B段(65536个) | 203.203.0.0/16 | 65536个 |
| A段(1677万个) | 203.0.0.0/8 | 1677万个 |
⚠️ 重要提醒:封A段/B段时要特别注意——千万别把自己IP也封了!曾有用户封了
112.0.0.0/8后发现自己IP也是112开头的,导致无法登录面板。封大段之前,务必先确认自己的IP不在该范围内。
如何解封
在「安全」→「系统防火墙」→「IP规则」列表中,找到对应规则,点击「删除」即可。

三、方法二:通过Nginx防火墙插件封禁IP(专业版/网站层)
宝塔的「Nginx防火墙」插件是目前最灵活的网站层IP封禁方式,支持单IP、IP段、批量导入,规则直接注入Nginx的http或server块,优先级高且无需重启。
📌 注意:此插件为宝塔专业版专属功能,免费版用户需登录宝塔账号授权使用。
操作步骤
第1步:在宝塔面板左侧点击「软件商店」,搜索「Nginx防火墙」,点击安装并启用。
第2步:安装完成后,进入「安全」→「Nginx防火墙」→「IP黑名单」。
第3步:点击「添加黑名单IP」,输入要封禁的IP或IP段:
- 单个IP:直接写
203.0.113.45 - C段:写
203.0.113.0–203.0.113.255(注意:部分版本不支持CIDR格式如/24,只认起始+结束IP) - 批量导入:支持多条换行添加
第4步:点击「提交」,立即生效,无需重载Nginx。
第5步:被封IP访问任意站点会返回 403 Forbidden,可在插件「访问日志」页查看拦截记录。
自动封禁配置(进阶)
Nginx防火墙还支持自动封禁高频恶意IP:
- 进入「Nginx防火墙」→「全局设置」
- 开启「自动封禁」开关
- 设置触发条件:如「单位时间内触发次数」设为5次,「封禁时长」设为86400秒(24小时)

四、方法三:手动修改Nginx配置文件(灵活但易出错)
如果你不想安装额外插件,可以直接在网站配置文件中添加 deny 指令来封禁IP。但请注意:这种方式仅对当前站点生效,且容易被其他配置覆盖或绕过。
操作步骤
第1步:在宝塔面板进入「网站」列表,点击目标站点右侧的「设置」。
第2步:切换到「配置文件」选项卡。
第3步:在 server { ... } 块中找到合适位置(通常在server块开头),添加以下规则:
# 封禁单个IP
deny 203.0.113.45;
# 封禁IP段(CIDR格式)
deny 192.168.100.0/24;
deny 203.0.113.0/28;
第4步:点击右上角「重载配置」按钮,使规则生效。
第5步:验证效果——从被屏蔽IP访问该网站,应返回 403 Forbidden。
全局黑名单文件(高级)
如果需要在多个站点复用同一套黑名单,可以创建独立的全局规则文件:
# 1. 创建黑名单文件
touch /www/server/panel/vhost/nginx/blacklist.conf
# 2. 写入 deny 规则
echo "deny 192.0.2.0/24;" >> /www/server/panel/vhost/nginx/blacklist.conf
echo "deny 198.51.100.64/27;" >> /www/server/panel/vhost/nginx/blacklist.conf
# 3. 在主配置中引入
# 编辑 /www/server/nginx/conf/nginx.conf,在 http {} 块末尾添加:
include /www/server/panel/vhost/nginx/blacklist.conf;
五、高阶技巧:通过SSH命令行精细控制
当图形界面不够用时(如需配合端口、协议等条件),可以用firewalld原生命令实现更精细的控制。
封禁IP段对特定端口的访问
# 封禁 203.203.203.0/24 对面板端口 8888 的访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.203.203.0/24" port port="8888" protocol="tcp" reject'
屏蔽大段+放行子段(白名单优先)
如果想屏蔽 192.168.0.0/16 但放行 192.168.20.0/24,注意放行规则要写在屏蔽规则前面(firewalld按顺序匹配):
# 先放行子段(优先级高)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.20.0/24" accept'
# 再屏蔽大段
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" drop'
# 重载生效
firewall-cmd --reload
常用命令速查
# 查看当前所有富规则
firewall-cmd --list-rich-rules
# 查看系统防火墙全部规则
firewall-cmd --list-all
# 重载防火墙(修改后必须执行)
firewall-cmd --reload
⚠️ 关键提醒:用命令行添加规则时必须加
--permanent参数,否则重启后规则会丢失。执行后务必firewall-cmd --reload才能真正加载新规则。
六、验证封禁是否生效
别只看宝塔界面上的「已添加」,一定要从服务器外部实测验证。
方法一:从被封IP段外的机器执行:
telnet 你的服务器IP 8888
应显示「Connection refused」或超时,而不是登录页响应。
方法二:从被封IP的机器访问网站,应看到 403 Forbidden 或连接超时。
方法三:查看宝塔「安全」→「系统防火墙」→「防火墙日志」,确认有匹配记录。
七、常见问题与避坑指南
Q1:在网站层封了IP,为什么还能访问?
可能原因:
- 站点启用了反向代理或CDN,真实IP被隐藏
- 黑名单只加在HTTP的server块,HTTPS的server块没同步
- 配置中存在
allow all等冲突语句
解决方案:改用系统防火墙封禁,或开启Nginx防火墙的「获取真实IP」功能。
Q2:误封了自己的IP怎么办?
- 如果还能登录面板:进入「安全」→「系统防火墙」→「IP规则」,删除自己的IP规则
- 如果完全无法登录:通过云服务商VNC或控制台登录服务器,执行
firewall-cmd --permanent --remove-rich-rule='...'删除规则,然后firewall-cmd --reload
Q3:系统防火墙和云服务商安全组有什么区别?
- 系统防火墙(宝塔/iptables):服务器内部的防火墙
- 云安全组(阿里云/腾讯云等):云平台外层的网络过滤
如果同时使用,云安全组优先级更高——在云安全组放行的IP,系统防火墙拦不住。建议两处都做限制,双重保险。
Q4:为什么「禁止海外访问」功能不准确?
宝塔的「禁止海外访问」基于GeoIP数据库,但数据库更新慢、精度差,港澳台常被误判为境外,跨境CDN节点也容易被误封。
更靠谱的做法:先用Nginx防火墙的「访问日志」筛选出高频恶意IP,再手动拉黑。如需地域控制,建议在CDN层(如Cloudflare WAF)设置。
总结
| 场景 | 推荐方案 |
|---|---|
| 恶意IP在扫全端口(SSH/面板/网站) | ✅ 系统防火墙(方法一) |
| 仅网站被攻击,需灵活管理 | ✅ Nginx防火墙插件(方法二) |
| 免费版、单站点精细控制 | ✅ 手动修改Nginx配置(方法三) |
| 需要端口+IP组合封禁 | ✅ 命令行firewalld(高阶技巧) |
一句话建议:系统防火墙最彻底,Nginx防火墙最灵活。日常运维建议两者结合使用——系统防火墙拦大段恶意IP,Nginx防火墙做精细化管理和自动封禁。

原创文章,作者:高防服务器租用,如若转载,请注明出处:https://www.zfwq.com/jishu/1576.html
