Dengan fail2ban, komputer Linux Anda secara otomatis memblokir alamat IP yang memiliki terlalu banyak kegagalan koneksi. Ini adalah keamanan yang mengatur dirinya sendiri! Kami akan menunjukkan cara menggunakannya.
Artikel Pekan Kesadaran Keamanan Siber ini dipersembahkan untuk Anda terkait dengan Incogni.
Apa itu fail2ban?
Fail2ban adalah utilitas yang secara otomatis akan memblokir alamat IP jika mencoba dan gagal menyambung ke server terlalu sering.
Ketika seseorang mencoba menyambung ke server Anda — baik itu server SSH, server web atau email, atau server Minecraft — mereka biasanya diminta memasukkan nama pengguna dan kata sandi sebelum mereka diizinkan mengakses. Manusia normal yang memasukkan (atau menebak) detail akun mereka secara fisik tidak akan dapat memasukkan lebih dari satu upaya paling cepat setiap beberapa detik. Ketika kredensial dimasukkan lebih cepat dan lebih sering dari itu, itu tandanya Anda mempunyai masalah — seseorang mungkin menjalankan serangan brute force dengan komputer lain untuk mencoba membobolnya.
Untuk mendeteksi serangan brute force, Anda perlu memantau permintaan koneksi yang gagal masuk ke akun. Setelah penyerang teridentifikasi, mereka harus dilarang melakukan upaya lebih lanjut.
Satu-satunya cara praktis untuk mencapai hal ini adalah dengan mengotomatiskan seluruh proses. Dengan sedikit konfigurasi sederhana, fail2ban akan mengelola pemantauan, pelarangan, dan pembatalan pelarangan untuk Anda.
fail2ban terintegrasi dengan firewalliptables Linux. Ini memberlakukan larangan terhadap alamat IP yang dicurigai dengan menambahkan aturan ke firewall. Agar penjelasan ini tidak berantakan, kami menggunakan iptables dengan kumpulan aturan yang kosong. Tentu saja, jika Anda mengkhawatirkan keamanan, Anda mungkin memiliki firewall yang dikonfigurasi dengan kumpulan aturan yang banyak. fail2ban hanya menambahkan dan menghapus aturannya sendiri — fungsi firewall reguler Anda tidak akan tersentuh.
Kami dapat melihat kumpulan aturan kosong kami menggunakan perintah ini:
sudo iptables -L
Instalasi fail2ban
Instalasi fail2ban mudah dilakukan di semua distribusi yang kami gunakan untuk meneliti artikel ini. Di Ubuntu 20.04, perintahnya adalah sebagai berikut:
sudo apt-get install fail2ban
Pada Fedora 32, ketik:
sudo dnf install fail2ban
Pada Manjaro 20.0.1, kami menggunakan pacman:
sudo pacman -Sy fail2ban
Configuring fail2ban
Instalasi fail2ban berisi file konfigurasi default yang disebut jail .conf. File ini ditimpa ketika fail2ban ditingkatkan, jadi kami akan kehilangan perubahan jika kami melakukan penyesuaian pada file ini.
Sebagai gantinya, kami akan menyalin file jail.conf ke file bernama jail.local. Dengan menempatkan perubahan konfigurasi kami di jail.local, perubahan tersebut akan bertahan selama peningkatan. Kedua file secara otomatis dibaca oleh fail2ban.
Ini adalah cara menyalin file:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Sekarang buka file di editor favorit Anda. Kami akan menggunakan gedit:
sudo gedit /etc/fail2ban/jail.local
Kami akan mencari dua bagian dalam file: [DEFAULT] dan [sshd]. Namun, berhati-hatilah untuk menemukan bagian sebenarnya. Label tersebut juga muncul di dekat bagian atas di bagian yang mendeskripsikannya, tapi bukan itu yang kami inginkan.
Anda akan menemukan bagian [DEFAULT] di sekitar baris 40. Ini adalah bagian panjang dengan banyak komentar dan penjelasan.
Gulir ke bawah hingga sekitar baris 90, dan Anda akan menemukan empat pengaturan berikut yang perlu Anda ketahui:
ignoreip: Daftar putih alamat IP yang tidak akan pernah dilarang. Mereka memiliki kartu Bebas Keluar Penjara permanen. Alamat IP localhost (127.0.0.1) ada dalam daftar secara default, bersama dengan IPv6 yang setara (::1). Jika ada alamat IP lain yang Anda tahu tidak boleh dilarang, tambahkan alamat tersebut ke daftar ini dan beri spasi di antara masing-masing alamat. bantime: Durasi pemblokiran alamat IP (“m” berarti menit). Jika Anda mengetikkan nilai tanpa “m” atau “h” (untuk jam), nilai tersebut akan dianggap sebagai detik. Nilai -1 akan memblokir alamat IP secara permanen. Berhati-hatilah untuk tidak mengunci diri Anda secara permanen. findtime: Jumlah waktu di mana terlalu banyak upaya koneksi yang gagal akan mengakibatkan alamat IP diblokir. maxretry: Nilai untuk “terlalu banyak upaya yang gagal”.
Jika koneksi dari alamat IP yang sama membuat upaya koneksi maxretry gagal dalam jangka waktu findtime, maka koneksi tersebut akan diblokir selama durasi bantime tersebut. Satu-satunya pengecualian adalah alamat IP dalam daftar abaikan.
fail2ban memasukkan alamat IP ke penjara selama jangka waktu tertentu. fail2ban mendukung banyak jail yang berbeda, dan masing-masing jail mewakili pengaturan yang berlaku untuk satu jenis koneksi. Ini memungkinkan Anda memiliki pengaturan berbeda untuk berbagai jenis koneksi. Atau Anda dapat meminta fail2ban memantau hanya sekumpulan jenis koneksi yang dipilih.
Anda mungkin sudah menebaknya dari nama bagian [DEFAULT], tetapi pengaturan yang kami lihat adalah defaultnya. Sekarang, mari kita lihat pengaturan untuk SSH jail.
Mengonfigurasi Jail
Jails memungkinkan Anda memindahkan jenis koneksi masuk dan keluar dari pemantauan fail2ban. Jika pengaturan default tidak cocok dengan yang ingin Anda terapkan ke jail, Anda dapat mengatur nilai spesifik untuk bantime, findtime, dan maxretry.
Gulir ke bawah hingga sekitar baris 280, dan Anda akan melihat bagian [sshd].
Di sinilah Anda dapat menetapkan nilai untuk jail koneksi SSH. Untuk memasukkan jail ini ke dalam pemantauan dan pelarangan, kita harus mengetikkan baris berikut:
enabled = true
Kami juga mengetikkan baris ini:
maxretry = 3
Pengaturan defaultnya adalah lima, tetapi kami ingin lebih berhati-hati dengan koneksi SSH. Kami menurunkannya menjadi tiga, lalu menyimpan dan menutup file.
Kami menambahkan jail ini ke pemantauan fail2ban, dan mengesampingkan salah satu pengaturan default. Sebuah jail dapat menggunakan kombinasi pengaturan default dan spesifik jail.
Mengaktifkan fail2ban
Sejauh ini, kami telah menginstal fail2ban dan mengonfigurasinya. Sekarang, kita harus mengaktifkannya untuk dijalankan sebagai layanan mulai otomatis. Kemudian, kita perlu mengujinya untuk memastikannya berfungsi seperti yang diharapkan.
Untuk mengaktifkan fail2ban sebagai layanan, kita menggunakan perintah systemctl:
sudo systemctl enable fail2ban
Kami juga menggunakannya untuk memulai layanan:
sudo systemctl start fail2ban
Kami dapat memeriksa status layanan menggunakan systemctl juga:
sudo systemctl status fail2ban.service
Semuanya terlihat baik – kami mendapat lampu hijau, jadi semuanya baik-baik saja.
Mari kita lihat apakah fail2ban setuju:
sudo fail2ban-client status
Ini mencerminkan apa yang kami siapkan. Kami telah mengaktifkan satu jail, bernama [sshd]. Jika kita menyertakan nama jail dengan perintah sebelumnya, kita dapat melihatnya lebih dalam:
sudo fail2ban-client status sshd
Ini mencantumkan jumlah kegagalan dan alamat IP yang diblokir. Tentu saja, semua statistiknya nol saat ini.
Di komputer lain, kami akan membuat permintaan koneksi SSH ke mesin pengujian kami dan dengan sengaja salah mengetikkan kata sandi. Anda mendapatkan tiga upaya untuk mendapatkan kata sandi yang benar pada setiap upaya koneksi.
Nilai maxretry akan terpicu setelah tiga upaya koneksi gagal, bukan tiga upaya kata sandi yang gagal. Jadi, kita harus mengetikkan kata sandi yang salah tiga kali untuk gagal dalam upaya koneksi satu kali. Nbsp
Kami kemudian akan membuat upaya koneksi lagi dan mengetikkan kata sandi yang salah sebanyak tiga kali lagi. Upaya kata sandi pertama yang salah pada permintaan koneksi ketiga akan memicu fail2ban.
Setelah kata sandi salah pertama pada permintaan koneksi ketiga, kami tidak mendapat respons dari mesin jarak jauh. Kami tidak mendapatkan penjelasan apa pun; kami baru saja bersikap dingin.
Anda harus menekan Ctrl+C untuk kembali ke command prompt. Jika kita mencoba sekali lagi, kita akan mendapatkan respon yang berbeda:
ssh dave@ubuntu20-04.local
Sebelumnya, pesan kesalahannya adalah “Izin ditolak.” Kali ini, koneksinya ditolak mentah-mentah. Kami adalah persona non grata. Kami telah diblokir.
Mari kita lihat kembali detail penjara [sshd]:
sudo fail2ban-client status sshd
Ada tiga kegagalan, dan satu alamat IP (192.168.4.25) diblokir.
Seperti yang kami sebutkan sebelumnya, fail2ban memberlakukan larangan oleh menambahkan aturan ke kumpulan aturan firewall. Mari kita lihat lagi kumpulan aturan (sebelumnya kosong):
sudo iptables -L
Sebuah aturan telah ditambahkan ke kebijakan INPUT, mengirimkan lalu lintas SSH ke rantai f2b-sshd. Aturan dalam rantai f2b-sshd menolak koneksi SSH dari 192.168.4.25. Kami tidak mengubah pengaturan default untuk bantime, jadi, dalam 10 menit, alamat IP tersebut tidak akan diblokir dan dapat membuat permintaan koneksi baru.
Jika Anda menetapkan durasi larangan yang lebih lama (misalnya beberapa jam), namun ingin mengizinkan alamat IP untuk membuat permintaan koneksi lain lebih cepat, Anda dapat membebaskannya lebih awal.
Kami mengetikkan yang berikut untuk melakukan ini:
sudo fail2ban-client set sshd unbanip 192.168.5.25
Di komputer jarak jauh kami, jika kami membuat permintaan koneksi SSH lain dan mengetikkan kata sandi yang benar, kami akan diizinkan untuk terhubung:
ssh dave@ubuntu20-04.local