Fail2ban: 「無効なユーザー」正規表現のsshd.conf空のユーザー名はipdns警告につながります

作成日 2020年06月06日  ·  5コメント  ·  ソース: fail2ban/fail2ban

空のユーザー名でsshdロギングを行うと、正規表現がIPアドレスではなくポートをキャッチし、最終的にipdns警告が発生します。

環境:

  • Fail2Banバージョン:0.11.1(fail2ban / focus 0.11.1-1 all)
  • OS:Ubuntu 20.04 LTS
  • [x] OS /配信メカニズムを介してインストールされたFail2Ban
  • [x]コードベースに追加の外部パッチを適用していません
  • []構成に対していくつかのカスタマイズが行われました(以下の詳細を提供してください)
    (なし、以下のjail.local構成を除く)

問題:

空のユーザー名でsshdロギングを行うと、正規表現がIPアドレスではなくポートをキャッチし、最終的にipdns警告が発生します。

再現する手順

syslogの例の行:

Jun  6 04:17:04 myshot sshd[1189074]: Invalid user  from 65.49.20.68 port 34916
Jun  6 04:17:09 myshot sshd[1189074]: Connection closed by invalid user  65.49.20.68 port 34916 [preauth]

fail2banの結果:

2020-06-06 04:17:09,123 fail2ban.ipdns          [11148]: WARNING Determined IP using DNS Lookup: 34916 = {'0.0.136.100'}

予想される行動

35.49.20.68を34916ではなくIPとして決定

観察された行動

ポート34916は決定されたIPとしてキャッチされます

####追加情報
-

###構成、ダンプ、およびその他の役立つ抜粋
-

/ etc / fail2ban /構成に対して行われたカスタマイズ

[sshd]
有効= true
モード=アグレッシブ
ポート= ssh
logpath =%(sshd_log)s
バックエンド=%(sshd_backend)s

/var/log/fail2ban.logファイルの関連部分:

2020-06-06 04:17:09,123 fail2ban.ipdns          [11148]: WARNING Determined IP using DNS Lookup: 34916 = {'0.0.136.100'}

問題の監視対象ログファイルからの関連行:

Jun  6 04:17:04 myshot sshd[1189074]: Invalid user  from 65.49.20.68 port 34916
Jun  6 04:17:09 myshot sshd[1189074]: Connection closed by invalid user  65.49.20.68 port 34916 [preauth]
3rd party issue moreinfo

最も参考になるコメント

OK、thx!
修正は簡単です( .+? -> .*? ):

-__authng_user = (?: (?:invalid|authenticating) user <F-USER>\S+|.+?</F-USER>)?
+__authng_user = (?: (?:invalid|authenticating) user <F-USER>\S+|.*?</F-USER>)?

また、現在のsshd-filterもすぐに修正します。

全てのコメント5件

私はここで何かをフォローしませんでした-プレフィックスがsshd-filterに存在しない後、ログ行の先頭でInvalid user一致するそのようなRE。
したがって、サンプル行はデフォルトのフィルターではまったく見つかりません。 PoC:

$ fail2ban-regex -rvv 'Jun 6 04:17:04 myshot sshd[1189074]: Invalid user from 65.49.20.68 port 34916' 'sshd[mode=aggressive]'
...
Lines: 1 lines, 0 ignored, 0 matched, 1 missed
|- Missed line(s):
|  Jun 6 04:17:04 myshot sshd[1189074]: Invalid user from 65.49.20.68 port 34916
`-

この行が原因である場合は、それに一致する正規表現を指定する必要があります。
それはあなた自身のREであれば、あなたが使用し、アンカーとノーキャッチオールズと、それをより正確にする(それを修正する必要があります<ADDR>の代わりに<HOST>
それが他の行である場合-ログ全体の抜粋( sshd[1189074]すべてのメッセージ)を提供できますか?

暫定的な解決策として(sshdがホスト名を通常ログに記録するのを見たことがないので)、これを無効にするには、 usedns = noを切り替えます(これにより、フィルターが少し速くなります)。
ただし、正規表現を修正することをお勧めします。

一致は、Ubuntu 20fail2banパッケージに元の状態で提供されている添付のfilter.dsshd.confからのものであり、まったく変更されていません。 どの行がこれに一致するかはわかりませんが、これは一致が関連するファイルです。

私が見ることができるもの-どういうわけか、githubは上記の元の投稿で1つの空白だけで「userfrom」として表示するために2つの空白で「userfrom」を作成しました。

そのため、正規表現が一致せず、元のコメントの抜粋と適切な空白の行が添付されます。

sshd.conf.txt
lines_with_blanks.txt

一致は、Ubuntu 20fail2banパッケージに元の状態で提供されている添付のfilter.dsshd.confからのものであり、まったく変更されていません。

あなたは正しいです(申し訳ありませんがそれを見落としています):

^[iI](?:llegal|nvalid) user <F-USER>.*?</F-USER> from <HOST>%(__suff)s$

私が見ることができるもの-どういうわけか、githubは上記の元の投稿で1つの空白だけで「userfrom」として表示するために2つの空白で「userfrom」を作成しました。

ログを囲むには、マークダウン形式を使用する必要があります(元の問題を変更しました)。

そして今、それは一致を見つけます、しかしそれは期待通りに働きます:

$ fail2ban-regex -rvv 'Jun  6 04:17:04 myshot sshd[1189074]: Invalid user  from 65.49.20.68 port 34916' 'sshd[mode=aggressive]'

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

Use   failregex filter file : sshd, basedir: /etc/fail2ban/
Use   filter options : {'mode': 'aggressive'}
Real  filter options : {'logtype': 'file', 'mode': 'aggressive', 'datepattern': '{^LN-BEG}'}
Use         maxlines : 1
Use      datepattern : Default Detectors
Use      single line : Jun  6 04:17:04 myshot sshd[1189074]: Invalid user...


Results
=======

Failregex: 1 total
|-  #) [# of hits] regular expression
...
|   6) [1] ^[iI](?:llegal|nvalid) user <F-USER>.*?</F-USER> from <HOST>(?: (?:port \d+|on \S+|\[preauth\])){0,3}\s*$
|      65.49.20.68  Sat Jun 06 04:17:04 2020
...
`-
...
Lines: 1 lines, 0 ignored, 1 matched, 0 missed

$ fail2ban-regex -o row 'Jun  6 04:17:04 myshot sshd[1189074]: Invalid user  from 65.49.20.68 port 34916' 'sshd[mode=aggressive]'
['65.49.20.68', 1591409824.0,   {'user': '', 'ip6': None, 'mlfid': ' myshot sshd[1189074]: ', 'dns': None, 'ip4': '65.49.20.68'}],

この正規表現は左右から固定されているため、 fromが正確になり、欲張りでないキャッチオールがここでは空に一致する前に、ユーザーの部分が何であるかは関係ありません。
そして、私はRE全体で34916がdnsとして一致する可能性がある原因を正確に把握していません。

^[iI](?:llegal|nvalid) user (?P<user>.*?) from (?:\[?(?:(?:::f{4,6}:)?(?P<ip4>(?:\d{1,3}\.){3}\d{1,3})|(?P<ip6>(?:[0-9a-fA-F]{1,4}::?|::){1,7}(?:[0-9a-fA-F]{1,4}|(?<=:):)))\]?|(?P<dns>[\w\-.^_]*\w))(?: (?:port \d+|on \S+|\[preauth\])){0,3}\s*$

それでも他のログ行だと思うので、繰り返します。「ログ全体の抜粋(sshd [1189074]のすべてのメッセージ)」を提供してください。 または、34916(またはタイムスタンプ)でgrepすることもできます。
または、たとえば次のように、DNSが一致することが表示されない限り、上記のようにfail2ban-regex試してください。

fail2ban-regex -o row systemd-journal 'sshd[mode=aggressive]' | grep "'dns': '"

* systemd-journalをログファイル名に置き換えます(ログの場合)。

また、フィルターの状態が実際に変更されていない(ローカルがない)ことを確認するには、 fail2ban-client -d | grep sshd出力を提供します。

フォーマットのヒントをありがとう-添付されているのは、2つのログ(auth.logとfail2ban.log)からのgrepさ​​れた行です。

auth.log.grepped.txt
fail2ban.log.grepped.txt

fail2ban-regex -o row auth.log.grepped.txt 'sshd[mode=aggressive]' | grep "'dns': '"
与える
['0.0.136.100', 1591409829.0, {'mlfid': ' myshot sshd[1189074]: ', 'user': ' 65.49.20.68 port', 'ip4': None, 'ip6': None, 'dns': '34916', 'users': {' 65.49.20.68 port'}, 'mlfforget': 'Connection closed'}],

そうです、そうです、「閉じた」線がこれをトリガーします、私はそれが間違っていると推測しました。 それに応じて最初の投稿を編集しました。

OK、thx!
修正は簡単です( .+? -> .*? ):

-__authng_user = (?: (?:invalid|authenticating) user <F-USER>\S+|.+?</F-USER>)?
+__authng_user = (?: (?:invalid|authenticating) user <F-USER>\S+|.*?</F-USER>)?

また、現在のsshd-filterもすぐに修正します。

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