在 Web 安全事件响应中,Linux 服务器往往是攻击者最终落脚的地方。无论是通过 XSS 窃取会话、利用 SQL 注入写入 webshell,还是直接爆破 SSH,入侵行为都会在系统与中间件日志中留下痕迹。本文整理一份面向运维与安全初学者的日志审计与入侵排查基础清单,帮助你在怀疑服务器被入侵时快速定位问题。
一、先看哪些日志
Linux 日志分散在多个位置,排查时建议按以下优先级查看:
- 认证日志:
/var/log/secure(RHEL/CentOS)或/var/log/auth.log(Debian/Ubuntu),记录 SSH 登录、sudo、su 等行为。 - 系统日志:
/var/log/messages或/var/log/syslog,记录内核、服务启动与异常。 - Web 访问日志:Nginx 默认在
/var/log/nginx/access.log,Apache 在/var/log/httpd/access_log或/var/log/apache2/access.log。 - Web 错误日志:
error.log,常暴露 PHP 报错、路径遍历尝试。 - 计划任务日志:
/var/log/cron,攻击者常通过 cron 持久化。 - 登录历史:
last、lastb、/var/log/wtmp、/var/log/btmp。 - 命令历史:
~/.bash_history,注意攻击者可能清空或替换。
二、认证与登录排查
SSH 是最高频的入口。先统计失败登录:
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
关注点:
- 同一 IP 大量失败后出现成功登录,说明可能被爆破成功。
- 非工作时间、非常用地区的成功登录。
- 新增的 UID 为 0 的用户:
awk -F: '$3==0{print $1}' /etc/passwd。 - 可疑的 sudo 记录:
grep sudo /var/log/secure。 - 空密码账户与可登录 shell:检查
/etc/shadow中密码字段为空或!的账户。
三、Web 日志中的攻击痕迹
Web 日志是 XSS、SQL 注入、webshell 上传的第一现场。常见特征:
- SQL 注入:URL 中出现
union select、sleep(、benchmark(、information_schema、单引号与--组合。 - XSS:参数中出现
<script、onerror=、javascript:、document.cookie。 - 路径遍历与文件包含:
../、/etc/passwd、php://input、data://。 - webshell 访问:短小路径如
/shell.php、/1.php,POST 请求体异常大,响应 200 但 UA 为curl、python-requests。 - 扫描器:UA 含
sqlmap、nikto、nmap、masscan。
快速统计高频 IP 与状态码:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20
awk '{print $9}' access.log | sort | uniq -c | sort -nr
重点看 404 激增(目录扫描)、499/500 集中(利用尝试)、单 IP 短时间内大量 POST。
四、进程、网络与文件排查
- 异常进程:
ps aux --sort=-%cpu | head,关注无路径、随机名、高 CPU 的进程。 - 网络连接:
ss -antp或netstat -antp,关注 ESTABLISHED 的外连 IP 与非常用端口。 - 监听端口:
ss -lntp,核对是否有未知服务监听 0.0.0.0。 - 开机自启:
systemctl list-unit-files --state=enabled、/etc/rc.local、/etc/init.d/。 - 计划任务:
crontab -l、/etc/crontab、/etc/cron.*/、/var/spool/cron/。 - 最近改动文件:
find /var/www -type f -mtime -7 -ls,重点看.php、.jsp、.sh。 - SUID 异常:
find / -perm -4000 -type f 2>/dev/null。 - SSH 公钥:检查
/root/.ssh/authorized_keys与各用户目录,攻击者常写入自己的公钥。
五、Web 应用层的两个关键点
XSS 的常见方式与前端防御
常见方式包括反射型(恶意脚本随 URL 参数回显)、存储型(写入数据库后所有访问者触发)、DOM 型(前端 JS 直接操作 innerHTML、location.hash)。前端防御要点:
- 输出编码:根据上下文使用 HTML、属性、JS、URL 编码,避免直接拼接。
- 使用
textContent而非innerHTML,必须插入 HTML 时用 DOMPurify 等库净化。 - 设置 CSP:
Content-Security-Policy: default-src 'self',禁止内联脚本。 - Cookie 加
HttpOnly、Secure、SameSite,降低会话被窃风险。 - 对富文本采用白名单过滤,而不是黑名单。
MySQL 防止 SQL 注入的几种写法
- 预处理语句:PDO 使用
prepare+execute,参数绑定,杜绝拼接。 - 参数化查询:mysqli 的
bind_param,明确类型。 - ORM 参数绑定:如 Laravel Eloquent、MyBatis 的
#{},避免${}拼接。 - 最小权限:Web 数据库账户只授予必要库表的增删改查,禁用
FILE、LOAD_FILE。 - 输入校验:对排序字段、表名等无法参数化的位置使用白名单映射。
- 错误信息收敛:关闭详细报错,避免泄露表结构。
六、加固与持续审计
- 关闭密码登录,改用密钥;修改默认 SSH 端口并限制来源 IP。
- 最小化安装,关闭无用服务与端口,及时打补丁。
- 部署 fail2ban 或 WAF,拦截爆破与常见注入。
- 日志集中收集(rsyslog、Filebeat + ELK),避免本地被清除。
- 定期核对文件哈希(AIDE、Tripwire),发现篡改。
- 建立基线:正常进程、端口、账户、计划任务清单,异常时快速对比。
入侵排查的核心是“对比基线、交叉验证”。单一日志可能被清理,但认证、Web、进程、网络、文件多个维度同时异常时,基本可以确认失陷。发现后应先隔离取证,再清理与修复,最后复盘入口并加固,避免二次入侵。
未经允许不得转载:任鹏个人博客 » Linux 日志审计与入侵排查基础清单


朋友圈点赞图在线生成源码