服务器一旦被入侵,排查登录历史、定位攻击来源并封堵安全漏洞就成了当务之急。本文整理了一套系统性的方法,通过Linux自带的日志工具来分析异常登录、追踪可疑IP,并给出关键应急处理步骤,特别适合运维人员和开发者参考。
1. 查看最近的登录记录(last 命令)
使用 last 命令可以快速回顾系统的登录历史,帮你了解有哪些用户、在什么时间、从哪里登录了系统。
last -n 20 # 查看最近20条登录记录
last -f /var/log/wtmp # 指定登录日志文件(默认也是wtmp)
查看时需要重点观察这几个信息:
- 用户名(例如:root、admin,或者任何陌生账号)
- 登录时间(是否是凌晨或非工作时段等可疑时间)
- 登录来源IP
- 登录方式(例如 SSH pts/0)
来看一个示例输出:
root pts/0 192.168.1.100 Thu Apr 11 10:15 still logged in
hacker pts/1 45.76.123.89 Thu Apr 11 09:55 - 10:05 (00:10)
如果你发现了陌生的用户名或者来自异常地理位置的IP登录记录,这很可能是入侵留下的痕迹。这类日志分析是入侵响应的核心环节。
2. 查看失败登录尝试(lastb 命令)
lastb 命令专门用来查看所有失败的登录尝试,暴力破解的攻击行为通常会在这里留下大量记录。
lastb | head -n 20 # 查看最近20次失败登录尝试
如果发现某个IP地址在短时间内连续出现多次登录失败,那么它很可能正在进行暴力破解攻击:
banned ssh:notty 103.20.45.89 Thu Apr 11 09:50 - 09:51 (00:01)
3. 检查 SSH 登录日志(/var/log/secure 或 /var/log/auth.log)
更详细的登录信息通常记录在SSH服务的专属日志中。
3.1 查找成功登录记录
根据你的Linux发行版,使用不同的命令:
grep "Accepted" /var/log/secure # CentOS/RHEL
grep "Accepted" /var/log/auth.log # Ubuntu/Debian
示例输出如下:
Apr 11 10:15:00 server sshd[1234]: Accepted password for root from 45.76.123.89 port 45678 ssh2
3.2 查找失败登录记录
grep "Failed password" /var/log/secure
grep "Failed password" /var/log/auth.log
3.3 查找 root 用户远程登录
grep "session opened" /var/log/secure | grep "root"
4. 查看当前在线用户(who / w)
入侵者可能还保持着活跃的连接。使用以下命令可以立即查看当前所有登录的用户:
who
或者使用 w 命令,它不仅能显示用户,还能看到他们正在执行的命令:
w
如果在输出中发现了陌生的用户名(例如 hacker、test123),那就说明系统很可能已经被控制,需要立即处理。
5. 检查 SSH 配置是否被篡改
攻击者有时会修改SSH服务的配置文件,放宽登录限制以便后续访问。检查一下关键配置:
cat /etc/ssh/sshd_config | grep PermitRootLogin
通常,出于安全考虑,建议将此项设置为:
PermitRootLogin no
6. 查看用户执行命令历史(.bash_history)
每个用户的家目录下都有一个 .bash_history 文件,记录了该用户执行过的命令。检查它可能发现入侵者的操作意图。
cat ~/.bash_history | tail -n 50
请重点查找以下类型的可疑命令:
- 使用
wget 或 curl 下载来路不明的脚本或程序。
- 执行权限提升命令,如
chmod 777 或 ./xxx。
- 添加用户、修改密码或执行其他可能植入后门的脚本命令。
7. 追踪可疑 IP 来源(whois / ping)
当你锁定了一个可疑IP,可以进一步追查它的来源。
whois 45.76.123.89
ping -c 4 45.76.123.89
此外,还可以利用在线安全数据库进行查询,例如通过AbuseIPDB的API检查该IP是否有恶意历史:
curl -s https://api.abuseipdb.com/api/v2/check?ipAddress=45.76.123.89
8. 应急处理建议
发现入侵后,应立即采取行动遏制损失。
8.1 封禁可疑 IP
使用防火墙规则立即阻断攻击源:
- iptables(传统):
iptables -A INPUT -s 45.76.123.89 -j DROP
- firewalld(CentOS 7+/RHEL):
firewall-cmd --add-rich-rule='rule family="ipv4" source address="45.76.123.89" reject' --permanent
firewall-cmd --reload
- fail2ban(如果已安装):
fail2ban-client set sshd banip 45.76.123.89
8.2 修改 SSH 配置并重启服务
立即加固SSH服务,防止攻击者再次利用相同漏洞进入。
vim /etc/ssh/sshd_config
建议进行如下关键修改:
Port 2222 # 更改默认端口
PermitRootLogin no # 禁止root直接登录
修改后保存并重启SSH服务:
systemctl restart sshd
8.3 强制踢出可疑用户
如果发现仍有可疑用户在线,立即将其踢出系统:
pkill -u hacker
8.4 锁定高危账户
锁定你怀疑已被入侵的账户,禁止其登录:
usermod -L hacker
8.5 更改所有关键账户密码
立即更改所有可能已泄露的账户密码,尤其是root账户:
passwd root
8.6 更新系统与安装安全补丁
确保系统不存在已知漏洞,更新所有软件包:
yum update -y # CentOS/RHEL
apt update && apt upgrade -y # Ubuntu/Debian
9. 总结与建议
服务器被入侵后,第一步不一定是立即重装,而是应该冷静地进行调查,搞清楚入侵路径并清除隐患。通过 last、lastb、grep 分析日志,结合 w、.bash_history 查看实时状态和历史命令,我们就能快速定位攻击来源,分析入侵行为。
当然,如果系统已被完全控制或植入了难以清除的后门,最稳妥的做法是备份重要数据后彻底重装系统。在新环境中部署时,务必强化安全措施,例如:
- 禁止root用户远程SSH登录。
- 使用非默认的SSH端口。
- 部署并启用 fail2ban 等防暴力破解工具,并配置严格的防火墙策略。
- 使用SSH密钥对登录,完全替代密码登录方式。
- 建立定期审计机制,检查登录日志和账户活动。
保持系统的安全性是一个持续的过程,定期关注安全领域的动态和最佳实践,例如在云栈社区的网络/系统板块与其他技术同行交流,能帮助你更好地防御未来的威胁。