登录日志审计筛查异常爆破账号及时拦截:登录日志审计
为什么需要筛查登录日志中的异常爆破账号
暴力破解(爆破)是服务器最常见的攻击方式之一。
攻击者通过脚本持续尝试不同的用户名和密码组合,试图登录你的服务器。
如果不及时发现并拦截,轻则资源占用,重则服务器被入侵。
通过分析系统的登录日志(Linux 一般为 /var/log/secure 或 /var/log/auth.log),你可以快速找出短时间内大量登录失败的 IP 和账号,然后手动或自动封禁这些 IP。
下面我们按步骤来操作。
第一步:找到并查看登录日志文件
登录你的服务器(SSH),使用以下命令查看日志是否存在:
ls -lh /var/log/secure
如果文件不存在(多见于 Debian/Ubuntu 系统),路径通常是 /var/log/auth.log:
ls -lh /var/log/auth.log
注意:你需要 root 权限或 sudo 才能读取这些文件。如果提示权限不足,在前面加上 sudo。
第二步:筛选失败登录记录,找出爆破行为
使用 grep 命令从日志中过滤出含 "Failed password" 的行,示例:
sudo grep "Failed password" /var/log/secure | head -20
输出类似:
Feb 20 10:15:23 server sshd[1234]: Failed password for root from 192.168.1.100 port 54321 ssh2
Feb 20 10:15:24 server sshd[1234]: Failed password for root from 192.168.1.100 port 54321 ssh2
如果你只关心特定的登录名(比如 root 或 admin),可以进一步筛选:
sudo grep "Failed password for root" /var/log/secure
要统计每个 IP 的失败次数,可以这样:
sudo grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -10
这条命令会列出失败次数最多的前 10 个 IP。
如果某个 IP 在短时间内(比如 5 分钟)出现几十甚至上百次失败,基本可以判定为爆破攻击。
第三步:临时封禁可疑 IP(手动方式)
一旦确认了攻击 IP,最直接的方法是使用 iptables 临时阻断(如果系统使用 firewalld 则命令略有不同)。
使用 iptables 封禁 IP
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
将 192.168.1.100 替换为实际攻击 IP。
此命令立即生效,但重启后失效。
如果你希望规则持久保存,需要安装 iptables-persistent 或使用 firewalld。
使用 firewalld 封禁 IP(CentOS 7+/RHEL 7+)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'
sudo firewall-cmd --reload
如果使用宝塔面板
在宝塔后台左侧点击“安全”,进入“防火墙”页面,在“IP规则”中点击“添加规则”,输入攻击 IP,选择“禁止”,保存即可。
第四步:使用 fail2ban 实现自动封禁
手动封禁只适合临时处理,推荐安装 fail2ban 自动监控日志并封禁反复失败的 IP。
下面以 CentOS 为例:
sudo yum install epel-release -y
sudo yum install fail2ban -y
安装完成后,创建本地配置文件:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑 jail.local,找到 [sshd] 模块,确保启用:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 5
bantime = 3600
maxretry:失败次数超过此值即封禁(建议 5 次)bantime:封禁时间,单位秒,3600 = 1 小时
启动 fail2ban 并设置开机自启:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
查看拦截情况:
sudo fail2ban-client status sshd
输出会显示当前封禁的 IP 列表和总数。
避坑指南:日志轮转与误封处理
- 日志轮转:系统每天或每周会轮转日志(如
/var/log/secure-YYYYMMDD),grep时可以同时查旧文件:sudo grep "Failed password" /var/log/secure* - 误封自己的 IP:如果你自己在云服务器上操作,请确保你已经用其他方式(如云控制台 VNC)能连上。设置 fail2ban 时,可以先调大
maxretry或把自己 IP 加入白名单。 - 日志权限:部分系统禁止普通用户读取
/var/log/secure,必须使用sudo。如果执行命令后无输出,先用sudo -i切换 root 再试。
效果验证:确认拦截生效
封禁后,
你可以从另一个 IP 尝试登录你的服务器,
输入错误密码超过 maxretry 次数后,
应该会收到类似 Permission denied (publickey) 或直接拒绝连接。
查看 fail2ban 封禁状态:
sudo fail2ban-client status sshd | grep "Banned IP list"
如果你看到之前攻击的 IP,说明已成功拦截。
另外,定期审查日志可以发现未封住的漏网之鱼。
养成每天查看一次 sudo grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -5 的习惯,能帮你早发现问题。
常见问题 (FAQ)
Q: 日志文件太大,grep 很慢怎么办?
A: 使用 tail -n 10000 /var/log/secure | grep 'Failed password' 只查看最后 10000 行,或者用 head 只看新增部分。也可以启用日志轮转压缩。
Q: 误封了重要 IP 怎么解封?
A: fail2ban 解封:sudo fail2ban-client set sshd unbanip 192.168.1.100;iptables 解封:sudo iptables -D INPUT -s 192.168.1.100 -j DROP。
Q: 我的服务器是 Windows 系统,怎么审计登录日志?
A: Windows 可以通过“事件查看器”->“Windows 日志”->“安全”筛选事件 ID 4625(登录失败)来找到爆破 IP。之后通过 Windows 防火墙或安全组手动封禁。
总结
通过以上步骤,你已经掌握登录日志审计的基本方法,能独立筛查异常爆破账号并及时拦截。
推荐在生产环境部署 fail2ban,实现自动化防护。
如果遇到更复杂的场景(如针对非标准端口的爆破),可在此基础上调整相关配置。