网站被黑了怎么排查,后门查杀方法

前言

网站突然被挂了黑链、被跳转、内容被篡改?别慌,本文讲网站被黑后怎么排查、怎么找后门、怎么清理。

一、怎么判断被黑了

常见现象

  1. 网站打开变成别的页面(赌博、色情)
  2. 网站里多了很多不认识的页面
  3. 百度搜索显示的标题不对
  4. 网站突然变慢、CPU飙升
  5. 后台密码被改了

二、第一步:找最近修改的文件

黑客一般会往网站目录里传后门文件。

找最近24小时修改的文件

find /www/wwwroot/你的站/ -mtime -1 -type f

找最近7天修改的文件

find /www/wwwroot/你的站/ -mtime -7 -type f

找最近修改的PHP文件

find /www/wwwroot/你的站/ -name "*.php" -mtime -7

重点看: 你不认识的、突然冒出来的PHP文件。

三、第二步:找可疑代码

找一句话木马

黑客常用的一句话后门:

<?php @eval($_POST['cmd']); ?>

搜索:

grep -r "eval(" /www/wwwroot/你的站/
grep -r "assert(" /www/wwwroot/你的站/
grep -r "base64_decode(" /www/wwwroot/你的站/
grep -r "str_rot13(" /www/wwwroot/你的站/

找加密的后门

很多后门是加密的:

grep -r "gzinflate(" /www/wwwroot/你的站/
grep -r "gzuncompress(" /www/wwwroot/你的站/
grep -r "strrev(" /www/wwwroot/你的站/

找下载文件的后门

grep -r "file_put_contents(" /www/wwwroot/你的站/
grep -r "fwrite(" /www/wwwroot/你的站/

四、第三步:看Web日志

看Nginx访问日志,找可疑的请求。

看最近的访问

tail -100 /var/log/nginx/access.log

找可疑的POST请求

grep "POST" /var/log/nginx/access.log | tail -50

找访问可疑文件的

grep ".php" /var/log/nginx/access.log | grep "cmd"

五、第四步:看进程

看有没有可疑进程在跑。

ps aux

重点看:

  • 不认识的进程
  • 占CPU很高的进程
  • 从/tmp目录跑的进程

杀掉可疑进程:

kill -9 进程ID

六、第五步:看定时任务

黑客会加定时任务,维持后门。

crontab -l

看有没有不认识的定时任务。

还有系统级的:

cat /etc/crontab
ls /etc/cron.d/

七、第六步:看后门文件特征

常见后门文件名

  • shell.php
  • cmd.php
  • 1.php
  • x.php
  • upload.php
  • webshell.php

看文件权限

后门一般是777权限:

find /www/wwwroot/你的站/ -perm 777

八、清理方法

方法1:删除可疑文件

确认是后门的直接删:

rm -f /www/wwwroot/你的站/可疑文件.php

方法2:重新上传程序

最安全的方法: 备份数据库,重新上传干净的程序,再恢复数据库。

方法3:改所有密码

  • 后台密码
  • 数据库密码
  • FTP密码
  • SSH密码

九、预防措施

1. 程序及时更新

WordPress、ThinkPHP等程序有漏洞要及时更新。

2. 上传目录禁执行

location ~* /upload/.*\.php$ {
    deny all;
}

3. 定期备份

每天自动备份网站文件和数据库。

4. 改后台地址

不要用默认的admin后台地址。

5. 用安全插件

WordPress可以装Wordfence等安全插件。

十、常见坑

坑1:只删文件不改密码

黑客可能已经留了别的后门,删一个没用。

正确: 删文件 + 改所有密码 + 看定时任务。

坑2:备份也被感染了

备份文件里也有后门,恢复后又被黑了。

解决: 备份也要查。

坑3:只查网站目录

黑客可能在系统里留了后门(比如/tmp目录)。

解决: 也要查系统进程、定时任务。

总结

记住:

  1. 先找最近修改的文件
  2. 再找可疑代码(eval、base64_decode)
  3. 看Web日志和进程
  4. 看定时任务
  5. 删后门 + 改所有密码
  6. 最安全是重新上传干净程序

最快排查:

find /www/wwwroot/你的站/ -name "*.php" -mtime -7
grep -r "eval(" /www/wwwroot/你的站/

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-9 07:44 

Nginx限制IP访问,拉黑恶意爬虫IP配置

前言

网站被恶意爬虫狂刷,服务器CPU跑满?或者有人恶意攻击你的网站?可以用 Nginx 直接把这些 IP 拉黑,不让他们访问。本文讲一下怎么配置 IP 访问控制。

怎么找到恶意 IP

先看 Nginx 访问日志,找出访问最频繁的 IP:

# 统计访问次数最多的前 20 个 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

如果某个 IP 访问量特别大,可能就是恶意爬虫或者攻击。

拉黑单个 IP

在 Nginx 配置里加:

server {
    listen       80;
    server_name  www.example.com;

    root  /var/www/html;

    # 拉黑某个 IP
    location / {
        deny 192.168.1.100;
        allow all;
    }
}

被拉黑的 IP 访问会返回 403 Forbidden。

拉黑 IP 段

拉黑整个 C 段

deny 192.168.1.0/24;

就是拉黑 192.168.1.1 到 192.168.1.255。

拉黑多个 IP

deny 192.168.1.100;
deny 192.168.1.101;
deny 192.168.1.102;

白名单模式(只允许某些 IP 访问)

如果想只允许特定 IP 访问(比如后台管理页面):

# 只允许内网 IP 访问 /admin
location /admin {
    allow 127.0.0.1;
    allow 192.168.1.0/24;
    deny all;
}

其他 IP 访问 /admin 都会返回 403。

用 include 单独管理黑名单

IP 多了不想写在主配置里,可以单独放一个文件:

第一步:创建黑名单文件

vi /etc/nginx/conf.d/blacklist.conf

内容:

deny 192.168.1.100;
deny 192.168.1.101;
deny 10.0.0.0/8;

第二步:在主配置里引入

server {
    listen       80;
    server_name  www.example.com;

    root  /var/www/html;

    # 引入黑名单
    include /etc/nginx/conf.d/blacklist.conf;

    location / {
        try_files $uri $uri/ =404;
    }
}

这样以后加黑名单只要改 blacklist.conf 文件,然后重载 Nginx 就行。

对某个目录单独限制

比如只对 /admin 目录限制:

location /admin {
    allow 127.0.0.1;
    allow 192.168.1.0/24;
    deny all;

    root /var/www/html;
    index index.php;
}

检查配置并重载

nginx -t
nginx -s reload

用防火墙拉黑(更彻底)

如果想在系统层面拉黑,用 firewall-cmd:

# 拉黑单个 IP
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' reject"

# 重新加载
firewall-cmd --reload

或者用 iptables:

iptables -I INPUT -s 192.168.1.100 -j DROP

常见坑

坑1:改了黑名单忘了 reload

加了黑名单,但 IP 还能访问。

原因: Nginx 没重载。

解决:

nginx -s reload

坑2:把自己 IP 拉黑了

测试的时候不小心把自己 IP 也拉黑了,自己也访问不了了。

解决: 先从服务器上用 curl 测试:

curl -I http://127.0.0.1

确认没问题再 reload。

坑3:CDN 后面拿不到真实 IP

用了 CDN 之后,日志里全是 CDN 的 IP,看不到用户真实 IP。

解决: 先配置 Nginx 获取真实 IP:

set_real_ip_from CDN的IP段;
real_ip_header X-Forwarded-For;

这样日志里才能看到用户真实 IP,才能正确拉黑。

总结

操作 命令/配置
拉黑单个 IP deny 192.168.1.100;
拉黑 IP 段 deny 192.168.1.0/24;
白名单模式 allow 127.0.0.1; deny all;
单独黑名单文件 include /etc/nginx/conf.d/blacklist.conf;
重载生效 nginx -s reload

提醒: 拉黑 IP 之前先确认是不是真的恶意,别误杀正常用户。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:30 
'); })();