Saya menggunakan fail2ban di semua server dengan layanan yang dapat dilihat secara publik dan saya bertanya-tanya:
- Apakah ada cara mudah untuk membagikan IP yang diblokir di antara host yang saya kontrol?
- Apakah ada layanan di luar sana yang mengumpulkan dan menerbitkan data itu?
Saya sudah mendapatkan upaya login yang tak terhitung sejak hari pertama menyiapkan server ini.
Jawaban:
Saya pernah melihat sistem untuk memusatkan data fail2ban di situs ini , dan membuat versi modifikasi. Basis datanya sama, tetapi saya mengubah dan membuat beberapa skrip.
Sistem saya memiliki 4 komponen:
basis data fail2ban
Ini adalah database MySQL yang hanya berisi satu tabel
erp_core_fail2ban
::fail2ban.php
Setiap kali sebuah host diblokir, itu akan mengisi basis data:
cron2ban
Anda meletakkan ini di crontab, setiap menit. Ini akan mengambil host yang terakhir ditambahkan, dan mencekal mereka.
phpconfig
File ini menuju ke / etc / fail2ban dan memiliki konfigurasi database dan pemilihan jail.
Buat file-file itu dan ubah konfigurasi dari fail2ban:
Setelah baris dengan
actionban = .....
baris baru dimasukkan untuk menjalankan skrip PHP:/root/fail2ban.php <name> <protocol> <port> <ip>
Menggunakan struktur ini di semua server Anda akan memastikan bahwa setiap kali satu host diblokir di satu server, semua server lain juga akan mencekalnya.
sumber
Jadi saya melakukan banyak penelitian tentang bagaimana melakukan ini setelah menonton alamat ip yang sama mengenai server web saya satu demi satu. Karena saya menggunakan AWS, saya pikir mungkin ada cara yang mudah dan berfungsi dengan baik dalam dua hari pertama saya menguji 5 server.
Hal pertama yang saya sarankan adalah menonaktifkan SELinux untuk sementara, kami akan mengatasinya pada akhirnya. Saya bukan ahli SELinux tetapi apa yang saya lakukan sejauh ini berhasil.
Persyaratan utama adalah sumber file bersama, saya menggunakan AWS EFS. Setelah drive baru disediakan dan dipasang, saya mengubah logtarget di dalam /etc/fail2ban/fail2ban.conf ke subfolder di drive EFS.
Lalu saya menulis filter sederhana dan meletakkannya di /etc/fail2ban/filter.d/fail2ban-log.conf
Menambahkan filter ke /etc/fail2ban/jail.local
Kemudian restart fail2ban
Sejauh ini baik! Tidak ada bagian yang menyakitkan adalah SELinux. Setelah saya membiarkan fail2ban berjalan sebentar, saya menjalankan perintah ini yang akan memungkinkan fail2ban melalui filter.
Audit2allow akan memberitahu Anda untuk menjalankan perintah ini
Saya masih memeriksa log SELinux saya di sana-sini untuk melihat apakah ada lagi penolakan. Jika ada yang punya tip tentang cara mendapatkan SELinux yang jelas dengan metode lain yang akan luar biasa.
Pada titik ini saya masih mendapatkan kesalahan saat memulai kembali fail2ban. Ada bug saat menggunakan action = action_mwl di jail.local. Setelah sedikit googling saya menemukan ini yang berfungsi sejauh ini. Dari apa yang saya baca karena garis istirahat dalam arahan logat menunjuk ke beberapa file. Saya mencoba dengan koma, spasi, dll tidak ada yang berfungsi dengan action_mwl.
Jangan lupa untuk mengaktifkan SELinux kembali!
sumber
Saya baru saja mengimplementasikan ini dan sejauh ini tampaknya berfungsi dengan baik. Namun, saya harus memperbarui beberapa php karena skrip dalam jawaban asli menggunakan fungsi yang sudah usang.
Berikut ini skrip yang diperbarui
phpconfig.php
fail2ban.php
cron2ban.php
Juga, di mana pun Anda menempatkan aksi fail2ban.php, itu harus diindentasi sebanyak baris di atasnya. Sebagai contoh:
Kalau tidak fail2ban tidak akan mulai. Saya harap ini membantu siapa pun yang mencoba menyebarkan ini.
sumber
Alternatif untuk
fail2ban
adalah DenyHosts yang dilengkapi dengan fungsi sinkronisasi. Instalasi cukup mirip denganfail2ban
, lihat tutorial Cyberciti untuk lebih jelasnya .Masalahnya adalah bahwa layanan sinkronisasi terpusat dan kode sumber sisi server tampaknya tidak tersedia, sehingga Anda tidak dapat dengan mudah memulai layanan DenyHosts Anda sendiri dan Anda harus bergantung pada pihak ke-3 (yang mungkin baik untuk beberapa gunakan kasing).
sumber
Ya dan ya. Keduanya bisa dilakukan.
Anda perlu menemukan mekanisme yang sesuai untuk membagikan daftar IP. Jika Anda menggunakan AWS misalnya, Anda bisa memanfaatkan s3. Anda bisa menggunakan rsync antara host Linux, atau database yang umum untuk semua host. Anda dapat mengetuk layanan dengan bahasa pemrograman favorit Anda yang menyediakan API yang tenang pilihannya adalah milik Anda.
Dalam hal jika berbagi sekutu daftar publik Anda dapat membuat situs web dan meng-host file teks sederhana, beberapa sudah menyediakan daftar seperti itu (bukan kerumunan yang bersumber yang saya tahu). Cara membuat situs / layanan Anda sendiri akan berada di luar ruang lingkup jawaban, namun seharusnya tidak terlalu sulit untuk dilakukan.
sumber
Pengaturan yang cukup manual adalah mengubah konfigurasi yang memanggil
iptables
untuk memperbarui aturan sehingga memanggil skrip Anda sendiri yang menyusun loop melalui daftar host (baca dari file?) Dan membuatiptables
panggilan pada masing-masing melalui SSH. Anda akan memerlukan otentikasi berbasis kunci antara semua host yang dikonfigurasikan agar ini berfungsi. Alat otomatisasi admin seperti boneka dapat membuat pengaturan ini dan mempertahankannya lebih mudah. Ini tidak akan sangat efisien tetapi kecuali jika Anda melihat sejumlah besar lalu lintas menyelidik (dan / atau memiliki sejumlah besar host) maka saya yakin itu akan cukup baik. Jika Anda hanya memiliki beberapa host maka Anda bahkan tidak perlu mengulang-ulang file: konfigurasikan masing-masing untuk hanya memanggil yang lain secara berurutan. Upaya skrip akan minimal.Tidak ada keraguan banyak cara. Buat skrip di atas memasukkan data ke dalam DB dan minta klien membaca dari situ, polling untuk aturan baru dan menjalankannya saat mereka masuk. Sederhana "jalankan aturan seperti yang Anda lihat" tidak akan sempurna jika banyak host mengirimkan informasi, misalnya kasus ini:
tetapi ini seharusnya tidak menjadi masalah yang signifikan, dan jika Anda mendapatkan sedikit lebih pintar dengan database Anda dapat mengelola banyak pengiriman lebih bersih jika Anda memutuskan itu sepadan dengan usaha.
Menjalankannya sebagai layanan publik akan membuka Anda ke dunia admin yang rumit:
sumber