Kalau kita bicara soal HAProxy, kebanyakan tutorial di internet pasti mencontohkan load balancing untuk aplikasi web (HTTP/HTTPS di Layer 7). Tapi, bagaimana kalau kita ingin membuat cluster untuk Mail Server seperti Zimbra, Carbonio, atau Postfix?
Layanan email menggunakan protokol seperti SMTP (Port 25, 465, 587) dan IMAP (Port 143, 993) yang tidak berbicara dalam bahasa HTTP. Oleh karena itu, kita harus menggunakan HAProxy di Layer 4 (TCP Mode).
Di artikel ini, saya akan membagikan cara mengkonfigurasi HAProxy untuk traffic email, lengkap dengan satu “rahasia” agar fitur Anti-Spam di server kalian tidak rusak.
1. Perbedaan Mendasar: TCP Mode vs HTTP Mode
Saat HAProxy berjalan di mode HTTP (Layer 7), dia bisa membaca isi header web, melihat URL, dan memanipulasi cookie.
Tapi untuk email, HAProxy bertindak layaknya “pipa saluran air” murni. Dia hanya menerima koneksi jaringan dari luar dan langsung meneruskannya ke backend mail server tanpa membongkar isi pesannya. Inilah yang disebut dengan Mode TCP.
2. Contoh Konfigurasi HAProxy untuk SMTP dan IMAP
Buka file konfigurasi HAProxy kalian (biasanya di /etc/haproxy/haproxy.cfg), dan tambahkan blok frontend dan backend berikut ini:
Load Balancing IMAP (Port 993 – SSL)
frontend imaps_front
bind *:993
mode tcp
option tcplog
default_backend imaps_back
backend imaps_back
mode tcp
balance leastconn
server mail01 10.0.0.11:993 check
server mail02 10.0.0.12:993 check
Catatan: Gunakan algoritma leastconn (koneksi paling sedikit) daripada roundrobin, karena koneksi IMAP dari client (seperti Outlook atau Thunderbird) biasanya bertahan dalam waktu yang lama.
Load Balancing SMTP (Port 25)
Cuplikan kode
frontend smtp_front
bind *:25
mode tcp
option tcplog
default_backend smtp_back
backend smtp_back
mode tcp
balance roundrobin
server mta01 10.0.0.21:25 check send-proxy
server mta02 10.0.0.22:25 check send-proxy
3. Pro-Tip Wajib: Masalah IP Asli dan send-proxy
Jika kalian perhatikan pada blok SMTP di atas, ada tambahan parameter send-proxy. Ini adalah bagian paling krusial!
Masalahnya: Saat kalian menaruh HAProxy di depan mail server, backend (misal Postfix) hanya akan melihat IP dari server HAProxy. Akibatnya, semua rule Anti-Spam, RBL (Real-time Blackhole List), dan pengecekan IP pengirim akan gagal atau kacau.
Solusinya: Gunakan Proxy Protocol. Dengan menambahkan parameter send-proxy di konfigurasi HAProxy, HAProxy akan membisikkan IP asli pengirim ke backend.
(Penting: Pastikan backend mail server kalian juga sudah diatur untuk menerima Proxy Protocol. Di Postfix, ini dilakukan dengan mengaktifkan postscreen_upstream_proxy_protocol = haproxy).
4. Monitoring Health Check yang Tepat
Secara default, parameter check pada HAProxy hanya akan melihat apakah port tersebut terbuka atau tidak. Untuk mail server, kalian bisa membuatnya lebih pintar dengan memastikan layanan SMTP benar-benar merespons dengan kode 220 (Service Ready).
Kalian bisa menambahkan baris ini di backend SMTP:
option smtpchk HELO haproxy.local
Dengan begitu, jika service Postfix di salah satu node tiba-tiba hang meskipun port-nya terbuka, HAProxy akan tahu dan berhenti mengirimkan traffic ke node tersebut.
Kesimpulan
Membuat High Availability untuk infrastruktur email membutuhkan pendekatan yang sedikit berbeda dibandingkan aplikasi web. Dengan memanfaatkan TCP Mode dan Proxy Protocol di HAProxy, kalian bisa membangun cluster mail server yang tangguh tanpa mengorbankan keamanan dan fitur Anti-Spam.