Cara Mengamankan Server Linux Anda dengan fail2ban
Diterbitkan: 2022-01-29 Dengan fail2ban
, komputer Linux Anda secara otomatis memblokir alamat IP yang memiliki terlalu banyak kegagalan koneksi. Ini adalah keamanan yang mengatur diri sendiri! Kami akan menunjukkan cara menggunakannya.
Keamanan Keamanan Keamanan
Duchess of Windsor, Wallis Simpson, pernah berkata, "Anda tidak akan pernah bisa terlalu kaya atau terlalu kurus." Kami telah memperbarui ini untuk dunia modern kita yang saling terhubung: Anda tidak akan pernah bisa terlalu berhati-hati atau terlalu aman.
Jika komputer Anda menerima permintaan koneksi masuk, seperti koneksi Secure Shell (SSH), atau bertindak sebagai server web atau email, Anda perlu melindunginya dari serangan brute force dan penebak sandi.
Untuk melakukannya, Anda harus memantau permintaan koneksi yang gagal masuk ke akun. Jika mereka berulang kali gagal mengautentikasi dalam waktu singkat, mereka harus dilarang melakukan upaya lebih lanjut.
Satu-satunya cara ini dapat dicapai secara praktis adalah dengan mengotomatisasi seluruh proses. Dengan sedikit konfigurasi sederhana, fail2ban
akan mengatur pemantauan, pelarangan, dan pemblokiran untuk Anda.
fail2ban
terintegrasi dengan iptables
firewall Linux. Ini memberlakukan larangan pada alamat IP yang dicurigai dengan menambahkan aturan ke firewall. Untuk menjaga penjelasan ini tetap rapi, kami menggunakan iptables
dengan aturan kosong.
Tentu saja, jika Anda mengkhawatirkan keamanan, Anda mungkin memiliki firewall yang dikonfigurasi dengan kumpulan aturan yang terisi dengan baik. fail2ban
hanya menambah dan menghapus aturannya sendiri—fungsi firewall biasa Anda akan tetap tidak tersentuh.
Kita dapat melihat aturan kosong kita menggunakan perintah ini:
sudo iptables -L
TERKAIT: Panduan Pemula untuk iptables, Linux Firewall
Menginstal fail2ban
Instalasi fail2ban
sederhana pada semua distribusi yang kami gunakan untuk meneliti artikel ini. Di Ubuntu 20.04, perintahnya adalah sebagai berikut:
sudo apt-get install fail2ban
Di Fedora 32, ketik:
sudo dnf instal fail2ban
Di Manjaro 20.0.1, kami menggunakan pacman
:
sudo pacman -Sy fail2ban
Mengkonfigurasi fail2ban
Instalasi fail2ban
berisi file konfigurasi default bernama jail.conf. File ini ditimpa ketika fail2ban
ditingkatkan, jadi kami akan kehilangan perubahan kami jika kami membuat penyesuaian pada file ini.
Sebagai gantinya, kita akan menyalin file jail.conf ke file bernama jail.local. Dengan menempatkan perubahan konfigurasi kami di jail.local, perubahan tersebut akan tetap ada di seluruh 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. Kita akan menggunakan gedit
:
sudo gedit /etc/fail2ban/jail.local
Kami akan mencari dua bagian dalam file: [DEFAULT] dan [sshd]. Berhati-hatilah untuk menemukan bagian yang sebenarnya. Label tersebut juga muncul di dekat bagian atas di bagian yang menjelaskannya, tetapi bukan itu yang kami inginkan.
Anda akan menemukan bagian [DEFAULT] di sekitar baris 40. Bagian ini panjang dengan banyak komentar dan penjelasan.
Gulir ke bawah ke sekitar baris 90, dan Anda akan menemukan empat pengaturan berikut yang perlu Anda ketahui:
- abaikan: Daftar putih alamat IP yang tidak akan pernah dilarang. Mereka memiliki kartu Get Out of Jail Free 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 ke daftar ini dan beri spasi di antara masing-masing. - bantime: Durasi di mana alamat IP dilarang ("m" berarti menit). Jika Anda mengetik nilai tanpa "m" atau "h" (selama berjam-jam), itu akan diperlakukan sebagai detik. Nilai -1 akan secara permanen melarang alamat IP. Berhati-hatilah untuk tidak mengunci diri secara permanen.
- findtime: Jumlah waktu di mana terlalu banyak upaya koneksi yang gagal akan mengakibatkan alamat IP dilarang.
- maxretry: Nilai untuk "terlalu banyak upaya yang gagal."
Jika koneksi dari alamat IP yang sama membuat upaya koneksi gagal maxretry
dalam periode findtime
, koneksi tersebut akan diblokir selama durasi bantime
. Satu-satunya pengecualian adalah alamat IP dalam daftar ignoreip
.
fail2ban
menempatkan alamat IP di penjara untuk jangka waktu tertentu. fail2ban
mendukung banyak jail yang berbeda, dan masing-masing merepresentasikan pengaturan yang berlaku untuk satu jenis koneksi. Ini memungkinkan Anda untuk memiliki pengaturan yang berbeda untuk berbagai jenis koneksi. Atau Anda dapat memiliki monitor fail2ban
hanya satu set jenis koneksi yang dipilih.
Anda mungkin telah menebaknya dari nama bagian [DEFAULT], tetapi pengaturan yang telah kita lihat adalah default. Sekarang, mari kita lihat pengaturan untuk jail SSH.
TERKAIT: Cara Mengedit File Teks Secara Grafis di Linux Dengan gedit
Mengonfigurasi Penjara
Penjara memungkinkan Anda memindahkan jenis koneksi masuk dan keluar dari pemantauan fail2ban's
. Jika pengaturan default tidak cocok dengan yang ingin Anda terapkan ke jail, Anda dapat menetapkan nilai spesifik untuk bantime
, findtime
, dan maxretry
.
Gulir ke bawah ke 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:
diaktifkan = benar
Kami juga mengetik baris ini:
maxretry = 3
Pengaturan default adalah lima, tetapi kami ingin lebih berhati-hati dengan koneksi SSH. Kami menjatuhkannya ke tiga, lalu menyimpan dan menutup file.
Kami menambahkan jail ini ke pemantauan fail2ban's
, dan mengganti salah satu pengaturan default. Penjara dapat menggunakan kombinasi pengaturan default dan khusus penjara.
Mengaktifkan fail2ban
Sejauh ini, kami telah menginstal fail2ban
dan mengkonfigurasinya. Sekarang, kita harus mengaktifkannya untuk berjalan sebagai layanan auto-start. Kemudian, kita perlu mengujinya untuk memastikan itu berfungsi seperti yang diharapkan.
Untuk mengaktifkan fail2ban
sebagai layanan, kami menggunakan perintah systemctl
:
sudo systemctl aktifkan 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 bagus—kami mendapat lampu hijau, jadi semuanya baik-baik saja.
Mari kita lihat apakah fail2ban
setuju:
sudo status klien fail2ban
Ini mencerminkan apa yang kami siapkan. Kami telah mengaktifkan satu penjara, bernama [sshd]. Jika kita memasukkan nama jail dengan perintah kita sebelumnya, kita bisa melihatnya lebih dalam:
sudo fail2ban-klien status sshd
Ini mencantumkan jumlah kegagalan dan alamat IP yang dilarang. Tentu saja, semua statistik saat ini nol.
Menguji Penjara Kami
Di komputer lain, kami akan membuat permintaan koneksi SSH ke mesin uji kami dan dengan sengaja salah mengetik kata sandi. Anda mendapatkan tiga upaya untuk mendapatkan kata sandi yang benar pada setiap upaya koneksi.
Nilai maxretry
akan terpicu setelah tiga kali upaya koneksi gagal, bukan tiga kali upaya sandi yang gagal. Jadi, kita harus mengetikkan kata sandi yang salah tiga kali untuk gagal mencoba koneksi satu kali.
Kami kemudian akan melakukan upaya koneksi lagi dan salah mengetikkan sandi sebanyak tiga kali lagi. Upaya kata sandi salah pertama dari permintaan koneksi ketiga harus memicu fail2ban.
Setelah kata sandi salah pertama pada permintaan koneksi ketiga, kami tidak mendapatkan respons dari mesin jarak jauh. Kami tidak mendapatkan penjelasan apapun; kita hanya mendapatkan bahu dingin.
Anda harus menekan Ctrl+C untuk kembali ke prompt perintah. Jika kita mencoba sekali lagi, kita akan mendapatkan respon yang berbeda:
ssh [email protected]
Sebelumnya, pesan kesalahannya adalah "Izin ditolak." Kali ini, koneksi ditolak mentah-mentah. Kami adalah persona non grata. Kami telah dilarang.
Mari kita lihat lagi detail jail [sshd]:
sudo fail2ban-klien status sshd
Ada tiga kegagalan, dan satu alamat IP (192.168.4.25) dilarang.
Seperti yang kami sebutkan sebelumnya, fail2ban
memberlakukan larangan dengan menambahkan aturan ke kumpulan aturan firewall. Mari kita lihat lagi aturannya (sebelumnya kosong):
sudo iptables -L
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 akan dibatalkan pemblokirannya dan dapat membuat permintaan koneksi baru.
Jika Anda menetapkan durasi larangan yang lebih lama (seperti beberapa jam), tetapi ingin mengizinkan alamat IP untuk membuat permintaan koneksi lain lebih cepat, Anda dapat membebaskannya lebih awal.
Kami mengetik 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 [email protected]
Sederhana dan Efektif
Sederhana biasanya lebih baik, dan fail2ban
adalah solusi elegan untuk masalah rumit. Dibutuhkan konfigurasi yang sangat sedikit dan hampir tidak membebankan biaya operasional apa pun—untuk Anda atau komputer Anda.
Perintah Linux | ||
File | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · ketik · ganti nama · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · konversi · rclone · rusak · srm | |
Proses | alias · layar · atas · bagus · renice · kemajuan · strace · systemd · tmux · chsh · sejarah · di · batch · gratis · yang · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · batas waktu · dinding · ya · bunuh · tidur · sudo · su · waktu · groupadd · usermod · grup · lshw · shutdown · reboot · hentikan · matikan · passwd · lscpu · crontab · tanggal · bg · fg | |
Jaringan | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
TERKAIT: Laptop Linux Terbaik untuk Pengembang dan Penggemar