# 服务器被入侵后如何排查：日志分析完整指南

> 作者: Elaine
> 日期: 2026-03-22
> 标签: 安全, 运维

---

<h1>服务器被入侵后如何排查：日志分析完整指南</h1>
        <p class="subtitle">2026-03-22 · 约 20 分钟阅读</p>
        <div class="info">
            <div class="info-title">💡 背景</div>
            今天早上 6 点，我们的阿里云服务器被暴力破解了 root 密码。本文记录完整的排查思路和命令，供大家学习和参考。
        </div>

        <h2>📋 排查清单速览</h2>
        <div class="section">
            <p>发现服务器被入侵后，按这个顺序检查最有效率：</p>
            <ol>
                <li><strong>断开网络 / 停止对外服务</strong>（如果情况严重）</li>
                <li><strong>查看登录记录</strong>——谁在什么时候登录的？</li>
                <li><strong>查看命令历史</strong>——他们执行了什么？</li>
                <li><strong>查看网络连接</strong>——有没有正在进行的远程控制？</li>
                <li><strong>查看用户列表</strong>——有没有新增的管理员账号？</li>
                <li><strong>查看定时任务</strong>——有没有定时任务在搞事？</li>
                <li><strong>查看服务列表</strong>——有没有新增的可疑服务？</li>
                <li><strong>查看安装历史</strong>——有没有装新软件？</li>
                <li><strong>查看启动项</strong>——有没有开机自启的后门？</li>
                <li><strong>查看文件改动</strong>——关键配置文件有没有被改？</li>
            </ol>
        </div>

        <h2>1️⃣ 查看登录记录</h2>
        <div class="section">
            <p>登录记录是最重要的突破口。可以告诉你：谁、从哪个IP、什么时间登录的、待了多久。</p>

            <h3>查看成功登录记录</h3>
            <pre><code>last</code></pre>
            <p>输出示例：</p>
            <pre><code>elliot   pts/0    139.226.130.70   Tue Mar 17 18:15 - 20:27  (02:11)
root     pts/0    39.97.253.143    Sun Mar 22 06:08 - 06:08  (00:00)
reboot   system boot  6.8.0-100-generi Wed Mar 18 12:12   still running</code></pre>
            <p>重点关注：陌生的 IP 地址、非正常时段的登录、root 账号的异常登录。</p>

            <h3>过滤特定IP段（排除自己的正常IP）</h3>
            <pre><code># 查看非正常IP的成功登录（把你的IP段替换进去）
last | grep -v "139.226\|139.227\|223.166\|你的IP段"</code></pre>

            <h3>查看失败登录记录</h3>
            <pre><code>sudo lastb</code></pre>
            <p>这个命令列出所有失败的登录尝试。攻击者在密码被改之前会一直尝试，看到大量失败记录很正常。</p>

            <h3>查看 auth.log 中的 Accepted 记录</h3>
            <pre><code>sudo grep "Accepted" /var/log/auth.log
sudo grep "Accepted" /var/log/auth.log.1    # 昨天的日志</code></pre>
            <p>这是最直接的——只要看到 <code>Accepted password for root from 陌生IP</code>，就说明有人成功登录了。</p>

            <h3>限定时间范围查看日志</h3>
            <pre><code># 查看某个时间段的所有认证记录
sudo journalctl --since "2026-03-22 06:00" --until "2026-03-22 09:30" | grep -i "accepted\|failed"</code></pre>
            <p><code>journalctl</code> 是 systemd 日志的查看工具，比直接读文件更方便，支持时间范围过滤。</p>
        </div>

        <h2>2️⃣ 查看命令历史</h2>
        <div class="section">
            <p>攻击者登录后通常会执行一些命令来探测环境。命令历史是重要的突破口。</p>

            <h3>查看 bash 历史</h3>
            <pre><code>sudo cat /root/.bash_history</code></pre>
            <div class="warning">
                <div class="warning-title">⚠️ 注意</div>
                如果攻击者执行了 <code>rm -rf ~/.bash_history</code> 或设置了 <code>HISTORY=0</code>，历史记录会被清空。清空本身就是一个危险信号！
            </div>

            <h3>关键词过滤</h3>
            <pre><code># 搜索可疑命令关键词
grep -E "wget|curl|chmod|useradd|deluser|ssh|scp|tar|zip|rm |python|perl|bash" /root/.bash_history</code></pre>
            <p>攻击者常做的事：下载工具（wget/curl）、改权限（chmod）、创建账号（useradd）、内网渗透（ssh）、下载后门（python/perl 脚本）。</p>
        </div>

        <h2>3️⃣ 查看网络连接</h2>
        <div class="section">
            <p>如果攻击者正在连接你的服务器，或者服务器正在向外发起连接，这些都能看到。</p>

            <h3>查看所有 TCP/UDP 连接</h3>
            <pre><code>sudo ss -tunap</code></pre>
            <p>参数说明：<code>-t</code> TCP，<code>-u</code> UDP，<code>-n</code> 显示IP而非域名，<code>-a</code> 所有，<code>-p</code> 显示进程</p>

            <h3>重点关注</h3>
            <ul>
                <li><code>ESTABLISHED</code> — 正在进行的连接，尤其是对外部IP的</li>
                <li><code>LISTEN</code> — 服务器在监听的端口，有没有新增的监听端口</li>
                <li>陌生的外部 IP，尤其是连接到一些非常见端口（如 4444、5555、6666 等 Metasploit 默认端口）</li>
            </ul>

            <h3>查看端口对应的进程</h3>
            <pre><code>sudo lsof -i :端口号</code></pre>
            <p>比如 <code>sudo lsof -i :5901</code> 可以查看 VNC 端口被哪个进程占用。</p>

            <h3>检查对外连接</h3>
            <pre><code># 查看服务器主动向外建立的连接（排除正常内网通信）
sudo ss -tunap | grep ESTAB | grep -v "127.0.0.1\|172.21\|100.100\|内网IP段"</code></pre>
        </div>

        <h2>4️⃣ 查看用户列表</h2>
        <div class="section">
            <p>攻击者入侵后通常会创建一个自己的管理员账号，方便下次回来。</p>

            <h3>查看所有用户</h3>
            <pre><code>cat /etc/passwd | grep -v "^_" | grep "sh$"</code></pre>
            <p>只显示有 shell 的用户（能登录的账号）。重点关注陌生的账号。</p>

            <h3>查看新增用户</h3>
            <pre><code># 查看 UID >= 1000 的用户（正常新建用户从这个UID开始）
 awk -F: '{ if($3 >= 1000) print $1, $3 }' /etc/passwd</code></pre>

            <h3>查看用户组（有没有被加进 sudo 或 root 组）</h3>
            <pre><code>getent group sudo
getent group root
getent group admin</code></pre>

            <h3>查看 shadow 文件（看哪些账号有密码）</h3>
            <pre><code>sudo cat /etc/shadow | grep -v "!" | grep -v ":\*$:"</code></pre>
            <p>如果看到陌生账号有密码 hash，说明这个账号可以被登录。</p>
        </div>

        <h2>5️⃣ 查看定时任务</h2>
        <div class="section">
            <p>定时任务（cron job）是保持持久化最常用的手段。攻击者会设置一个定时任务，每分钟或每小时执行一次后门程序。</p>

            <h3>查看当前用户的 cron</h3>
            <pre><code>crontab -l
sudo crontab -l</code></pre>

            <h3>查看系统级 cron 任务</h3>
            <pre><code>sudo cat /var/spool/cron/crontabs/root
sudo ls -la /etc/cron.d/
sudo ls -la /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.monthly/</code></pre>

            <h3>查看 systemd 定时器（timer）</h3>
            <pre><code>systemctl list-timers --all</code></pre>
            <p>除了 cron，systemd 也有自己的定时器机制。</p>

            <h3>关键词搜索</h3>
            <pre><code># 在 cron 配置里搜索可疑关键词
grep -r "wget\|curl\|python\|bash\|sh " /etc/cron* /var/spool/cron/ 2>/dev/null</code></pre>
        </div>

        <h2>6️⃣ 查看服务列表</h2>
        <div class="section">
            <p>攻击者可能会在服务器上安装一个新的服务，开机自动运行，比 cron 更隐蔽。</p>

            <h3>查看正在运行的服务</h3>
            <pre><code>systemctl list-units --type=service --state=running</code></pre>
            <p>重点关注：名字奇怪的、不认识的、非系统自带的。</p>

            <h3>查看所有服务（含未启动的）</h3>
            <pre><code>systemctl list-units --type=service --all | grep -v "loaded\|systemd\|ssh\|cron\|network"</code></pre>

            <h3>检查服务状态</h3>
            <pre><code>systemctl status 服务名
sudo systemctl status 可疑服务名</code></pre>
        </div>

        <h2>7️⃣ 查看软件安装历史</h2>
        <div class="section">
            <p>如果攻击者用包管理器安装了工具，可以通过安装历史查到。</p>

            <h3>apt 安装历史（Debian/Ubuntu）</h3>
            <pre><code>cat /var/log/apt/history.log | tail -100
cat /var/log/apt/history.log.1.gz | zcat | tail -100</code></pre>
            <p>可以看到什么时间安装了什么包。如果发现可疑的软件（如 nmap、netcat、hydra 等黑客工具），要警惕。</p>

            <h3>查看 dpkg 安装记录</h3>
            <pre><code>dpkg -l | grep "^ii" | tail -50</code></pre>
            <p>列出所有已安装的包。重点关注不认识的包。</p>

            <h3>yum/dnf 安装历史（CentOS/RHEL）</h3>
            <pre><code>cat /var/log/yum.log
sudo yum history</code></pre>
        </div>

        <h2>8️⃣ 查看文件改动</h2>
        <div class="section">
            <p>如果攻击者修改了系统文件（如 <code>/etc/passwd</code>、<code>/etc/shadow</code>、<code>/etc/sudoers</code>），可以通过文件的修改时间查到。</p>

            <h3>查看某个时间点附近修改的文件</h3>
            <pre><code># 查找 2026-03-22 06:00 到 09:30 之间修改的系统文件
sudo find /etc /usr/bin /usr/sbin /bin /sbin -type f -newer /var/log/auth.log.1 -mmin -1200 2>/dev/null | grep -v "sysstat\|e2scrub"</code></pre>

            <h3>查看敏感文件的修改时间</h3>
            <pre><code>ls -la /etc/passwd /etc/shadow /etc/sudoers /etc/ssh/sshd_config
stat /etc/passwd</code></pre>

            <h3>使用 AIDE 进行完整性检测（推荐安装）</h3>
            <pre><code># AIDE 是一个文件完整性监控工具
sudo apt install aide
sudo aideinit</code></pre>
            <p>平时运行一次 <code>aide --check</code> 就能发现哪些文件被改过了。建议在服务器刚部署好时就建立基准。</p>

            <h3>使用 rkhunter 检测 Rootkit</h3>
            <pre><code>sudo apt install rkhunter
sudo rkhunter --check</code></pre>
            <p>rkhunter 会检查常见的 Rootkit 特征、隐藏进程、可疑网络连接等。</p>
        </div>

        <h2>9️⃣ 查看 Docker 容器</h2>
        <div class="section">
            <p>攻击者可能利用 Docker 来运行后门或挖矿程序。</p>

            <pre><code># 查看正在运行的容器
docker ps -a

# 查看所有镜像
docker images

# 查看容器日志（如果发现可疑容器）
docker logs 容器ID</code></pre>
            <p>本次排查中，Docker 没有运行任何容器，也没有可疑镜像。</p>
        </div>

        <h2>🔟 systemd journal 高级查询</h2>
        <div class="section">
            <p><code>journalctl</code> 是查看 Linux 系统日志的利器，功能比直接读文件强大得多。</p>

            <h3>按时间范围查询</h3>
            <pre><code># 查看今天凌晨到现在的所有日志
journalctl --since "today"

# 查看某个时间段的日志
journalctl --since "2026-03-22 06:00" --until "2026-03-22 09:30"

# 查看昨天的日志
journalctl --since "2026-03-21 00:00" --until "2026-03-22 00:00"</code></pre>

            <h3>按服务过滤</h3>
            <pre><code># 只看 sshd 的日志
journalctl -u sshd --since "2026-03-22 06:00"

# 只看 cron 的日志
journalctl -u cron --since "today"</code></pre>

            <h3>关键词搜索</h3>
            <pre><code># 搜索包含 "error" 的日志
journalctl --since "today" | grep -i error

# 搜索多个关键词
journalctl --since "2026-03-22 06:00" | grep -E "wget|curl|useradd|chmod|sudo"</code></pre>

            <h3>实时跟踪日志</h3>
            <pre><code># 等效于 tail -f，实时监控新日志
journalctl -f</code></pre>
        </div>

        <h2>📊 本次排查完整命令清单</h2>
        <div class="section">
            <p>以下是我们这次实际执行的命令，按照顺序执行即可复现排查过程：</p>

            <pre><code># ========== 1. 登录记录 ==========
last
sudo lastb
sudo grep "Accepted" /var/log/auth.log
sudo journalctl --since "2026-03-22 06:00" --until "2026-03-22 09:30"

# ========== 2. 命令历史 ==========
sudo cat /root/.bash_history

# ========== 3. 网络连接 ==========
sudo ss -tunap
sudo lsof -i :5901  # 查看特定端口

# ========== 4. 用户列表 ==========
cat /etc/passwd | grep -v "^_" | grep "sh$"
getent group sudo

# ========== 5. 定时任务 ==========
sudo crontab -l
sudo cat /var/spool/cron/crontabs/root
sudo ls -la /etc/cron.d/

# ========== 6. 服务列表 ==========
systemctl list-units --type=service --state=running

# ========== 7. Docker ==========
docker ps -a

# ========== 8. 文件改动 ==========
sudo find /etc -type f -newer /var/log/auth.log.1 2>/dev/null</code></pre>
        </div>

        <h2>🚨 发现入侵后的应急响应</h2>
        <div class="section">
            <ol>
                <li><strong>断网</strong> — 如果情况严重，立即断开服务器网络连接，防止攻击者继续操作或对外攻击</li>
                <li><strong>截图/录屏</strong> — 先把当前屏幕截图、日志输出保存，作为证据</li>
                <li><strong>停止可疑服务</strong> — <code>systemctl stop 可疑服务名</code></li>
                <li><strong>删除攻击者账号</strong> — <code>userdel -r 用户名</code></li>
                <li><strong>删除攻击者的定时任务</strong> — <code>crontab -r -u 用户名</code></li>
                <li><strong>删除攻击者的 SSH 密钥</strong> — 检查 <code>~/.ssh/authorized_keys</code>，移除不认识公钥</li>
                <li><strong>更改所有密码</strong> — root、数据库、应用密码等全部改掉</li>
                <li><strong>查日志确认攻击范围</strong> — 确定攻击者到底做了什么</li>
                <li><strong>快照备份</strong> — 在清理前创建快照，以防万一</li>
                <li><strong>重装系统</strong> — 如果不确定清理是否干净，最稳妥的办法是重装</li>
            </ol>
        </div>

        <h2>💡 预防措施总结</h2>
        <div class="section">
            <table>
                <tr><th>措施</th><th>命令/操作</th><th>效果</th></tr>
                <tr><td>关闭密码登录</td><td>修改 sshd_config</td><td>杜绝暴力破解</td></tr>
                <tr><td>只允许密钥登录</td><td>PubkeyAuthentication yes</td><td>无法被暴力破解</td></tr>
                <tr><td>限制登录IP</td><td>阿里云安全组规则</td><td>只有指定IP能登录</td></tr>
                <tr><td>安装 fail2ban</td><td>apt install fail2ban</td><td>自动封禁攻击者IP</td></tr>
                <tr><td>改掉root密码</td><td>passwd root</td><td>阻止已知密码被利用</td></tr>
                <tr><td>定期查看日志</td><td>last / lastb</td><td>及时发现异常</td></tr>
                <tr><td>安装 AIDE</td><td>apt install aide</td><td>文件完整性监控</td></tr>
                <tr><td>开启 SSH 失败通知</td><td>fail2ban + 邮件告警</td><td>被攻击时第一时间知道</td></tr>
            </table>
        </div>

        <h2>📚 推荐工具</h2>
        <div class="section">
            <ul>
                <li><strong>AIDE</strong> — 文件完整性监控，建立基准后能发现任何文件改动</li>
                <li><strong>rkhunter</strong> — Rootkit 检测，扫描常见的后门特征</li>
                <li><strong>fail2ban</strong> — 自动封禁多次登录失败的 IP</li>
                <li><strong>lynis</strong> — Linux 安全审计工具，扫描系统漏洞和配置问题</li>
                <li><strong>ClamAV</strong> — 恶意软件扫描器，可以扫描服务器上的病毒和后门</li>
            </ul>
        </div>

        <h2>📝 总结</h2>
        <div class="section">
            <p>排查服务器入侵是一个系统工程，重点是：</p>
            <ul>
                <li><strong>先看登录记录</strong> — 确认攻击者是谁、从哪来、什么时候来的</li>
                <li><strong>再看命令历史</strong> — 确认攻击者做了什么</li>
                <li><strong>然后排查后门</strong> — 用户、定时任务、服务、文件改动</li>
                <li><strong>最后清理加固</strong> — 删账号、改密码、关漏洞</li>
            </ul>
            <p>最重要的是：平时就要做好安全措施，而不是等到被入侵才想起来。希望这篇文章对你有帮助，祝大家的服务器都平安！🛡️</p>
        </div>