Implementing Load Balancing Firewall/Router Solutions Using pfSense and HAProxy

Page 1 sur 22Lecteur de document UniversityLib

Implementing Load Balancing Firewall/Router Solutions Using pfSense and HAProxy

Networking and Cybersecurity · course

Voir tous les documents en sécurité informatique

Introduction

La plupart des routeurs domestiques proposent de base de nombreuses fonctionnalit s.

Parmi ces fonctionnalit s on peut retrouver des fonctionnalit s de pare-feu. Le probl me avec ces

routeurs est quils nint grent que des fonctionnalit s basiques pour un usage basique du

p riph rique et ne permettent pas de mettre en place une solution pouss e.

Cest pourquoi en milieu professionnel on a tendance se tourner vers des pare-feu et routeurs

int grant des fonctionnalit s beaucoup plus pouss es, permettant alors aux administrateurs r seaux

de mieux s curiser leur r seau et de fournir une meilleure qualit de service leurs clients.

La plupart de ces solutions sont assez on reuses alors que parfois peu de fonctionnalit s sont

r ellement utilis es.

Dans cet article, nous allons voir comment mettre en place un routeur/pare-feu avec des

fonctionnalit s d quilibrage de charge pour permettre lacc s des serveurs web laide de pfSense

et HAProy.

a. Pare-feu

Pour faire simple, un pare-feu permet de s curiser un r seau. Cependant, il faudra noter que les

pares-feux connaissent certaines vuln rabilit s lorsque les communications sont crypt es.

Par exemple, il est possible de filtrer certains sites ou mots-cl s avec un pare-feu lorsque que ceux-ci

passent par le protocole HTTP (port 80) car la requ te est envoy e en clair et le pare-feu peut donc

avec aise analyser toutes les donn es la composant.

En revanche si le trafic passe par le protocole HTTPS (port 443) via le protocole SSL (ou plus r cent

TLS), les donn es ne seront plus envoy es en clair, mais seront bel et bien chiffr es, rendant possible

son d cryptage uniquement par linterm diaire dun certificat num rique. Nous ne d taillerons pas

plus si ce nest que pour dire que le client d chiffre les donn es re ues par le serveur gr ce la cl

envoy e et le serveur de m me, d chiffre les donn es envoy es par le client gr ce la cl de

d cryptage envoy e par celui-ci.

Par cons quent, une r gle de pare-feu permettant de bloquer le mot-cl facebook , sera inutile si

le client y acc de depuis https://facebook.

N anmoins, il faut savoir quil reste malgr tout certaines solutions pour filtrer le trafic s curis . La

solution la plus simple tant de bloquer le protocole HTTPS, vous laurez compris, quasiment tous les

sites utilisent ce protocole et nest donc pas viable, il est galement possible de bloquer le trafic au

niveau de la r solution DNS, cependant cette m thode reste peu flexible car elle demande la saisie

manuelle des noms de domaine et dans le cas de la restriction de multiple enregistrements DNS, cela

peut vite devenir une t che de longue haleine.

Heureusement, plusieurs solutions existent et certains pares-feux int grent une fonctionnalit de

relayeur DNS permettant de r aliser un filtrage plus pouss en servant dinterm diaire entre DNS et

client. Bien videmment de multiples autres techniques existent.

La plupart des pare-feu r cents comme pfSense embarquent galement de nombreuses

fonctionnalit s comme la possibilit de cr er des tunnels, servir de proxy et bien dautres.

b. Proxy

Un serveur mandataire ou serveur proxy, est un serveur jouant le r le dinterm diaire dans un

r seau informatique ayant pour but de relayer des requ tes entre un client et un serveur.

Un serveur proxy poss de de nombreuses fonctionnalit s et permet entre autres de stocker en

m moire des donn es pour acc l rer la navigation etc.

Tout comme un pare-feu, un proxy permet galement de s curiser un r seau en r alisant un filtrage

et permet aussi de contourner un filtrage par exemple lors de lacc s un site internet o seules

certaines adresses IP publique sont autoris es, en passant par un proxy se trouvant dans un pays

dont ladresse IP publique est autoris e, un utilisateur peut facilement contourner cette restriction.

Bien videmment, il reste possible de refuser la connexion un serveur proxy effectuant une requ te

mais cela demande une saisie manuelle de chaque entr e.

Les proxys permettent galement la connexion un serveur de fa on totalement anonyme,

diminuant le risque de tra abilit , toutefois il est toujours possible de bloquer une requ te anonyme

avec un pare-feu.

c. PfSense et HAProxy

PfSense est un routeur/pare-feu open source bas sur le syst me dexploitation FreeBSD

(Syst me dexploitation UNIX libre). Comme tout pare-feu, il permet de cr er des r gles de trafic sur

le r seau et permet entre autres davoir un contr le sur les flux entrants et sortant.

Il peut galement permettre de cr er une connexion s curis e entre deux h tes via un tunnel

IPSec ou encore via VPN.

pfSense int gre de nombreuses fonctionnalit s tel que le proxy invers qui contrairement au

serveur proxy basique, permet aux utilisateurs internet dacc der un r seau interne mais pas que !

Un proxy inverse peut aussi avoir des fonctionnalit s de r partition de charge entre divers

serveurs, qui par d finition permet d viter un serveur d tre surcharg par un nombre de

requ tes.

Dans cet article nous nutiliserons pas la fonctionnalit de proxy inverse de pfSense mais celle de

HAProxy (High Availability Proxy), qui est beaucoup plus rapide dans la gestion des requ tes et la

r partition de charge.

Publicité

Dans le cadre de la haute disponibilit , la r partition de charge est une tape tr s importante car

elle permet dassurer la continuit de services car si un serveur venait recevoir norm ment de

requ tes il y a de fortes chances que le d lai de r ponse soit beaucoup plus long et dans le pire des

cas, quil tombe.

d. Topologie

Dans cet article nous allons permettre un client dacc der un serveur web distant situ dans un

r seau interne. Les clients passeront donc par les pare-feu/proxy invers s pour acc der un serveur

web.

Nous utiliserons HAProxy pour soccuper de la r partition de charge entre les deux serveurs web afin

de permettre de multiples connexions simultan es sans engendrer de perte de performance.

Dans votre logiciel de virtualisation, cr ez deux sous r seaux, lun ayant acc s Internet et lautre

non. Dans mon cas sous VMWare, jai cr un sous-r seau NAT pour simuler lacc s Internet et un

autre en Host-Only.

1. Installation

Pour cet article nous utiliserons une machine virtuelle pfSense, et deux distributions linux, nous

utiliserons Debian.

a. Pare-feu pfSense

Notre premier serveur pfSense fera linterface avec le client, le client acc de aux serveurs web

situ s New York ou Texas de fa on transparente.

La derni re version en date est le 2.4 sortie r cemment, on peut la retrouver via ce lien pour la

t l charger en 32 ou 64 bits. : https://www.pfsense.org/download/

Si vous avez un processeur supportant le jeu dinstructions 64 bits, pr f rez la version AMD64 pour

obtenir de meilleures performances.

Pr f rez lISO pour proc der l'installation directement.

En termes de configuration requise, je fais tourner Pfsense sur une VM disposant d'un processeur, 512

Mo de RAM et 8Go de disque, Pfsense se contente de tr s peu, nous le verrons plus loin.

Lors de la configuration de la machine virtuelle, veillez ce quil y ait deux adaptateurs r seaux.

Le premier servira linterface WAN, on aura une carte permettant dacc der Internet, ici on utilisera

du NAT et en LAN une carte r seau qui nous permettra dadministrer localement notre serveur, pour

cet adaptateur, cr ez un r seau priv . Par d faut ladministration depuis linterface WAN est

d sactiv e car il serait dommage daccorder un tiers dadministrer notre routeur.

Lors du d marrage de l'ordinateur avec le CD ou l'ISO mont , un menu de boot appara t. Selon les

besoins on peut choisir de d marrer Pfsense avec certaines options activ es. Si aucune touche n'est

appuy e, Pfsense bootera avec les options par d fauts (choix 1) au bout de 8 secondes.

L'installation d marre, d s le premier cran nous pouvons r gler diff rents param tres notamment

la police le type de clavier que lon utilisera, ici on choisira notre clavier fran ais AZERTY.

Apr s avoir s lectionn le clavier, il est possible de le tester en choisissant Test puis si cela vous

convient, s lectionnez Continue.

Dans l cran qui suit, choisissez Auto(UFS) si vous ne voulez pas partitionner de fa on particuli re le

disque dur pour passer la suite.

Si tout sest correctement pass , dans l cran qui suit choisissez NO puis REBOOT pour red marrer la

machine.

Une fois la machine red marr e, vous arriverez cet cran

Nos deux cartes r seaux sont bien reconnues, par d faut, une interface leur est automatiquement

affect e, pour v rifier que vos interfaces correspondent bien la bonne carte r seau, entrez 1. Vous

verrez alors dans l cran qui suit, ladresse MAC correspondante chaque interface.

Si cela correspond bien, faites simplement Ctrl + C pour annuler. Sinon vous entrez le nom de

linterface correspondante

De retour au menu s lectionnez 2 pour configurer les adresses IP des adaptateurs r seaux.

Si vous obtenez une adresse IP de fa on automatique depuis votre fournisseur, laissez linterface

WAN en DHCP, par d faut ladresse IP publique est renouvel e automatiquement aupr s de votre

fournisseur dacc s internet sauf si vous avez demand ce quelle soit statique car en effet, en

situtation r elle un utilisateur acc de un site Internet depuis son nom de domaine et non par IP.

Dans cette d monstration nous allons affecter une adresse IP notre interface WAN et LAN.

Je rappelle que dans mon cas, mon r seau Internet est le 192.168.11.0/24 et mon r seau LAN

192.168.136.0/24

Mon interface WAN a pour IP 192.168.11.3, de masque 255.255.255.0 et bien videmment, il ne

faut pas oublier dindiquer la passerelle par d faut pour lacc s ext rieur.

Si vous ne la connaissez pas, repassez en DHCP, vous pourrez configurer lIP statique plus tard. Sous

VMWare, allez dans Virtual Network Editor et cliquez sur NAT Settings.

R it rez la proc dure cette fois-ci pour configurer linterface LAN. Notez que contrairement

linterface WAN, il ne vous est pas propos daffecter une IP de mani re automatique.

Linterface LAN est configur e avec ladresse 192.168.136.3/24

Nous pouvons maintenant administrer notre serveur pfSense !

Par d faut le login est admin et le mot de passe pfsense

Si votre interface WAN est bien configur e, vous aurez en page daccueil, un message vous indiquant

Publicité

de quand a eu lieu la derni re recherche de mise jour.

Etant donn que nous avons affect une adresse IP de r seau priv notre interface WAN (voir

https://tools.ietf.org/html/rfc1918) , il nous faudra autoriser lutilisation de celle-ci. Par d faut, une

adresse IP dite publique est une adresse IP nayant pas comme pr fixe 192.168, 172.16 ou 10/8.

Pour cela rendez-vous dans les param tres de linterface

Et d s lectionnez lavant derni re option, sauvegardez, puis appliquez.

Si vous n tes pas en DCHP, le serveur DNS permettant au r seau interne de communiquer avec

lext rieur nest pas d fini, il faudra le d finir, dans System>General Setup. Appliquez et

sauvegardez.

Cest tout pour cette partie, nous reviendrons plus tard dessus pour configurer notre load balancer.

b. Serveurs web

Nous allons maintenant passer la configuration de nos serveurs web.

Dans cet article on utilisera Debian pour son c t universel, vous trouverez liso cette adresse :

https://www.debian.org/CD/http-ftp/

Lors de la cr ation de la machine virtuelle, affectez un adaptateur r seau la machine de sorte ce

quelle soit sur le m me r seau local que ladaptateur r seau local de notre pfSense.

Pour moi, cest le r seau 192.168.136.0/24.

Apr s avoir d fini les param tres linguistiques et les param tres utilisateurs ainsi que le

partitionnement du disque, le syst me t l chargera le reste des fichiers n cessaires.

Vous serez amen s configurer le r seau, ce m me si vous aviez activer le service DHCP sur

linterface LAN du routeur. La principale raison est que pfSense demande en LAN de ne pas saisir de

passerelle par d faut.

Vous pouvez tre confront s cet cran, choisissez Non et configurez comme ci-dessous.

Vous pouvez galement avoir un autre message derreur indiquant quil est impossible dacc der au

serveur FTP. Retournez dans le menu et choisissez Configurer le r seau, puis Configurer le r seau

moi-m me

Suivez lassistant, entrez une adresse IP disponible sur le r seau local, en passerelle par d faut,

mettez ladresse locale du pare-feu pfSense, et en DNS pareil.

Une fois que les paquets t l charg s, installez un serveur web.

https://doc.ubuntu-fr.org/installer_un_serveur_debian

Nos deux serveurs web auront respectivement les adresses IP 192.168.136.4/24 et 192.168.136.5/24

Vous pouvez v rifier vos param tres en tapant la commande nano /etc/network/interfaces

c. R partition de charge

Maintenant que nos deux serveurs web et notre pfSense install s, nous allons maintenant passer la

partie de l quilibrage de charge.

Comme je lai expliqu plus haut, lobjectif dune r partition de charge est avant tout de permettre

aux diff rents serveurs dun r seau faisant partis dun m me pool de ne pas tre surcharg s pour

permettre aux clients finaux davoir un service avec de tr s faibles d lais de r ponse lors de lenvoi

dune requ te.

Dun autre c t cela permet aussi de fournir une meilleure qualit de service.

Pour mettre en place cela, il vous faudra t l charger le paquet HAProxy pour pfSense.

Pour cela rendez-vous dans la page de gestion des paquets situ e dans le menu System > Package

Manager

Le Package Manager permet linstallation de diff rents paquets con us pour tre utilis s et

accessibles directement depuis linterface dadministration de pfSense.

Pour installer un nouveau paquet, il suffit de cliquer sur longlet Available Packages et de rechercher

le paquet souhait .

NB : La liste des paquets pr sents dans le package manager est une liste non exhaustive du nombre

de paquets existants pour pfSense. Seuls les paquets v rifi s sont disponibles depuis le package

manager. https://doc.pfsense.org/index.php/Installing_FreeBSD_Packages

Une fois le paquet HAProxy install vous aurez un r capitulatif qui saffichera, vous indiquant les

diff rentes tapes de linstallation. En cas d chec, v rifiez que linterface WAN ait bien acc s

Internet et que le serveur distant contenant les diff rents paquets soit jour et bien configur .

Vous constaterez alors quune nouvelle option a fait son apparition dans le menu Services

Il ne reste plus qu configurer notre r partiteur de charge !

2. Configuration

a. Backend

Dans longlet Backend, cliquez sur le bouton Add, puis ajoutez affectez un nom ce Backend.

Le Backend server pool, permet la configuration des diff rentes options et comportement des

serveurs balancer, en gros il sagit du produit.

Dans la partie Server list, ajoutez un serveur balancer en cliquant sur la petite fl che.

Le mode active, indique que le serveur sera utilis dans le balancement.

Le mode backup, indique que le serveur sera utilis lorsque les autres serveurs seront indisponibles.

Par exemple, si jamais tous vos serveurs tombent, pour ce serveur de backup pourrait afficher une

version plus ancienne de vos fichiers, il servira de failover.

Le mode inactive, indique que le serveur ne sera pas utilis .

Publicité

Nos serveurs web tournant sur le port 80, nous ne configurerons pas les options SSL. On laissera

galement le champs Weight vide car nos deux serveurs ont les m mes capacit s. En revanche si lon

avait un serveur plus puissant que lautre, le champs Weight deviendrais utile dans la mesure ou plus

sa valeur est lev e, plus le nombre de requ tes quil recevra sera lev par rapport aux autres

serveurs du pool.

Ensuite il nous faudra s lectionner un mode de balancement.

En choisissant :

  • None : Sil ny a quun seul serveur ou si vous voulez passer en avanc .
  • Round robin : Les requ tes seront balanc es aux serveurs web chacun leur tour. Cest le plus

-

-

-

simple

Static round robin : Utilise moins de ressources que Round robin basique, la seule diff rence

cest que si jamais vous voulez modifier chaud le poids dun des serveurs, il ne sera pas pris

en compte.

Least Connections : Le serveur qui a le moins de requ tes redirig s vers lui sera privil gi lors

du round robin sur les diff rents groupes de serveurs. Recommand pour de longues

sessions.

Source : HAProxy v rifie ladresse IP du client pour lui permettre datteindre toujours le

m me serveur. Recommand lorsque les clients refusent les cookies.

Nous utiliserons le Round Robin pour cet article.

Plus bas, vous avez galement la possibilit de cr er des ACL (Acces Control List).

Expliquer le fonctionnement des ACL serait trop long, je vous invite consulter :

https://www.haproxy.com/documentation/aloha/7-0/haproxy/acls/

Plus bas, vous avez la possibilit de g rer la fa on dont laquelle vous voulez que HAProxy v rifie que

chacun des serveurs soient disponible au balancement.

HAProxy nest pas limit aux serveurs web ! Vous pouvez tout fait faire du balancement entre des

serveurs MySQL par exemple. Dans notre cas, on choisira le protocole HTTP.

Vous pouvez d finir ensuite un intervalle de v rification. Par d faut pour http, lintervalle est de 1

seconde.

Ensuite indiquez la m thode qui sera utilis e pour tester la disponibilit du serveur en fonction du

protocole d fini plus haut.

Et enfin, lURL, par d faut cest /, si par exemple vous voulez que HAProxy pointe sur

http://serveur_web/test plut t que http://serveur_web/ indiquez le dans ce champ.

A la fin de la page vous trouverez une section Statistics. Cela permet depuis lIP d finie dans le

frontend de consulter les statistiques.

NB : En production il est recommand de d finir une authentification pour lacc s cette page dans

les options suivantes ou tout simplement de ne pas cocher cette case.

b. Frontend

Maintenant que notre Backend est configur , le plus important reste la configuration du frontend.

Pour cela, cette fois-ci on va cliquer sur longlet frontend et cliquer sur Add.

Comme pour le backend, donnez un nom au frontend, puis dans Status, choisissez Active pour

indiquer quil sera actif sinon la configuration ne sera pas charg e par HAProxy lors du d marrage du

service.

Au niveau du champs External address, vous avez la possibilit de choisir ladresse laquelle ce

frontend fonctionnera. On choisira WAN address (IPv4), port 80.

Plus bas vous avez la possibilit dindiquer le nombre maximal de connexions que doit supporter ce

frontend, dans le type on choisira http.

Comme pour le backend, il est possible de cr er des ACL. Au niveau frontend cela peut vous

permettre deffectuer divers contr les. Par exemple, si votre site web est en HTTPS et que le client

renvoie un certificat HTTPS erron , vous avez la possibilit de lui affecter backend autre que celui par

d faut. Il est galement possible de rediriger la requ te ou tout simplement la refuser.

Encore une fois, nous ne d taillerons pas plus les ACL car on ne les utilisera pas, cependant sachez

quil est aussi possible de cr er des ACL personnalis s.

A la section Default Backend, on choisira le backend que lon vient de cr er.

Plus bas encore, vous avez une section Avanc e avec diverses options o vous pourrez activer

forwarfor pour renvoyer lIP originale du client.

Sans cette option, ladresse IP du serveur pfSense sera renvoy e aux serveurs de balancement en

tant quadresse client, cela peut tre utile si vous voulez v rifier que la requ te est au pr alable

pass par le pare-feu.

Sauvegardez et appliquez les changements.

Maintenant que la configuration est termin e rendez-vous dans longlet Settings, et cochez la case

Enable HAProxy.

Plus bas vous avez la possibilit de d finir le nombre de connexions que HAProxy supportera, il sagit

du nombre total de requ tes qui passeront pas le service HAProxy. Ces connexions clientes seront

gard es en m moire.

Publicité

Par exemple pour 10 000 connexions, HAProxy allouera un minimum de 488 Mo de m moire.

Pour terminer cochez la case Reload Behaviour. Si vous vous souvenez, lors de linstallation javais

nonc le fait quune interface WAN poss de une IP publique et que sauf cas sp cial, cette IP tait

renouvel e aupr s du fournisseur dacc s internet apr s expiration du bail.

En cochant cette case, on indique HAProxy quil doit arr ter tous les processus lorsquun

changement dadresse IP est d tect et ce sur nimporte quelle interface.

Si jamais vous veniez modifier votre IP Statique et que le service tourne, il serait galement

int ressant darr ter les processus en cours sinon HAProxy aura une mauvaise configuration et les

requ tes seront mal interpr t es.

Sauvegardez les changements et appliquez pour d marrer les services HAProxy.

c. Stats

Pour consulter l tat de vos serveurs et diverses statistiques, il vous suffit de vous rendre longlet

Stats.

Vous avez remarqu quil y avait un formulaire en bas de page ?

HAProxy vous donne la possibilit dagir sur vos serveurs depuis cette page.

Vous avez la possibilit de :

  • Modifier l tat dun serveur
  • Modifier son statut

-

  • &

Supprimer les sessions existantes

Ces modifications nauront aucun impact sur vos serveurs balanc s. Ces modifications affecteront

uniquement le comportement de HAProxy. Si par exemple vous passez l tat dun serveur MAINT, il

passera en mode maintenance et HAProxy ne redirigera plus de requ tes vers ce serveur.

Cela vous permettra de rendre virtuellement un serveur indisponible sans avoir toucher vos

configurations.

Place au test !

3. Test

Pour cette derni re partie, nous allons tester notre solution.

Nous avons vu que nos serveurs sont bien l tat READY et sont en ligne depuis notre page de

statistiques. Nous avions galement configur le frontend pour quil puisse couter sur linterface

WAN des nouvelles connexions avant de les rerouter.

Pourtant, lorsque lon acc de ladresse IP suppos e publique du serveur pfSense, rien ne se passe.

En tant que pare-feu, pfSense refuse logiquement toute requ tes venant de lext rieur, mais si on ne

peut pas y acc der pourquoi avoir fait tout cela me direz-vous.

Eh bien noublions pas quil sagit dun pare-feu ! Pour autoriser les requ tes venant de lext rieur, il

faut donc cr er une r gle.

Pour cela dans le menu Firewall, vous trouverez un sous menu Rules et cest ici que nous allons

d finir nos r gles de pare-feu.

Par d faut, une seule r gle concernant linterface WAN existe, celle permettant de bloquer les

adresses IP sources correspondant RFC1918, les adresses de r seaux priv s et les fausses adresses

IP.

On cr e donc une nouvelle r gle de pare-feu et on la configure comme tel

Nous avons autoris les connexions sur linterface WAN pour le port 80. Interface et port sur lequel

tourne notre frontend.

R essayez nouveau dacc der ladresse WAN, et a marche !

Si vous avez install Apache en tant que serveur web, modifiez la page de d monstration dun des

serveurs web situ e dans :

/var/www/html/index.html

Et vous verrez que le Round robin, fonctionne bien car la page renvoy e diff re chaque fois que vous

rafraichissez la page.

Maintenant, retournez la page de statistiques de HAProxy et changez l tat dun des serveurs en

tant que MAINT. Vous remarquerez que lun des serveurs web ne renvoie plus sa page et pour cause,

HAProxy la virtuellement rendu indisponible au balancement.

Merci davoir suivi cet article, dans un prochain article je vous montrerai comment faire

communiquer deux r seaux diff rents avec pfSense.

Webographie

https://www.pfsense.org/

https://tools.ietf.org/html/rfc1918

https://www.debian.org/

https://doc.ubuntu-fr.org/installer_un_serveur_debian

https://www.haproxy.com/documentation/aloha/7-0/haproxy/

https://www.netgate.com/solutions/pfsense/

https://fr.wikipedia.org/wiki/Proxy_inverse

https://fr.wikipedia.org/wiki/Proxy

https://fr.wikipedia.org/wiki/Pare-feu_(informatique)