SSH登录日志清理

教程2周前发布 administrator
670 00

近期监测服务器,反正异常登录的很多(失败:1516594(今日新增:12367)),导致部分界面加载很慢,遂有个想法清理下相关日志。

解决方案

分析

SSH登录记录通常存储在以下文件中:

  • /var/log/auth.log (Debian/Ubuntu)

  • /var/log/secure (CentOS/RHEL)

嗯,那就简单了,写个清理的脚本(为啥不一步步的操作,因为懒)

#!/bin/bash

# SSH日志清理脚本 for Rocky Linux 8
# 需要root权限执行

# 检查是否为root用户
if [ "$(id -u)" -ne 0 ]; then
    echo "错误: 此脚本必须以root用户身份运行!"
    exit 1
fi

# 定义日志文件路径
AUTH_LOG="/var/log/secure"
WTMP="/var/log/wtmp"
BTMP="/var/log/btmp"
LASTLOG="/var/log/lastlog"

# 备份目录
BACKUP_DIR="/var/log/ssh_log_backup"
BACKUP_TIMESTAMP=$(date +"%Y%m%d_%H%M%S")

# 创建备份目录
mkdir -p "$BACKUP_DIR"

echo "正在备份日志文件..."
# 备份日志文件
cp "$AUTH_LOG" "$BACKUP_DIR/secure_$BACKUP_TIMESTAMP.log" 2>/dev/null
cp "$WTMP" "$BACKUP_DIR/wtmp_$BACKUP_TIMESTAMP.log" 2>/dev/null
cp "$BTMP" "$BACKUP_DIR/btmp_$BACKUP_TIMESTAMP.log" 2>/dev/null
cp "$LASTLOG" "$BACKUP_DIR/lastlog_$BACKUP_TIMESTAMP.log" 2>/dev/null

echo "正在清理日志文件..."
# 清理日志文件
> "$AUTH_LOG"
> "$WTMP"
> "$BTMP"
> "$LASTLOG"

# 清理journal日志(保留最近7天)
echo "正在清理journal日志..."
journalctl --vacuum-time=7d

# 重启相关服务
echo "正在重启日志服务..."
systemctl restart rsyslog
systemctl restart systemd-journald

echo "日志清理完成!"
echo "备份文件保存在: $BACKUP_DIR"

脚本释义

  1. 自动备份原始日志文件到/var/log/ssh_log_backup目录

  2. 清理以下日志文件:

    • /var/log/secure (SSH认证日志)

    • /var/log/wtmp (成功登录记录)

    • /var/log/btmp (失败登录尝试)

    • /var/log/lastlog (用户最后登录信息)

  3. 清理systemd journal日志(保留最近7天)

  4. 自动重启相关日志服务

但是,就这么清理了,后续审计或分析就GG了,还是先导出。

修改脚本

#!/bin/bash

# 检查 root 权限
if [ "$(id -u)" -ne 0 ]; then
    echo "错误: 必须使用 root 运行!"
    exit 1
fi

# 备份目录
BACKUP_DIR="/var/log/ssh_log_backup/$(date +"%Y%m%d_%H%M%S")"
mkdir -p "$BACKUP_DIR"

# 1. 导出 /var/log/secure
cp /var/log/secure "$BACKUP_DIR/ssh_auth.log"

# 2. 导出 last 登录记录
last > "$BACKUP_DIR/last_logins.txt"

# 3. 导出失败登录记录
lastb > "$BACKUP_DIR/failed_logins.txt"

# 4. 导出 lastlog
lastlog > "$BACKUP_DIR/lastlog.txt"

# 5. 导出 journalctl SSH 日志
journalctl -u sshd --since "1 week ago" > "$BACKUP_DIR/sshd_journal.log"

echo "SSH 日志已导出到: $BACKUP_DIR"

这样,应该就差不多了,导出的日志会存放在 /var/log/ssh_log_backup/YYYYMMDD_HHMMSS/ 目录下。

日志来源导出命令用途
/var/log/securecp /var/log/secure backup.logSSH 认证日志
/var/log/wtmplast > logins.txt成功登录记录
/var/log/btmplastb > failed.txt失败登录尝试
/var/log/lastloglastlog > lastlog.txt用户最后登录时间
journalctljournalctl -u sshd > sshd.logSystemd 管理的 SSH 日志

这样就可以在清理前先备份 SSH 日志,方便后续审计或分析。嗯,搞完收工。

© 版权声明

相关文章

暂无评论

none
暂无评论...