Konfigurasikan HAProxy Load Balancer dengan SSL di Ubuntu 18.04/Debian 10/9

Dalam panduan ini, kita akan mempelajari cara mengkonfigurasi HAProxy load balancer dengan SSL di Ubuntu 18.04/Debian 10/9. HAProxy adalah solusi opensource de-faktor yang menyediakan ketersediaan tinggi yang sangat cepat dan andal, penyeimbangan beban, dan proxy untuk aplikasi berbasis TCP dan HTTP. Dengan demikian, HAProxy cocok untuk situs web dengan lalu lintas sangat tinggi.

Konfigurasikan HAProxy Load Balancer dengan SSL di Ubuntu 18.04/Debian 10/9

Dalam panduan ini, kita akan mendemonstrasikan bagaimana HAProxy melakukan load balancing menggunakan tiga server web yang melayani halaman html sederhana. Arsitektur kami terlihat seperti pada diagram di bawah ini;

Konfigurasikan HAProxy Load Balancer dengan SSL di Ubuntu 18.04/Debian 10/9

Instal HAProxy di Ubuntu 18.04/Debian 10/Debian 9

Jalankan pembaruan sistem.

apt update apt upgrade

Setelah pembaruan selesai, lanjutkan untuk menginstal HAProxy di sistem Ubuntu/Debian Anda.

Buat Repositori HAProxy

Ada paket HAProxy yang berbeda untuk setiap sistem. Oleh karena itu, Anda perlu membuat repositori khusus untuk setiap sistem.

Sebelum Anda dapat membuat repo, instal Kunci penandatanganan APT.

apt install curl -y curl https://haproxy.debian.net/bernat.debian.org.gpg | apt-key add -

Selanjutnya, buat repositori HAProxy. Pada Debian 10 Buster/Debian 9 Stretch, jalankan perintah di bawah ini untuk membuat repo.

echo "deb http://haproxy.debian.net $(lsb_release -cs)-backports-2.0 main" | tee /etc/apt/sources.list.d/haproxy.list

Di Ubuntu 18.04, Anda perlu menambahkan repo vbernat haproxy PPA seperti yang ditunjukkan di bawah ini;

apt install software-properties-common add-apt-repository ppa:vbernat/haproxy-2.0

Setelah repo dibuat di setiap sistem, lakukan pembaruan sistem dan instal HAProxy.

apt update apt install haproxy=2.0.*

Untuk memeriksa versi HAProxy yang diinstal, jalankan perintah di bawah ini;

haproxy -v
HA-Proxy version 2.0.1-1~bpo9+1 2019/06/27 - https://haproxy.org/

Konfigurasikan HAProxy Load Balancer di Ubuntu 18.04/Debian 10/9

Konfigurasi HAProxy adalah tentang di mana ia mendengarkan permintaan koneksi dan ke mana meneruskan permintaan tersebut. Oleh karena itu terdiri dari sistem frontend dan satu atau lebih sistem back-end. Sistem front-end menentukan alamat IP dan port tempat proxy mendengarkan serta sistem back-end yang digunakan untuk proxy tertentu.

File konfigurasi utama untuk HAProxy adalah /etc/haproxy/haproxy.cfg.

File konfigurasi HAProxy terdiri dari empat bagian;

  • globalBagian global mendefinisikan keamanan seluruh proses dan penyetelan kinerja yang memengaruhi HAProxy pada tingkat rendah.
  • defaultsBagian global menentukan pengaturan konfigurasi yang diterapkan ke semua bagian  frontend dan  backend . Anda dapat menentukan beberapa bagian default tetapi sub-sekuen default bagian menimpa yang datang sebelumnya.
  • frontendKetika HAProxy ditempatkan sebagai proxy terbalik, frontendbagian tersebut mendefinisikan alamat IP dan port yang dapat disambungkan oleh client.
  • backendBagian backend mendefinisikan grup server yang akan diseimbangkan beban dan ditugaskan untuk menangani permintaan.

Bagian frontend dan  backend dapat digabungkan menggunakan listenbagian. Hal ini juga dapat digunakan untuk halaman statistik server HAProxy.

Untuk membaca lebih lanjut tentang penjelasan bagian konfigurasi HAProxy, periksa di sini.

Sebelum kita dapat memulai konfigurasi apa pun, mari kita buat cadangan file konfigurasi.

cp /etc/haproxy/haproxy.cfg{,.bak}

Konfigurasi HAProxy default berisi pengaturan konfigurasi default untuk bagian global dan  default.

global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ # An alternative list with additional directives can be obtained from # https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS ssl-default-bind-options no-sslv3 ## Add the line below tune.ssl.default-dh-param 2048 defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http

Kami akan membiarkan pengaturan ini sebagaimana adanya dan menambahkan konfigurasi kami untuk bagian  frontend dan  backend . Namun, Anda dapat menambahkan baris tune.ssl.default-dh-param 2048keglobal bagian yang menetapkan ukuran maksimum parameter Diffie-Hellman yang digunakan untuk menghasilkan kunci Diffie-Hellman sementara/sementara jika terjadi pertukaran kunci DHE.

Konfigurasi HAProxy dengan SSL di Ubuntu 18.04/Debian 10/9

Seperti yang dinyatakan di atas,  frontend bagian mendefinisikan alamat IP untuk mendengarkan permintaan koneksi.

Karena kami mengonfigurasi HAProxy dengan SSL, Anda perlu membuat sertifikat SSL/TLS. Panduan ini menggunakan sertifikat yang ditandatangani sendiri. Anda bisa mendapatkannya sendiri dari CA tepercaya.

Membuat Sertifikat SSL yang Ditandatangani Sendiri untuk HAProxy

Mulailah dengan menghasilkan kunci pribadi.

openssl genrsa -out /etc/ssl/private/haproxy.key 2048

Selanjutnya, buat permintaan penandatanganan Sertifikat (CSR).

openssl req -new -key /etc/ssl/private/haproxy.key -out /etc/ssl/certs/haproxy.csr

Buat Sertifikat yang Ditandatangani Sendiri (CRT)

openssl x509 -req -days 365 -in /etc/ssl/certs/haproxy.csr -signkey /etc/ssl/private/haproxy.key -out /etc/ssl/certs/haproxy.crt

Buat file pem SSL dengan memuat kunci dan sertifikat.

cat /etc/ssl/private/haproxy.key /etc/ssl/certs/haproxy.crt >> /etc/ssl/certs/haproxy.pem

Tentukan Pengaturan Konfigurasi Frontend HAProxy

Buka file konfigurasi HAProxy dan konfigurasikan pengaturan frontend seperti yang ditunjukkan di bawah ini;

vim /etc/haproxy/haproxy.cfg

Ini adalah pengaturan dasar konfigurasi frontend kami.

frontend lb_01 bind 192.168.43.62:443 ssl crt /etc/ssl/certs/haproxy.pem default_backend webapp_backends
  • bind pengaturan menetapkan pendengar ke alamat IP dan port tertentu. ssl crt menginstruksikan HAProxy untuk menggunakan SSL.
  • default_backend memberikan nama  backend untuk mengirim lalu lintas ke.

Tentukan Pengaturan Konfigurasi Backend HAProxy

Dalam konfigurasi dasarnya, out backend pengaturan didefinisikan di bawah ini;

backend webapp_backends balance roundrobin server webapp_01.example.com 192.168.43.252:80 check server webapp_02.example.com 192.168.43.174:8
0 check server webapp_03.example.com 192.168.43.21:80 check
  • balance pengaturan mendefinisikan algoritma penjadwalan load balancer.
    • roundrobin memilih server secara bergiliran.
    • Algoritma umum lainnya adalah leastconn yang memungkinkan penyeimbang beban untuk meneruskan permintaan ke server dengan koneksi paling sedikit.
  • server pengaturan menentukan server yang tersedia di back end.
    • check opsi mengaktifkan pemeriksaan kesehatan di server sehingga jika salah satunya tidak aktif, permintaan diarahkan ke server backend yang tersedia.

Aktifkan Statistik HAProxy melalui Web

listen stats bind 192.168.43.62:443 ssl crt /etc/ssl/certs/haproxy.pem stats enable # enable statistics reports stats hide-version # Hide the version of HAProxy stats refresh 30s # HAProxy refresh time stats show-node # Shows the hostname of the node stats auth admin:[email protected] # Authentication for Stats page stats uri /lb_stats # Statistics URL

Verifikasi Konfigurasi HAProxy

Setelah konfigurasi selesai, Anda dapat menjalankan perintah di bawah ini untuk memeriksa konfigurasi HAProxy untuk error apa pun.

haproxy -c -f /etc/haproxy/haproxy.cfg
Configuration file is valid

Menjalankan HAProxy

Saat diinstal, HAProxy diatur untuk dijalankan secara default. Untuk restart dan mengaktifkan HAProxy untuk berjalan pada boot sistem;

systemctl restart haproxy systemctl enable haproxy

Untuk memeriksa statusnya;

systemctl status haproxy ● haproxy.service - HAProxy Load Balancer Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2019-07-12 23:22:58 EAT; 5s ago Docs: man:haproxy(1) file:/usr/share/doc/haproxy/configuration.txt.gz Process: 10686 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS) Main PID: 10687 (haproxy) Tasks: 2 (limit: 2340) CGroup: /system.slice/haproxy.service ├─10687 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock └─10688 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock

Jika UFW sedang berjalan, Buka port 443,

ufw allow 443

Verifikasi Penyeimbangan Beban HAProxy

Sekarang setelah konfigurasi selesai, Anda dapat mengakses HAProxy Anda dari web untuk melihat apakah ia melakukan penyeimbangan beban round-robin menggunakan alamat, https://<haproxy-IP>.

Halaman pertama yang dimuat menunjukkan server konten dari webapp_01. Untuk demo ini, kami memiliki tiga halaman html pengujian. Saat di-refresh, konten dari server lain akan ditampilkan.

Seperti yang bisa Anda sadari, halaman-halaman disajikan secara berurutan, satu demi satu. Itu saja pada tutorial dasar kami tentang cara mengkonfigurasi HAProxy Load Balancer dengan sertifikat yang ditandatangani sendiri di Ubuntu 18.04/Debian 10/Debian 9.

Anda dapat membaca lebih lanjut tentang HAProxy dan opsi konfigurasi di halaman dokumentasi di bawah ini;

Panduan Konfigurasi HAProxy

Tutorial Terkait

Instal dan Atur HAProxy di Ubuntu 20.04

Setup HAProxy Load Balancer di Fedora 30/Fedora 29

Cara Memasang dan Mengonfigurasi Pound sebagai penyeimbang Beban HTTP Apache di Ubuntu 16.04