誰かが間違ったパスワードでSSH接続を試みた記録、いわゆる「ログイン失敗ログ」はLinuxでは専用ファイル(/var/log/btmp)に蓄積されています。テキストエディタやtail/catでは中身が読めないため、初心者がつまづきやすい部分です。
この記事では、ユーザーがログインに失敗した記録を確認する方法を、lastbコマンドとfaillogコマンドの使い分けや、btmp/wtmp/lastlogの違い、SSHブルートフォース攻撃を検知する実務手順まで含めて解説します。
この記事のポイント
・ログイン失敗記録は /var/log/btmp に保存される
・確認には lastb コマンドを root 権限で実行する
・faillog はユーザーごとの失敗回数とロックアウト管理に使う
・ブルートフォース対策には fail2ban との併用が定石
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
ログイン失敗の記録はどこに保存されているのか
Linuxにはログイン関連のログを記録する3つのバイナリファイルがあります。それぞれ役割が違うため、目的に応じて使い分けます。・/var/log/btmp:ログインに失敗した記録("bad login times" の略)
・/var/log/wtmp:ログインに成功した記録(履歴全件)
・/var/log/lastlog:各ユーザーの最終ログイン時刻
これらはバイナリ形式で書き込まれるため、catやtailで中身を表示しても文字化けして読めません。専用コマンド(lastb・last・lastlog)を経由する必要があります。
btmpファイルはセキュリティ上の理由から、デフォルトでは root のみ読み取り可能(パーミッション 600)となっています。一般ユーザーで lastb を実行すると「Permission denied」が表示されるので注意してください。
lastbコマンドでログイン失敗の記録を確認する
ログインに失敗した記録を確認するには、/usr/bin/lastbコマンドを使用します。/var/log/btmp ファイルを読み込んで、人間が読める形式に整形して出力します。[root@Tiger ~]# lastb pakira ssh:notty 192.168.0.162 Wed Oct 10 12:34 - 12:34 (00:00) pakira ssh:notty 192.168.0.162 Wed Oct 10 12:33 - 12:33 (00:00)
出力は新しいものから順に表示されます。古いログまで遡る場合は件数を指定するオプションを使います。
1. 件数を絞って表示する(-n オプション)
最新10件だけ表示したい場合は次のように指定します。# lastb -n 10 # または # lastb -10
2. 特定ユーザーの失敗だけを抽出する
ユーザー名を引数に渡すと、そのユーザーの失敗記録だけが表示されます。# lastb root # lastb pakira | head -20
3. IPアドレスをDNS逆引きせず表示する
大量のログを処理する場合、逆引きで処理が遅くなることがあります。-i オプションを付けるとIPアドレスのまま表示し、出力が速くなります。# lastb -i
faillogコマンドでユーザーごとの失敗回数を管理する
lastb が「失敗の履歴を時系列で見る」コマンドだとすれば、faillog は「ユーザーごとに失敗カウントを管理する」コマンドです。Debian系・古いRHEL系で使われてきました。記録の参照元は /var/log/faillog で、こちらもバイナリファイルです。なお RHEL 8 以降では pam_tally2 を経て pam_faillock へ移行しており、faillogコマンド自体が同梱されなくなっています。RHEL 9 / Rocky 9 / AlmaLinux 9 では faillock コマンドを使用してください。
# faillog(全ユーザーの失敗回数を表示) # faillog -a # 特定ユーザーの失敗回数を確認 # faillog -u pakira # 失敗カウントをリセット(ロックを解除) # faillog -r -u pakira
RHEL 9系での代替コマンド(faillock)
RHEL 9 / Rocky Linux 9 / AlmaLinux 9 では、faillog の代わりに faillock を使用します。# 全ユーザーのロック状況を確認 # faillock # 特定ユーザーの状況を確認 # faillock --user pakira # ロック解除 # faillock --user pakira --reset
SSHブルートフォース攻撃を検知する実務手順
インターネットに22番ポートを開けているサーバーには、毎日のように世界中のIPから「root」「admin」「test」などのアカウントでログインを試みる攻撃が来ます。lastbの出力から攻撃の兆候を読み取る方法を紹介します。1. 失敗回数が多いIPを集計する
lastbの出力を加工して、攻撃元IPランキングを作ります。# lastb -i | awk '{print $3}' | sort | uniq -c | sort -rn | head -20 1342 192.0.2.45 876 198.51.100.12 412 203.0.113.88
2. 狙われているユーザー名を抽出する
攻撃者がどんなユーザー名を試しているか、ユーザー名ランキングを出します。# lastb -i | awk '{print $1}' | sort | uniq -c | sort -rn | head -10 2450 root 320 admin 180 test 140 ubuntu
3. 日時で絞り込んで攻撃のピークを見る
特定の日付だけを抽出したい場合は grep でフィルタリングします。# lastb | grep "Oct 10"
btmpファイルが肥大化したときの対処法
攻撃が続くと、/var/log/btmp は数百MB~数GBに膨らむことがあります。logrotate の対象になっていない古いディストリビューションでは、手動でのローテーションが必要です。# サイズ確認 # ls -lh /var/log/btmp -rw------- 1 root root 421M Oct 10 12:34 /var/log/btmp # ローテーション(簡易手動) # cp /var/log/btmp /var/log/btmp.1 # : > /var/log/btmp # パーミッション維持(600)を確認 # chmod 600 /var/log/btmp
RHEL 9 / Ubuntu 22.04 以降では /etc/logrotate.d/btmp が標準で含まれており、自動でローテーションされます。
トラブルシュート・よくある質問
「lastb: /var/log/btmp: No such file or directory」が出る
btmpファイルが存在しない場合に表示されます。ログイン失敗が一度も発生していない、またはファイルを誤って削除した可能性があります。次の手順で空ファイルを作成すれば lastb が動作します。# touch /var/log/btmp # chmod 600 /var/log/btmp # chown root:utmp /var/log/btmp
「lastb: Permission denied」が出る
一般ユーザーで実行すると表示されます。sudo または root に切り替えて再実行してください。$ sudo lastb
ログに記録される時刻がおかしい
タイムゾーン設定(/etc/localtime)または NTP の同期不良の可能性があります。timedatectl で現状を確認し、ずれている場合は chronyd / systemd-timesyncd を再起動してください。fail2ban との連携はどうする?
fail2ban は /var/log/auth.log や /var/log/secure を監視するため、btmp自体は読みません。ただし「失敗履歴の事後確認」には lastb が便利です。fail2ban が自動的にIPをiptablesでブロックし、lastb が証跡を残す、という棲み分けで運用するのが定石です。本記事のまとめ
ログイン失敗記録を確認する代表的なコマンドと用途を一覧にまとめます。| やりたいこと | コマンド |
|---|---|
| ログイン失敗履歴を時系列で表示 | lastb |
| 最新10件だけ表示 | lastb -n 10 |
| 特定ユーザーの失敗だけ表示 | lastb pakira |
| IP逆引きを省略して高速表示 | lastb -i |
| 失敗元IPランキング | lastb -i | awk '{print $3}' | sort | uniq -c | sort -rn | head |
| 狙われたユーザー名ランキング | lastb -i | awk '{print $1}' | sort | uniq -c | sort -rn | head |
| ユーザーの失敗回数管理(~RHEL7) | faillog -u pakira |
| ユーザーの失敗回数管理(RHEL8以降) | faillock --user pakira |
| btmpを安全にtruncate | : > /var/log/btmp |
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:lastコマンドでLinuxのログイン履歴を確認する方法|lastbで失敗ログインとwtmpの見方も
- 前のページへ:lastlogコマンドで最終ログイン記録を確認する方法|ユーザー別の確認と活用例
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます