Setup Apache Load Balancer Aman dengan HTTPS dan WAF.
Dalam dunia DevOps, menyederhanakan arsitektur tanpa mengorbankan performa dan keamanan adalah kunci. Salah satu pendekatan efisien adalah menggunakan Apache sebagai load balancer yang tidak hanya mendistribusikan beban, tetapi juga menjadi lapisan keamanan utama.
Kita akan membangun arsitektur load balancer menggunakan Apache yang aman dan modern, lengkap dengan dukungan HTTPS, HTTP/2, dan Web Application Firewall (WAF), meskipun backend server masih berjalan dengan HTTP tanpa perlindungan tambahan.
Arsitektur yang Akan Dibangun.
Dalam contoh kasus ini, kita akan membangun sebuah sistem load balancer berbasis Apache untuk lingkungan jaringan internal.
Misalnya, kita memiliki tiga buah web server backend dengan alamat IP:
- 192.168.66.1.
- 192.168.66.2.
- 192.168.66.3.
Ketiganya hanya menjalankan layanan HTTP standar di port 80, tanpa dukungan HTTPS atau fitur keamanan tambahan seperti security headers maupun Web Application Firewall (WAF). Artinya, server-server ini sangat minim perlindungan, dan tidak siap langsung diakses publik secara aman.
Sebagai solusinya, kita akan menempatkan sebuah Apache web server tambahan yang berperan sebagai load balancer, dengan IP: 192.168.66.168.
Server ini akan bertugas sebagai pintu gerbang utama yang menerima semua permintaan dari client. Tidak hanya membagi beban ke server backend, load balancer ini juga dilengkapi dengan:
- SSL/TLS (HTTPS) untuk mengamankan komunikasi dari client.
- HTTP/2 untuk performa akses yang lebih efisien.
- Security Headers untuk menambah proteksi dasar dari sisi response.
- ModSecurity (WAF) untuk menyaring request berbahaya sebelum masuk ke backend.
Dengan arsitektur seperti ini, backend tetap sederhana dan ringan, sementara semua kontrol keamanan dan optimasi performa ditangani sepenuhnya oleh load balancer. Ini adalah pendekatan yang ideal untuk tim DevOps yang ingin menjaga arsitektur tetap modular, scalable, dan aman, tanpa harus mengubah sistem lama.
1. Menyiapkan Apache Load Balancer.
Aktifkan Modul Apache.
Pastikan Apache terinstal di server 192.168.66.168 dan aktifkan modul-modul berikut:
a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests headers ssl http2
Restart Apache:
systemctl restart apache2
Konfigurasi Load Balancer.
Buat file konfigurasi virtual host di /etc/apache2/sites-available/loadbalancer.conf.
<VirtualHost *:443>
ServerName 192.168.66.168
SSLEngine on
SSLCertificateFile /etc/ssl/certs/loadbalancer.crt
SSLCertificateKeyFile /etc/ssl/private/loadbalancer.key
Protocols h2 http/1.1
<Proxy "balancer://mycluster">
BalancerMember http://192.168.66.1
BalancerMember http://192.168.66.2
BalancerMember http://192.168.66.3
ProxySet lbmethod=byrequests
</Proxy>
ProxyPreserveHost On
ProxyPass "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=()"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set Content-Security-Policy "default-src 'self';"
</VirtualHost>
ServerName 192.168.66.168
SSLEngine on
SSLCertificateFile /etc/ssl/certs/loadbalancer.crt
SSLCertificateKeyFile /etc/ssl/private/loadbalancer.key
Protocols h2 http/1.1
<Proxy "balancer://mycluster">
BalancerMember http://192.168.66.1
BalancerMember http://192.168.66.2
BalancerMember http://192.168.66.3
ProxySet lbmethod=byrequests
</Proxy>
ProxyPreserveHost On
ProxyPass "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=()"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set Content-Security-Policy "default-src 'self';"
</VirtualHost>
Aktifkan konfigurasi ini:
a2ensite loadbalancer.conf
Reload Apache:
systemctl reload apache2
Informasi lengkap mengenai instalasi Apache tersedia pada artikel Install PHP, MySQL, Apache, dan phpMyAdmin di Debian Linux, dan konfigurasi security headers bisa Anda pelajari pada artikel HTTP Security Headers.
2. Mengamankan Akses dengan ModSecurity.
Untuk informasi lebih lanjut mengenai instalasi dan konfigurasi ModSecurity, silakan lihat artikel ModSecurity and OWASP.
3. Optimasi DevOps Workflow.
Benefit untuk DevOps Team:
- Centralized Security: Hanya perlu konfigurasi security di satu titik.
- Easy Scaling: Tambahkan backend baru cukup dari file config load balancer.
- Minimal Intrusiveness: Tidak perlu ubah backend legacy.
- Future-Proof: Load balancer bisa terus ditingkatkan tanpa ganggu backend.
4. Validasi HTTP/2.
Pastikan load balancer sudah mendukung HTTP/2:
curl -I --http2 https://192.168.66.168
Atau cek lewat browser. DevTools > Network > Protocol.
Dengan menjadikan Apache sebagai load balancer sekaligus security gateway, anda bisa menjaga sistem tetap cepat, ringan, dan aman, tanpa harus menyentuh konfigurasi keamanan di setiap backend. Ini solusi elegan dan scalable untuk tim DevOps yang ingin menjaga arsitektur tetap sederhana namun tangguh.