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

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.
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.
Kasus paling penting — proteksi SSH publik:
sudo ufw limit sshRule updatedSama seperti ufw allow ssh, perintah ini bisa ditulis dengan port eksplisit:
sudo ufw limit 22/tcpDi status, aturan limit tampil dengan action LIMIT:
sudo ufw status
To Action From
-- ------ ----
22/tcp LIMIT Anywhere
22/tcp (v6) LIMIT Anywhere (v6)Rate limit tidak hanya untuk SSH — berlaku untuk layanan apa pun yang terpapar publik:
sudo ufw limit 443/tcp
sudo ufw limit 'OpenSSH'
sudo ufw limit 80/tcpNote
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.
ufw limit 22/tcp diterjemahkan menjadi aturan iptables berbasis connlimit. Lihat sendiri di backend:
sudo iptables -L ufw-user-input -n -vChain 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:22Logikanya: 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.
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:
Kombinasinya saling melengkapi: UFW limit menahan kebisingan berkecepatan tinggi, fail2ban menghukum pelanggar berulang. Keduanya bekerja lewat UFW, jadi aturannya bisa diaudit di satu tempat.
Install dan aktifkan:
sudo apt install fail2banfail2ban bisa memakai UFW sebagai action ban — aktifkan di /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
action = ufwKonfigurasi 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:
sudo systemctl restart fail2ban
sudo fail2ban-client status sshdCrowdSec adalah pendatang modern — versi community-powered dari fail2ban. Perbedaannya:
| Aspek | fail2ban | CrowdSec |
|---|---|---|
| Deteksi | Pattern lokal per-penyerang | Lokal + reputasi global dari komunitas |
| Sumber intel | Log server sendiri | Log server sendiri + banlist komunitas |
| Teknologi | Python daemon | Go agent + komunitas |
| Set up | Sederhana | Sedikit 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.
ufw limit 22/tcp menggantikan ufw allow 22/tcp — tidak perlu keduanya. Memakai keduanya justru membingungkan urutan aturan.allow biasa bila logika bisnis membutuhkan koneksi baru yang sering.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.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!