CentOS SSH登录日志:守护服务器的关键之眼
在Linux服务器的日常运维与安全防护中,SSH登录日志扮演着至关重要的角色,它如同一位不知疲倦的哨兵,忠实记录着每一次通过安全外壳协议(SSH)访问您CentOS系统的尝试,无论成功与否,深入理解并有效利用这些日志,是保障服务器安全不可或缺的一环。
核心日志文件:信息的源泉

CentOS系统(特别是较新版本如CentOS 7/8/Stream)中,SSH服务的登录验证信息主要记录在 /var/log/secure 文件中,这是您需要首要关注的日志文件,对于使用rsyslog或journald(systemd的日志系统)的环境,日志路径和查看方式可能略有差异:
/var/log/secure(最常用):这是SSHD服务(sshd守护进程)默认写入认证相关事件的主要文件,使用以下命令实时跟踪其更新:sudo tail -f /var/log/secure
/var/log/auth.log(部分旧系统或特定配置):在某些历史配置或特定发行版中,SSH日志可能被定向到此处,检查您的rsyslog配置(/etc/rsyslog.conf或/etc/rsyslog.d/下的文件)确认。Systemd Journal (
journalctl):对于使用systemd-journald的系统,日志统一由journald管理,查看SSH相关日志更灵活:sudo journalctl -u sshd # 查看sshd服务单元的所有日志 sudo journalctl -u sshd --since "2023-10-27 14:00" --until "2023-10-27 15:00" # 按时间过滤 sudo journalctl -u sshd -f # 实时跟踪
解读日志:关键信息与安全信号
一条典型的SSH日志条目包含丰富信息,理解其结构是分析的基础:

Oct 27 14:35:22 server1 sshd[12345]: Accepted password for user1 from 192.168.1.100 port 54321 ssh2 Oct 27 14:36:05 server1 sshd[12346]: Failed password for invalid user attacker from 203.0.113.5 port 12345 ssh2 Oct 27 14:36:08 server1 sshd[12346]: Connection closed by invalid user attacker 203.0.113.5 port 12345 [preauth]
- 时间戳 (Oct 27 14:35:22): 事件发生的精确时间,对追踪攻击或排查问题至关重要。
- 主机名 (server1): 生成日志的服务器标识。
- 进程名与PID (sshd[12345]):
sshd进程及其进程ID。 - 事件类型与细节:
Accepted password for ...: 成功登录,包含用户名(user1)、来源IP(168.1.100)、来源端口(54321)和认证方式(password或publickey)。Failed password for ...: 密码认证失败,注意区分是有效用户(root,user1)还是invalid user(尝试登录不存在的用户)。Invalid user ...: 尝试登录一个系统中不存在的用户,这是暴力破解的常见迹象。Connection closed by ... [preauth]: 连接在认证完成前被关闭,通常发生在多次认证失败后或客户端主动终止。preauth表明发生在认证阶段之前。pam_unix(sshd:auth): authentication failure; ...: PAM(可插拔认证模块)记录的认证失败详情,常伴随Failed password出现。Received disconnect from ...: ... [preauth]: 连接断开的原因代码和信息。Disconnected from authenticating user ...: 用户在认证过程中断开了连接。POSSIBLE BREAK-IN ATTEMPT!: 当检测到可疑行为(如短时间内同一用户多次失败)时,SSH可能会明确发出此警告(需配置启用)。
- 来源IP地址与端口: 发起连接尝试的客户端地址和端口号,这是追踪攻击源的核心信息。
实战分析:挖掘日志中的安全情报
掌握基础命令,让日志数据开口说话:
实时监控新登录与尝试:
sudo tail -f /var/log/secure | grep -E "sshd.*(Accepted|Failed|Invalid|Connection closed|BREAK-IN)"
统计特定IP的失败登录次数 (识别潜在攻击者):
sudo grep "Failed password" /var/log/secure | grep "203.0.113.5" | wc -l
列出所有尝试登录的无效用户名 (发现攻击目标模式):
sudo grep "Invalid user" /var/log/secure | awk '{print $8}' | sort | uniq -c | sort -nr查看指定用户的所有登录活动 (审计或排查问题):

sudo grep "user1" /var/log/secure
查找成功登录记录:
sudo grep "Accepted" /var/log/secure
识别高频失败源IP (快速定位暴力破解源):
sudo grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | head -n 20
日志轮转与持久化:确保历史可追溯
CentOS默认使用logrotate管理日志文件,配置通常在/etc/logrotate.conf和/etc/logrotate.d/syslog中。/var/log/secure会被定期压缩归档(例如每周一次),并保留一定周期(通常是4周)的旧日志,使用zcat, zgrep等工具可方便地查询压缩的历史日志:
sudo zgrep "Accepted" /var/log/secure-20231020.gz
强化安全:超越日志分析的主动防御
日志是事后分析的眼睛,主动防御才是坚固的盾牌:
- 禁用Root密码登录:在
/etc/ssh/sshd_config中设置PermitRootLogin no或PermitRootLogin prohibit-password(仅允许密钥登录),大幅减少最高权限账户被攻破的风险。 - 启用公钥认证,禁用密码认证:设置
PasswordAuthentication no,公钥认证在安全性上远超密码。 - 更改默认SSH端口:修改
Port 22为其他高端口号(如Port 22222),减少自动化脚本扫描攻击。 - 使用Fail2ban或DenyHosts:这些工具实时监控SSH日志,自动将短时间内多次登录失败的IP地址加入防火墙黑名单(如iptables/firewalld),有效阻止暴力破解。
- 限制允许登录的用户:使用
AllowUsers user1 user2指令明确指定哪些系统用户允许通过SSH登录。 - 限制允许登录的IP段:结合防火墙(如
firewalld或iptables)规则,仅允许受信任的IP地址或网段访问SSH端口。 - 保持系统和SSH软件更新:及时应用安全补丁,修复已知漏洞。
作为服务器管理员,忽视SSH日志就如同蒙着眼睛守卫大门,每一次失败的登录尝试、每一个陌生的IP地址、每一个不存在的用户名请求,都可能是潜在威胁的蛛丝马迹,深入分析日志模式,结合强化的SSH配置和主动防御工具,才能筑起服务器访问安全的第一道坚实防线,持续观察这些日志,了解正常访问的基线,才能敏锐地捕捉异常,将风险扼杀在入侵发生之前,服务器的安全态势,往往就藏匿在这一行行看似枯燥的日志记录之中。
