空のユーザー名でsshdロギングを行うと、正規表現がIPアドレスではなくポートをキャッチし、最終的にipdns警告が発生します。
空のユーザー名で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としてキャッチされます
####追加情報
-
###構成、ダンプ、およびその他の役立つ抜粋
-
[sshd]
有効= true
モード=アグレッシブ
ポート= ssh
logpath =%(sshd_log)s
バックエンド=%(sshd_backend)s
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]
私はここで何かをフォローしませんでした-プレフィックスが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」を作成しました。
そのため、正規表現が一致せず、元のコメントの抜粋と適切な空白の行が添付されます。
一致は、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もすぐに修正します。
最も参考になるコメント
OK、thx!
修正は簡単です(
.+?
->.*?
):また、現在のsshd-filterもすぐに修正します。