Mencegah Serangan Brute Force SSH dengan Fail2Ban
General Description
Fail2Ban is an utility designed to prevent malicious access to a machine
Fail2ban operates by monitoring log files (e.g. /var/log/auth.log, /var/log/apache/access.log, etc.) for selected entries and running scripts based on them. Most commonly this is used to block selected IP addresses that may belong to hosts that are trying to breach the system's security.
It can ban any host IP address that makes too many login attempts or performs any other unwanted action within a time frame defined by the administrator. Includes support for both IPv4 and IPv6. Optionally longer bans can be custom-configured for "recidivist" abusers that keep coming back.
Fail2ban is typically set up to unban a blocked host within a certain period, so as to not "lock out" any genuine connections that may have been temporarily misconfigured. However, an unban time of several minutes is usually enough to stop a network connection being flooded by malicious connections, as well as reducing the likelihood of a successful dictionary attack
Install Fail2ban
sudo apt update
sudo apt install fail2ban
Fail2ban will automatically set up a background service after being installed. However, it is disabled by default, because some of its default settings may cause undesired effects. You can verify this by using the systemctl command:
agungsurya@fail2ban:~$ systemctl status fail2ban.service
Output
○ fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:fail2ban(1)
Start Fail2ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.conf.bak
sudo nano /etc/fail2ban/fail2ban.conf
Edit LogLevel menjadi ERROR
Membuat file untuk mengaktifkan aturan Fail2ban
Membuat file jail.local, file ini akan dideteksi oleh Fail2ban sebagai konfigurasi jail yang di dalamnya akan kita atur sesuai kebutuhan, jika status enabled = true.
sudo nano /etc/fail2ban/jail.local
Contoh pengaturan Fail2ban untuk SSH
[sshd]
enable = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 2
bantime = 1h
ignoreip = 127.0.0.1/8
Konfigurasi fail2ban ini digunakan untuk melindungi server SSH dari serangan brute force dan dicontohkan untuk penggunaan dengan layanan SSH, yang menggunakan port default ssh (22).
[sshd]
- Nama layanan yang diatur, yaitu sshd yang merujuk pada layanan SSH.
enable = true
- Menentukan apakah layanan yang diatur akan diaktifkan atau tidak.
port = ssh
- Port yang akan dipantau untuk aktivitas mencurigakan, yaitu port ssh yang merupakan port standar untuk layanan SSH.
filter = sshd
- Nama filter yang akan digunakan untuk mencocokkan pola aktivitas mencurigakan pada log.
logpath = /var/log/auth.log
- Lokasi file log yang akan diperiksa oleh fail2ban untuk mencari aktivitas mencurigakan.
maxretry = 2
- Jumlah percobaan login yang diizinkan sebelum alamat IP terkena ban oleh fail2ban.
bantime = 1h
- Jumlah waktu yang dibutuhkan untuk menjebloskan alamat IP yang ditemukan melakukan aktivitas mencurigakan ke dalam daftar hitam (blacklist).
ignoreip = 127.0.0.1/8
- Daftar IP yang diabaikan oleh fail2ban, yang merupakan daftar IP yang diizinkan untuk melakukan akses ke server tanpa terkena ban.
Dengan konfigurasi fail2ban ini, server SSH akan dilindungi dari serangan brute force, di mana alamat IP yang mencoba login dengan kombinasi username dan password yang salah sebanyak maxretry kali akan terkena ban selama bantime yang ditentukan. Selain itu, alamat IP yang ada pada daftar ignoreip tidak akan terkena ban oleh fail2ban.
sudo systemctl restart fail2ban
sudo fail2ban-client status
Cek list banned IP Misalnya melihat IP apa saja yang diblokir di SSH
fail2ban-client status sshd
baru install sudah ada yg kena ban
Cara Unban client Fail2ban Misalnya ada user yang mencoba login SSH dan masuk list banned
fail2ban-client set sshd unbanip IP-CLIENT
pengetesan
ssh ke server
tes gagal login gunakan ip lain agar tidak ke ban pada saat percobaan testing failban
ip yang tadi di gunakan untuk ssh kena ban
pada saat terahkir saya membuat tutorial ini ip real saya gak sengaja ke ban karena typo beberapa kali pada saat ssh ke server lalu saya langsung saja destroy vm ny kerena sudah selesai, maka dari itu penting menggunakan authentikasi publik key dan private key atau membatasi ip mana saja yg boleh login ssh sebagai tambahan keamannan