Blok IP permanen setelah n coba lagi menggunakan fail2ban

38

Saya memiliki fail2ban yang dikonfigurasi seperti di bawah ini:

  • memblokir ip setelah 3 upaya gagal
  • lepaskan IP setelah batas waktu 300 detik

Ini berfungsi dengan baik dan saya ingin tetap seperti ini sehingga pengguna yang valid mendapat kesempatan untuk mencoba kembali login setelah batas waktu. Sekarang, saya ingin menerapkan aturan di mana jika IP yang sama terdeteksi sebagai serangan dan diblokir, diblokir 5 kali, memblokir IP secara permanen dan tidak pernah membuka blokir lagi. Bisakah ini dicapai dengan fail2ban sendirian atau saya perlu menulis skrip saya sendiri untuk melakukan itu?

Saya melakukan ini dalam centos.

BTR Naidu
sumber
2
Itu ide yang agak konyol - semakin banyak aturan yang Anda tambahkan ke iptables semakin lambat.
symcbean
14
Hargai komentar Anda tetapi yang saya butuhkan adalah jawaban dan bukan saran. Bagaimanapun, terima kasih.
BTR Naidu
5
Terkadang jawaban yang tepat untuk "bagaimana saya melakukan X" adalah "jangan lakukan X".
ceejayoz

Jawaban:

32

Sebelum 0.11, tidak ada fitur default atau pengaturan di fail2ban untuk mencapai ini. Tetapi mulai dengan rilis 0,11 mendatang, waktu larangan dihitung secara otomatis dan meningkat secara eksponensial dengan setiap pelanggaran baru yang, dalam jangka panjang, akan berarti lebih atau kurang blok permanen.

Sampai saat itu, pendekatan terbaik Anda mungkin mengatur fail2ban untuk memonitor file log-nya sendiri . Ini adalah proses dua langkah ...

Langkah 1

Kita perlu membuat filter untuk memeriksa BAN dalam file log (file log fail2ban)

Langkah 2

Kita perlu mendefinisikan jail , mirip dengan yang berikut ...

[fail2ban]
diaktifkan = benar
filter = fail2ban
action = iptables-allports [name = fail2ban]
logpath = /path/to/fail2ban.log
# findtime: 1 hari
findtime = 86400
# bantime: 1 tahun
bantime = 31536000

Secara teknis, ini bukan blok permanen , tetapi hanya blok untuk satu tahun (yang bisa kita tingkatkan juga).

Pokoknya, untuk pertanyaan Anda (Bisakah ini dicapai dengan fail2ban sendirian atau saya perlu menulis skrip saya sendiri untuk melakukan itu?) ... menulis skrip sendiri mungkin bekerja dengan baik. Menyiapkan skrip untuk mengekstrak IP yang sering dilarang dan kemudian memasukkannya ke dalam /etc/hosts.denyadalah yang saya rekomendasikan.

Pothi Kalimuthu
sumber
1
Menambahkan ke jawaban yang luar biasa ini ... Bergantung pada bagaimana cara logging dan MaxAuthTries dikonfigurasikan sshd_config, ini berpotensi hanya dapat memblokir 3 login gagal untuk "sesi" sshd - bukan 3 login gagal yang disediakan. Misalnya, secara default penyerang dapat mencoba ['pass1', 'pass2', 'pass3'] dalam satu sesi sebelum sshd terputus. Bergantung pada bagaimana sshd diatur ke log, ini bisa muncul ketika 1, 2 atau 3 mencoba gagal2ban.
Jonathan Vanasco
5
Ada filter residen gagal2ban untuk itu, sekarang.
Guillermo Prandi
Apa yang Anda maksud dengan rilis 0,11 mendatang ? Yang terbaru tampaknya 10.3.1: github.com/fail2ban/fail2ban/releases
user5950
Saya harap Anda maksud 0.10.3.1 . Anda dapat melacak kemajuan "0.11" di github.com/fail2ban/fail2ban/tree/0.11 . Pada dasarnya, ini belum dirilis!
Pothi Kalimuthu
30

Saya percaya jika Anda memasukkan bantime = -1bagian konfigurasi itu, itu adalah blok permanen.

J. Chin
sumber
2
Memang, menetapkan bantimenilai negatif apa pun adalah larangan permanen (per Fail2Ban ver. 0.6.1 (2006/03/16))
voretaq7
3
menambahkan -1 ke pengaturan membuat fail2ban tidak responsif
Erdem Ece
13

Phil Hagen menulis artikel yang bagus tentang hal ini. "Secara permanen Ban Pelanggar Berulang Dengan fail2ban ".

Sarannya sama dengan Pothi tetapi memberikan panduan langkah demi langkah.

Ini termasuk:

  • pisahkan daftar larangan oleh penjara (ip.blocklist.ssh, ip.blocklist.xxx)
  • daftar larangan dimuat secara otomatis jika layanan dinyalakan kembali (keuntungan utama dari metode ini)
  • pemberitahuan email jika pengulang terlibat.
xaa
sumber
6

Untuk memperluas jawaban Chin ini cukup sederhana. Edit saja 2 pengaturan /etc/fail2ban/jail.localuntuk mencocokkan preferensi Anda.

 # ban time in seconds. Use -1 for forever. Example is 1 week.
 bantime  = 604800
 # number of failures before banning
 maxretry = 5
Casey Watson
sumber
4

fail2ban sudah memiliki penjara untuk melarang residive. Jika Anda menonton /etc/fail2ban/jail.conf, Anda akan menemukan:

# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
#   Make sure that your loglevel specified in fail2ban.conf/.local
#   is not at DEBUG level -- which might then cause fail2ban to fall into
#   an infinite loop constantly feeding itself with non-informative lines
[recidive]

enabled  = false
filter   = recidive
logpath  = /var/log/fail2ban.log
action   = iptables-allports[name=recidive]
           sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime  = 604800  ; 1 week
findtime = 86400   ; 1 day
maxretry = 5

Bagaimana cara menambahkan jail.local?

[recidive]
enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2

Untuk check Anda loglevel yang dapat Anda lakukan: fail2ban-client get loglevel.

  • set loglevel MYLEVEL : atur level logging ke MYLEVEL. Level: KRITIS, KESALAHAN, PERINGATAN, PEMBERITAHUAN, INFO, DEBUG
  • Perintah lainnya di wiki .

Dengan versi fail2ban yang lama, Anda bisa mendapatkan bug ini .

A-312
sumber
0

Pergi ke vim, buka /etc/fail2ban/jail.conf

dan cukup modifikasi setelah fail2ban service restart:

# "bantime" is the number of seconds that a host is banned.
bantime  = ***1296000***

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = ***60000***

# "maxretry" is the number of failures before a host get banned.
maxretry = ***3***
Tanveer Ahmad
sumber