Linuxで失敗したすべてのSSHログイン試行を見つける方法


SSHサーバへのログイン試行は、Linuxのrsyslogデーモンによって追跡され、ログファイルに記録されます。 Linuxで失敗したすべてのSSHログイン試行をリストする最も基本的なメカニズムは、catコマンドまたはgrepコマンドを使用してログファイルを表示およびフィルタリングすることです。

Linuxで失敗したSSHログインのリストを表示するには、このガイドに記載されているコマンドのいくつかを発行します。これらのコマンドがroot権限で実行されていることを確認してください。

失敗したすべてのSSHログインをリストする最も簡単なコマンドは、以下に示すものです。

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

catコマンドを発行しても同じ結果が得られます。

# cat /var/log/auth.log | grep "Failed password"

失敗したSSHログインに関する追加情報を表示するには、以下の例に示すようにコマンドを発行してください。

# egrep "Failed|Failure" /var/log/auth.log

CentOS または RHEL では、失敗したSSHセッションは/var/log/secure ファイルに記録されます。このログファイルに対して上記のコマンドを発行して、失敗したSSHログインを識別します。

# egrep "Failed|Failure" /var/log/secure

CentOSまたはRHELで失敗したSSHログインを表示するために上記のコマンドを少し変更したものは、次のとおりです。

# grep "Failed" /var/log/secure
# grep "authentication failure" /var/log/secure

SSHサーバーへのログインを試行したが失敗したすべてのIPアドレスのリストを、各IPアドレスの試行失敗回数とともに表示するには、次のコマンドを発行します。

# grep "Failed password" /var/log/auth.log | awk ‘{print $11}’ | uniq -c | sort -nr

新しいLinuxディストリビューションでは、 journalctl コマンドを使ってSystemdデーモンによって管理されているランタイムログファイルを問い合わせることができます。失敗したSSHログイン試行をすべて表示するには、以下のコマンド例に示すように、 grep フィルタを介して結果をパイプ処理する必要があります。

# journalctl _SYSTEMD_UNIT=ssh.service | egrep "Failed|Failure"
# journalctl _SYSTEMD_UNIT=sshd.service | egrep "Failed|Failure"  #In RHEL, CentOS 

以下のコマンド例に示すように、 CentOS または RHEL で、SSHデーモンユニットを sshd.service に置き換えます。

# journalctl _SYSTEMD_UNIT=sshd.service | grep "failure"
# journalctl _SYSTEMD_UNIT=sshd.service | grep "Failed"

不審なユーザーアカウントや無効なユーザーアカウントでシステムにログインするためにSSHサーバーに頻繁にアクセスするIPアドレスを特定したら、失敗したSSH試行IPアドレスをブロックするようにシステムファイアウォールルールを更新するか、またはこれらの攻撃を管理するためのfail2banなどのソフトウェア。