1. 确认Debian SSH日志文件位置
Debian系统中,SSH服务的认证日志默认存储在/var/log/auth.log(系统认证相关事件,包括SSH登录尝试、密码认证结果、公钥认证等)。若日志文件因轮转(logrotate)产生归档(如auth.log.1、auth.log.2.gz),需一并纳入分析,这些归档文件通常位于同一目录下。
2. 实时监控SSH登录活动
使用tail命令结合grep过滤sshd进程的日志,实时查看最新的SSH登录尝试(包括成功、失败及连接关闭事件):
sudo tail -f /var/log/auth.log | grep sshd
该命令会持续输出新写入的SSH日志,帮助管理员即时掌握登录动态(如是否有大量失败尝试)。
3. 常见日志分析场景与命令
Failed password(密码认证失败)日志中的IP地址(倒数第4列),排序并统计频率,找出最活跃的攻击源:grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr
Failed password日志,提取用户名(第9列),统计尝试次数:grep "Failed password" /var/log/auth.log | awk '{print $9}' | sort | uniq -c | sort -nr
Accepted password(密码认证成功)或Accepted publickey(公钥认证成功)日志,获取成功登录的用户、IP及时间:grep -E "Accepted password|Accepted publickey" /var/log/auth.log
grep -E "Accepted password|Accepted publickey" /var/log/auth.log | awk '{print $9}' | sort | uniq -c | sort -nr
awk提取时间戳(第1列),筛选指定时间段(如12:00-18:00)的失败登录记录:grep "Failed password" /var/log/auth.log | awk '/sshd.*Failed password/ {print $1}' | awk '$1 >= "12:00" && $1 <= "18:00" {print}'
4. 使用工具简化日志分析
sudo apt-get install logwatch # 安装logwatch
sudo logwatch --output text # 生成默认报告(包含SSH分析)
/etc/fail2ban/jail.local启用SSH防护:sudo apt-get install fail2ban # 安装fail2ban
sudo systemctl start fail2ban # 启动服务
sudo systemctl enable fail2ban # 开机自启
配置文件中调整maxretry(最大失败次数)、bantime(封禁时长)等参数,适配实际需求。5. 日志归档与长期管理
Debian系统默认使用logrotate工具管理SSH日志轮转,避免日志文件过大占用磁盘空间。可通过编辑/etc/logrotate.d/sshd自定义轮转策略(如每天轮转、保留7天、压缩旧日志):
/var/log/auth.log {
daily # 每天轮转
missingok # 若日志丢失则忽略
rotate 7 # 保留最近7份
compress # 压缩旧日志(如auth.log.1.gz)
notifempty # 若日志为空则不轮转
create 640 root root # 新日志权限为640,属主root
}
该配置确保SSH日志定期归档,便于后续历史数据分析。