Cara Konfigurasi Rate Limit di Nginx Untuk Mencegah DDOS

Apa itu Rate Limit ?

Cara Konfigurasi Rate Limit – Rate limit adalah metode untuk membatasi jumlah permintaan (request) yang bisa dilakukan ke suatu layanan, API, atau server dalam jangka waktu tertentu. Tujuannya adalah untuk mencegah penyalahgunaan, menghindari kelebihan beban, dan melindungi sistem dari serangan seperti DDoS (Distributed Denial of Service).

Misalnya, sebuah website mungkin mengizinkan maksimal 100 permintaan per menit per pengguna atau per alamat IP. Jika batas tersebut terlampaui, permintaan selanjutnya bisa ditolak atau dibatasi sampai periode waktu berikutnya dimulai.

Rate Limiting

Rate limiting is an intelligent mechanism that protects a server from excessive load by limiting the number of requests or connections from a source in a certain time period. By implementing rate limiting, we can prevent DDoS attacks, brute force, or misuse of services.

– nginx.org

Apa itu DDOS ?

DDoS (Distributed Denial of Service) adalah serangan siber yang berupaya untuk membuat suatu website atau server tidak dapat diakses oleh pengguna. DDOS dilakukan dengan cara membanjiri target dengan trafik atau permintaan yang sangat besar dari berbagai sumber secara bersamaan. Akibatnya, server menjadi kewalahan, menyebabkan penurunan kinerja atau bahkan downtime total. Dengan begitu, layanan online yang seharusnya tersedia bagi pengguna justru menjadi tidak responsif dan tidak dapat diakses.

Bagaimana Rate Limit dapat Membantu Mengurangi Serangan DDoS ?

Rate limit membantu mengurangi serangan DDoS dengan cara membatasi jumlah permintaan yang bisa dilakukan ke server dalam periode waktu tertentu. Selain itu, rate limit juga bertindak sebagai penghalang yang menjaga agar server tetap responsif dan aman dari serangan trafik berlebihan.

  • Mengurangi Beban Server: Hanya permintaan yang berada dalam batas yang ditentukan yang akan diproses. Permintaan berlebih akan ditolak atau ditunda, sehingga server tidak kewalahan.
  • Mencegah Lonjakan Trafik: Saat terjadi serangan DDoS, lonjakan trafik yang abnormal akan terhalang oleh rate limit, menjaga kestabilan dan ketersediaan layanan.
  • Melindungi Sumber Daya: Dengan memfilter trafik yang tidak wajar, rate limit membantu memastikan bahwa sumber daya server tetap digunakan oleh pengguna yang sah.

Baca Juga: Cara Install ModSecurity di Nginx + OWASP CRS di Ubuntu Server

Cara Konfigurasi Rate Limit di Nginx Web Server

Sekarang Kita akan mencoba mengimplementasikan rate limit ke sebuah website yang menggunakan web server nginx. Sebagai tambahan informasi, pada umumnya terdapat 2 jenis rate limit yang biasa digunakan. Yaitu rate limit berbasis koneksi dan rate limit berbasis permintaan.

Jenis-Jenis Rate Limit

  • Rate Limiting Koneksi: Fungsinya untuk membatasi jumlah koneksi bersamaan (concurrent connections) yang bisa dibuat oleh sebuah alamat IP.
  • Rate Limiting Permintaan: Fungsinya untuk membatasi jumlah permintaan HTTP (requests) yang bisa dilakukan oleh sebuah alamat IP dalam periode waktu tertentu.

Langkah #1: Membuat Aturan Rate Limit di Nginx

Pada langkah pertama, kita akan membuat 2(dua) aturan rate limit yang bersifat global, yaitu aturan rate limit untuk permintaan (request) dan aturan rate limit untuk koneksi (concurrent). Rate limit request berfungsi mengontrol jumlah permintaan yang masuk, sedangkan rate limit koneksi berfungsi untuk membatasi jumlah koneksi aktif.

Buat aturan rate limit request dan rate limit koneksi current di /etc/nginx/conf.d/

sudo nano /etc/nginx/conf.d/rate-limit.conf

Salin dan tempel aturan rate limit di bawah ini:

# Aturan limit request
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=2r/s;

# Aturan limit koneksi
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
  • Limit Request: Hanya mengijinkan maksimal 2 permintaan per detik per IP untuk mencegah spam dan DDoS.
  • Limit Koneksi: Membatasi koneksi simultan per IP agar server tetap stabil dan tidak kelebihan beban.
  • Membuat request zone dengan nama req_limit (zone ini yang akan dipanggil di virtualhost)
  • Membuat koneksi zone dengan nama conn_limit ( zone ini juga dipanggil di virtualhost)

Langkah #2: Menerapkan Aturan Rate Limit ke Virtualhost Nginx

Selanjutnya, kita akan menerapkan aturan rate limit yang telah dibuat ke konfigurasi virtualhost Nginx. Dengan menambahkan aturan ini ke setiap website yang dikelola, kita dapat membatasi jumlah permintaan dan koneksi per IP untuk mencegah lonjakan trafik yang berlebihan. Konfigurasi ini akan diterapkan dalam blok server pada tiap virtualhost.

Misal di sini Kita terapkan ke salah satu website, dengan domain testapp.awanservers.com

sudo nano /etc/nginx/sites-available/testapp.awanservers.com

Salin baris berikut dan tempelkan ke dalam block location / {}

# Menerapkan aturan rate limit request
limit_req zone=req_limit burst=5 nodelay;

# Menerapkan aturan limit koneksi
limit_conn conn_limit 10;

# Status Rate Limit
limit_req_status 429;
Menerapkan Rate Limit ke Virtualhost
Menerapkan Rate Limit ke Virtualhost

Setelah itu, uji konfigurasi nginx dan pastikan tidak ada error.

sudo nginx -t
Menguji Konfigurasi Nginx
Menguji Konfigurasi Nginx

Terakhir restart service nginx.

sudo systemctl restart nginx

Langkah #3: Menguji Rate Limiter dengan Tools

Untuk menguji rate limiter yang sudah dikonfigurasi, ada beberapa cara dan tools yang bisa digunakan. Tools tersebut diantaranya, cURL, Apache Benchmark, dan Siege. Tapi pada kali ini kita hanya akan melakukan uji beban menggunakan Apache Benchmark dan memeriksa apakah server menanggapi dengan HTTP 429 atau 503 setelah melewati batas koneksi atau permintaan.

Pertama install dulu tools Apache Bencmark (pengujianya di linux ya..)

sudo apt install apache-utils -y

Perintah di bawah ini akan menguji: Mengirimkan total 200 request (-n 2000) dan Menjalankan 50 request secara bersamaan (-c100).

ab -n 2000 -c 100 https://testapp.awanservers.com/

Hasil benchmarknya seperti ini:
Dari 200 request, hanya 8 request yang berhasil dan 192 request lainya gagal, ini mengindikasikan bahwa sebagian besar request tidak diterima karena rate limiter (kemungkinan besar mendapatkan HTTP 429). Perhatikan webnya juga diproteksi oleh proxy cloudflare.

Pengujian Rate Limiter dengan Apache Benchmark
Pengujian Rate Limiter dengan Apache Benchmark

Jika kita cek webnya, akan terkena error 429 seperti ini:

Website Error Too Many Request
Website Error Too Many Request

Kemudian cek error log nginx juga akan banyak error 429.

Error Log Nginx Rate Limit
Error Log Nginx Rate Limit

Penutup

Jadi begitulah cara konfigurasi rate limit di nginx. Dengan menerapkan konfigurasi rate limit di Nginx, kamu telah menambahkan lapisan perlindungan penting untuk mencegah serangan DDoS. Dengan memanfaatkan directive seperti limit_req_zone dan limit_req, server dapat mengatur dan membatasi jumlah permintaan yang diterima dalam periode waktu tertentu, sehingga mengurangi risiko overload dan memastikan kestabilan layanan.

Semoga panduan ini bermanfaat, dan selamat mencoba! 🚀

Suka Menulis

You might also like
Cara Menambahkan Domain di SafeLine WAF

Cara Menambahkan Domain di SafeLine WAF

Cara Blokir Akses Web dari Luar Negeri Menggunakan Cloudflare

Cara Blokir Akses Web dari Luar Negeri Menggunakan Cloudflare

Cara Konfigurasi Nginx Cache untuk Mempercepat Website

Cara Konfigurasi Nginx Cache untuk Mempercepat Website

Cara Mudah Install SafeLine WAF di Ubuntu Server

Cara Mudah Install SafeLine WAF di Ubuntu Server

Cara Install ModSecurity di Nginx + OWASP CRS di Ubuntu Server

Cara Install ModSecurity di Nginx + OWASP CRS di Ubuntu Server

Cara Mengamankan Website: Blokir Akses Langsung ke IP Publik Server

Cara Mengamankan Website: Blokir Akses Langsung ke IP Publik Server

Pesan dengan Border Radius

Informasi


Saya bisa membantu instalasi Server seperti: LAMP atau LEMP Stack, Control Panel VPS, Instalasi WebApp, Mail Server, atau sekedar tanya tutorial di web ini. Untuk itu, silahkan hubungi saya melalui kontak yang telah tersedia.

OrangeVPS VPS Murah
Most Populer
Cara Install Armbian Linux 25.05.0 di STB HG680P
Review dan Bencmark STB HG680P Armbian Linux 24.11
Cara Mengaktifkan WiFi di Armbian STB HG680P
Apa Itu Armbian ? Penjelasan Lengkap Armbian Linux Ubuntu Debian Based
Cara Konfigurasi IP Statis Armbian Linux 24.10 di STB HG680P