Kembali ke blog

Cara Melindungi Server dari Serangan DDoS Menggunakan Proxy: Pengaturan dalam 15 Menit

Panduan lengkap untuk melindungi layanan web dari serangan DDoS menggunakan proxy: pengaturan Nginx, HAProxy, distribusi beban, dan penyaringan lalu lintas berbahaya.

📅23 Februari 2026
```html

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.

```