Belajar HAProxy - Security Hardening
Episode 14 of 23

Belajar HAProxy - Security Hardening

Episode ini merangkum semua pelajaran keamanan menjadi satu paket: praktik terbaik untuk ACL, timeout, dan connection limit, pencegahan downgrade protokol dan injeksi header, serta konfigurasi default yang aman untuk operasional produksi.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Konfigurasi yang longgar adalah pintu masuk yang tidak disengaja. Hardening bukan soal menambahkan fitur eksotis, tapi membuat setiap keputusan default menjadi konservatif dan setiap permukaan yang tidak perlu ditutup.

Episode 14 menyatukan praktik keamanan dari seluruh series menjadi satu konfigurasi acuan: kebijakan ACL dan timeout yang wajar, pencegahan downgrade dan injeksi, serta struktur file yang aman untuk dioperasikan.

Praktik Terbaik ACL, Timeout, dan Connection Limits

Timeout yang Seimbang

Timeout yang terlalu panjang membiarkan koneksi kosong menghabiskan sumber daya; yang terlalu pendek memutus pengguna sah. Nilai yang umum dipakai:

Timeout yang masuk akal
defaults
    mode http
    timeout connect 5s
    timeout client 30s
    timeout server 30s
    timeout http-request 10s
    timeout queue 10s
    timeout tunnel 1h

Direktif timeout connect 5s menolak backend yang tidak merespons dalam 5 detik. timeout http-request 10s mencegah klien menahan request separuh, dan timeout tunnel 1h memberi ruang untuk koneksi panjang seperti WebSocket.

Membatasi Koneksi dan Mengelola Sumber Daya

Kebijakan koneksi yang ketat melindungi dari kehabisan sumber daya:

Limit koneksi di seluruh lapisan
global
    maxconn 20000
 
defaults
    maxconn 5000
    timeout queue 10s
 
backend api_back
    server api1 10.0.0.11:8080 maxconn 1500
    server api2 10.0.0.12:8080 maxconn 1500

Direktif maxconn 20000 di global adalah batas keras proses; batas per backend dan per server di bawahnya memberi pertahanan berlapis. timeout queue memastikan request menunggu antrean hanya sebentar.

ACL yang Paling Sering Dibutuhkan

Kumpulan ACL keamanan yang layak dimiliki hampir semua frontend:

ACL keamanan dasar
frontend web_front
    bind *:80
    mode http
 
    acl has_host hdr(host) -m found
    acl is_https ssl_fc
    acl bad_method method TRACE CONNECT
    acl suspicious_path path_reg -i /(\.env|\.git|\.bak)
 
    http-request deny deny_status 400 if !has_host
    http-request deny deny_status 403 if bad_method
    http-request deny deny_status 403 if suspicious_path
    default_backend web_back

acl has_host hdr(host) -m found menolak request tanpa header Host (ciri probe otomatis), dan suspicious_path memblokir akses ke file konfigurasi yang bocor.

Mencegah Protocol Downgrade dan Injeksi

Mengunci Versi TLS

Protocol downgrade terjadi saat klien dipaksa memakai versi TLS yang lemah. Kunci semuanya dari sisi server:

Kunci versi TLS dan cipher
global
    ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11
    ssl-default-bind-ciphersuites \
        TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384
    ssl-default-server-options no-sslv3

ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 mematikan protokol yang sudah tidak aman. Saat backend juga memakai TLS, ssl-default-server-options no-sslv3 mencegah HAProxy sebagai client menawar protokol lawas.

Mencegah Header Injection

Header yang tidak divalidasi bisa dipakai menyusupkan baris baru atau konten mencurigakan. Bersihkan header dari klien:

Sanitasi header masuk
frontend web_front
    bind *:80
    mode http
 
    http-request del-header Proxy-Connection
    http-request del-header X-Forwarded-For
    http-request set-header X-Forwarded-Proto http
 
    default_backend web_back

http-request del-header X-Forwarded-For menghapus header yang dipalsukan klien sebelum backend membaca nilai yang dibuat HAProxy sendiri. Prinsipnya: jangan pernah mempercayai header dari klien tanpa menimpa.

Melindungi Endpoint Sensitif

Beberapa path tidak boleh dijangkau dari luar:

Blokir endpoint administratif
frontend web_front
    bind *:80
    mode http
 
    acl is_local src 127.0.0.1 10.0.0.0/8
    acl is_admin_path path_beg /admin /api/v1/internal
 
    http-request deny deny_status 404 if is_admin_path !is_local
    default_backend web_back

acl is_local src 127.0.0.1 10.0.0.0/8 mendefinisikan jaringan internal, dan http-request deny deny_status 404 if is_admin_path !is_local membuat endpoint admin tidak terlihat dari luar (404, bukan 403, agar tidak menarik perhatian).

Konfigurasi Default yang Aman

Menyembunyikan Detail Server

Informasi versi membantu penyerang mencari celah. Sembunyikan tanda pengenal:

Sembunyikan tanda server
frontend web_front
    bind *:80
    mode http
 
    http-response set-header Server "haproxy"
    http-response set-header X-Content-Type-Options nosniff
    http-response set-header X-Frame-Options DENY
 
    default_backend web_back

http-response set-header X-Content-Type-Options nosniff mencegah browser menebak tipe konten, dan X-Frame-Options DENY menolak pemuatan halaman di iframe pihak lain — pertahanan dasar terhadap clickjacking.

Struktur File dan Akses yang Tepat

Keamanan juga soal hak akses file:

Amankan file konfigurasi
sudo chown root:root /etc/haproxy/haproxy.cfg
sudo chmod 600 /etc/haproxy/haproxy.cfg
sudo chmod 660 /run/haproxy.sock

sudo chmod 600 /etc/haproxy/haproxy.cfg memastikan hanya root yang bisa membaca konfigurasi yang mungkin berisi rahasia. Hak akses socket 660 membatasi siapa yang bisa memakai runtime API.

Selalu Validasi Sebelum Reload

Kesalahan konfigurasi di produksi sama bahayanya dengan serangan:

Validasi wajib sebelum reload
haproxy -c -f /etc/haproxy/haproxy.cfg && sudo systemctl reload haproxy

haproxy -c -f /etc/haproxy/haproxy.cfg && sudo systemctl reload haproxy hanya reload jika sintaks valid. Biasakan pola ini di semua lingkungan, termasuk CI/CD (episode 20).

Penutup

Episode 14 mengubah kebiasaan menjadi kebijakan: timeout yang wajar, limit yang ketat, protokol yang terkunci, header yang disterilkan, dan file yang dijaga hak aksesnya. Konfigurasi aman bukanlah fitur, melainkan default.

Inti yang harus dibawa pulang:

  • Timeout dan maxconn berlapis melindungi dari kehabisan sumber daya.
  • Kunci versi TLS lawas untuk mencegah downgrade attack.
  • Hapus dan timpa header dari klien sebelum diteruskan.
  • Blokir endpoint administratif dengan status 404 dari luar jaringan internal.
  • Sembunyikan tanda server dan pasang security headers dasar.
  • Validasi haproxy -c adalah gerbang sebelum setiap reload.

Di episode 15 selanjutnya kita akan membahas performance tuning & scalability — tuning maxconn, buffer, dan thread, mengurangi latensi lewat keepalive, compression, dan HTTP/2, serta benchmarking dengan wrk, hey, dan h2load.

Belajar HAProxy - Security Hardening | Belajar HAProxy