Panduan Teknis Optimalisasi Rate Limit Nginx untuk Mencegah DDoS dan Brute Force
Pengantar
Dalam pengelolaan server dan website, menjaga kestabilan layanan adalah hal yang sangat penting. Salah satu ancaman yang sering menyebabkan website menjadi lambat bahkan tidak bisa diakses adalah lonjakan trafik yang tidak wajar, baik disengaja maupun tidak. Serangan seperti DDoS dan brute force merupakan contoh nyata yang sering menargetkan web server.
Di sinilah rate limit Nginx berperan penting. Rate limit memungkinkan administrator server membatasi jumlah permintaan atau koneksi yang masuk dalam periode waktu tertentu. Dengan konfigurasi yang tepat, rate limit dapat membantu menjaga performa server, mencegah penyalahgunaan resource, serta meningkatkan keamanan website secara keseluruhan.
Artikel ini akan membahas secara teknis dan bertahap bagaimana cara mengoptimalkan rate limit di Nginx agar efektif dalam menghadapi serangan DDoS dan brute force.
Apa Itu Rate Limit?
Rate limit adalah metode untuk membatasi jumlah permintaan (request) atau koneksi yang dapat dilakukan ke suatu layanan, API, atau server dalam jangka waktu tertentu. Tujuan utama dari rate limit adalah mencegah penyalahgunaan layanan, menghindari kelebihan beban server, serta melindungi sistem dari serangan seperti DDoS (Distributed Denial of Service) dan brute force.
Contohnya, sebuah website dapat mengizinkan:
- Maksimal 2 request per detik per IP
- Maksimal 10 koneksi aktif per IP
Jika batas tersebut terlampaui, permintaan selanjutnya dapat:
- Ditolak
- Ditunda
- Dikembalikan dengan status HTTP 429 (Too Many Requests)
Apa Itu Serangan DDoS?
DDoS (Distributed Denial of Service) adalah serangan siber yang bertujuan membuat website atau server tidak dapat diakses oleh pengguna yang sah. Serangan ini dilakukan dengan cara membanjiri target menggunakan trafik dalam jumlah besar dari banyak sumber secara bersamaan.
Dampak serangan DDoS antara lain:
- Website menjadi sangat lambat
- Layanan tidak bisa diakses
- Konsumsi CPU dan RAM melonjak
- Server bisa mengalami downtime
Tanpa mekanisme pembatasan seperti rate limit, server akan sangat rentan terhadap jenis serangan ini.
Peran Rate Limit dalam Mengurangi DDoS dan Brute Force
Rate limit bukan solusi tunggal untuk DDoS skala besar, tetapi sangat efektif sebagai lapisan proteksi awal.
Manfaat penerapan rate limit:
- Mengurangi beban server dengan membatasi request berlebih
- Menahan lonjakan trafik yang tidak normal
- Melindungi endpoint sensitif seperti halaman login
- Menjaga server tetap responsif untuk user normal
Dengan kata lain, rate limit membantu memfilter trafik sebelum benar-benar membebani server.
Jenis-Jenis Rate Limit di Nginx
Secara umum, Nginx menyediakan dua jenis rate limit yang paling sering digunakan.
- Rate Limit Berbasis Permintaan (Request)
Digunakan untuk membatasi jumlah request HTTP dalam periode waktu tertentu.
Cocok untuk:- API
- Halaman login
- Endpoint yang sering diakses
- Rate Limit Berbasis Koneksi (Connection)
Digunakan untuk membatasi jumlah koneksi aktif secara bersamaan dari satu IP.
Cocok untuk:- Menghindari koneksi paralel berlebihan
- Menjaga stabilitas worker Nginx
Cara Konfigurasi Rate Limit di Nginx
- Membuat Aturan Rate Limit Global
Langkah pertama adalah mendefinisikan aturan rate limit secara global agar bisa digunakan oleh semua virtualhost.
- Buat file konfigurasi baru:
sudo nano /etc/nginx/conf.d/rate-limit.conf - Isi dengan konfigurasi berikut:
Penjelasan singkat:# Rate limit berdasarkan request limit_req_zone $binary_remote_addr zone=req_limit:10m rate=2r/s; # Rate limit berdasarkan koneksi limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
req_limit : nama zone yang akan dipanggil di virtualhost
conn_limit : nama zone yang akan dipanggil di virtualhost
rate=2r/s : membatasi 2 request per detik per IP
10m : alokasi memori untuk menyimpan data IP
- Buat file konfigurasi baru:
- Menerapkan Rate Limit ke Virtualhost
Setelah zone dibuat, langkah berikutnya adalah menerapkannya ke website tertentu.
- Buka konfigurasi virtualhost:
sudo nano /etc/nginx/sites-available/wordpress.com - Tambahkan konfigurasi berikut di dalam block location / { }:
Penjelasan:server { listen 80; server_name wordpress.com; root /var/www/testapp; index index.php index.html; access_log /var/log/nginx/wordpress.access.log; error_log /var/log/nginx/wordpress.error.log; location / { # Rate limit request limit_req zone=req_limit burst=5 nodelay; # Rate limit koneksi limit_conn conn_limit 10; # Status saat rate limit tercapai limit_req_status 429; try_files $uri $uri/ /index.php?$args; } }
- burst=5 : Nginx membolehkan 5 request ekstra di atas rate
- nodelay : langsung memproses request tanpa antre
- limit_conn 10 : membatasi 10 koneksi aktif per IP
- 429 : menandakan status yang muncul jika terlalu banyak request
- Simpan file, lalu uji konfigurasi:
sudo nginx -tOutput :
root@lab:/etc/nginx/sites-available# sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful - Jika tidak ada error, restart Nginx:
sudo systemctl restart nginx
- Buka konfigurasi virtualhost:
- Menguji Rate Limit dengan Tools
Untuk memastikan rate limit bekerja dengan baik, kita bisa melakukan pengujian beban menggunakan Apache Benchmark.
- Install tools terlebih dahulu:
sudo apt install apache-utils -y - Lakukan pengujian dengan perintah:
Arti parameter:ab -n 200 -c 10 https://domainku.com/- -n 200 total request
- -c 10 request simultan
Catatan : Jika rate limit aktif, sebagian besar request akan gagal dan server akan mengembalikan status HTTP 429.
- Install tools terlebih dahulu:
Kesimpulan
Optimalisasi rate limit di Nginx merupakan langkah teknis yang sederhana namun sangat efektif untuk meningkatkan keamanan dan stabilitas server. Dengan membatasi jumlah request dan koneksi per IP, risiko serangan DDoS dan brute force dapat ditekan sejak awal.
Melalui konfigurasi limit_req_zone, limit_req, dan limit_conn, Nginx mampu mengelola trafik secara lebih cerdas tanpa mengorbankan performa website. Jika dikombinasikan dengan strategi keamanan lain, rate limit akan menjadi fondasi perlindungan yang kuat untuk web server kamu.
Semoga panduan ini membantu.


