服务器被挂马后,如何加强网站安全防护?
服务器被挂马后,单纯的删除恶意文件往往治标不治本。
攻击者可能已经留下了后门、修改了系统配置,或者植入了计划任务。
如果不从整体上加强网站安全防护,网站很快会再次沦陷。
本文面向零基础用户,按操作顺序讲解加固实战步骤,每一步都附带命令、配置示例或面板路径,你可以直接照做。
第一步:彻底清理与恢复备份
在加固之前,先确保环境是“干净”的。
- 备份当前数据(重要)
通过宝塔面板或 tar 命令将网站目录、数据库全量备份到本地,防止误删正常文件。
- 排查可疑文件与进程
登录服务器(SSH),执行以下命令:
ps aux | grep -i 'httpd|nginx|php' | grep -v grep
top -c # 查看CPU占用异常的进程
find /home/wwwroot -type f -name '*.php' -mmin -60 # 最近60分钟修改的PHP文件
如果发现不明进程或不认识的文件,先通过 kill 终止进程并删除文件,但不要急着重启服务。
- 恢复备份(推荐重装)
如果确认后门无法手工清除干净,最稳妥的方式是:重装系统 → 恢复备份到临时目录 → 扫描无误后再上线。
第二步:最小化文件权限与禁用危险函数
攻击者常利用文件权限过高或PHP危险函数执行恶意代码。
- 网站目录权限(宝塔面板操作):进入“文件” → 选中网站根目录 → 权限设置 → 将目录权限设为
755,文件设为644;所有者设为www用户。 - 禁用PHP危险函数(宝塔面板路径:软件商店 → 已安装 → PHP设置 → 禁用函数):添加
system、exec、shell_exec、popen、proc_open、set_time_limit等函数。保存后重启PHP。 - 禁止执行上传目录(Nginx配置):在站点伪静态或配置文件中加入:
location /uploads/ {
location ~ .*\.(php|js)$ {
deny all;
}
}
保存后重载Nginx。
第三步:加固系统登录与远程访问
弱口令是挂马的第一入口。
- 修改SSH端口
编辑 /etc/ssh/sshd_config,将 Port 22 修改为其他端口(如 Port 10022),然后 systemctl restart sshd。
- 禁止root直接登录
SSH配置中设置 PermitRootLogin no,创建一个普通用户(如 admin)并加入 wheel 组,平时用该用户登录再 su - 提权。
- 安装Fail2ban防暴力破解
yum install fail2ban -y # CentOS
systemctl enable fail2ban && systemctl start fail2ban
默认配置会自动拦截多次失败登录的IP。
第四步:配置Web应用防火墙与系统防火墙
- 开启系统防火墙(宝塔面板:安全 → 系统防火墙):确保只放行SSH(新端口)、HTTP(80)、HTTPS(443),其他端口关闭。
- 安装网站防火墙插件
宝塔面板推荐“网站防火墙”插件(免费版有基础规则),可以拦截SQL注入、XSS等常见攻击。
同样可以安装ModSecurity(需编译,新手建议直接用宝塔插件)。
- 定期扫描木马
宝塔面板内置“网站木马查杀”工具(安全 → 木马查杀),建议每周执行一次全盘扫描。
第五步:验证加固效果与定期巡检清单
- 验证后门是否残留
扫描工具跑一遍,然后模拟攻击:在浏览器访问 /uploads/shell.php 等已知后门路径,看是否返回404或拒绝访问。
- 检查计划任务
crontab -l
less /var/spool/cron/*
确认没有可疑的定时脚本(如curl远程下载、执行命令等)。
- 查看日志
宝塔面板 → 安全 → 系统安全日志,或直接查看 /var/log/secure 和网站访问日志,确认没有异常登录或访问。
避坑提醒:不要只删除文件不修漏洞;
不要使用弱密码或默认端口;
不要随意给上传目录执行权限。
如果自己排查困难,建议联系专业安全公司做一次渗透测试。
按照以上步骤操作后,你的服务器安全防线会明显提升。
后续请保持每月检查一次权限和系统补丁更新,别等再次被挂马才想起加固。