Fail2ban: fail2ban-regex guacamoledockerログで必要なヘルプ

作成日 2020年11月24日  ·  6コメント  ·  ソース: fail2ban/fail2ban

一般情報:
配布:Ubuntu 18.04
Fail2Ban v0.10.2

環境:

_該当するボックスに入力してチェック( [x] )します。 Fail2Banのバージョンが古くなっている場合は、
また、問題が最近のリリースで解決しないことを確認できません。サポートを求める方がよいでしょう。
取得したディストリビューションからFail2Banfrom_

  • Fail2Banバージョン(可能な配布サフィックスを含む):
  • リリース名/バージョンを含むOS:
  • [X] OS /配信メカニズムを介してインストールされたFail2Ban
  • []コードベースに追加の外部パッチを適用していません
  • []構成に対していくつかのカスタマイズが行われました(以下の詳細を提供してください)

私の問題:

親愛なるsebres、
私は過去3日間、シェルスクリプトについて多くのことを学びました:)
しかし、正規表現の構文は本当に奇妙なものです。 それがどのように機能するのかわかりません。

このWAF製品には現在ビューの制限があり、古き良きワカモレコンテナーをアクティブ化する必要があります。
ログは次のようになります。

{"log":"12:59:14.168 [http-nio-8080-exec-4] WARN  o.a.g.r.auth.AuthenticationService - Authentication attempt from [192.168.8.5, 172.17.0.1] for user \"admin\" failed.\n","stream":"stdout","time":"2020-11-22T11:59:14.168982605Z"}
{"log":"12:59:15.477 [http-nio-8080-exec-9] WARN  o.a.g.r.auth.AuthenticationService - Authentication attempt from [192.168.8.5, 172.17.0.1] for user \"admin\" failed.\n","stream":"stdout","time":"2020-11-22T11:59:15.477692225Z"}

ステップ1;簡単に始める-役立つ: https

動作します!

fail2ban-regex -v \
'19:48:16.995 [http-nio-8080-exec-2] WARN  o.a.g.r.auth.AuthenticationService - Authentication attempt from [192.168.8.5, 172.17.0.1] for user "dfg" failed.' \
'\b[Aa]uthentication attempt from \[<HOST>(?:,[^\]]*)?\] (?:for user (?:"[^"]*" )?)?failed\.\s*$' 

ステップ2; 日付パターンを追加します。 役立つhttps://github.com/fail2ban/fail2ban/issues/2592#issuecomment-573119939

失敗した :(

fail2ban-regex -v \
--datepattern='^\{"log":"%%H:%%M:%%S\.%%f+\s+' \
'"log":"19:48:16.995 [http-nio-8080-exec-2] WARN  o.a.g.r.auth.AuthenticationService - Authentication attempt from [192.168.8.5, 172.17.0.1] for user "dfg" failed."' \
'\b[Aa]uthentication attempt from \[<HOST>(?:,[^\]]*)?\] (?:for user (?:"[^"]*" )?)?failed\.\s*$' 

そして、完全なログ文字列を使用します。 „ n "、" stream ":" stdout "、" time ":" 2020-11-22T11:59:15.477692225Z ""ステップ1もNULL一致を返します。
ここでもう一度助けてくれませんか。

how-to

全てのコメント6件

%を設定ファイルのみ(フィルターやjailなど)で%% %としてエスケープする必要があります。コマンドラインでは、1文字のままにする必要があります。

-fail2ban-regex -v --datepattern='^\{"log":"%%H:%%M:%%S\.%%f+\s+' ...
+fail2ban-regex -v --datepattern='^\{"log":"%H:%M:%S\.%f+\s+' ...

REの場合、メッセージがfailed.終わらないため( failed\.\s*$エンドアンカー$ため)、(2番目の)バリアントは機能しません(正しい日付パターンでも) failed\.\s*$ )、したがって、正規表現は"log":"value"の値のコンテンツに適用できますが、メッセージ全体には適用できません。これは、jsonに似ており、より多くのデータを含み、いくつかの構造で囲まれ、異なる方法でエスケープされます(たとえば、 for user \"...バックスラッシュに注意してください)。

私はこのようなことをします:

$ msg='{"log":"12:59:14.168 [http-nio-8080-exec-4] WARN  o.a.g.r.auth.AuthenticationService - Authentication attempt from [192.168.8.5, 172.17.0.1] for user \"admin\" failed.\n","stream":"stdout","time":"2020-11-22T11:59:14.168982605Z"}'
$ dp=',"time"\s*:\s*"%Y-%m-%dT%H:%M:%S\.%f\d*%z"\}$'
$ re='^\{"log"\s*:\s*"\S+\s+\[[^\]]+\]\s+WARN\s+\S+\s+-\s+[Aa]uthentication attempt from \[<ADDR>(?:,[^\]]*)?\] (?:for user (?:\\"<F-USER>[^"]*</F-USER>\\" )?)?failed\.'

$ fail2ban-regex -v --datepattern="$dp" "$msg" "$re"
...
Failregex: 1 total
|-  #) [# of hits] regular expression
|   1) [1] ^\{"log"\s*:\s*"\S+\s+\[[^\]]+\]\s+WARN\s+\S+\s+-\s+[Aa]uthentication attempt from \[<ADDR>(?:,[^\]]*)?\] (?:for user (?:\\"<F-USER>[^"]*</F-USER>\\" )?)?failed\.
|      192.168.8.5  Sun Nov 22 12:59:14 2020
`-
...
Date template hits:
|- [# of hits] date format
|  [1] ,"time"\s*:\s*"Year-Month-DayT24hour:Minute:Second\.Microseconds\d*Zone offset"\}$
`-

Lines: 1 lines, 0 ignored, 1 matched, 0 missed

# newer version can output found failure data (rows):
$ fail2ban-regex -o row --datepattern="$dp" "$msg" "$re"
['192.168.8.5', 1606046354,   {'ip6': None, 'user': 'admin', 'ip4': '192.168.8.5'}],

これはより特徴的で、開始から固定され、日付を含むより正確なタイムスタンプ(UTC、ログの終わり)にdatepatternを使用します。
また、fail2banは、 failregexの検索を開始する前に、 datepattern一致するメッセージの一部を切り取ることに注意してください。

上記でわずかなエラーが発生しました(メッセージを更新しました)- Z (GMTの符号)を認識するために、ゾーン名トークン%Z代わりにゾーンオフセットトークン( %z )を使用する必要があります%Z ):

-dp=',"time"\s*:\s*"%Y-%m-%dT%H:%M:%S\.%f\d*%Z"\}$'
+dp=',"time"\s*:\s*"%Y-%m-%dT%H:%M:%S\.%f\d*%z"\}$'
...
-|      192.168.8.5  Sun Nov 22 11:59:14 2020
+|      192.168.8.5  Sun Nov 22 12:59:14 2020
...
-|  [1] ,"time"\s*:\s*"Year-Month-DayT24hour:Minute:Second\.Microseconds\d*Zone name"\}$
+|  [1] ,"time"\s*:\s*"Year-Month-DayT24hour:Minute:Second\.Microseconds\d*Zone offset"\}$

ありがとう!
あなたの助けを借りてそれを立ち上げて実行してください、本当に素晴らしいです!

あなたのアドバイスを追加してください:
fail2ban.datedetector [20911]:INFO日付パターン',"time"\\s*:\\s*"%Y-%m-%dT%H:%M:%S\\.%f\\d*%z"\\}$',"time"\s*:\s*"Year-Month-DayT24hour:Minute:Second\.Microseconds\d*Zone offset"\}$

最後の質問。 fail2ban.filterの今後のワークロードを減らしたい:)
ログパスをできる限り定義するのは良い考えだと思いました。 (コンテナの更新(IDの変更など。ここでは当てはまりません)

logpath = /media/data/docker/containers/*/*-json.logから
logpath = /media/data/docker/containers/5e2543bbe77a52ff310073fdfb4183fa3fda6a3dd98294b48a081517baa20eb4/5e2543bbe77a52ff310073fdfb4183fa3fda6a3dd98294b48a081517baa20eb4-json.log \

これはエラーで実行されます。
私にできることは?

fail2ban.filterの今後のワークロードを減らしたい
ログパスをできる限り定義するのは良い考えだと思いました。

あまり。 現在、fail2banがglob補間を実行し、起動時に1回だけ検索するためです(問題#1379と、コアにまだマージされていないいくつかの実験的なブランチがあります)。
だからあなたの試みは何も変えない。

私にできることは?

はい、末尾のバックスラッシュを削除する\の後に.log :)
(オプション)すべてのログパスの2番目のパラメーターは、 headまたはtailいずれかになります。

もう一度:ありがとう!
ビールは私にあります!

ありがとう!!! 感謝!
(もしそれがビールなら、私はそれを楽しみます...しかし、状況によっては、それは何冊か本か二冊になるのではないかと心配しています;)
再度、感謝します!

このページは役に立ちましたか?
0 / 5 - 0 評価