====== PfSense et HAProxy ====== ===== Présentation ===== Dans le but de résoudre les problèmes de fonctionnement du failover et loadbalancing des LDAPS avec keepalived, nous avons choisis de passer à HAProxy. Par la même occasion nous avons choisis de le mettre sur PfSense qui est en réalité un FreeBSD pour sa légèreté et sa robustesse réseaux pour faire ces les fonctionnalités. Attention, la gestion du PfSense doit se faire avec le navigateur Firefox, de nombreux problèmes de connexion sont présents avec Chrome et Safari ===== Installation ===== * ISO : [[https://www.pfsense.org/download/|Téléchargement sur le site de l'éditeur]] * Une seule carte réseaux : Le WAN * Désactiver le firewalling : * Firewall > Rules > WAN : Add * Action : Pass * Protocol : Any * Source : Any * Destination : Any ===== Configuration FailOver ( CARP ) ===== ==== PfSync : System > High Availability Sync ==== * Synchronize states : OK * Synchronize Interface : WAN * pfsync Synchronize Peer IP : permet d'eviter l'envoie des checks en multicast * Mettre IP du second PfSense ( sur machine 1 : ip machine 2 et inversement ) ==== Firewall > Virtual IPs ==== * Add * Type : CARP * Address : VIP :192.168.1.3 ( par exemple ) * Virtual IP password : Mettre un password de 8 chars * VHID : ID du groupe doit être unique par type de LB * Par exemple pour deux LoadBalancer ldap : ID = 1 , pour deux LB smtp : ID = 2 ==== Status > CARP ==== * Permet de voir qui est Master/Backup ===== Exemple loadbalacing LDAP ===== ==== Certificats : System > Certificate Manager ==== * CA : Add * Nom : Cert-CA * Certificate data : Mettre le contenu du certificat haute autorité * Certificates : Add * Descriptive Name : Cert domain * Certificate data : Mettre le certificat * Private key data : Mettre la clé de chiffrement ==== Load Balancing avec HAProxy ==== === Sur le serveur maitre LB1 : === - **Installer le package :** * System > Package Manager > Available Packages * haproxy : install - **Settings** * Enable HAProxy * Maximum connections: **10000** * Internal stats port : **2200** * Max SSL Diffie-Hellman size : **2048** * Custom options : **ssl-server-verify none** * HAProxy Sync : **Check** - **Backend** * **ldap** : * name : **ldap_TEST** * server list : * name: **ldap1-389 , 192.168.1.1 , 389 ** * name: **ldap2-389 , 192.168.1.2 , 389** * Connection timeout : **1000** * Server timeout : **5000** * Health check method : **LDAP** * Stick tables : **stick on sourceIPv4** * Stick-table expire : **30m** * Stick-table size : **200k** * **ldaps** : * name : **ldap_SSL_TEST** * server list : * name: **ldap1-636 , 192.168.1.1 , 636 ** * advanced : **ssl** * name: **ldap2-636 , 192.168.1.2 , 636** * advanced : **ssl** * Connection timeout : **1000** * Server timeout : **5000** * Health check method : **LDAP** * Stick tables : **stick on sourceIPv4** * Stick-table expire : **30m** * Stick-table size : **200k** - **Frontend** * **ldap** : * name: **ldap_front** * description : **ldap_front-389** * external address : * Listen : **Any IPv4 ** * Port : **389** * type : **TCP** * Default Backend : **ldap_TEST** * client timeout: **1000** * **ldaps** : * name: **ldap_ssl_front** * description : **ldap_ssl_front-636** * external address : * Listen : **Any IPv4 ** * Port : **636** * SSL Offloading : **check** * type : ssl/https * Default Backend : **ldap_SSL_TEST** * client timeout: **1000** * Use "httpclose" option : **Forceclose** * Certificate : **Star domain** * Add ACL for certificate Subject Alternative Names : **Uncheck** * Advanced ssl options : **no-sslv3 no-tlsv10 ciphers HIGH:!aNULL:!MD5** * Without client cert : **check** * Allow invalid cert : **check** * Client verification CA certificates : **Digicert-CA** === Sur le serveur slave LB2 === * La configuration sera automatique déployer via XMLRPC * Afin de ne pas re-ecrire la configuration HAProxy entre LB1 et LB2, nous allons utiliser la fonction de replication de conf * Dans notre cas **LB1 sera le maitre** et **LB2 l'esclave** * C'est LB1 qui push sur LB2 , donc on configure LB1 * La synchro de HAProxy est appliqué depuis le plugin directement ( voir conf précédente ) * System > High Availability Sync * Synchronize Config to IP : **IP du LB2** * Remote System Username : **admin** * Remote System Password : **passwd** * Select options to sync : * **Certificates** * **Firewall** * **Virtual IPs** ==== Backup Configuration ==== * Diagnostics > Backup & Restore * Download configuration as XML