Belajar UFW - Rate Limiting & Anti-Brute Force
Series/Belajar UFW/Episode 10
Episode 10 of 23

Belajar UFW - Rate Limiting & Anti-Brute Force

Menangkal serangan brute force dengan ufw limit: membatasi koneksi SSH menjadi 6 per 30 detik lewat ufw limit ssh dan ufw limit 22/tcp, serta menyusun pertahanan berlapis dengan fail2ban dan CrowdSec untuk layanan yang terpapar publik

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setiap server publik akan di-scan dan diserang — ini bukan "mungkin", melainkan "pasti". Serangan paling umum adalah brute force: mencoba login berulang-ulang dengan kombinasi username/password, atau membuka ribuan koneksi untuk menghabiskan resource. Episode 10 mengajarkan pertahanan lapis pertama yang paling murah dan efektif: rate limiting UFW.

Mengapa ini penting? Karena serangan brute force adalah kebisingan latar internet yang tak pernah berhenti. ufw limit memberi kalian pertahanan bawaan tanpa tool tambahan — dan menjadi fondasi sebelum naik kelas ke fail2ban/CrowdSec untuk logika yang lebih cerdas.

Apa itu Rate Limiting

Rate limiting membatasi berapa banyak koneksi baru yang boleh dibuat sebuah IP dalam jendela waktu tertentu. Tujuannya: manusia normal tidak akan terpengaruh, tetapi mesin penyerang yang mencoba ribuan login per menit akan dihambat.

UFW mengimplementasikan ini dengan aturan khusus: maksimal 6 koneksi baru per 30 detik. Ketika sebuah IP melewati batas, koneksi berikutnya ditolak.

ufw limit

Limit SSH

Kasus paling penting — proteksi SSH publik:

Rate limit SSH
sudo ufw limit ssh
Output
Rule updated

Sama seperti ufw allow ssh, perintah ini bisa ditulis dengan port eksplisit:

Rate limit port 22
sudo ufw limit 22/tcp

Di status, aturan limit tampil dengan action LIMIT:

Status dengan rule limit
sudo ufw status
 
To                         Action      From
--                         ------      ----
22/tcp                     LIMIT       Anywhere
22/tcp (v6)                LIMIT       Anywhere (v6)

Limit Port Layanan Lain

Rate limit tidak hanya untuk SSH — berlaku untuk layanan apa pun yang terpapar publik:

Rate limit untuk layanan lain
sudo ufw limit 443/tcp
sudo ufw limit 'OpenSSH'
sudo ufw limit 80/tcp

Note

Batasan 6 koneksi per 30 detik berlaku per-IP sumber dan hanya untuk koneksi baru. Koneksi yang sudah terjalin tidak terpengaruh — jadi sesi SSH aktif, unduhan besar, dan aplikasi dengan koneksi persisten aman. Yang dibatasi adalah koneksi baru, tepat sasaran untuk brute force.

Bagaimana Limit Bekerja di Belakang Layar

ufw limit 22/tcp diterjemahkan menjadi aturan iptables berbasis connlimit. Lihat sendiri di backend:

Lihat rule limit di backend
sudo iptables -L ufw-user-input -n -v
Output (ringkas)
Chain ufw-user-input (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
            multiport dports 22 ctstate NEW limit: avg 6/min burst 6
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
            tcp dpt:22

Logikanya: koneksi baru ke port 22 diizinkan hingga burst 6, lalu dibatasi rata-rata. Ini perilaku yang berbeda dengan logika ban permanen — limit bersifat sementara dan hanya untuk IP yang melanggar.

Kombinasi dengan fail2ban

ufw limit membatasi koneksi, tetapi tidak menghafal pelanggar. fail2ban bekerja lebih cerdas: ia membaca log, mendeteksi pola login gagal berulang, lalu menambahkan aturan ban IP yang bisa berdurasi jam atau hari.

Arsitektur pertahanan berlapis yang sehat:

100%

Kombinasinya saling melengkapi: UFW limit menahan kebisingan berkecepatan tinggi, fail2ban menghukum pelanggar berulang. Keduanya bekerja lewat UFW, jadi aturannya bisa diaudit di satu tempat.

Setup fail2ban Singkat

Install dan aktifkan:

Install fail2ban
sudo apt install fail2ban

fail2ban bisa memakai UFW sebagai action ban — aktifkan di /etc/fail2ban/jail.local:

/etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
action = ufw

Konfigurasi di atas memban IP selama 1 jam (3600 detik) setelah 5 kali login gagal, menggunakan action ufw — fail2ban menambahkan aturan deny UFW untuk IP tersebut. Restart agar aktif:

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

Kombinasi dengan CrowdSec

CrowdSec adalah pendatang modern — versi community-powered dari fail2ban. Perbedaannya:

Aspekfail2banCrowdSec
DeteksiPattern lokal per-penyerangLokal + reputasi global dari komunitas
Sumber intelLog server sendiriLog server sendiri + banlist komunitas
TeknologiPython daemonGo agent + komunitas
Set upSederhanaSedikit lebih rumit (bouncer, console)

CrowdSec memakai bouncer untuk menerapkan keputusan — salah satunya bouncer UFW yang menambahkan aturan deny. Untuk mengikuti tutorial lengkap, lihat series learn-fail2ban dan learn-crowdsec di repo ini.

Tip

Urutan penyusunan pertahanan yang kami rekomendasikan: (1) ufw limit ssh — 1 baris, langsung efektif; (2) fail2ban — untuk logika ban berbasis log; (3) CrowdSec — saat kalian butuh intel komunitas dan otomasi. Mulai dari yang paling sederhana, naik kelas hanya bila dibutuhkan.

Common Pitfalls

  1. Limit tidak menggantikan allow: ufw limit 22/tcp menggantikan ufw allow 22/tcp — tidak perlu keduanya. Memakai keduanya justru membingungkan urutan aturan.
  2. Limit untuk layanan dengan banyak koneksi baru: layanan seperti load balancer atau aplikasi real-time bisa memicu false positive. Pertimbangkan allow biasa bila logika bisnis membutuhkan koneksi baru yang sering.
  3. Limit hanya membatasi, bukan mengingat: IP yang melanggar tetap bisa mencoba lagi setelah jendela 30 detik. Untuk hukuman jangka panjang, butuh fail2ban/CrowdSec.
  4. Lupa lindungi layanan non-SSH: SMTP, panel admin, dan API publik juga butuh limit — SSH bukan satu-satunya target brute force.

Penutup

Pada episode 10 ini, kalian telah menguasai rate limiting.

Inti yang harus dibawa pulang:

  • ufw limit ssh / ufw limit 22/tcp membatasi 6 koneksi baru per 30 detik per-IP.
  • Limit hanya untuk koneksi baru; sesi terjalin tidak terpengaruh.
  • Berlapis dengan fail2ban (ban berbasis log) dan CrowdSec (reputasi komunitas) untuk pertahanan menyeluruh.
  • Limit menggantikan allow untuk port yang sama — jangan pakai keduanya.
  • Proteksi semua layanan publik, bukan hanya SSH.

Di episode 11 selanjutnya, kita menuntaskan dukungan jaringan generasi berikutnya: IPv6 & Konfigurasi File — mengaktifkan IPV6=yes di /etc/default/ufw, memahami aturan paralel dual-stack, serta bedah before.rules/after.rules dan urutan eksekusinya. Sampai jumpa di episode 11!

Belajar UFW - Rate Limiting & Anti-Brute Force | Belajar UFW