宝塔面板防火墙默认关闭,需手动开启并配置;确认底层防火墙类型,放行必要端口,用“阻止ip”而非仅黑名单,iptables规则需持久化以防重启丢失。

宝塔面板防火墙默认是关闭的,必须手动开启
宝塔面板自带的防火墙(基于 iptables 或 firewalld)在安装后默认不启用,不是“装了就自动防护”。很多用户以为装完宝塔就安全了,结果被扫端口、爆破 SSH,其实只是因为 bt 7 的防火墙模块压根没开。
开启前先确认你用的是哪种底层防火墙:iptables(CentOS 6 / Debian 9 及更早)还是 firewalld(CentOS 7+ / Rocky 8+)。宝塔会自动适配,但如果你手动改过系统防火墙规则,可能冲突。
- 登录宝塔后台 → 左侧菜单「安全」→ 确保右上角开关是「启用」状态
- 如果点不开或提示“未检测到防火墙服务”,先在终端执行:
systemctl status firewalld或systemctl status iptables看是否运行中 - 若服务未启动,运行
systemctl start firewalld(或iptables),再回宝塔刷新
只放行必要端口,别留着 22/80/443 就算完事
很多人开了防火墙,但只保留了 22(SSH)、80、443,却忘了自己开了 3306(MySQL)、6379(Redis)甚至 888(宝塔面板默认端口),这些全暴露在公网等于白防。
真实攻击者第一波就是扫常见服务端口。你用宝塔建站,大概率不需要对外开放数据库;用 Redis 做缓存,也应绑定 127.0.0.1 而非 0.0.0.0。
- 「安全」页面 → 「放行端口」列表里,删掉所有非必需项:比如
3306、6379、27017(MongoDB) - 若必须远程连 MySQL,不要加
0.0.0.0:3306,而是加具体 IP 段,如192.168.1.100:3306 - 宝塔面板端口(默认
8888)建议改掉,并在防火墙里只允许你的办公 IP 访问
“IP 黑名单”在宝塔里不等于系统级封禁
宝塔的「IP 黑名单」功能本质是往 /www/server/panel/data/banip.list 写入 IP,然后由面板自身在 Nginx/Apache 请求入口做拦截 —— 这属于应用层过滤,挡不住端口扫描、SYN Flood 或直接打到 SSH 的暴力破解。
真正有效的封 IP,得靠底层防火墙规则。宝塔「安全」页里的「阻止 IP」按钮,才是调用 iptables -I INPUT -s xxx.xxx.xxx.xxx -j DROP(或 firewalld 的 rich rule),这个才进内核网络栈。
- 发现异常 IP 频繁访问
/wp-login.php或尝试 SSH 登录,直接在「安全」页「阻止 IP」输入框里填进去,别只拉黑到banip.list - 被封 IP 若需解封,不能只删
banip.list,还得在「阻止 IP」列表里点「删除」,否则 iptables 规则还在 - 注意:firewalld 用户如果用
firewall-cmd --permanent --add-rich-rule=...手动加过规则,和宝塔的「阻止 IP」可能共存,但优先级需自行验证
重启服务器后防火墙规则丢失?检查是否持久化
CentOS 7+ 默认用 firewalld,规则默认持久化;但 CentOS 6 / Debian 系统用 iptables 时,规则重启即丢 —— 宝塔不会自动帮你保存,除非你手动执行过 service iptables save 或配置了开机加载脚本。
常见现象:半夜服务器重启,第二天发现所有端口全通,网站被挂马。查日志发现 iptables 规则一条都没了。
- Debian/Ubuntu 用户:安装
iptables-persistent,然后运行netfilter-persistent save - CentOS 6 用户:运行
service iptables save(规则会存到/etc/sysconfig/iptables) - 不确定是否生效?重启前执行
iptables-save,重启后再执行一次,对比输出是否一致
防火墙不是开关一按就万事大吉的事。它和你的服务监听地址、数据库绑定配置、SSH 登录方式(密钥 or 密码)、甚至宝塔自身的更新节奏都咬合在一起。漏掉其中一环,前面所有设置都可能被绕过。










