SSH(Secure Shell)作为远程登录管理 Linux 服务器的标准协议,其安全性与日志记录机制对运维与安全人员至关重要。通过 SSH 日志,可以追踪所有登录行为、识别暴力破解攻击、分析入侵路径并辅助取证调查。

本文将从 SSH 日志的底层机制出发,深入讲解如何分析、监控与防御基于 SSH 的攻击活动,涵盖基础日志解析、高级数据分析、威胁情报对接、可视化监控与自动化封禁等多个维度,帮助读者全面掌握 Linux SSH 日志的安全分析方法。


一、SSH 日志存储原理与轮转机制

1.1 SSH 日志文件路径

Linux 系统的 SSH 日志路径因发行版而异,常见路径如下:

操作系统 日志路径
Ubuntu / Debian /var/log/auth.log
CentOS / RHEL /var/log/secure
Arch Linux / Manjaro journalctl 管理(默认无 auth.log)

如果系统启用了 systemd 日志系统,SSH 的日志可能只保存在 journald 中,需通过 journalctl 命令查看。

1.2 日志生成机制

SSH 服务(通常是 sshd 进程)通过调用 syslog 接口,将认证事件发送到系统日志守护进程 rsyslogdsystemd-journald。日志级别常见为:

  • auth.info:认证事件(如登录尝试)
  • auth.warn:警告(例如密钥权限不当)
  • auth.err:严重错误(如登录失败)

1.3 日志轮转机制(Logrotate)

为防止日志文件无限增长,Linux 系统默认通过 logrotate 工具进行定期压缩与轮转:

# 查看 rsyslog 的 logrotate 配置
cat /etc/logrotate.d/rsyslog | grep -A 10 auth.log

默认配置通常每周轮转一次,最多保留四周的历史记录,过期日志以 .1, .2.gz 等形式存在:

# 解压旧日志
gunzip /var/log/auth.log.2.gz

二、SSH 认证日志字段详细解析

SSH 的认证日志包含登录成功、失败、密钥认证、无效用户等多个事件。通过对日志字段的逐一解析,可以精准识别出攻击行为。

2.1 登录失败日志样例解析

Mar 15 14:32:12 web01 sshd[12345]: Failed password for root from 192.168.1.100 port 51234 ssh2
字段 含义
Mar 15 14:32:12 时间戳,由日志系统添加
web01 主机名
sshd[12345] 服务名称与进程 PID
Failed password 登录失败类型(成功登录为 Accepted
for root 目标用户名
from 192.168.1.100 来源 IP 地址
port 51234 对方连接使用的端口
ssh2 SSH 协议版本

2.2 其他典型事件类型

  • 无效用户尝试登录:

    Invalid user test from 192.168.1.200
    
  • 密钥文件权限异常:

    Authentication refused: bad ownership or modes for file /home/user/.ssh/authorized_keys
    
  • 连接被中断:

    Connection closed by authenticating user root 192.168.1.100 port 51234
    
  • 暴力破解特征:

    短时间内大量 Failed password 日志(>1000 次/分钟)
    

识别这些日志类型是分析 SSH 安全状态的基础。


三、暴力破解检测与统计分析实战

3.1 快速统计:最常遭攻击的用户名与来源 IP

以下命令可以提取失败认证中最频繁被尝试的用户名与来源 IP:

cat /var/log/auth.log* | \
grep -P 'Failed password' | \
sed -E 's/.*Failed password for (invalid user )?([^ ]+) from ([^ ]+).*/\2 \3/' | \
sort | uniq -c | sort -nr | head -20

结果示例如下:

  320 root 192.168.1.100
  275 admin 203.0.113.5
  190 test 45.76.23.19

3.2 时间窗口分析:1 小时内攻击频率

journalctl -u ssh --since "1 hour ago" | \
grep "Failed password" | \
grep -oP 'from \K[0-9.]+' | \
sort | uniq -c | sort -nr

可用于构建基于时间的攻击热度模型。

3.3 关联分析:攻击后的行为追踪

grep -E 'Accepted.*from 192.168.1.100' /var/log/auth.log | \
awk '{print $1, $2, $3}' | \
while read date time _; do
  grep "$date $time" /var/log/auth.log | grep -E 'session opened|sudo'
done

通过关联“成功登录 + 特权操作”行为,可辅助判断是否发生了入侵。


四、地理位置识别与威胁情报融合

4.1 利用 GeoIP 工具获取攻击者地理位置

apt install geoip-bin geoip-database

grep "Failed password" /var/log/auth.log | \
grep -oP 'from \K[0-9.]+' | \
sort -u | \
xargs -I {} geoiplookup {} | \
awk -F ': ' '{print $2}' | sort | uniq -c

输出结果:

 120 China
  85 Russia
  63 United States

结合热力图可用于可视化展示攻击源地。

4.2 查询威胁情报(AbuseIPDB)

curl -s "https://api.abuseipdb.com/api/v2/check?ipAddress=45.76.23.19" \
-H "Key: YOUR_API_KEY" \
-H "Accept: application/json" | jq '.data.abuseConfidenceScore'

如果 abuseConfidenceScore > 90,说明该 IP 有高度恶意行为历史。


五、防御策略与自动化应对机制

5.1 Fail2ban:行为感知型封禁工具

apt install fail2ban

cat > /etc/fail2ban/jail.local <<EOF
[sshd]
enabled = true
maxretry = 5
bantime = 3600
findtime = 600
EOF

systemctl enable fail2ban
systemctl restart fail2ban

Fail2ban 会自动监控 SSH 日志,一旦发现重复失败行为即调用 iptables 封禁源 IP。

5.2 自定义实时监控封禁脚本

#!/bin/bash
tail -F /var/log/auth.log | \
grep --line-buffered 'Failed password' | \
while read line; do
  ip=$(echo "$line" | grep -oP 'from \K[0-9.]+')
  count=$(grep "$ip" /var/log/auth.log | tail -n 100 | wc -l)
  if [ "$count" -gt 10 ]; then
    iptables -C INPUT -s $ip -j DROP 2>/dev/null || iptables -A INPUT -s $ip -j DROP
    logger "Auto-blocked $ip for suspected SSH brute force"
  fi
done

该脚本基于 tail 实时监控,触发即封禁,适用于高强度攻击场景。


六、可视化监控与长期分析方案

6.1 ELK 堆栈(Elasticsearch + Logstash + Kibana)

Filebeat 配置示例:

filebeat.inputs:
- type: log
  paths:
    - /var/log/auth.log
  fields:
    logtype: ssh

output.logstash:
  hosts: ["localhost:5044"]

在 Kibana 中可配置:

  • 时间序列图:登录失败趋势
  • 柱状图:攻击源地统计
  • 地图热力图:攻击地理位置分布

6.2 Grafana + Loki 可视化方案

Promtail 配置采集 /var/log/auth.log

server:
  http_listen_port: 9080

scrape_configs:
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: ssh
          __path__: /var/log/auth.log

通过 Grafana Dashboard 快速建立告警和可视化视图。


七、总结与实战最佳实践

SSH 是攻击者最常利用的入侵入口之一。通过深度解析日志并结合自动化工具与威胁情报平台,可以构建一套完整的防御体系。

日常实战建议:

场景 推荐工具 示例命令
快速统计失败 IP grep + awk `grep ‘Failed’ /var/log/auth.log awk ‘{print $11}’ sort uniq -c`
实时封禁攻击 IP fail2ban 或自定义脚本 fail2ban-client status sshd
地理位置分析 geoiplookup geoiplookup 1.2.3.4
威胁情报查询 abuseipdb curl + jq
可视化监控 ELK / Loki 监控 SSH 活动趋势图、热力图

安全加固建议:

  1. 禁用 root 登录:

    PermitRootLogin no
    
  2. 启用密钥认证并禁用密码认证:

    PasswordAuthentication no
    
  3. 使用 Fail2ban、GeoIP、iptables 等联动封禁策略

  4. 限制 SSH 端口访问(如仅允许特定 IP):

    iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT
    
  5. 部署 HIDS / SIEM 工具如 Wazuh、OSSEC、Security Onion

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐