SSHブルートフォースの試みに応じてCentOSサーバーにfail2banをインストールしたところです。 fail2banのsshd.confファイルのデフォルトの正規表現は、SSHがすべての接続試行を記録しているように見える、audit.logのどのエントリとも一致しないため、一致する表現を追加しようとしています。
照合しようとしている文字列は次のとおりです。
type=USER_LOGIN msg=audit(1333630430.185:503332): user pid=30230 uid=0 auid=500
subj=user_u:system_r:unconfined_t:s0-s0:c0.c1023 msg='acct="root": exe="/usr
/sbin/sshd" (hostname=?, addr=<Host IP>, terminal=sshd res=failed)'
私が使用しようとしている正規表現は次のとおりです。
^.*addr=<Host>, terminal=sshd res=failed.*$
私はregextester.comとregexrを使用して正規表現を作成しようとしました。テスターは私にこの正規表現の一致を与えます:^.*addr=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}, terminal=sshd res=failed.*$
を使用しないとfail2ban-regexが文句を言う<Host>
正規表現のタグ。ただし、^.*addr=<Host>, terminal=sshd res=failed.*$
は0件の一致を示します。
この時点で、私は完全に行き詰まっています。使用しようとしている正規表現で何が間違っていますか?
どうやらこれはRTFMの場合です。しばらく調べてみたところ、 fail2ban のWebサイトに、タイムスタンプ用とタイムスタンプに続く残りの行用に、1行あたり2つの正規表現一致を行うことを示すページが見つかりました。 audit.logのタイムスタンプはエポック形式であり、最初の正規表現の一致に失敗したようです。 fail2ban-regexを使用して/ var/log/secureをfail2ban sshd.confファイルと比較すると、望ましい動作が得られました。
正しい解決策は、jail.confの適切なセクションを/ var/log/secureにポイントすることでした。
それでも独自の正規表現を作成したい人のために、 このセクション には、最終的に私がこれを解決するのに役立ったこの小さなヒントを含む、多くの良い情報があります。
ログ行がfailregexと一致するためには、実際には2つの部分で一致する必要があります。行の先頭はタイムスタンプパターンまたは正規表現に一致する必要があり、行の残りの部分はfailregexに一致する必要があります。 failregexが先頭に^を付けてアンカーされている場合、アンカーは、タイムスタンプと間にある空白の後の、行の残りの始まりを指します。
私のRTFM=瞬間が誰かの助けになることを願っています。