SSH操作ログ完全ガイド – 記録から監視まで安全な運用を実現

Web

「サーバーで誰が何をしたか分からない…」

「不正アクセスがあったかもしれないけど、確認する方法が分からない」

「複数人で管理してるけど、誰がミスしたか特定できない」

こんな不安を抱えていませんか?

SSH操作ログは、サーバー管理の「防犯カメラ」のような存在です。

正しくログを記録・管理することで、トラブルの原因究明、不正アクセスの検知、コンプライアンス対応まで、あらゆる場面で役立ちます。

この記事では、SSH操作ログの基本から高度な監視システムの構築まで、実践的に解説していきます!

スポンサーリンク

SSH操作ログの基本を理解しよう

そもそも操作ログって何が記録されるの?

SSH操作ログには、大きく分けて3種類のログがあります:

1. 認証ログ(誰がいつログインしたか)

  • ログイン成功・失敗の記録
  • 使用した認証方法(パスワード or 鍵認証)
  • 接続元のIPアドレス

2. コマンドログ(何をしたか)

  • 実行されたコマンドの内容
  • コマンドの実行時刻
  • 実行したユーザー名

3. セッションログ(画面の記録)

  • ターミナルに表示された全ての内容
  • 入力と出力の完全な記録
  • タイムスタンプ付きの再生も可能

ログファイルの保存場所

主要なログファイルと場所:

ログの種類ファイルパス記録内容
認証ログ(Ubuntu/Debian)/var/log/auth.logSSH接続の成功・失敗
認証ログ(CentOS/RHEL)/var/log/secureSSH接続の成功・失敗
システムログ/var/log/syslogシステム全般の記録
コマンド履歴~/.bash_history各ユーザーのコマンド履歴

今すぐできる!基本的なログ確認方法

ログイン履歴を確認する

最近のログイン情報を見る

last

表示例:

yamada   pts/0        192.168.1.100    Mon Dec  4 10:30   still logged in
tanaka   pts/1        203.0.113.1      Mon Dec  4 09:15 - 10:00  (00:45)
root     pts/0        192.168.1.50     Mon Dec  4 08:00 - 08:30  (00:30)

ログイン失敗の履歴を確認

lastb

これで不正アクセスの試みを発見できます!

リアルタイムでログを監視

認証ログをリアルタイム監視

Ubuntu/Debian:

sudo tail -f /var/log/auth.log

CentOS/RHEL:

sudo tail -f /var/log/secure

新しいログが追加されると、画面に自動表示されます。

特定の情報を抽出する

SSH関連のログだけを表示

grep sshd /var/log/auth.log

特定IPアドレスからの接続を調べる

grep "192.168.1.100" /var/log/auth.log

ログイン失敗だけを抽出

grep "Failed password" /var/log/auth.log

コマンド実行ログを記録する方法

bashの履歴を強化する

通常の.bash_historyでは不十分なので、設定を強化しましょう。

/etc/profileに以下を追加:

# コマンド履歴の詳細記録
export HISTSIZE=10000
export HISTFILESIZE=10000
export HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
export HISTCONTROL=ignoredups

# 即座に履歴を記録
export PROMPT_COMMAND='history -a'

# 履歴ファイルを保護
readonly HISTFILE
readonly HISTSIZE
readonly HISTFILESIZE
readonly HISTTIMEFORMAT

auditdで詳細な監査ログを取る

より本格的な監査にはauditdを使います。

インストール方法

Ubuntu/Debian:

sudo apt-get install auditd audispd-plugins

CentOS/RHEL:

sudo yum install audit

監査ルールの設定

# 全てのコマンド実行を記録
sudo auditctl -a exit,always -F arch=b64 -S execve

# 特定のファイルへのアクセスを監視
sudo auditctl -w /etc/passwd -p wa -k passwd_changes

# 特定ユーザーの行動を監視
sudo auditctl -a always,exit -F uid=1000 -S execve -k user_commands

ログの確認方法

# 監査ログを見やすく表示
sudo aureport --executable

# 特定のキーワードで検索
sudo ausearch -k passwd_changes

セッション記録を完全に残す方法

scriptコマンドで画面を録画

手動でセッション記録を開始

script -t 2>時間記録.txt 操作記録.txt

終了する時はexitと入力。

記録を再生する

scriptreplay 時間記録.txt 操作記録.txt

実際の操作がそのまま再現されます!

自動的にセッション記録を取る設定

/etc/profileに追加:

# SSHログイン時に自動記録開始
if [ -n "$SSH_CLIENT" ]; then
    LOG_DIR="/var/log/ssh-sessions"
    mkdir -p $LOG_DIR
    LOG_FILE="$LOG_DIR/$(date +%Y%m%d-%H%M%S)_${USER}_$(echo $SSH_CLIENT | awk '{print $1}').log"
    script -q -f $LOG_FILE
    exit
fi

ttyrec/ttyplayを使った高度な記録

インストール

# Ubuntu/Debian
sudo apt-get install ttyrec

# CentOS/RHEL
sudo yum install ttyrec

使い方

# 記録開始
ttyrec ログファイル名

# 再生
ttyplay ログファイル名

不正アクセスを検知する方法

怪しいアクセスパターンを見つける

大量のログイン失敗を検知

# ログイン失敗が多いIPアドレスTOP10
grep "Failed password" /var/log/auth.log | \
    awk '{print $(NF-3)}' | \
    sort | uniq -c | sort -rn | head -10

深夜のアクセスをチェック

# 0時〜6時のログインを抽出
grep "Accepted" /var/log/auth.log | \
    awk '$3 ~ /^0[0-6]:/'

rootへの直接ログイン試行

grep "Failed password for root" /var/log/auth.log

fail2banで自動ブロック

インストール

# Ubuntu/Debian
sudo apt-get install fail2ban

# CentOS/RHEL  
sudo yum install fail2ban

設定ファイル作成

/etc/fail2ban/jail.local

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 3600

動作確認

# ブロック状況を確認
sudo fail2ban-client status sshd

# ブロックされたIPリスト
sudo fail2ban-client get sshd banned

ログ管理のベストプラクティス

ログローテーションの設定

/etc/logrotate.d/ssh-custom

/var/log/ssh-sessions/*.log {
    daily
    rotate 90
    compress
    delaycompress
    missingok
    notifempty
    create 600 root root
}

外部サーバーへのログ転送

rsyslogで転送設定

/etc/rsyslog.confに追加:

# ログサーバーへ転送
*.* @@ログサーバーIP:514

# ローカルにも保存
& stop

ログの改ざん防止

# ログファイルを書き込み専用に
sudo chattr +a /var/log/auth.log

# 確認
lsattr /var/log/auth.log

便利なログ分析ツール

logwatch – 日次レポートを自動生成

インストールと設定

sudo apt-get install logwatch

# 日次レポートをメール送信
logwatch --detail high --mailto admin@example.com

GoAccess – リアルタイム分析

# SSH認証ログをリアルタイム分析
sudo goaccess /var/log/auth.log -o /var/www/html/ssh-report.html --real-time-html

Grafana + Prometheus – 可視化ダッシュボード

プロフェッショナルな監視環境を構築できます:

  • グラフでログイン状況を可視化
  • アラート機能で異常を即座に通知
  • 複数サーバーを一元管理

コンプライアンス対応のログ管理

保存期間の設定

業界や規制によって異なりますが、一般的な目安:

ログの種類推奨保存期間理由
認証ログ1年以上不正アクセス調査用
コマンドログ3〜6ヶ月トラブルシューティング
セッション記録1〜3ヶ月詳細調査用

ログへのアクセス制限

# ログディレクトリの権限設定
sudo chmod 750 /var/log/ssh-sessions
sudo chown root:adm /var/log/ssh-sessions

# 特定グループのみアクセス可能に
sudo usermod -a -G adm 監査担当ユーザー

トラブルシューティング

ログが記録されない場合

rsyslogサービスの確認

# サービス状態確認
sudo systemctl status rsyslog

# 再起動
sudo systemctl restart rsyslog

ディスク容量の確認

df -h /var/log

容量不足の場合は古いログを削除または圧縮。

ログファイルが巨大になった場合

# 大きなログファイルを探す
sudo find /var/log -type f -size +100M

# 圧縮して保存
gzip -9 大きなログファイル

セキュリティ重視の設定例

高セキュリティ環境の設定

# 1. 全操作を記録
echo 'session required pam_tty_audit.so enable=*' >> /etc/pam.d/sshd

# 2. ログを別サーバーにリアルタイム転送
echo '*.* @@ログサーバー:514' >> /etc/rsyslog.conf

# 3. ローカルログを暗号化
apt-get install ecryptfs-utils

# 4. 定期的な自動分析
crontab -e
0 * * * * /usr/local/bin/analyze_ssh_logs.sh

まとめ – プロフェッショナルなログ管理を実現しよう

お疲れさまでした!SSH操作ログについて、基礎から応用まで幅広く学んできました。

今日マスターした重要ポイント:

  • 3種類のSSHログとその確認方法
  • コマンドやセッションの完全記録方法
  • 不正アクセスの検知と自動ブロック
  • ログの長期保存と分析方法
  • コンプライアンス対応の管理手法

ログ管理は地味な作業に思えるかもしれませんが、トラブル時には最強の味方になります。

次のステップ:

  1. まず基本的な認証ログの確認を習慣化
  2. auditdやscriptで詳細記録を開始
  3. fail2banで自動防御を設定
  4. 定期的なログ分析レポートを確立

「ログを制する者はサーバーを制す」

この言葉を胸に、安全で透明性の高いサーバー運用を実現してください!

何か問題が起きた時、きちんと記録されたログがあれば、必ず解決への道が見つかります。

コメント

タイトルとURLをコピーしました