• Indonesian
  • English
  • Cara Amankan SSH Linux dengan Fail2ban — Step-by-Step 2026

    Kecepatan:
    ⏱ 10 min read
    Difficulty: Beginner
    Last Updated: Agustus 2026
    Tested On: Debian 12, Ubuntu 22.04 & 24.04 (OpenSSH 8.9 ke atas)

    Tolong ya, aku bener-bener capek lihat kejadian yang ini berulang-ulang. Tiap kali aku buka server client yang baru migrasi, hampir selalu ada ratusan bahkan ribuan percobaan login SSH gagal di log. Ribuan. Padahal server-nya baru aktif dua minggu. Dan yang bikin gemes, sebenernya ini gampang banget dicegah — tapi entah kenapa langkah paling penting ini selalu dilewatin.

    Beberapa hari lalu aku lagi ngecek auth.log salah satu server client. Tebak isinya apa? Puluhan baris percobaan login gagal dari dua IP yang sama, cuma dalam waktu kurang dari satu menit. Nih, perhatiin potongan log-nya:

    Jul 22 03:11:42 server-01 sshd[22341]: Failed password for root from 203.0.113.10 port 52310 ssh2
    Jul 22 03:11:45 server-01 sshd[22344]: Failed password for root from 203.0.113.10 port 52311 ssh2
    Jul 22 03:11:47 server-01 sshd[22347]: Failed password for root from 203.0.113.10 port 52312 ssh2
    Jul 22 03:11:49 server-01 sshd[22350]: Failed password for root from 198.51.100.42 port 45121 ssh2
    Jul 22 03:11:52 server-01 sshd[22353]: Failed password for root from 198.51.100.42 port 45122 ssh2
    Jul 22 03:11:55 server-01 sshd[22356]: Failed password for root from 198.51.100.42 port 45123 ssh2
    Jul 22 03:12:01 server-01 sshd[22359]: Failed password for root from 203.0.113.10 port 52313 ssh2
    Jul 22 03:12:03 server-01 sshd[22362]: Failed password for root from 198.51.100.42 port 45124 ssh2
    Jul 22 03:12:08 server-01 sshd[22365]: Failed password for root from 203.0.113.10 port 52314 ssh2
    Jul 22 03:12:12 server-01 sshd[22368]: Failed password for root from 198.51.100.42 port 45125 ssh2
    Jul 22 03:12:15 server-01 sshd[22371]: Failed password for root from 203.0.113.10 port 52315 ssh2
    Jul 22 03:12:18 server-01 sshd[22374]: error: maximum authentication attempts exceeded for root from 198.51.100.42 port 45126 ssh2

    Coba perhatiin polanya. IP yang sama, user yang sama (root), port yang beda tipis-tipis tiap detik. Itu bukan manusia lagi ngontak password, itu bot. Dan bukan cuma satu — bisa ratusan bot dari seluruh dunia yang nyerang server kamu tiap hari. Kamu tidur, bot tetep jalan.

    Masalahnya bukan cuma server jadi agak lambat gara-gara brute force. Setiap percobaan login SSH itu ada proses yang jalan, CPU yang kepake, bandwidth yang kebuang, dan log yang makin ngebengkak. Tapi impact paling parahnya ya pas attacker dapet password yang lemah. Nah, pas itu — selamat tinggal server kamu. Dia bisa masuk, pasang crypto miner, baca data client, kirim spam dari server kamu, atau lebih parah lagi, server kamu dipake buat nyerang server lain.

    Kasus yang aku handle tempo hari itu ya kayak gini. Client nelfon bingung, tagihan bandwidth naik dua kali lipat, server-nya aneh dan lemot. Setelah aku selidiki… ketemu crypto miner yang jalan diam-diam di dalam. Gila, kan? Padahal kalau dari awal dipasang fail2ban, bot-nya udah ke-ban di percobaan kelima, bukan terus nyoba sampai ketemu.

    Jadi solusinya gini. Fail2ban itu ibarat satpam yang jaga pintu utama server kamu. Dia baca log setiap saat, dan kalau ada IP yang gagal login berkali-kali dalam waktu singkat, IP itu langsung dikunci sama firewall-nya. Simple. Nah, artikel ini bakal nunjukin step-by-step cara install, konfigurasi, dan tes fail2ban buat amankan SSH login di Linux. Semua command udah aku tes langsung di Debian 12 dan Ubuntu 22.04, jadi tinggal copas.

    Kenapa Serangan Brute Force SSH Bisa Semudah Itu Masuk?

    SSH itu protokol paling umum buat akses server jarak jauh, dan port 22-nya udah jadi jalan raya utama. Setiap server yang online itu bakal dipindai bot dalam hitungan jam setelah up. Ibarat rumah yang alamatnya dicat di depan pagar, semua orang tau pintu masuknya di mana. Yang bisa kamu lakukan cuma bikin rumah itu susah dimasukin.

    Brute force itu metodenya kek gini: attacker nyoba kombinasi username-password berulang-ulang. Username yang paling sering dicoba ya root, admin, oracle, dan sebangsanya. Passwordnya juga dari daftar yang udah pernah bocor. Makanya password kayak admin123 atau password itu bisa tembus dalam hitungan menit. Fail2ban ini ngeblok di level yang lebih awal: bukan nyoba ngusir, tapi nyegah IP pelakunya masuk ke daftar penyerang dan langsung ditutup pintunya.

    Terus piye carane? Fail2ban kerja dengan baca file log. Secara default dia pindai /var/log/auth.log (Debian/Ubuntu) atau /var/log/secure (CentOS/RHEL). Kalau ketemu pola gagal login berulang dari IP yang sama, dia kasih tahu firewall (iptables/nftables/ufw) buat nge-drop koneksi dari IP itu selama jangka waktu tertentu. Gampang kan? Nah, mari kita mulai.

    Persiapan: Cek Ini Dulu Sebelum Install

    Sebelum pasang fail2ban, ada beberapa hal yang wajib kamu pastikan dulu. Jangan dilewatin — percaya deh, tiga-tiganya pernah bikin orang lock out dari server sendiri.

    1. Pastikan SSH key udah ke-setup. Kalau belum, pakai ssh-copy-id user@server dari laptop kamu. Ini penting karena fail2ban gak peduli kamu itu adminnya atau bukan — kalau IP kamu ke-ban, kamu ikut terkunci.
    2. Pastikan punya akses root atau sudo. Semua command di artikel ini butuh privilege. Kalau kamu cuma punya user biasa tanpa sudo, minta ke adminnya dulu.
    3. Catat IP kantor atau rumah kamu. Ini bakal dipake di config ignoreip biar IP kamu gak pernah ke-ban.

    install fail2ban di Debian 12 via apt

    Langkah 1: Install Fail2ban

    Di Debian/Ubuntu, fail2ban udah ada di repository resmi. Jadi gak perlu nambah repo pihak ketiga.

    sudo apt update
    sudo apt install fail2ban -y

    Setelah install, aktifkan service-nya biar nyala otomatis pas boot:

    sudo systemctl enable --now fail2ban
    sudo systemctl status fail2ban

    Kamu harusnya lihat output active (running). Kalau ada error, cek journalctl -u fail2ban -n 50 buat lihat apa yang terjadi.

    Langkah 2: Backup Config Sebelum Ubah

    Ini penting. Jangan pernah langsung edit file jail.conf dari repo — karena pas update package, config kamu bakal ketimpa. Fail2ban sendiri udah nyediain mekanisme yang bener:

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

    jail.local ini yang akan dibaca fail2ban sebagai config utama. Semua setting yang ada di sana nge-override file aslinya. Jadi semua perubahan yang mau kamu lakuin, taruh di jail.local. Kalau nanti update package, aman.

    Opsional: biar gampang dibaca, kosongin dulu isi jail.local dan tulis ulang dari nol. Banyak NOC senior yang ngelakuin ini biar config-nya cuma berisi yang relevan doang. Nggih, aku juga termasuk yang suka gini — bersih dan gak bingung pas debugging.

    sudo nano /etc/fail2ban/jail.local

    Langkah 3: Konfigurasi Jail Buat SSH

    Nah, ini bagian intinya. Di dalam jail.local, kamu tulis konfigurasi berikut:

    [DEFAULT]
    ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
    bantime = 1h
    findtime = 10m
    maxretry = 5
    banaction = nftables-multiport
    
    [sshd]
    enabled = true
    port = ssh
    filter = sshd
    logpath = /var/log/auth.log

    Gini penjelasannya, biar kamu gak asal copas:

    Parameter Arti Contoh Nilai
    ignoreip IP yang gak bakal pernah di-ban. Isi IP kantor/rumah kamu di sini. 203.0.113.50
    maxretry Jumlah maksimal percobaan gagal sebelum IP di-ban. 5
    findtime Jendela waktu untuk menghitung percobaan gagal. 10m
    bantime Durasi ban. Bisa 1h, 1d, atau -1 buat permanen. 1h
    banaction Backend firewall yang dipake buat ngeban. nftables-multiport

    Intinya gini: kalau ada IP yang gagal login 5 kali dalam 10 menit, IP itu di-ban selama 1 jam. Simple dan masuk akal. Jangan langsung pasang bantime = -1 (permanen) di awal — karena kalau kamu salah konfigurasi, IP kamu sendiri bisa ke-lock selamanya. Amankan dulu aksesnya, baru ngoyo.

    Catatan kecil: kalau distro kamu CentOS/RHEL, ubah logpath jadi /var/log/secure. Kalau kamu pindah port SSH ke port lain, ubah port ke port itu.

    Langkah 4: Restart dan Verifikasi

    PERINGATAN KEAMANAN: Sebelum restart fail2ban, pastikan kamu udah: (1) backup config di jail.local, (2) cek syntax config dengan sudo fail2ban-client -t, dan (3) pastikan IP kamu ada di ignoreip. Restart service firewall bisa ganggu koneksi yang lagi jalan kalau ada config yang salah.

    Pertama, cek dulu syntax config-nya biar gak ada typo yang bikin service gagal start:

    sudo fail2ban-client -t

    Kalau outputnya OK, baru restart:

    sudo systemctl restart fail2ban

    Terus verifikasi jail sshd udah aktif:

    sudo fail2ban-client status sshd

    Output yang diharapkan kira-kira gini:

    Status for the jail: sshd
    |- Filter
    |  |- Currently failed: 3
    |  |- Total failed:     47
    |  `- File list:        /var/log/auth.log
    `- Actions
       |- Currently banned: 1
       |- Total banned:     6
       `- Banned IP list:   203.0.113.10

    Kalau kamu udah lihat Currently banned: 1 dan ada IP di daftar, berarti fail2ban kamu udah kerja. Mantap.

    Langkah 5: Tes Serangan Brute Force

    Oke, sekarang saatnya uji coba. Tapi jangan pernah tes dari server itu sendiri — kamu bakal nge-ban IP localhost dan bikin semua koneksi dari sana bermasalah. Tes dari mesin lain (laptop kamu, atau VPS lain).

    Buka terminal dari mesin lain, terus coba SSH pakai password yang salah 6 kali:

    ssh root@SERVER_IP

    Abis gagal 5 kali, kamu bakal ngerasain koneksi jadi gantung — padahal bukan karena jaringan. Itu tandanya IP kamu udah di-drop. Cek dari server:

    sudo fail2ban-client status sshd

    Kalau gak punya mesin kedua, kamu bisa tes manual pake perintah ban langsung:

    sudo fail2ban-client set sshd banip 198.51.100.42

    Terus unban kalau udah kelar ngetes:

    sudo fail2ban-client set sshd unbanip 198.51.100.42

    hasil status fail2ban menunjukkan IP berhasil di-ban

    Troubleshooting: Masalah Umum Fail2ban

    Gak selamanya langsung mulus. Ini beberapa masalah yang sering muncul dan cara ngatasinya:

    Gejala Penyebab Solusi
    IP gak ke-ban padahal udah nyoba login gagal logpath salah atau filter gak cocok Pastikan logpath bener; cek sudo fail2ban-client get sshd logpath dan jalankan sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
    Service fail2ban gagal start Syntax config salah Jalankan sudo fail2ban-client -t dan perbaiki baris yang di-highlight
    Server kamu sendiri ikut ke-ban IP kamu gak ada di ignoreip Tambahin IP kamu di ignoreip, restart, unban lewat fail2ban-client unbanip
    Ban gak ngefek, IP masih bisa login banaction gak cocok sama firewall yang aktif Cek firewall aktif; di Debian/Ubuntu modern pakai nftables-multiport atau ufw

    Pro Tips dari Pengalaman Lapangan

    Nah, ini bonus dari yang udah bertahun-tahun pegang server. Semoga kamu gak ngalamin yang aku alami.

    • Jangan cuma andelin fail2ban. Fail2ban itu lapisan pertama, bukan satu-satunya. Kombinasikan dengan SSH key aja (disable password login), ubah port SSH, dan aktifkan hardening SSH lainnya.
    • Pasang sebelum butuh. Jangan pasang fail2ban pas server udah diserang. Pasang dari hari pertama, terus pantau log-nya.
    • Bantime yang manusiawi. Mulai dari 1 jam. Kalau serangan makin agresif, baru naikin ke 1 hari atau lebih.
    • Pantau statusnya berkala. Fail2ban bisa dicek tiap pagi sekalian cek log. Kalau kamu mau otomatis, bisa dihubungkan ke sistem monitoring Netdata atau sejenisnya.
    • Jangan lupa firewall utama. Fail2ban ngeban lewat firewall. Pastikan firewall kamu (UFW/nftables) konfigurasinya bener dan port SSH terbuka.

    FAQ Seputar Fail2ban dan Keamanan SSH

    Q: Apakah fail2ban aman dipasang di server production?

    Aman, kok. Ini tool standar yang dipake jutaan server di dunia. Yang penting kamu pastikan IP kamu sendiri masuk ignoreip dan config di-test dulu dengan fail2ban-client -t sebelum restart. Jangan pernah restart service tanpa cek syntax dulu.

    Q: Kenapa IP saya sendiri ke-ban padahal saya adminnya?

    Karena fail2ban gak peduli kamu admin atau bukan — dia cuma baca log dan ngeban IP yang gagal login berulang kali. Solusinya: tambah IP kamu ke ignoreip di config, restart, terus unban IP kamu lewat sudo fail2ban-client set sshd unbanip IP_KAMU.

    Q: Apakah fail2ban cukup tanpa ubah port SSH?

    Fail2ban bakal ngeblok 99% percobaan brute force otomatis. Tapi port 22 yang default tetap bakal dipindai dan jadi sumber noise di log. Kombinasi paling nyaman: fail2ban + SSH key + port non-default. Security by obscurity emang bukan satu-satunya jawaban, tapi mengurangi noise banget.

    Q: Bagaimana cara unban IP yang ke-ban fail2ban?

    Pakai sudo fail2ban-client set sshd unbanip 203.0.113.10. Ganti nama jail (sshd) dan IP-nya sesuai kondisi kamu. Kalau mau unban semua, sudo fail2ban-client unban --all.

    Q: Apakah fail2ban bisa jalan di semua distro Linux?

    Bisa. Debian/Ubuntu pakai apt install fail2ban, CentOS/RHEL pakai dnf install fail2ban, Arch pakai pacman. Yang beda cuma lokasi log-nya: Debian/Ubuntu di /var/log/auth.log, CentOS/RHEL di /var/log/secure.

    Kesimpulan

    Nah, itu dia langkah-langkah lengkap buat amankan SSH login di Linux pakai fail2ban. Serius, pasang ini sebelum kamu nemuin puluhan ribu baris log brute force di auth.log — karena pas itu udah telat, dan kamu bakal ngerasa ngenes kayak aku pas lihat crypto miner di server client.

    Tolong ya, jangan ngulang kesalahan yang sama. Ini cuma 5 langkah dan gak nyampe 15 menit. Pasang sekarang, tambahin SSH key, dan jangan lupa masukin IP kamu sendiri ke ignoreip. Pelajarin baik-baik biar production server kamu aman. Take it seriously.

    Oh ya, kalau mau dalem, baca juga artikel tentang cara membaca log auth di Linux biar kamu bisa ngebaca jejak serangan sendiri. Take care!

    Author: Syslog Solutions — NOC & Server Management Team. We handle 500+ servers daily, from shared hosting to enterprise dedicated infrastructure.