Serangan DDoS dapat memparalelkan operasi layanan web mana pun dalam hitungan menit. Penyerang mengirimkan ribuan permintaan dari berbagai alamat IP, membebani server dan membuatnya tidak dapat diakses oleh pengguna yang sebenarnya. Server proksi adalah salah satu alat perlindungan yang efektif, yang memungkinkan penyaringan lalu lintas berbahaya, distribusi beban, dan menyembunyikan alamat IP nyata server Anda.
Dalam panduan ini, kita akan membahas cara mengatur proksi untuk perlindungan dari DDoS, jenis proksi yang digunakan, dan cara membangun sistem keamanan berlapis. Materi ini ditujukan untuk administrator sistem, pemilik layanan web, dan spesialis DevOps.
Cara Kerja Serangan DDoS dan Mengapa Proksi Membantu
DDoS (Distributed Denial of Service) adalah serangan terdistribusi untuk menolak layanan. Penyerang menggunakan botnet yang terdiri dari ribuan perangkat terinfeksi yang secara bersamaan mengirimkan permintaan ke server Anda. Tujuannya adalah untuk menghabiskan sumber daya server (CPU, memori, saluran komunikasi) dan membuatnya tidak dapat diakses oleh pengguna yang sah.
Jenis utama serangan DDoS:
- Serangan Volumetrik — mengisi saluran komunikasi dengan sejumlah besar lalu lintas (DNS amplification, UDP flood)
- Serangan Protokol — mengeksploitasi kerentanan dalam protokol jaringan (SYN flood, Ping of Death)
- Serangan Lapisan Aplikasi — meniru permintaan yang sah ke aplikasi web (HTTP flood, Slowloris)
Server proksi membantu melindungi dari DDoS dengan beberapa cara:
- Menyembunyikan alamat IP nyata server — penyerang hanya melihat IP proksi, bukan server utama Anda
- Penyaringan lalu lintas berbahaya — proksi menganalisis permintaan dan memblokir yang mencurigakan
- Distribusi beban — beberapa server proksi mendistribusikan lalu lintas antara server backend
- Rate limiting — membatasi jumlah permintaan dari satu alamat IP
- Penyimpanan konten statis — mengurangi beban pada server utama
Penting untuk memahami bahwa proksi bukanlah solusi untuk semua jenis DDoS. Serangan volumetrik yang kuat dapat membanjiri saluran komunikasi hingga server proksi. Oleh karena itu, proksi efektif dalam kombinasi dengan metode perlindungan lainnya: CDN, layanan anti-DDoS berbasis cloud (Cloudflare, AWS Shield), dan firewall.
Jenis Proksi untuk Perlindungan dari DDoS: Proksi Terbalik vs Proksi Langsung
Untuk melindungi dari DDoS, dua jenis server proksi utama digunakan:
Proksi Terbalik
Proksi terbalik ditempatkan di depan server web Anda dan menerima semua permintaan masuk dari klien. Klien hanya berinteraksi dengan proksi, tanpa mengetahui alamat IP nyata server Anda. Ini adalah alat utama untuk perlindungan dari DDoS.
Solusi populer untuk proksi terbalik:
- Nginx — server web cepat dan ringan dengan fungsi proksi terbalik
- HAProxy — load balancer khusus dengan kemampuan penyaringan yang kuat
- Apache mod_proxy — modul untuk Apache, kurang efisien dibandingkan Nginx
- Varnish — akselerator HTTP dengan fokus pada penyimpanan cache
Proksi Langsung
Proksi langsung digunakan di sisi klien untuk permintaan keluar. Dalam konteks perlindungan dari DDoS, mereka digunakan lebih jarang, tetapi dapat berguna untuk:
- Menyembunyikan alamat IP server Anda saat mengakses API eksternal
- Distribusi lalu lintas keluar melalui banyak alamat IP
- Menghindari pemblokiran saat mengumpulkan informasi tentang potensi serangan
Untuk tugas ini, proksi residensial cocok — mereka memiliki alamat IP nyata dari pengguna rumah dan terlihat seperti lalu lintas biasa, yang menyulitkan untuk mendeteksi dan memblokirnya.
| Jenis Proksi | Penerapan untuk Perlindungan dari DDoS | Keuntungan |
|---|---|---|
| Proksi Terbalik (Nginx, HAProxy) | Menerima lalu lintas masuk, penyaringan, distribusi beban | Menyembunyikan IP nyata server, menyaring serangan, menyimpan konten cache |
| Proksi Residensial | Menyembunyikan infrastruktur, pemantauan ancaman | IP nyata, sulit untuk diblokir |
| Proksi Data Center | Lapisan perlindungan tambahan, pemrosesan cepat | Kecepatan tinggi, biaya rendah |
Pengaturan Proksi Terbalik di Nginx untuk Melindungi Server
Nginx adalah salah satu alat paling populer untuk membuat proksi terbalik. Ia dengan cepat memproses permintaan masuk, mendukung rate limiting, dan dapat menyaring lalu lintas yang mencurigakan.
Pengaturan Dasar Proksi Terbalik
Instal Nginx di server terpisah yang akan menerima semua lalu lintas masuk. Server web nyata harus disembunyikan di balik proksi dan hanya menerima permintaan darinya.
# /etc/nginx/nginx.conf
http {
# Pembatasan jumlah koneksi dari satu IP
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_conn conn_limit 10;
# Pembatasan jumlah permintaan (rate limiting)
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_req zone=req_limit burst=20 nodelay;
# Timeout untuk perlindungan dari Slowloris
client_body_timeout 10s;
client_header_timeout 10s;
keepalive_timeout 5s 5s;
send_timeout 10s;
upstream backend {
# IP server web nyata Anda
server 192.168.1.100:80;
# Anda dapat menambahkan beberapa server untuk penyeimbangan
# server 192.168.1.101:80;
}
server {
listen 80;
server_name example.com;
location / {
# Meneruskan permintaan ke backend
proxy_pass http://backend;
# Meneruskan IP asli klien
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
# Timeout untuk proksi
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
}
}
}
Pemblokiran User-Agent yang Mencurigakan
Banyak serangan DDoS menggunakan bot dengan User-Agent yang khas. Tambahkan aturan untuk memblokirnya:
# Pemblokiran bot yang dikenal
map $http_user_agent $bad_bot {
default 0;
~*bot 1;
~*crawler 1;
~*spider 1;
~*scraper 1;
"" 1; # User-Agent kosong
}
server {
listen 80;
server_name example.com;
if ($bad_bot) {
return 403;
}
location / {
proxy_pass http://backend;
}
}
Geo-Pemblokiran Negara yang Tidak Diinginkan
Jika layanan Anda hanya berfungsi untuk negara tertentu, Anda dapat memblokir lalu lintas dari wilayah lain menggunakan modul GeoIP:
# Instalasi modul GeoIP
# apt-get install nginx-module-geoip
load_module modules/ngx_http_geoip_module.so;
http {
geoip_country /usr/share/GeoIP/GeoIP.dat;
# Hanya mengizinkan lalu lintas dari Rusia dan Ukraina
map $geoip_country_code $allowed_country {
default no;
RU yes;
UA yes;
}
server {
listen 80;
server_name example.com;
if ($allowed_country = no) {
return 403;
}
location / {
proxy_pass http://backend;
}
}
}
HAProxy untuk Distribusi Beban dan Penyaringan Lalu Lintas
HAProxy adalah load balancer yang kuat dengan kemampuan penyaringan lalu lintas yang canggih. Ia mendukung ACL (Access Control Lists) yang kompleks untuk memblokir serangan di tingkat aplikasi.
Konfigurasi Dasar HAProxy
# /etc/haproxy/haproxy.cfg
global
maxconn 50000
# Logging
log /dev/log local0
log /dev/log local1 notice
defaults
mode http
log global
option httplog
option dontlognull
# Timeout
timeout connect 5s
timeout client 30s
timeout server 30s
# Pembatasan ukuran permintaan (perlindungan dari POST flood)
maxconn 3000
frontend http_front
bind *:80
# Rate limiting: maksimum 100 permintaan dalam 10 detik dari satu IP
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request track-sc0 src
http-request deny if { sc_http_req_rate(0) gt 100 }
# Pemblokiran permintaan tanpa header Host
acl has_host hdr(host) -m found
http-request deny if !has_host
# Pemblokiran User-Agent yang mencurigakan
acl bad_bot hdr_sub(User-Agent) -i bot crawler spider scraper
http-request deny if bad_bot
# Meneruskan ke backend
default_backend web_servers
backend web_servers
balance roundrobin
option httpchk GET /health
# Daftar server backend
server web1 192.168.1.100:80 check
server web2 192.168.1.101:80 check
server web3 192.168.1.102:80 check
Perlindungan dari HTTP Flood dengan Menggunakan ACL
HTTP Flood adalah serangan di mana penyerang mengirimkan banyak permintaan HTTP yang sah. HAProxy memungkinkan Anda untuk membuat aturan kompleks untuk mendeteksi mereka:
frontend http_front
bind *:80
# Melacak jumlah permintaan dari satu IP
stick-table type ip size 100k expire 30s store http_req_rate(10s),conn_cur
http-request track-sc0 src
# Pemblokiran saat melebihi batas
acl too_many_requests sc_http_req_rate(0) gt 50
acl too_many_connections sc_conn_cur(0) gt 10
http-request deny deny_status 429 if too_many_requests
http-request deny deny_status 429 if too_many_connections
# Pemblokiran permintaan ke jalur yang tidak ada (pemindaian)
acl valid_path path_beg /api /static /login /
http-request deny if !valid_path
default_backend web_servers
Whitelist Alamat IP yang Dipercaya
Buat whitelist untuk alamat IP yang dipercaya (misalnya, alamat kantor Anda atau mitra), yang tidak akan dikenakan rate limiting:
frontend http_front
bind *:80
# Whitelist alamat IP yang dipercaya
acl whitelist src 203.0.113.0/24 198.51.100.50
# Rate limiting hanya untuk IP yang tidak ada di whitelist
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request track-sc0 src if !whitelist
http-request deny if { sc_http_req_rate(0) gt 100 } !whitelist
default_backend web_servers
Penggunaan Proksi Residensial untuk Menyembunyikan Infrastruktur
Selain proksi terbalik di depan server Anda, Anda dapat menggunakan proksi residensial untuk perlindungan tambahan terhadap infrastruktur. Ini sangat relevan jika Anda perlu:
- Menyembunyikan alamat IP server pemantauan Anda — jika Anda memantau serangan DDoS atau mengumpulkan informasi tentang ancaman, proksi residensial akan membantu menyembunyikan tindakan Anda
- Berinteraksi dengan API eksternal tanpa mengungkapkan infrastruktur — server Anda dapat melakukan permintaan melalui proksi residensial, yang menyulitkan untuk mendeteksi mereka
- Menguji perlindungan terhadap DDoS — mensimulasikan serangan dari berbagai alamat IP untuk memeriksa efektivitas filter Anda
Proksi residensial memiliki alamat IP dari pengguna rumah yang nyata, sehingga tidak dapat dibedakan dari lalu lintas biasa. Ini menyulitkan untuk memblokir mereka dan memungkinkan untuk melewati pembatasan geo.
Contoh: Pemantauan Ancaman melalui Proksi Residensial
Misalkan Anda ingin memantau aktivitas botnet yang dapat menyerang layanan Anda. Dengan menggunakan proksi residensial, Anda dapat mengumpulkan informasi tanpa mengungkapkan alamat IP server Anda:
import requests
# Pengaturan proksi residensial
proxies = {
'http': 'http://username:password@residential-proxy.com:8080',
'https': 'http://username:password@residential-proxy.com:8080'
}
# Mengumpulkan informasi tentang ancaman potensial
threat_sources = [
'http://suspicious-site1.com',
'http://suspicious-site2.com'
]
for source in threat_sources:
try:
response = requests.get(source, proxies=proxies, timeout=5)
# Analisis respons untuk mengidentifikasi pola serangan
print(f"Status: {response.status_code}, IP: {response.headers.get('X-Your-IP')}")
except Exception as e:
print(f"Error accessing {source}: {e}")
Aturan Penyaringan: Cara Membedakan Serangan dari Lalu Lintas yang Sah
Tantangan utama dalam melindungi dari DDoS di tingkat aplikasi (L7) adalah membedakan lalu lintas berbahaya dari yang sah. Serangan modern meniru perilaku pengguna nyata, yang menyulitkan untuk mendeteksi mereka.
Tanda-Tanda Serangan DDoS
- Peningkatan tajam jumlah permintaan — 2-10 kali lebih banyak dari biasanya dalam waktu singkat
- Permintaan dengan User-Agent yang sama — bot sering menggunakan User-Agent yang sama
- Ketidakhadiran Referer — permintaan langsung tanpa rujukan dari halaman lain
- Permintaan serupa — permintaan ke URL yang sama dengan variasi minimal
- Ketidakhadiran JavaScript — bot tidak menjalankan kode JS di halaman
- Waktu rendah di halaman — bot segera menutup koneksi setelah menerima respons
- Rentang IP yang mencurigakan — permintaan massal dari satu subnet
Penyaringan Berlapis
Perlindungan yang efektif menggunakan beberapa tingkat penyaringan:
Tingkat 1: Reputasi IP
Memeriksa alamat IP terhadap basis data botnet, server proksi, VPN yang dikenal. Memblokir IP dengan reputasi buruk.
Tingkat 2: Rate Limiting
Membatasi jumlah permintaan dari satu IP. Misalnya, tidak lebih dari 50 permintaan per menit untuk pengguna biasa.
Tingkat 3: Analisis Perilaku
Memeriksa User-Agent, Referer, cookies, dan pelaksanaan JavaScript. Memblokir permintaan tanpa parameter ini.
Tingkat 4: CAPTCHA
Untuk lalu lintas yang mencurigakan, CAPTCHA ditampilkan. Bot tidak dapat melewatinya, pengguna yang sah melewatinya sekali.
Contoh: Tantangan JavaScript di Nginx
Cara sederhana untuk menyaring bot adalah dengan meminta pelaksanaan JavaScript untuk mengatur cookie:
server {
listen 80;
server_name example.com;
# Memeriksa keberadaan cookie
set $has_cookie 0;
if ($http_cookie ~* "verified=true") {
set $has_cookie 1;
}
# Jika cookie tidak ada, tampilkan tantangan JS
location / {
if ($has_cookie = 0) {
return 200 '
<html>
<head><title>Verifikasi</title></head>
<body>
<script>
document.cookie = "verified=true; path=/";
window.location.reload();
</script>
<noscript>Silakan aktifkan JavaScript</noscript>
</body>
</html>
';
}
proxy_pass http://backend;
}
}
Pemantauan dan Respons terhadap DDoS secara Real-Time
Perlindungan yang efektif dari DDoS memerlukan pemantauan lalu lintas yang konstan dan respons cepat terhadap anomali. Atur sistem pemantauan yang akan melacak metrik kunci:
- Jumlah permintaan per detik — peningkatan tajam dapat menunjukkan serangan
- Jumlah alamat IP unik — DDoS sering datang dari banyak IP
- Persentase kesalahan 4xx/5xx — peningkatan kesalahan dapat menjadi tanda kelebihan beban
- Waktu respons server — peningkatan latensi menunjukkan masalah
- Konsumsi sumber daya — CPU, memori, lalu lintas jaringan
Alat Pemantauan
| Alat | Tujuan | Fitur |
|---|---|---|
| Prometheus + Grafana | Pengumpulan metrik dan visualisasi | Pengaturan alert yang fleksibel, dasbor yang menarik |
| ELK Stack (Elasticsearch, Logstash, Kibana) | Analisis log secara real-time | Pencarian log yang kuat, identifikasi pola |
| Netdata | Pemantauan sumber daya sistem | Instalasi sederhana, metrik real-time |
| Fail2ban | Pemblokiran IP otomatis | Menganalisis log dan memblokir IP yang mencurigakan |
Pengaturan Alert di Prometheus
Buat aturan untuk pemberitahuan otomatis saat anomali terdeteksi:
# prometheus_alerts.yml
groups:
- name: ddos_detection
interval: 10s
rules:
# Alert saat terjadi peningkatan tajam permintaan
- alert: HighRequestRate
expr: rate(nginx_http_requests_total[1m]) > 1000
for: 1m
labels:
severity: warning
annotations:
summary: "Tingkat permintaan tinggi terdeteksi"
description: "Tingkat permintaan adalah {{ $value }} req/s"
# Alert saat terjadi peningkatan kesalahan 5xx
- alert: HighErrorRate
expr: rate(nginx_http_requests_total{status=~"5.."}[5m]) > 10
for: 2m
labels:
severity: critical
annotations:
summary: "Tingkat kesalahan 5xx tinggi"
description: "Kesalahan 5xx: {{ $value }} req/s"
# Alert saat penggunaan CPU tinggi
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "Penggunaan CPU tinggi"
description: "Penggunaan CPU adalah {{ $value }}%"
Respons Otomatis dengan Fail2ban
Fail2ban menganalisis log dan secara otomatis memblokir alamat IP yang melebihi batas permintaan:
# /etc/fail2ban/jail.local
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
logpath = /var/log/nginx/access.log
maxretry = 100
findtime = 60
bantime = 3600
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
# /etc/fail2ban/filter.d/nginx-req-limit.conf
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"
ignoreregex =
Perlindungan Berlapis: Menggabungkan Proksi dengan Metode Lain
Server proksi adalah elemen penting dalam perlindungan dari DDoS, tetapi mereka paling efektif dalam kombinasi dengan metode lainnya. Mari kita lihat arsitektur perlindungan berlapis:
Tingkat 1: Perlindungan Jaringan (L3/L4)
- Layanan anti-DDoS berbasis cloud — Cloudflare, AWS Shield, Google Cloud Armor menyaring lalu lintas sebelum mencapai server Anda
- Firewall perangkat keras — perangkat khusus untuk menyaring lalu lintas jaringan
- BGP blackholing — mengalihkan lalu lintas berbahaya ke "lubang hitam" di tingkat penyedia
Tingkat 2: CDN dan Penyimpanan Cache
- CDN (Content Delivery Network) — mendistribusikan konten statis di banyak server, mengurangi beban pada origin
- Penyimpanan cache di proksi — Varnish, Nginx menyimpan halaman populer dan menyajikannya tanpa mengakses backend
- Optimasi konten — minifikasi CSS/JS, kompresi gambar mengurangi volume lalu lintas
Tingkat 3: Proksi dan Penyeimbangan Beban (L7)
- Proksi terbalik — Nginx, HAProxy menyaring permintaan di tingkat aplikasi
- Penyeimbangan beban — mendistribusikan beban antara beberapa server backend
- Rate limiting — membatasi jumlah permintaan dari satu IP
- WAF (Web Application Firewall) — ModSecurity, AWS WAF memblokir serangan terhadap aplikasi web
Tingkat 4: Optimasi Backend
- Optimasi basis data — indeks, penyimpanan cache permintaan, replika baca
- Proses asinkron — tugas berat dilakukan di latar belakang melalui antrean (RabbitMQ, Redis)
- Skalabilitas horizontal — menambahkan server baru saat beban meningkat
Contoh Arsitektur
Klien
↓
Cloudflare (anti-DDoS L3/L4, CDN)
↓
Nginx proksi terbalik (rate limiting, penyaringan)
↓
HAProxy (penyeimbangan beban)
↓
Server backend (aplikasi web)
↓
Basis data (dengan replikasi)
Arsitektur ini memberikan perlindungan di semua tingkat: jaringan, transportasi, aplikasi. Bahkan jika serangan melewati satu tingkat, tingkat berikutnya akan menghentikannya.
Penggunaan Proksi Data Center untuk Lapisan Tambahan
Dalam beberapa kasus, masuk akal untuk menambahkan proksi data center sebagai lapisan perantara antara CDN dan server Anda. Mereka memberikan kecepatan pemrosesan tinggi dan dapat melakukan penyaringan lalu lintas tambahan. Proksi data center lebih murah dibandingkan proksi residensial dan seluler, menjadikannya solusi yang ekonomis untuk memproses volume lalu lintas yang besar.
Kesimpulan
Perlindungan dari serangan DDoS menggunakan server proksi adalah metode yang efektif, yang memungkinkan penyaringan lalu lintas berbahaya, menyembunyikan alamat IP nyata server, dan mendistribusikan beban. Proksi terbalik berbasis Nginx atau HAProxy memberikan pengaturan fleksibel untuk aturan penyaringan, rate limiting, dan pemblokiran permintaan yang mencurigakan.
Poin kunci yang telah kita bahas:
- Proksi terbalik (Nginx, HAProxy) — alat utama untuk perlindungan di tingkat aplikasi (L7)
- Rate limiting dan penyaringan berdasarkan User-Agent, reputasi IP membantu menyaring sebagian besar serangan
- Proksi residensial berguna untuk menyembunyikan infrastruktur pemantauan dan mengumpulkan informasi tentang ancaman
- Perlindungan berlapis (CDN + proksi + WAF + optimasi backend) memberikan ketahanan maksimum
- Pemantauan dan respons otomatis sangat penting untuk deteksi dan pemblokiran serangan yang cepat
Ingatlah bahwa serangan DDoS terus berevolusi, sehingga sistem perlindungan memerlukan pembaruan dan pengujian secara teratur. Lakukan pengujian beban, analisis log, perbarui aturan penyaringan, dan tetap waspada terhadap metode serangan baru.
Jika Anda berencana untuk membangun sistem perlindungan berlapis menggunakan proksi, kami merekomendasikan untuk mempertimbangkan proksi residensial untuk menyembunyikan infrastruktur kritis dan proksi data center untuk pemrosesan cepat volume lalu lintas yang besar. Kombinasi berbagai jenis proksi memberikan keseimbangan optimal antara keamanan, kinerja, dan biaya.