L
Cybersecurity & Hardening β€’ Literally Web ID

Hardening Infrastruktur Web Server Linux: Mencegah Serangan DDoS dan SQL Injection

⏱️ 15 menit baca β€’ πŸ“… 15 Oct 2026 β€’ πŸ‘οΈ 1 views
Hardening Infrastruktur Web Server Linux: Mencegah Serangan DDoS dan SQL Injection

1. Konteks Industri & Analisis Akar Masalah

Dalam lanskap infrastruktur web modern, ancaman terhadap ketersediaan layanan (availability) dan integritas data (integrity) berada pada titik tertinggi sepanjang sejarah. Serangan Distributed Denial of Service (DDoS) kini tidak lagi sekadar mengirimkan banjir paket ICMP atau SYN mentah yang mudah ditapis oleh perangkat keras edge konvensional. Penyerang modern memanfaatkan Layer 7 application-layer floodsβ€”seperti serangan HTTP GET/POST berkecepatan tinggi yang mensimulasikan perilaku pengguna asli secara presisi, menghabiskan alokasi worker PHP-FPM, dan melumpuhkan koneksi basis data MySQL/MariaDB.

Secara paralel, injeksi SQL (SQL Injection atau SQLi) tetap menjadi momok yang menduduki peringkat atas dalam OWASP Top 10. Kerentanan ini memungkinkan pelaku jahat memanipulasi argumen query basis data secara langsung dari input HTTP yang tidak divalidasi, mengekstrak data sensitif, melakukan eskalasi hak akses, hingga mengeksekusi perintah sistem operasi tingkat lanjut jika konfigurasi akun pengguna basis data diabaikan.

Kondisi Sebelum vs Sesudah Hardening Infrastruktur

Parameter Sistem Sebelum Hardening (Rentan) Sesudah Hardening Enterprise Dampak Operasional
Rate Limiting Tanpa batas (Unlimited) per IP Algoritma Leaky Bucket berbasis Nginx zones Mencegah brute-force dan HTTP flood otomatis
WAF / Sanitasi Mengandalkan validasi di sisi aplikasi saja ModSecurity/Nginx Lua WAF + Filter RegEx ketat Blokir otomatis payload SQLi di gerbang terluar
Fail2ban Log dibiarkan menumpuk, SSH/Nginx terbuka Pemblokiran otomatis IP via iptables/nftables Menghilangkan serangan credential stuffing
SSL/TLS & Headers TLS 1.0/1.1 aktif, Header keamanan kosong TLS 1.3 only, HSTS, CSP, X-Frame-Options ketat Skor A+ Qualys SSL Labs, cegah MITM & Clickjacking
Penggunaan Sumber Daya Rentan exhaustion CPU & RAM saat lonjakan Efisiensi tinggi, caching agresif di Edge & Redis Menjaga SLA uptime 99.99% di bawah beban berat

[!WARNING] Mengabaikan pengerasan lapis demi lapis (defense-in-depth) pada infrastruktur web server Linux sama saja dengan menyerahkan kunci server kepada pihak eksternal. Keamanan bukan produk instan, melainkan siklus arsitektural yang berkelanjutan.


2. Konsep Inti & Deep Dive Arsitektur

Untuk membangun benteng pertahanan yang tangguh, kita harus memahami bagaimana lalu lintas data mengalir dari pengguna akhir melalui berbagai lapisan infrastruktur web modern.

[ Client / Botnet ]
       β”‚
       β–Ό
[ Cloudflare CDN / Edge WAF ] ──(DDoS & Bot Mitigation)
       β”‚
       β–Ό
[ Nginx Reverse Proxy ] ──────(Rate Limiting, SSL Termination)
       β”‚
       β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β–Ό              β–Ό              β–Ό
[ PHP-FPM ]      [ Node.js ]    [ Go Backend ]
       β”‚              β”‚              β”‚
       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β–Ό
            [ MySQL / MariaDB ]

Alur Pemrosesan Request & Titik Intersepsi Keamanan

  1. Edge Layer (CDN & Cloud WAF): Titik kontak pertama. Menganalisis reputasi IP, tantangan JavaScript/Captcha untuk mendeteksi bot, serta melakukan mitigasi volumetric DDoS.
  2. Reverse Proxy & Web Server (Nginx): Berada di server VPS/Dedicated Linux. Melakukan SSL/TLS Termination, menerapkan Rate Limiting zone, inspeksi header HTTP, dan meneruskan request bersih ke backend.
  3. Application Backend (PHP-FPM / Node.js / Go): Mengeksekusi logika bisnis. Di sinilah parameter prepared statements wajib diterapkan untuk mematikan potensi SQL Injection secara mutlak.
  4. Database & Storage Layer: Menyimpan data persisten. Akses dibatasi hanya dari localhost atau jaringan privat internal yang diisolasi melalui firewall (UFW / nftables).

3. Perbandingan Komparatif / Analisis Pendekatan

Dalam mengamankan server web berbasis Linux, terdapat beberapa pendekatan arsitektural dan perangkat lunak yang sering menjadi perdebatan di kalangan Principal Engineer:

Pendekatan Pengamanan Web Server: Nginx vs Apache HTTP Server

Fitur / Parameter Nginx + PHP-FPM Apache HTTP Server (mpm_prefork)
Arsitektur Konkurensi Berbasis Event-driven, asynchronous Berbasis Process/Thread-per-connection
Konsumsi Memori (RAM) Sangat rendah dan stabil di bawah beban tinggi Cenderung melonjak tinggi saat menghadapi Slowloris
Native Rate Limiting Sangat powerful, terintegrasi di ngx_http_limit_req_module Membutuhkan modul tambahan (mod_evasive / mod_qos)
Performa SSL/TLS Sangat optimal dengan integrasi OpenSSL/BoringSSL Membutuhkan tuning cermat pada direktif MPM
Rekomendasi Penggunaan Standar industri untuk performa tinggi & anti-DDoS Kompatibilitas legacy dengan file .htaccess

[!TIP] Untuk kebutuhan hardening modern, Nginx dipilih sebagai standar industri karena kemampuan manajemen memori event-driven yang kebal terhadap serangan lambat (Slowloris / Slow POST) serta fleksibilitas konfigurasi Rate Limiting berbasis zona memori bersama (shared memory zones).


4. Prasyarat Sistem & Persiapan Lingkungan

Sebelum menyelam ke konfigurasi teknis, pastikan spesifikasi environment Anda memenuhi standar produksi enterprise:

  • OS: Ubuntu 22.04 LTS / Debian 12 Bookworm / AlmaLinux 9 (Fresh Installation).
  • Hak Akses: Akses root atau pengguna dengan hak akses sudo penuh.
  • Software Stack: Nginx (versi terbaru mainline/stable), PHP-FPM 8.2+, MySQL 8.0 / MariaDB 10.11+, Fail2ban, UFW / nftables.

Verifikasi versi sistem operasi dan kernel Linux Anda:

cat /etc/os-release
uname -r

Pastikan port dasar yang diizinkan pada firewall hanya port standar (80, 443, dan SSH dengan port kustom jika diperlukan):

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

5. Panduan Implementasi Langkah demi Langkah

Langkah 1: Konfigurasi WAF dan Rate Limiting di Nginx

Kita akan membuat zona memori bersama untuk melacak request berdasarkan alamat IP, membatasi request per detik, serta memblokir pola URL yang mencurigakan (upaya SQL Injection sederhana).

Buka file konfigurasi global Nginx (/etc/nginx/nginx.conf) dan tambahkan direktif berikut di dalam blok http { ... }:

http {
    # Definisi shared memory zone seluas 10MB untuk menyimpan status IP.
    # rate=10r/s berarti setiap IP dibatasi maksimal 10 request per detik.
    limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;

    # Zona terpisah untuk halaman login atau API sensitif (misal: 2 request per detik)
    limit_req_zone $binary_remote_addr zone=loginzone:10m rate=2r/s;

    # Sembunyikan versi Nginx untuk keamanan melalui obscurity
    server_tokens off;

    # Konfigurasi Buffer untuk mencegah serangan buffer overflow
    client_body_buffer_size 1k;
    client_header_buffer_size 1k;
    client_max_body_size 10M;
    large_client_header_buffers 2 1k;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Sekarang, terapkan zona rate limiting dan aturan proteksi SQL Injection pada blok server virtual host Anda (/etc/nginx/sites-available/default):

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    root /var/www/html/public;
    index index.php index.html;

    # SSL Configuration (Akan dibahas detail di bagian 3)
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # Deteksi dan Blokir Payload SQL Injection di URI atau Query String
    # Contoh pola umum: UNION SELECT, OR 1=1, drop table, dll.
    set $block_sql_injections 0;
    if ($query_string ~* "union.*select" ) { set $block_sql_injections 1; }
    if ($query_string ~* "or.*1=1" ) { set $block_sql_injections 1; }
    if ($query_string ~* "information_schema" ) { set $block_sql_injections 1; }
    if ($query_string ~* "exec(.*)" ) { set $block_sql_injections 1; }
    if ($block_sql_injections = 1) {
        return 403;
    }

    # Blokir request ke file sensitif (.git, .env, composer.json)
    location ~ /.(env|git|htaccess|htpasswd) {
        deny all;
        return 404;
    }

    location / {
        # Terapkan rate limiting dengan burst=20 dan nodelay
        limit_req zone=perip burst=20 nodelay;
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /api/v1/auth/login {
        # Batasan lebih ketat untuk endpoint login
        limit_req zone=loginzone burst=5 nodelay;
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ .php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        # Mencegah eksekusi script tidak sah
        fastcgi_intercept_errors on;
    }
}

Langkah 2: Automasi Intrusion Prevention dengan Fail2ban

Fail2ban memantau file log sistem dan web server secara real-time. Jika mendeteksi pola percobaan login gagal berulang atau pelanggaran WAF/Rate limit, ia otomatis mencekal IP penyerang menggunakan iptables atau nftables.

Instal Fail2ban:

sudo apt update && sudo apt install fail2ban -y

Buat file konfigurasi lokal kustom /etc/fail2ban/jail.local:

[DEFAULT]
# Abaikan IP lokal
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

# Waktu cekal dalam detik (1 jam)
bantime = 3600

# Waktu jendela pemantauan (10 menit)
findtime = 600

# Jumlah percobaan sebelum dicekal
maxretry = 5

# Backend pemantauan log
backend = auto

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 3

[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5

[nginx-limit-req]
enabled = true
port = http,https
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 3

Restart layanan Fail2ban:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Langkah 3: Audit Keamanan SSL/TLS dan Header HTTP

Pastikan enkripsi transit menggunakan standar tertinggi (TLS 1.3) dan header keamanan web terpasang sempurna untuk mencegah serangan Clickjacking, XSS, dan MIME-sniffing.

Buat file snippet konfigurasi SSL terpusat /etc/nginx/conf.d/ssl-params.conf:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

# Security Headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

6. Bedah Kode & Penjelasan Detail Baris Kunci

  • limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;: Baris ini mengalokasikan ruang memori sebesar 10 Megabita di RAM (zone=perip:10m) untuk melacak alamat IP unik ($binary_remote_addr). Setiap IP dibatasi maksimum 10 request per detik (rate=10r/s). Jika terlampaui, Nginx akan menahan atau menolak request tersebut.
  • burst=20 nodelay: Parameter burst mengizinkan klien melakukan lonjakan request sesaat hingga 20 request di atas batas normal. nodelay memastikan bahwa request yang berada dalam batas burst diproses seketika tanpa penundaan waktu (latency penalty), menjaga UX tetap responsif.
  • add_header Strict-Transport-Security ...: Header HSTS menginstruksikan browser untuk hanya berkomunikasi dengan domain Anda melalui HTTPS selama 1 tahun (max_age=31536000), menutup celah serangan SSL Stripping.

7. Skenario Produksi & Studi Kasus Dunia Nyata

Studi Kasus: Menghadapi Kampanye Serangan HTTP Flood & SQL Injection pada E-Commerce Peak Season

Sebuah platform e-commerce mengalami lonjakan traffic mendadak sebanyak 50.000 request per detik saat Flash Sale, disertai ribuan percobaan serangan SQL Injection pada parameter pencarian produk.

Strategi Mitigasi Berkelanjutan:

  1. Edge Offloading: Mengaktifkan aturan WAF di Cloudflare untuk memfilter IP berisiko tinggi dan memblokir otomatis bot pencari otomatis menggunakan Managed Ruleset. Request yang lolos diteruskan ke VPS Nginx.
  2. Rate Limiting Agresif: Pada Nginx, direktif limit_req dengan zona khusus diterapkan pada endpoint /search?q=... untuk mencegah skrip penyerang melakukan brute force query basis data secara masif.
  3. Prepared Statements di Backend: Memastikan seluruh query PHP menggunakan PDO dengan prepared statements murni:
    $stmt = $pdo->prepare('SELECT * FROM products WHERE name LIKE :query');
    $stmt->execute(['query' => '%' . $_GET['q'] . '%']);
    $products = $stmt->fetchAll();
    
    Pendekatan ini membuat payload SQL Injection (seperti ' OR 1=1 --) diperlakukan murni sebagai string literal pencarian, bukan sebagai perintah SQL.

8. Common Pitfalls, Anti-Patterns & Solusi

  • Anti-Pattern 1: Mengandalkan Sanitasi Input Saja untuk Mencegah SQL Injection.
    • Solusi: Sanitasi input (escaping) saja tidak cukup. Selalu gunakan Parameterized Queries / Prepared Statements di level ORM atau driver database (PDO/MySQLi).
  • Anti-Pattern 2: Mengatur Rate Limiting Terlalu Ketat Tanpa Burst.
    • Solusi: Mengatur rate=1r/s tanpa parameter burst akan menyebabkan pengguna sah yang membuka halaman web dengan banyak aset (gambar, CSS, JS) mendadak mendapatkan error 503 Service Temporarily Unavailable. Selalu gunakan burst=... nodelay.
  • Anti-Pattern 3: Mengabaikan Log Rotasi dan Ruang Disk.
    • Solusi: Serangan DDoS jenis Request Flood dapat menghasilkan file access.log berukuran puluhan gigabita dalam hitungan jam, memicu Disk Full Error yang melumpuhkan server. Pastikan logrotate dikonfigurasi dengan baik.

9. Benchmark, Metrik Kinerja & Tuning Performa

Setelah menerapkan konfigurasi hardening, lakukan pengujian beban (load testing) untuk memastikan server tetap responsif dan tidak mengalami bottleneck performa.

Gunakan tool wrk untuk menguji ketahanan Nginx terhadap HTTP flood simulation:

# Menguji dengan 100 koneksi simultan selama 30 detik menggunakan 4 thread
wrk -t4 -c100 -d30s https://example.com/

Evaluasi metrik utama:

  • Requests/sec (Throughput): Harus tetap stabil dan tinggi.
  • Latency (Avg / Max): Latency rata-rata tidak boleh melonjak drastis akibat pemrosesan WAF yang berlebihan.
  • Transfer/sec: Konsistensi pengiriman data.

Tuning parameter Kernel Linux (/etc/sysctl.conf) untuk menangani konkurensi tinggi:

# Meningkatkan jumlah maksimum koneksi dalam antrean TCP
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192

# Melindungi dari serangan SYN Flood
net.ipv4.tcp_syncookies = 1

# Mengoptimalkan port ephemeral
net.ipv4.ip_local_port_range = 1024 65535

Terapkan perubahan dengan perintah:

sudo sysctl -p

10. Checklist Penerapan Produksi & Kesimpulan

Sebelum merilis infrastruktur web server Linux ke lingkungan produksi penuh, pastikan checklist berikut telah terpenuhi 100%:

  • Versi Nginx dan PHP disembunyikan / diperbarui ke patch keamanan terbaru.
  • Zona Rate Limiting aktif di Nginx untuk seluruh endpoint sensitif.
  • Filter RegEx dasar SQL Injection terpasang di level Nginx WAF.
  • Fail2ban dikonfigurasi dan aktif memantau SSH, Nginx Auth, dan Limit Req.
  • Sertifikat SSL/TLS menggunakan TLS 1.2 dan TLS 1.3 dengan skor SSL Labs minimal A+.
  • Seluruh header keamanan HTTP (HSTS, CSP, X-Frame-Options) terpasang sempurna.
  • Aplikasi backend menggunakan Prepared Statements secara konsisten.
  • Firewall (UFW/nftables) memblokir seluruh port yang tidak digunakan.

Dengan menerapkan arsitektur defense-in-depth yang komprehensif ini, server web Linux Anda kini memiliki ketahanan optimal terhadap serangan DDoS tingkat lanjut dan eksploitasi SQL Injection, menjamin ketersediaan layanan dan keamanan data tingkat enterprise.

🏷️ Tags: #Nginx #High Concurrency #Performance #Sysadmin #Web Server