一般情報:
配布:Ubuntu 18.04
Fail2Ban v0.10.2
_該当するボックスに入力してチェック( [x]
)します。 Fail2Banのバージョンが古くなっている場合は、
また、問題が最近のリリースで解決しないことを確認できません。サポートを求める方がよいでしょう。
取得したディストリビューションからFail2Banfrom_
親愛なる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一致を返します。
ここでもう一度助けてくれませんか。
%
を設定ファイルのみ(フィルターや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
いずれかになります。
もう一度:ありがとう!
ビールは私にあります!
ありがとう!!! 感謝!
(もしそれがビールなら、私はそれを楽しみます...しかし、状況によっては、それは何冊か本か二冊になるのではないかと心配しています;)
再度、感謝します!