grepまたはawkを使用してログファイルを操作する方法は?

grepまたはawkを使用してログファイルを操作する方法は?

/var/log/secure ログファイルを確認しようとしましたが、次のように表示されました。「パスワードエラー」ログタイプのみが3回以上表示されます。 Linuxコマンドのみを使用してこれを行う方法はありますか?え?ブドウ?

セキュリティログの例、

Mar 20 08:38:28 localhost sshd[21895]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=mail.queued.net user=root 
Mar 20 08:38:31 localhost sshd[21895]: Failed password for root from 207.210.101.209 port 2854 ssh2 
Mar 20 15:38:31 localhost sshd[21896]: Received disconnect from 207.210.101.209: 11: Bye Bye 
Mar 20 08:38:32 localhost unix_chkpwd[21900]: password check failed for user (root) 
Mar 20 08:38:32 localhost sshd[21898]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=she

このログファイルから私は期待しています何も言わなかった「パスワード失敗」のある行は1つだけですが、「パスワード失敗」のある行が4つあり、同じIPを使用すると仮定すると、私のIPアドレスを無差別に代入しようとする可能な試みを示したいと思います。

ベストアンサー1

これはタスクを完了する唯一の方法です。私はユーザー名ではなく、特定のIPアドレスが自分のホストに接続しようとする回数を数えることを好みます。なぜなら結局はこれを禁止できるからです。

awk '/Failed password/{ z[$11]++; } 
     END{ 
       for (i in z){ 
         if (z[i]>3) printf("%s attemps %s times.\n", i, z[i])
       }
}' /var/log/secure

(もちろん、一行の命令かもしれないので、読みやすくするためにインデントしました。)

説明する:

awkログファイルを1行ずつ読みます。行に文字列が含まれている場合は、配列要素の/Failed password/インデックスz[$11]++$11IPアドレスなど)を増やします。私はこれをカウンターとして使います。最後に、配列を検索してz[$11]3回以上接続しようとしたIPアドレスのみを出力します。
必要に応じて確認をカスタマイズし、メッセージを印刷できます。


あなたの懸念が無差別に代入されようとしている場合は、既存のツールを次のように使用することをお勧めします。失敗2禁止ログファイルをスキャンし、悪意のある兆候(たとえば、パスワードの失敗、脆弱性の悪用など)を示すIPをブロックします。わかりやすく、ニーズに合わせて設定できます。

おすすめ記事