Site icon JocoDEV

Hardening Server: Konfigurasi Fail2ban dan Anti DDoS di Nginx dengan Pangolin

Setiap server yang terhubung ke internet pasti mendapat serangan dalam hitungan menit setelah pertama kali online. Query seperti fail2ban, pangolin fail2ban, dan nginx anti ddos yang banyak dicari pengunjung menunjukkan satu kebutuhan yang sama: bagaimana melindungi server self-hosted dari brute force dan banjir trafik tanpa harus memasang perangkat keamanan mahal. Artikel ini menjawab kebutuhan tersebut dengan panduan praktis hardening server menggunakan Fail2ban, konfigurasi anti DDoS di Nginx, serta integrasinya dengan Pangolin sebagai reverse proxy tunnel.

Kombinasi ketiganya membentuk lapisan pertahanan berlapis. Pangolin menangani akses dan tunneling, Nginx menyaring trafik berlebihan di level aplikasi, dan Fail2ban mengusir IP yang berperilaku jahat secara otomatis. Mari kita bahas satu per satu.

Mengapa Hardening Server Tidak Bisa Ditunda

Server dengan SSH terbuka di port 22 rata-rata menerima puluhan hingga ratusan percobaan login per hari dari bot. Serangan semacam ini jarang berhasil pada server yang dikonfigurasi dengan benar, tetapi tetap membebani resource dan menambah risiko ketika ada satu pengguna yang memakai kata sandi lemah. Di sisi lain, serangan DDoS lapisan aplikasi (layer 7) berupaya menghabiskan koneksi dan CPU dengan mengirimkan permintaan HTTP dalam jumlah masif.

Prinsip hardening yang sehat selalu dimulai dari mengurangi permukaan serangan: matikan layanan yang tidak dipakai, batasi siapa yang boleh login, dan pasang mekanisme otomatis yang merespons ancaman tanpa menunggu intervensi manusia. Jika Anda baru mengelola server Linux, pemahaman tentang [konektivitas jaringan dan keamanan dasar Linux](https://jocodev.id/konektivitas-jaringan-dan-keamanan-dasar-linux/) akan sangat membantu sebelum masuk ke konfigurasi di bawah.

Mengenal Fail2ban dan Cara Kerjanya

Fail2ban adalah daemon yang memantau file log secara real-time, mencocokkannya dengan aturan (filter), lalu menjalankan aksi — biasanya blokir IP via firewall — ketika sebuah host melanggar batas tertentu. Konsepnya sederhana: gagal login SSH lima kali dalam sepuluh menit? IP-nya diblokir selama satu jam.

Instalasi dan Jail Dasar untuk SSH

Pada distribusi berbasis Debian/Ubuntu, instalasi cukup dengan `apt install fail2ban`. Konfigurasi utama tidak ditulis di `jail.conf`, melainkan di file lokal `jail.local` agar tidak tertimpa saat update:

[sshd]
enabled = true
port    = ssh
maxretry = 5
findtime = 600
bantime  = 3600

Konfigurasi di atas memblokir IP yang gagal login lima kali dalam sepuluh menit selama satu jam. Untuk server produksi, banyak administrator menaikkan `bantime` menjadi `1d` atau memakai `bantime.increment` agar pelaku berulang mendapat hukuman yang makin lama.

Melindungi Nginx dengan Fail2ban

Fail2ban juga bisa menjaga Nginx dari credential stuffing dan scraper agresif. Buat filter yang membaca pola error log Nginx, misalnya status `401` dan `403`, lalu daftarkan jail-nya:

[nginx-auth]
enabled  = true
filter   = nginx-auth
logpath  = /var/log/nginx/*error.log
maxretry = 6
findtime = 60
bantime  = 1800

Dengan jail semacam ini, bot yang mencoba menebak kata sandi pada halaman autentikasi akan diblokir sebelum sempat menyelesaikan ratusan percobaan. Pastikan juga manajemen hak akses di server Anda rapi — artikel tentang [manajemen paket dan user permission di Linux](https://jocodev.id/manajemen-paket-dan-user-permission-di-linux/) membahas fondasi yang perlu disiapkan agar layanan seperti Fail2ban berjalan dengan privilege yang benar.

Konfigurasi Anti DDoS di Nginx

Fail2ban bekerja setelah pelanggaran tercatat di log. Untuk menahan banjir trafik lebih awal, Nginx menyediakan modul rate limiting bawaan yang membatasi permintaan sebelum mencapai aplikasi.

Rate Limiting dengan limit_req

Direktif `limit_req_zone` mendefinisikan zona berdasarkan alamat IP klien, lalu `limit_req` menerapkannya pada location tertentu:

limit_req_zone $binary_remote_addr zone=umum:10m rate=10r/s;

server {
    location / {
        limit_req zone=umum burst=20 nodelay;
    }
}

Konfigurasi di atas mengizinkan 10 permintaan per detik per IP dengan burst 20 permintaan. Parameter `nodelay` membuat permintaan dalam burst tetap dilayani langsung, bukan diantrekan, sehingga pengguna sah tidak merasa lambat. Untuk endpoint login atau API yang mahal secara resource, buat zona terpisah dengan rate lebih ketat, misalnya `rate=1r/s`.

Membatasi Koneksi dengan limit_conn

Selain laju permintaan, jumlah koneksi simultan juga perlu dibatasi agar satu IP tidak menghabiskan slot worker:

limit_conn_zone $binary_remote_addr zone=connperip:10m;

server {
    location / {
        limit_conn connperip 20;
    }
}

Kombinasi `limit_req` dan `limit_conn` efektif meredam serangan layer 7 skala kecil hingga menengah. Untuk serangan volumetrik besar, tetap andalkan proteksi di level jaringan atau CDN, karena Nginx sendiri bisa kehabisan bandwidth sebelum sempat memfilter.

Integrasi dengan Pangolin

Pangolin adalah platform reverse proxy dengan tunnel berbasis WireGuard yang populer untuk mengexpose layanan self-hosted secara aman tanpa membuka port di banyak lokasi. Arsitekturnya menempatkan proxy di VPS publik, sementara layanan asli tetap berada di jaringan privat.

Dalam konteks hardening, posisi Pangolin dan Fail2ban bersifat saling melengkapi:

Kuncinya adalah memastikan Fail2ban membaca IP klien yang sebenarnya, bukan IP tunnel. Karena trafik melewati proxy, gunakan header `X-Forwarded-For` yang dipertahankan dengan benar dan atur `client_ip` di filter Fail2ban agar pemblokiran tidak salah sasaran. Uji selalu dengan log nyata sebelum menaikkan agresivitas aturan.

Checklist Hardening Tambahan

Rate limiting dan Fail2ban hanyalah dua lapis dari strategi yang lebih besar. Pastikan item berikut juga terpenuhi:

Kesimpulan

Hardening server bukan tugas sekali jalan, melainkan proses berlapis yang konsisten. Dengan Fail2ban Anda mendapatkan pemblokiran otomatis terhadap percobaan brute force, sementara konfigurasi anti DDoS di Nginx melalui `limit_req` dan `limit_conn` menahan banjir permintaan di level aplikasi. Ketika keduanya dipadukan dengan Pangolin sebagai reverse proxy tunnel, layanan self-hosted Anda mendapat perlindungan berlapis tanpa biaya lisensi tambahan. Mulailah dari jail SSH, tambahkan filter Nginx, lalu evaluasi log secara rutin — server yang diam-diam aman jauh lebih menyenangkan daripada server yang harus dipulihkan di tengah malam.

Foto sampul oleh Albert Stoynov di Unsplash.

Exit mobile version