#【Day 5】安全防护配置完整指南:从系统层到应用层的防御体系(2026版)
系列:《中小企业云服务器7天运维实战》Day 5/7
标签:安全防护 | Fail2ban | WAF | 安全组 | WordPress安全 | 运维
发布时间:2026-06-15
阅读时长:20分钟
适用版本:CentOS 7.9 / Ubuntu 22.04 / 宝塔v8.0+
摘要
本文从系统层、网络层、Web层、应用层四个维度,详细记录服务器安全防护的完整配置过程。包含Fail2ban防暴力破解、安全组最小权限配置、宝塔WAF、WordPress安全加固等实操内容,以及可执行的定期安全检查清单。
一、安全威胁分析
1.1 攻击类型与技术原理
| 攻击类型 | 技术原理 | 目标组件 | 检测方法 |
|---|---|---|---|
| 暴力破解 | 字典/撞库攻击认证接口 | SSH/MySQL/面板 | 分析/var/log/secure |
| SQL注入 | 构造恶意SQL绕过过滤 | Web应用数据库 | Web日志分析 |
| XSS | 注入客户端脚本 | 用户浏览器 | 输入验证 |
| 文件上传漏洞 | 上传可执行脚本 | Web服务器 | 文件类型限制 |
| DDoS | 资源耗尽型攻击 | 带宽/连接数 | 流量监控 |
| 勒索软件 | 漏洞入侵后加密文件 | 系统文件 | 文件完整性监控 |
1.2 防御层次模型
┌─────────────────────────────────────────────┐ │ 第4层:应用层(WordPress安全插件、代码审计) │ ├─────────────────────────────────────────────┤ │ 第3层:Web层(宝塔WAF、输入过滤、CSP) │ ├─────────────────────────────────────────────┤ │ 第2层:网络层(安全组、Fail2ban、IDS) │ ├─────────────────────────────────────────────┤ │ 第1层:系统层(系统更新、最小权限、SELinux) │ └─────────────────────────────────────────────┘二、系统层安全加固
2.1 SSH安全加固
修改默认端口:
# 编辑SSH配置vi/etc/ssh/sshd_config# 修改以下参数Port22222# 改为非常用端口PermitRootLogin no# 禁止root登录(需先创建普通用户)PasswordAuthentication no# 禁用密码,仅使用密钥(可选)MaxAuthTries3# 最大尝试次数ClientAliveInterval300# 5分钟无操作断开ClientAliveCountMax2# 检测次数# 重启SSHsystemctl restart sshd安全提示:修改端口后,保持当前SSH会话不关闭,新开窗口测试新端口连接成功后再关闭原会话。
创建普通用户(如禁用root登录):
# 创建用户useradd-m-s/bin/bash adminpasswdadmin# 添加到sudo组usermod-aGwheel admin# CentOSusermod-aGsudoadmin# Ubuntu# 配置sudo免密(可选,谨慎使用)echo"admin ALL=(ALL) NOPASSWD:ALL">>/etc/sudoers2.2 Fail2ban配置
安装:
# CentOSyuminstall-yepel-release yuminstall-yfail2ban fail2ban-systemd# Ubuntuaptinstall-yfail2ban配置jail.local:
cat>/etc/fail2ban/jail.local<<'EOF' [DEFAULT] # 封禁时间:1小时 bantime = 3600 # 检测窗口:10分钟 findtime = 600 # 最大失败次数:3 maxretry = 3 # 忽略本地IP ignoreip = 127.0.0.1/8 [sshd] enabled = true port = ssh,22222 filter = sshd logpath = /var/log/secure backend = systemd [nginx-http-auth] enabled = true filter = nginx-http-auth port = http,https logpath = /www/server/nginx/logs/error.log [wordpress] enabled = true filter = wordpress port = http,https logpath = /www/wwwroot/*/wp-content/debug.log maxretry = 5 EOF启动服务:
systemctlenablefail2ban systemctl start fail2ban# 查看状态fail2ban-client status fail2ban-client status sshd自定义WordPress过滤规则:
# 创建WordPress过滤规则cat>/etc/fail2ban/filter.d/wordpress.conf<<'EOF' [Definition] failregex = ^<HOST> .* "POST .*wp-login.php.* 200 ^<HOST> .* "POST .*xmlrpc.php.* 200 ignoreregex = EOF2.3 系统自动更新
CentOS:
# 安装自动更新yuminstall-yyum-cron# 配置仅安装安全更新cat>/etc/yum/yum-cron.conf<<'EOF' [commands] update_cmd = security update_messages = yes download_updates = yes apply_updates = yes random_sleep = 360 EOFsystemctlenableyum-cron systemctl start yum-cronUbuntu:
# 安装无人值守更新aptinstall-yunattended-upgrades# 配置仅安全更新cat>/etc/apt/apt.conf.d/50unattended-upgrades<<'EOF' Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; }; Unattended-Upgrade::AutoFixInterruptedDpkg "true"; Unattended-Upgrade::MinimalSteps "true"; Unattended-Upgrade::InstallOnShutdown "false"; Unattended-Upgrade::Remove-Unused-Dependencies "true"; EOFdpkg-reconfigure-plowunattended-upgrades三、网络层安全加固
3.1 阿里云安全组最小权限配置
生产环境规则模板:
| 方向 | 协议 | 端口 | 授权对象 | 用途 | 优先级 |
|---|---|---|---|---|---|
| 入方向 | TCP | 22222 | 个人IP/32 | SSH | 100 |
| 入方向 | TCP | 80 | 0.0.0.0/0 | HTTP | 100 |
| 入方向 | TCP | 443 | 0.0.0.0/0 | HTTPS | 100 |
| 入方向 | TCP | 58888 | 个人IP/32 | 宝塔面板 | 100 |
| 入方向 | TCP | 3306 | 127.0.0.1/32 | MySQL | 100 |
| 入方向 | TCP | 21 | 个人IP/32 | FTP | 110 |
| 入方向 | TCP | 888 | 127.0.0.1/32 | phpMyAdmin | 110 |
| 入方向 | 全部 | 全部 | 0.0.0.0/0 | 拒绝 | 200 |
安全提示:最后一条"拒绝全部"规则确保未明确允许的流量都被拒绝。
3.2 系统防火墙(iptables/firewalld)
firewalld配置(CentOS):
# 设置默认区域为drop(默认拒绝)firewall-cmd --set-default-zone=drop# 添加允许规则firewall-cmd--permanent--zone=drop --add-port=22222/tcp firewall-cmd--permanent--zone=drop --add-port=80/tcp firewall-cmd--permanent--zone=drop --add-port=443/tcp firewall-cmd--permanent--zone=drop --add-rich-rule='rule family="ipv4" source address="你的IP/32" port protocol="tcp" port="58888" accept'# 重载配置firewall-cmd--reload# 查看配置firewall-cmd--zone=drop --list-all四、Web层安全加固
4.1 宝塔WAF配置
安装:软件商店 -> 堡塔网站防火墙
配置建议:
| 功能 | 推荐设置 | 说明 |
|---|---|---|
| CC攻击防护 | 开启,阈值100/分钟 | 防止恶意刷流量 |
| SQL注入防护 | 开启 | 过滤恶意SQL |
| XSS防护 | 开启 | 过滤恶意脚本 |
| 上传文件检查 | 开启 | 阻止可执行文件上传 |
| 敏感文件访问 | 开启 | 阻止访问.git/.env等 |
| 恶意蜘蛛屏蔽 | 开启 | 屏蔽非搜索引擎爬虫 |
4.2 Nginx安全头配置
宝塔 -> 网站 -> 设置 -> 配置文件,添加:
# 安全响应头 add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';" always; # 隐藏Nginx版本号 server_tokens off; # 限制请求体大小(防止超大请求攻击) client_max_body_size 10M; # 限制连接数(防止单IP占用过多资源) limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 10;五、应用层安全加固(WordPress)
5.1 安全插件配置
Wordfence安装与配置:
- 后台 -> 插件 -> 安装 Wordfence Security
- 激活后运行初始扫描
- 配置防火墙为"扩展保护"模式
关键配置项:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 登录安全 | 开启 | 限制失败尝试 |
| 防火墙规则更新 | 自动 | 保持最新规则 |
| 扫描频率 | 每周 | 平衡安全与性能 |
| 实时IP黑名单 | 开启 | 自动封禁恶意IP |
| 阻止恶意爬虫 | 开启 | 减少资源消耗 |
5.2 wp-config.php安全加固
<?php// 数据库配置(略)// 安全密钥(使用官方生成器)define('AUTH_KEY','put your unique phrase here');define('SECURE_AUTH_KEY','put your unique phrase here');// ... 其他密钥// 禁用文件编辑(防止后台被入侵后修改文件)define('DISALLOW_FILE_EDIT',true);// 禁用自动更新(可选,建议手动控制)define('AUTOMATIC_UPDATER_DISABLED',true);// 限制POST大小ini_set('post_max_size','10M');ini_set('upload_max_filesize','10M');// 禁用XML-RPC(如不需要)add_filter('xmlrpc_enabled','__return_false');// 表前缀(安装时已设置,不要修改)$table_prefix='wp_a1b2c3_';5.3 文件权限安全设置
cd/www/wwwroot/yourdomain.com# 设置文件权限(文件644,目录755)find.-typef-execchmod644{}\;find.-typed-execchmod755{}\;# wp-config.php只读(甚至root不可写)chmod444wp-config.php# 上传目录可写chmod755wp-content/uploads# 设置正确用户组chown-Rwww:www.# 验证权限ls-lawp-config.phpls-lawp-content/uploads5.4 删除默认内容
cd/www/wwwroot/yourdomain.com# 删除默认主题(保留当前使用的)rm-rfwp-content/themes/twentytwenty/rm-rfwp-content/themes/twentytwentyone/rm-rfwp-content/themes/twentytwentytwo/# 删除默认插件rm-fwp-content/plugins/hello.phprm-fwp-content/plugins/akismet/# 删除安装文件rm-fwp-admin/install.php六、定期安全检查清单
6.1 自动化检查脚本
创建/root/scripts/security_check.sh:
#!/bin/bashLOG_FILE="/var/log/security_check.log"DATE=$(date+%Y-%m-%d\%H:%M:%S)echo"[$DATE] ========== 安全检查开始 ==========">>$LOG_FILE# 检查系统更新echo"[$DATE] 检查系统更新...">>$LOG_FILEyum check-update>>$LOG_FILE2>&1# 检查Fail2ban状态echo"[$DATE] Fail2ban状态:">>$LOG_FILEfail2ban-client status>>$LOG_FILE2>&1# 检查最近登录失败echo"[$DATE] 最近登录失败(Top 10 IP):">>$LOG_FILEgrep"Failed password"/var/log/secure|awk'{print $11}'|sort|uniq-c|sort-rn|head-10>>$LOG_FILE# 检查磁盘空间echo"[$DATE] 磁盘空间:">>$LOG_FILEdf-h>>$LOG_FILE# 检查异常进程echo"[$DATE] 异常进程检查:">>$LOG_FILEpsaux|grep-E"(nc|netcat|wget|curl)"|grep-vgrep>>$LOG_FILE2>&1echo"[$DATE] ========== 安全检查完成 ==========">>$LOG_FILE加入定时任务(每周一执行):
chmod+x /root/scripts/security_check.shecho"0 9 * * 1 /root/scripts/security_check.sh"|crontab-6.2 手动检查清单
每日(5分钟):
□ 网站能否正常打开(HTTP 200) □ 宝塔面板无异常告警 □ 无异常登录通知邮件 □ 磁盘使用率 < 80%每周(15分钟):
□ 备份任务成功完成 □ 安全日志无新增异常IP □ 系统有安全更新待安装 □ WordPress插件/主题有更新 □ Fail2ban封禁列表正常每月(30分钟):
□ 安装系统安全补丁 □ 检查SSL证书有效期(<30天需续期) □ 分析访问日志,查找异常请求 □ 清理无用文件和日志 □ 检查用户权限,删除无用账号 □ 运行安全扫描(Wordfence/Sucuri) □ 检查文件完整性(对比备份) □ 更新安全插件规则库七、版本与兼容性说明
| 组件 | 本文适用版本 | 兼容性注意 |
|---|---|---|
| Fail2ban | 0.11+ | CentOS 7默认0.9,需升级 |
| firewalld | 0.6+ | CentOS 7默认支持 |
| Wordfence | 最新版 | 免费版功能足够 |
| 宝塔面板 | v8.0+ | WAF功能需安装插件 |
| Nginx | 1.24+ | 配置语法兼容 |
八、常见问题排查
Q1:Fail2ban启动失败
# 检查日志journalctl-ufail2ban# 常见原因:日志路径不存在mkdir-p/var/logtouch/var/log/secure# 重新启动systemctl restart fail2banQ2:安全组规则不生效
# 检查安全组是否关联实例# 检查规则优先级(数字小的优先)# 检查是否有冲突规则# 测试端口连通性nc-zv你的IP22222Q3:Wordfence导致网站变慢
优化方案:
- Wordfence -> 选项 -> “防火墙优化” -> 选择"学习模式完成后的优化"
- 调整扫描频率为"每周"而非"每日"
- 在"所有选项"中禁用"实时流量监控"(如不需要)
Q4:修改SSH端口后密钥登录失败
# 检查SELinuxgetenforce# 如为Enforcing,临时关闭测试setenforce0# 检查sshd_config语法sshd-t# 检查密钥权限chmod700~/.sshchmod600~/.ssh/authorized_keys九、明日预告
Day 6|性能优化与加速
技术要点:
- 图片优化:WebP转换、懒加载、响应式图片
- Gzip压缩与Brotli压缩
- 浏览器缓存策略(Cache-Control)
- 阿里云CDN全站加速配置
- 数据库查询优化与索引
十、总结
Day 5的核心任务是建立多层安全防御体系:
- ✅ 系统层:SSH加固、Fail2ban、自动更新
- ✅ 网络层:安全组最小权限、firewalld
- ✅ Web层:宝塔WAF、Nginx安全头
- ✅ 应用层:WordPress安全插件、文件权限
- ✅ 运维层:定期检查清单、自动化脚本
明天进入性能优化阶段,提升网站访问速度。
本文技术内容基于开源工具和标准云产品。版本信息更新于2026-06-15,请以官方最新版本为准。如有技术问题,欢迎在评论区交流。
