Access Control List Pada HAProxy
Pengertian
Di dunia sysadmin dan DevOps, lu pasti udah sering dengar istilah
Singkatnya, ACL di HAProxy adalah sebuah fitur yang digunakan untuk mendefinisikan kondisi atau aturan tertentu berdasarkan data yang melintas di traffic HTTP atau TCP. Data ini bisa berupa alamat IP, domain name, struktur URL, header HTTP, hingga cookies. Hasil dari evaluasi ACL ini nantinya dipakai untuk mengambil keputusan, misalnya meneruskan request ke backend server tertentu, memblokir traffic jahat, atau melakukan redirect.
Konsep
Konsep dasar ACL di HAProxy sebenarnya mirip dengan logika if-then di bahasa pemrograman. HAProxy akan memeriksa setiap request yang masuk dan mencocokkannya dengan kriteria yang udah lu tentukan.
Secara arsitektur, ACL bekerja di bagian
Name: Nama unik sebagai pengenal ACL yang bakal lu panggil di instruksi selanjutnya.
Criterion (Fetch Method): Bagian dari request yang mau lu periksa (misalnya:
srcuntuk IP asal,pathuntuk jalur URL, atauhdruntuk header).Flags/Operators & Values: Kondisi spesifik atau nilai yang dicari (misalnya mencocokkan string, menggunakan regex, atau memeriksa subnet IP).
Cara Kerja
Alur kerja ACL di HAProxy berjalan secara sekuensial dan real-time untuk setiap paket data yang masuk. Gua breakdown prosesnya dari A sampai Z seperti ini:
Request Diterima: Klien mengirimkan request (misal: mengakses
[https://GuaGanteng.com/api/v1/users](https://GuaGanteng.com/api/v1/users)).Pencocokan Kriteria (Parsing): HAProxy membaca konfigurasi frontend dan menemukan definisi ACL. HAProxy mulai membedah request tersebut berdasarkan criterion yang lu pasang. Dalam contoh ini, HAProxy membaca komponen
path.Evaluasi Logika: HAProxy mencocokkan apakah nilai
pathmengandung string/api/v1/users.Jika Cocok (True): ACL akan mengembalikan nilai positif.
Jika Tidak Cocok (False): ACL mengembalikan nilai negatif.
Eksekusi Aksi: HAProxy melihat instruksi bersyarat (seperti
use_backendatauhttp-request deny). Kalau ACL bernilai True, aksinya dieksekusi (misal: dilempar kebackend_api). Kalau False, HAProxy lanjut memeriksa aturan berikutnya atau menggunakan backend standar (default).
Tujuan
Kenapa barang ini ada? Apa pain point di lapangan yang coba diselesaikan?
Sebagai Senior Engineer, gua sering nemu kasus di mana satu IP publik harus melayani puluhan microservices di belakangnya. Tanpa ACL, lu bakal pusing ngatur routing traffic-nya. ACL diciptakan untuk menyelesaikan masalah-masalah kritis berikut:
Content Switching: Memisahkan traffic berdasarkan konten. Traffic ke
/apidiarahkan ke server node.js, sedangkan traffic gambar static/imagesdiarahkan ke .Nginx Security & Access Control: Memblokir IP attacker (
) atau membatasi akses ke halaman admin (DDoS /admin) hanya untuk IP kantor.Maintenance & Redirection: Mengarahkan pengguna ke halaman maintenance tertentu secara otomatis jika server utama down.
Analogi
Biar lu ga pusing bayangin teorinya, mari kita pakai analogi dunia nyata.
Bayangkan HAProxy itu adalah seorang Satpam / Resepsionis di lobi gedung kantor pencakar langit yang mewah. Gedung ini punya banyak ruangan di dalamnya (ada ruang Direksi, ruang IT, dan ruang Server).
ACL itu adalah buku panduan SOP yang dipegang si Satpam. Di buku itu tertulis aturan:
Aturan A: "Jika tamu memakai baju kaos dan celana pendek, arahkan ke kantin belakang."
Aturan B: "Jika tamu membawa ID Card bertanda 'ADMIN', izinkan masuk ke Ruang Server."
Ketika ada orang (request) datang, si Satpam bakal ngeliat penampakan orang itu (fetch criterion). Begitu orang itu nunjukkin ID Card Admin, Satpam ngecek ke buku SOP (ACL bernilai True), lalu mengizinkan dia masuk ke Ruang Server (backend server).
Kelebihan dan Kekurangan
| Kelebihan | Kekurangan |
| Sangat Cepat & Efisien: Evaluasi ACL berjalan di tingkat memori dengan performa tinggi tanpa membebani CPU secara signifikan. | Syntax Sensitif: Salah ketik satu huruf atau salah urutan logika bisa bikin routing kacau atau bahkan service HAProxy gagal restart. |
| Fleksibilitas Tinggi: Bisa memeriksa hampir semua bagian dari paket HTTP/TCP, mulai dari | Debugging Menantang: Kalau konfigurasi lu udah ribet, troubleshooting ACL yang error butuh analisa log yang jeli karena ga ada GUI-nya. |
Mendukung Operasi Logika: Lu bisa gabungkan beberapa ACL pakai logika AND, OR, atau NOT (!). | Tanpa State Persistence Alami: ACL murni memeriksa data per request, untuk kondisi yang butuh memori antar-request harus dikombinasikan dengan stick-tables. |
Tutorial & Problem Solving Lengkap
Sekarang kita masuk ke bagian menu utama: praktik lapangan. Gua bakal kasih skenario nyata yang sering gua temuin.
Skenario: Kita punya satu frontend HAProxy. Kita pengen:
Memblokir IP attacker (
192.168.100.50).Mengarahkan semua request URL yang diawali
/apikebackend_api.Mengarahkan sisa traffic lainnya ke
backend_web_utama.
Buka file konfigurasi HAProxy lu (biasanya di /etc/haproxy/haproxy.cfg) dan sesuaikan strukturnya seperti di bawah ini.
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
defaults
log global
mode http # Kita pakai mode HTTP (Layer 7) agar bisa baca path URL
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http_in
bind *:80 # HAProxy dengerin di port 80
# -----------------------------------------------------------------
# DEKLARASI ACL
# -----------------------------------------------------------------
# 1. ACL untuk blokir IP. src = source IP.
acl ip_penyusup src 192.168.100.50
# 2. ACL untuk deteksi path URL yang dimulai dengan /api
# -i artinya case-insensitive (ga peduli huruf besar/kecil)
acl url_api path_beg -i /api
# -----------------------------------------------------------------
# EKSEKUSI AKSI BERDASARKAN ACL
# -----------------------------------------------------------------
# Jika ACL ip_penyusup bernilai TRUE, langsung REJECT/DENY request-nya
http-request deny if ip_penyusup
# Jika ACL url_api bernilai TRUE, arahkan ke backend_api
use_backend backend_api if url_api
# Jika tidak memenuhi ACL di atas, lempar ke backend default
default_backend backend_web_utama
# -----------------------------------------------------------------
# DEFINISI BACKEND
# -----------------------------------------------------------------
backend backend_api
balance roundrobin
server api_srv1 10.0.0.10:8080 check
server api_srv2 10.0.0.11:8080 check
backend backend_web_utama
balance roundrobin
server web_srv1 10.0.0.20:80 check
server web_srv2 10.0.0.21:80 check
Cara Validasi & Problem Solving
Setelah lu edit konfigurasinya, JANGAN langsung di-restart dulu service-nya. Ini kebiasaan buruk junior yang sering bikin downtime. Lakukan validasi sintaksis terlebih dahulu dengan perintah ini di terminal:
# Perintah untuk mengecek apakah konfigurasi HAProxy sudah benar atau ada typo
haproxy -c -f /etc/haproxy/haproxy.cfg
Jika muncul pesan
Configuration file is valid, artinya aman. Lu bisa reload dengan aman:systemctl reload haproxy.Jika muncul error, baca baris berapa yang bermasalah, biasanya karena salah ketik nama ACL atau salah penempatan posisi aksi.
Kesimpulan
ACL di HAProxy itu ibarat pisau Swiss Army buat para Network & System Engineer. Dengan memahami ACL, lu bisa punya kendali penuh terhadap distribusi traffic di infrastruktur server lu, mulai dari urusan performa hingga keamanan dasar.
Best practice dari gua sebagai praktisi: Selalu gunakan penamaan ACL yang deskriptif (misal: is_maintenance, is_api_traffic), susun aturan pemblokiran keamanan di baris paling atas frontend, dan selalu lakukan syntax check sebelum menerapkan perubahan di server produksi.
Glosarium Engineer
HAProxy: Perangkat lunak open-source yang berfungsi sebagai load balancer dan reverse proxy berkinerja sangat tinggi untuk aplikasi berbasis TCP dan HTTP.
ACL (Access Control List): Sistem pengondisian di HAProxy yang digunakan untuk memeriksa informasi pada request dan menentukan aksi berdasarkan hasil kecocokan tersebut.
Frontend: Bagian dalam konfigurasi HAProxy yang mendefinisikan bagaimana traffic eksternal diterima (seperti IP address dan port) sebelum diproses lebih lanjut.
Backend: Kelompok server riil di belakang HAProxy yang menerima traffic hasil forward dari frontend untuk memproses request pengguna.
Load Balancer: Perangkat atau software yang mendistribusikan traffic jaringan atau aplikasi ke beberapa server di belakangnya agar beban kerja merata.
Reverse Proxy: Server yang berada di depan server web dan meneruskan request dari klien ke server web tersebut demi keamanan, performa, dan keandalan.
DDoS (Distributed Denial of Service): Serangan siber yang membanjiri server dengan traffic palsu dari berbagai sumber sekaligus agar server tumbang.
Nginx: Software server web populer yang juga sering digunakan sebagai reverse proxy, HTTP cache, dan load balancer.
Layer 4 (Transport Layer): Lapisan dalam model OSI yang menangani koneksi end-to-end dan transfer data menggunakan protokol seperti TCP dan UDP tanpa membaca isi data aplikasi.

Comments
Post a Comment