Fail2ban: Bantuan diperlukan dengan log docker guacamole fail2ban-regex

Dibuat pada 24 Nov 2020  ·  6Komentar  ·  Sumber: fail2ban/fail2ban

Informasi Umum:
Distribusi: Ubuntu 18.04
Fail2Ban v0.10.2

Lingkungan:

_Isi dan centang ( [x] ) kotak yang sesuai. Jika versi Fail2Ban Anda sudah usang,
dan Anda tidak dapat memverifikasi bahwa masalah tetap ada dalam rilis terbaru, lebih baik cari dukungan
dari distribusi Anda memperoleh Fail2Ban dari_

  • Versi Fail2Ban (termasuk kemungkinan akhiran distribusi):
  • OS, termasuk nama/versi rilis:
  • [X] Fail2Ban diinstal melalui OS/mekanisme distribusi
  • [ ] Anda belum menerapkan patch asing tambahan ke basis kode
  • [ ] Beberapa penyesuaian dilakukan pada konfigurasi (berikan detail di bawah ini)

masalahku:

sebres yang terhormat,
Saya banyak belajar 3 hari terakhir tentang skrip shell :)
Tapi sintaks regex adalah hal yang sangat aneh; Saya tidak mengerti cara kerjanya.

Ada batasan tampilan sekarang dengan produk WAF ini dan saya perlu mengaktifkan wadah guacamole lama saya yang bagus.
Beginilah tampilan lognya:

{"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"}

Langkah1;Mulai sederhana - Bermanfaat: https://github.com/fail2ban/fail2ban/issues/2645#issuecomment -592032811

Bekerja!

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*$' 

Langkah 2; Tambahkan pola tanggal; Bermanfaat https://github.com/fail2ban/fail2ban/issues/2592#issuecomment -573119939

Gagal :(

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*$' 

Dan menggunakan string log lengkap termasuk. n","stream":"stdout","time":"22-11-2020T11:59:15.477692225Z"“ Langkah 1 juga mengembalikan kecocokan NULL.
Bisakah Anda membantu saya di sini untuk kedua kalinya?

how-to

Semua 6 komentar

Anda harus keluar dari % sebagai %% di file konfigurasi (misalnya di filter atau jail), di baris perintah harus tetap satu karakter, jadi

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

untuk RE, varian (kedua) Anda tidak akan berfungsi (juga dengan pola tanggal yang benar), karena pesan Anda tidak diakhiri dengan failed. (karena jangkar akhir $ di failed\.\s*$ ), sehingga ekspresi reguler dapat diterapkan ke konten nilai dalam "log":"value" tetapi tidak ke seluruh pesan, yang terlihat mirip json dan berisi lebih banyak data, terlampir dalam beberapa struktur dan lolos secara berbeda (mis. perhatikan garis miring terbalik di for user \"... ).

Saya akan melakukan sesuatu seperti ini:

$ 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'}],

Ini lebih khas, berlabuh dari awal, dan menggunakan pola tanggal untuk stempel waktu yang lebih tepat dengan tanggal (dalam UTC, di akhir log).
Perhatikan juga bahwa fail2ban memotong bagian dari pesan yang cocok dengan datepattern sebelum pencarian failregex dimulai.

Sedikit kesalahan telah merayap di atas (saya memperbarui pesan) - untuk mengenali Z (menandatangani GMT), seseorang harus menggunakan token offset zona ( %z ) alih-alih token nama zona %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"\}$

Terima kasih!
Selesaikan dan jalankan dengan bantuan Anda, sungguh luar biasa!

Tambahkan saran Anda:
fail2ban.datedetector [20911]: pola tanggal 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"\}$

Satu pertanyaan terakhir; Saya ingin mengurangi beban kerja yang akan datang untuk fail2ban.filter :)
Saya pikir itu ide yang bagus untuk mendefinisikan logpath sebaik mungkin. ( Pembaruan Wadah ( id berubah dll. Tidak demikian di sini)

Dari logpath = /media/data/docker/containers/*/*-json.log hingga
logpath = /media/data/docker/containers/5e2543bbe77a52ff310073fdfb4183fa3fda6a3dd98294b48a081517baa20eb4/5e2543bbe77a52ff310073fdfb4183fa3fda6a3dd98294b48a081517baa20eb4-json.log \

Ini berjalan dalam kesalahan;
Sesuatu yang bisa saya lakukan?

Saya ingin mengurangi beban kerja yang akan datang untuk fail2ban.filter
Saya pikir itu ide yang bagus untuk mendefinisikan logpath sebaik mungkin.

Tidak juga. Karena saat ini fail2ban melakukan interpolasi glob dan pencarian hanya sekali oleh start-up (ada masalah #1379 dan banyak dari beberapa cabang eksperimental yang belum digabungkan dalam inti).
Jadi upaya Anda tidak mengubah apa pun.

Sesuatu yang bisa saya lakukan?

ya, hapus garis miring terbalik \ setelah .log :)
(opsional) parameter kedua pada setiap logpath dapat berupa head atau tail .

Sekali lagi terima kasih!
Bir ada di saya!

Terima kasih!!! Dihargai!
(jika itu bir, saya akan menikmatinya ... tapi saya khawatir, tergantung pada situasinya, itu akan menjadi beberapa buku, atau dua;)
Terima kasih lagi!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

DazzlerJay picture DazzlerJay  ·  7Komentar

KiwiMorpheus picture KiwiMorpheus  ·  3Komentar

electrofloat picture electrofloat  ·  3Komentar

szepeviktor picture szepeviktor  ·  8Komentar

mitchellkrogza picture mitchellkrogza  ·  6Komentar