ユーザーがログインに失敗した記録を確認する|lastb・faillogでブルートフォース痕跡を追う方法

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > ユーザーがログインに失敗した記録を確認する|lastb・faillogでブルートフォース痕跡を追う方法
「サーバーに誰かが何度もログインを試みている気がするが、痕跡を確認する方法がわからない」
誰かが間違ったパスワードでSSH接続を試みた記録、いわゆる「ログイン失敗ログ」はLinuxでは専用ファイル(/var/log/btmp)に蓄積されています。テキストエディタやtail/catでは中身が読めないため、初心者がつまづきやすい部分です。

この記事では、ユーザーがログインに失敗した記録を確認する方法を、lastbコマンドとfaillogコマンドの使い分けや、btmp/wtmp/lastlogの違い、SSHブルートフォース攻撃を検知する実務手順まで含めて解説します。

この記事のポイント

・ログイン失敗記録は /var/log/btmp に保存される
・確認には lastb コマンドを root 権限で実行する
・faillog はユーザーごとの失敗回数とロックアウト管理に使う
・ブルートフォース対策には fail2ban との併用が定石


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

ログイン失敗の記録はどこに保存されているのか

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)

上記の例では、pakiraユーザーが 192.168.0.162 から SSH 経由でログインを試みて失敗していることがわかります。「ssh:notty」は端末未割り当て(SSH認証段階での失敗)を示します。

出力は新しいものから順に表示されます。古いログまで遡る場合は件数を指定するオプションを使います。

1. 件数を絞って表示する(-n オプション)

最新10件だけ表示したい場合は次のように指定します。

# lastb -n 10 # または # lastb -10

2. 特定ユーザーの失敗だけを抽出する

ユーザー名を引数に渡すと、そのユーザーの失敗記録だけが表示されます。

# lastb root # lastb pakira | head -20

攻撃者が「root」を狙うケースは非常に多いため、定期的に lastb root を確認しておくと、不審なIPからの試行を早期に発見できます。

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

1つのIPから数百~千回以上の失敗が記録されている場合は、ブルートフォース攻撃と判断して問題ありません。

2. 狙われているユーザー名を抽出する

攻撃者がどんなユーザー名を試しているか、ユーザー名ランキングを出します。

# lastb -i | awk '{print $1}' | sort | uniq -c | sort -rn | head -10 2450 root 320 admin 180 test 140 ubuntu

root が圧倒的多数を占めるのが普通です。/etc/ssh/sshd_config で PermitRootLogin no を設定するだけで、これらの試行は無効化できます。

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

※ rm /var/log/btmp で削除するとファイルが消えてしまい、次のログイン失敗時に再作成されません(ログが取れなくなる)。必ず「: > ファイル名」でtruncateするか、touch で空ファイルを再作成してください。

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

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。