UFW vs Fail2Ban vs SSH Hardening: Kombinasi Wajib Keamanan Server Linux

Last updated on


Kalau kamu pegang server Linux (VPS, VM cloud, atau bare metal kecil), satu pertanyaan ini penting banget:

“Cukup nggak kalau cuma pasang firewall?”

Jawaban singkatnya: belum cukup.

Di lapangan, serangan yang paling sering itu bukan skenario film hacker super canggih, tapi hal-hal sederhana: brute force SSH, port terbuka yang kebablasan, service lupa di-hardening, atau kredensial bocor. Karena itu, pendekatan yang lebih aman bukan memilih satu tool saja, tapi menggabungkan beberapa lapis proteksi.

Di artikel ini kita bandingkan tiga komponen yang paling sering dipakai admin Linux:

  • UFW (firewall rule yang simpel)
  • Fail2Ban (auto-ban IP yang mencurigakan)
  • SSH Hardening (penguatan konfigurasi akses remote)

Kita bahas kelebihan, kekurangan, kapan dipakai, dan gimana menyusunnya jadi stack keamanan yang realistis buat production kecil-menengah.

Kalau kamu masih pemanasan di Linux CLI, baca dulu Linux Command Line Essential untuk Developer biar lebih gampang ngikutin command di bawah.

Kenapa pendekatan “berlapis” lebih aman?

Bayangin rumah:

  • UFW itu pagar + gerbang.
  • SSH hardening itu kunci pintu yang benar + aturan siapa boleh masuk.
  • Fail2Ban itu satpam yang langsung blok tamu mencurigakan.

Kalau cuma satu lapis, kebobolan lebih gampang. Kalau tiga lapis jalan bareng, attacker harus melewati banyak friksi.

Ini juga nyambung ke keyword cluster cybersecurity yang penting:

  • linux security hardening
  • secure shell scripting
  • basic incident response linux

Perbandingan cepat: UFW vs Fail2Ban vs SSH Hardening

KomponenFungsi utamaKelebihanKeterbatasanCocok untuk
UFWMengatur trafik masuk/keluar berbasis port/protokolMudah, cepat, minim salah konfigurasi dibanding iptables mentahTidak tahu konteks perilaku loginSemua server Linux
Fail2BanMendeteksi pola gagal login lalu ban IP otomatisEfektif lawan brute forcePerlu tuning regex/jail agar presisiServer yang expose SSH/web auth
SSH HardeningMenguatkan konfigurasi SSH (key auth, non-root, dsb)Mengurangi attack surface paling signifikanSalah setting bisa lockout admin sendiriWajib untuk server internet-facing

Kesimpulan cepat: bukan pilih salah satu. Kombinasi yang sehat adalah:

  1. Hardening SSH dulu,
  2. Batasi akses pakai UFW,
  3. Tambah Fail2Ban untuk respons otomatis.

1) UFW: lapisan kontrol trafik paling cepat diterapkan

UFW (Uncomplicated Firewall) cocok banget buat baseline. Prinsipnya:

  • deny by default untuk incoming,
  • allow hanya port yang memang dipakai.

Contoh baseline aman:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

Kalau SSH kamu pindah port (misalnya 2222), sesuaikan dulu rule UFW sebelum restart service SSH.

Praktik yang sering dilupakan

  • Batasi SSH hanya dari IP kantor/VPN kalau memungkinkan:
sudo ufw allow from 103.10.10.5 to any port 22 proto tcp
  • Cek port “nyasar” dari service lama.
  • Review rules berkala setelah deploy aplikasi baru.

Buat server yang juga handle reverse proxy, kamu bisa kaitkan ini dengan setup Nginx reverse proxy dan load balancer untuk production.

2) Fail2Ban: rem otomatis saat ada brute force

Fail2Ban mantau log (SSH, Nginx auth, dll), lalu ban IP yang melewati batas gagal login.

Install cepat:

sudo apt update
sudo apt install fail2ban -y

Buat konfigurasi lokal (jangan edit jail.conf langsung):

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

Contoh minimum untuk SSH di jail.local:

[sshd]
enabled = true
port = 22
logpath = %(sshd_log)s
maxretry = 5
findtime = 10m
bantime = 1h

Lalu restart:

sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd

Tuning yang realistis

  • maxretry terlalu kecil bisa false positive (tim internal salah ketik password keban).
  • bantime terlalu pendek bikin attacker balik lagi cepat.
  • Mulai dari konservatif, lalu tuning pakai log nyata.

Kalau kamu suka notifikasi event security, kamu bisa adaptasi alur dari artikel Mail notification when SSH login untuk alert saat ban spike.

3) SSH Hardening: impact paling besar untuk menutup celah dasar

Banyak insiden kecil berawal dari SSH yang default banget. Ini checklist hardening yang aman buat mayoritas server:

  1. Nonaktifkan root login
  2. Paksa key-based authentication
  3. Matikan password auth (kalau key sudah beres)
  4. Batasi user yang boleh SSH
  5. Opsional: ubah port SSH untuk kurangi noise bot

Contoh pengaturan di /etc/ssh/sshd_config:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers deploy ops
MaxAuthTries 3
LoginGraceTime 30

Setelah ubah config:

sudo sshd -t
sudo systemctl restart ssh

Penting: selalu buka session SSH kedua sebelum restart service. Ini penyelamat kalau salah config.

Rekomendasi kombinasi berdasarkan kebutuhan

Skenario A: VPS kecil untuk blog/app pribadi

  • Wajib: UFW + SSH hardening
  • Tambahan: Fail2Ban untuk SSH
  • Monitoring: notifikasi login/ban harian

Skenario B: Server tim kecil (staging/production ringan)

  • Wajib: UFW + SSH hardening + Fail2Ban
  • Tambahan: restrict SSH by IP/VPN
  • Ops hygiene: audit user SSH per minggu

Skenario C: Host dengan banyak service publik

  • Wajib: tiga lapis + segmentasi jaringan
  • Tambahan: WAF/CDN, central log, alerting
  • Proses: playbook incident response dasar

Runbook implementasi 30 menit (praktis)

Urutan ini aman dan minim risiko lockout:

  1. Pastikan SSH key sudah jalan untuk user non-root.
  2. Terapkan UFW baseline dan pastikan port SSH yang benar sudah allow.
  3. Terapkan SSH hardening bertahap (cek config tiap perubahan).
  4. Install Fail2Ban dan aktifkan jail sshd.
  5. Uji dari sisi client: login normal, login gagal berulang, verifikasi ban.
  6. Simpan semua langkah dalam script idempotent.

Untuk langkah otomasi yang aman diulang, lihat pola di Idempotent Shell Script: Jalankan Berkali-kali Tanpa Bikin Berantakan.

Kesalahan umum yang bikin hardening gagal total

1) Menutup akses sendiri

Contoh klasik: ubah SSH config dulu, restart, ternyata UFW belum allow port yang benar.

Solusi: terapkan rule firewall dulu, verifikasi, baru restart SSH.

2) Gonta-ganti banyak setting sekaligus

Sulit tahu akar masalah saat error.

Solusi: ubah bertahap, satu blok per sekali uji.

3) Nggak ada rollback plan

Hardening tanpa recovery itu berjudi.

Solusi: simpan backup config:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

4) Nggak review log setelah deploy

Padahal log adalah feedback paling jujur.

Solusi: cek journal secara rutin:

sudo journalctl -u ssh -n 100 --no-pager
sudo journalctl -u fail2ban -n 100 --no-pager

Basic incident response Linux (versi ringkas)

Kalau kamu curiga ada brute force atau anomali:

  1. Identifikasi cepat
    • cek login gagal/sukses tak biasa,
    • cek IP paling aktif,
    • cek service yang restart berulang.
  2. Containment
    • ban IP mencurigakan,
    • temporary close port non-kritis,
    • rotate credential yang berisiko.
  3. Eradication
    • patch package,
    • hardening ulang config lemah,
    • bersihkan key/user yang tidak dikenal.
  4. Recovery
    • kembalikan service bertahap,
    • pantau metrics dan log 24 jam.
  5. Lessons learned
    • update SOP,
    • jadikan temuan sebagai checklist deploy berikutnya.

Tool sederhana seperti command di Linux shell command yang sering dipakai developer modern sangat bantu investigasi cepat di terminal.

Jadi, pilih yang mana?

Kalau harus jujur: pilih semuanya, tapi urutannya benar.

  • Mulai dari SSH hardening (impact paling besar).
  • Kunci trafik pakai UFW (baseline kuat).
  • Tambah Fail2Ban (deteksi + respon otomatis).

Untuk kebanyakan server Linux modern, kombinasi ini sudah memberi peningkatan keamanan yang signifikan tanpa kompleksitas berlebihan.

Mulai dari yang simpel, konsisten review, dan dokumentasikan konfigurasi supaya bisa diulang dengan aman.


FAQ

Apakah ubah port SSH wajib untuk keamanan?

Tidak wajib, tapi membantu mengurangi noise dari bot otomatis. Ini bukan pengganti key auth, firewall, dan hardening inti.

Lebih penting mana: UFW atau Fail2Ban?

Untuk baseline, UFW lebih dulu karena dia menentukan pintu masuk trafik. Fail2Ban melengkapi dengan respon dinamis terhadap perilaku mencurigakan.

Kalau PasswordAuthentication dimatikan, gimana akses darurat?

Siapkan minimal dua key aktif (misalnya laptop utama + key cadangan terenkripsi) dan simpan akses console/provider cloud sebagai jalur recovery.

Seberapa sering aturan keamanan harus direview?

Minimal bulanan, atau setiap ada perubahan arsitektur/deploy besar. Review cepat mingguan juga bagus untuk server publik.

Apakah stack ini cukup untuk production skala besar?

Untuk banyak use case, ini fondasi yang bagus. Tapi skala besar tetap butuh lapisan tambahan: central logging, IDS/IPS, WAF, SIEM, dan kontrol akses berbasis jaringan/VPN.

Komentar

Real-time

Memuat komentar...

Tulis Komentar

Email tidak akan ditampilkan

0/2000 karakter

Catatan: Komentar akan dimoderasi sebelum ditampilkan. Mohon bersikap sopan dan konstruktif.