宝塔 + WordPress 安全加固完整方案
从「面板 → 系统 → 网站/PHP → WordPress → 数据库 → 备份 → 监控 → 应急」8 层纵深防御。
优先级:必须>推荐>可选。
① 宝塔面板自身(必须)
面板被破 = 整台服务器沦陷,是第一道防线。
- 面板设置 → 修改端口:默认
8888改高位非常用端口(如35821)。 - 面板设置 → 安全入口:设复杂随机路径,如
/bt_8f3k(默认/btpanel立即失效)。 - 面板设置 → 绑定授权 IP:只放行你自己的固定 IP(无固定 IP 则跳过,别锁死自己)。
- 面板设置 → 开启面板 SSL:用 https 访问面板。
- 面板设置 → 两步验证(2FA):手机令牌,强烈建议开。
- 面板设置 → 修改管理员用户名 + 强密码(16 位以上,含大小写数字符号)。
- 软件商店 → phpMyAdmin:不用时关闭,或加「基础认证」密码;不要长期公开。
② 服务器系统层(推荐)
- 安全(左侧)→ 系统防火墙:只放行
22 / 80 / 443 / 面板端口,其余拒绝。 - 安全 → SSH 管理:改默认
22端口;禁用 root 直接登录;改用密钥登录。 - 软件商店 → 安装 fail2ban(或宝塔「系统防火墙」的防暴力破解):自动封禁爆破 IP。
- 定期执行系统补丁更新(
yum update/apt update)。
③ 网站 / PHP 层(必须,最关键,锁死破坏面)
- 网站 → 设置 → 防跨站攻击 → ✅ 开启:本质是给 PHP 设
open_basedir,黑客拿到 shell 也出不了网站目录。这一项最重要。 - 软件商店 → PHP 升级到 8.1 / 8.2(旧版漏洞多)。
PHP → 设置 → 禁用函数:加入以下函数(WordPress 正常运行不需要):
exec, system, passthru, proc_open, popen, shell_exec, pcntl_exec, proc_get_status, proc_close, eval- 网站 → 设置 → 伪静态:追加「禁止 uploads 执行 PHP」规则(见下方配置区)。
- 文件管理:目录
755、文件644;wp-config.php设为600。 - 网站 → SSL → Let's Encrypt 一键申请,开启「强制 HTTPS」。
④ WordPress 应用层(必须)
- 清理陌生管理员:后台「用户」确认无陌生账号;改掉默认
admin用户名。 - 装 Limit Login Attempts Reloaded:限制登录失败次数,挡暴破。
在
wp-config.php加两行,关闭后台主题/插件在线编辑(防黑客改主题挂马):define( 'DISALLOW_FILE_EDIT', true ); define( 'DISALLOW_FILE_MODS', false ); // 想彻底禁止自动改文件改 true- 删掉
cholame222副本、所有停用主题/插件(只留 active 的cholame+ 在用的插件)。 - 更新 WP 核心 + 主题 + 插件到最新。
- 装 Wordfence / Sucuri(免费版足够):文件完整性监控 + 恶意流量拦截。
- 不用就禁用 XML-RPC(黑客暴破常用):用安全插件关,或 nginx 规则
deny掉xmlrpc.php。
⑤ 数据库安全(推荐)
- 强口令:
wp-config.php里的DB_PASSWORD用 16 位以上随机串。 - 表前缀:新装站用非常规前缀(如
kr_而非wp_);已建站可用插件修改(有风险,先备份)。 - phpMyAdmin 用独立强口令,平时关闭。
⑥ 备份(必须,被黑后能秒回滚)
- 计划任务 → 建两条:网站备份 + 数据库备份,每日自动跑。
- 备份存储到云存储(阿里云 OSS / 腾讯云 COS / FTP 异地),不要只存本机。
- 保留至少 7 天滚动备份。
- 也可用 UpdraftPlus 插件自动备份到云端。
⑦ 监控告警(可选)
- 监控(左侧)→ 开启,定期看 CPU/带宽异常。
- 安全插件的邮件/微信告警打开,文件变更/登录异常即通知你。
⑧ 应急响应(必须,怀疑被黑时)
- 立即改全站密码(WP 管理员 / 主机 / 数据库 / phpMyAdmin),并撤销所有用户会话。
- 从干净备份恢复,或按「正确重装核心」:只重传
wp-admin/+wp-includes/+ 根目录 php 文件,不要动 wp-content(那会冲掉你的主题/插件/上传)。 - 活动主题若被破坏:把你本地这份干净的
cholame整目录重新传上去覆盖。 - 扫描
wp-content/uploads/下有无异常.php(正常不该有)。 - 查数据库
wp_options是否被注入跳转 JS、wp_users有无陌生管理员。
附:可直接复制的配置
Nginx 伪静态(禁止 uploads 执行 PHP + 封 xmlrpc)
# 禁止 uploads / cache / languages 执行 PHP(防挂马后门)
location ~* ^/wp-content/(uploads|cache|languages)/.*\.(php|php3|php4|php5|phtml|pht)$ {
deny all;
return 403;
}
# 禁用 XML-RPC(防暴破)
location = /xmlrpc.php {
deny all;
return 403;
}Apache(.htaccess 放 uploads 目录)
<FilesMatch "\.(?i:php|php3|php4|php5|phtml|pht)$">
Require all denied
</FilesMatch>
php_flag engine offwp-config.php 加固片段
define( 'DISALLOW_FILE_EDIT', true );
define( 'FORCE_SSL_ADMIN', true );
define( 'WP_AUTO_UPDATE_CORE', 'minor' );验证 uploads 禁执行是否生效
- 在
wp-content/uploads/新建test.php,写<?php echo "PHP_STILL_RUNS"; ?> - 访问
https://你的域名/wp-content/uploads/test.php - ✅ 正确:显示
403 Forbidden(看不到PHP_STILL_RUNS)
❌ 错误:直接显示了PHP_STILL_RUNS→ 规则未生效,检查服务器类型 - 测完删掉 test.php
⚠️ 最高性价比三件事(10 分钟,挡掉 80% 自动攻击)
- 面板改端口 + 安全入口 + 2FA
- 网站开防跨站攻击 + PHP 禁用危险函数 + uploads 禁执行 PHP
- 宝塔设每日自动备份到云
⚠️ 重装核心的正确姿势(避免再次白屏)
只重传 wp-admin/、wp-includes/ 和根目录几个 php 文件。不要重传 wp-content/——里面装的是你的主题、插件和上传的图片,重传会覆盖/冲掉它们,正是上次前台白屏的原因。
评论 (0)