0

だから今日、私はfail2banフィルターの正規表現をまとめようとしていました. ここで、fail2ban には、正規表現パターンでネストされた OR 操作に関する問題があることに気付きました。

入力文字列:127.0.0.1 - - [13/Aug/2016:07:01:45 -0400] "a

パターン:^<HOST> -.*\"(c|b)|a

次に例を示します。

$ fail2ban-regex "127.0.0.1 - - [13/Aug/2016:07:01:45 -0400] \"a" '^<HOST> -.*\"(c|b)|a'

Running tests
=============

Use   failregex line : ^<HOST> -.*\"(c|b)|a
Use      single line : 127.0.0.1 - - [13/Aug/2016:07:01:45 -0400] "a


Results
=======

Failregex: 0 total

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [1] Day/MONTH/Year:Hour:Minute:Second
`-

Lines: 1 lines, 0 ignored, 0 matched, 1 missed
|- Missed line(s):
|  127.0.0.1 - - [13/Aug/2016:07:01:45 -0400] "a
`-

これは実際には成功し、正規表現パターンを実行すると一致が報告されることに注意しましたa|(c|b)が、最初の OR の両側をチェックして、最初の条件が一致するかどうかを確認できる必要があります (たとえば、HTTP 要求がtype が POST または GET でない場合)、正規表現パターンの残りを無視するか、最初の OR の後に残りの正規表現パターンを実行します。もう1つのことは、グループ化は常に最も外側のORの最初の部分にのみ一致するように見えるため、重要ではないように見えることです。

ここで一致を取得します。

$ fail2ban-regex "127.0.0.1 - - [13/Aug/2016:07:01:45 -0400] \"a" '^<HOST> -.*\"a|(c|b)'

Running tests
=============

Use   failregex line : ^<HOST> -.*\"a|(c|b)
Use      single line : 127.0.0.1 - - [13/Aug/2016:07:01:45 -0400] "a


Results
=======

Failregex: 1 total
|-  #) [# of hits] regular expression
|   1) [1] ^<HOST> -.*\"a|(c|b)
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [1] Day/MONTH/Year:Hour:Minute:Second
`-

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

regex101.com や debuggex.com などのサイトでテストした結果、これらの正規表現パターンの両方と一致することが報告されたため、これはバグである可能性があります。

4

1 に答える 1