Vous êtes sur la page 1sur 3

Haproxy

C’est un logiciel permettant, entre autres l’équilibrage de charge entre plusieurs serveurs « cachés »
derrière. C’est donc un reverse-proxy spécialisé. On peut lui ajouter des fonctions « légères » de
filtrage.
Attention, il n’a pas toutes les fonctionnalités d’un reverse-proxy de protection. Nginx et Apache
seront dans ce cas plus adaptés.
On suppose que le serveur visible est https//webexterne.univ.fr, les serveurs « réels » sont
http://serv1.univ.fr et http://serv2.univ.fr.

Installation
apt update && apt install haproxy
systemctl enable haproxy
systemctl start haproxy

/etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local3
maxconn 4096
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
daemon
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-
AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-
POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-
ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-
CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
tune.ssl.default-dh-param 2048

defaults
mode http
log global
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3

frontend front_global_univ
bind *:80
bind *:443 ssl crt /etc/haproxy/haproxy.pem
acl denied_begin_path path -m beg -f /etc/haproxy/begin_denied.acl
acl denied_sub_path path -m sub -f /etc/haproxy/sub_denied.acl

http-request deny if denied_begin_path


http-request deny if denied_sub_path
redirect scheme https code 301 if !{ ssl_fc } # Pour forcer le passage en HTTPS.
default_backend maintenance
use_backend nodes_webexterne if { hdr(host) -i webexterne.univ.fr }

mercredi 3 mars 2021 fabrice prigent 1/3


use_backend nodes_www if { hdr(host) -i www.univ.fr }

backend nodes_webexterne
hash-type consistent
cookie LOADBALANCEIDwebexterne insert indirect nocache
option httpchk
option httpclose
balance roundrobin
server serv1.univ.fr 10.25.25.1:80 cookie s1 weight 10 check inter 5000 rise 1 fall 3
server serv2.univ.fr 10.25.25.2:80 cookie s2 weight 10 check inter 5000 rise 1 fall 3
server maintenance-web 10.25.25.10:8000 check backup

backend nodes_www
hash-type consistent
cookie LOADBALANCEIDwebexterne insert indirect nocache
option httpchk
option httpclose
balance roundrobin
server serv3.univ.fr 10.25.25.3:80 cookie s1 weight 10 check inter 5000 rise 1 fall 3
server serv4.univ.fr 10.25.25.4:80 cookie s2 weight 10 check inter 5000 rise 1 fall 3
server maintenance-web 10.25.25.10:8000 check backup

backend maintenance
cookie JSESSIONID prefix
option httpchk
option forwardfor except 10.1.1.1 # On ne renvoie pas pour nous même.
option httpclose
balance roundrobin
server maintenance-web 10.25.25.10:8000

/etc/haproxy/begin_denied.acl
./../
/%
/?mdocs-img
/.env
/.git/
//
/?a=fetch
/ADMIN
/IPC$
/MyAdmin
/WebObjects/
/_
/_async/
/_query.php
/admin/
/adminer.php
/captive-portal
/ccm_system
/cgi-bin/kerbynet
/cgi-bin/php.cgi
/cgi-bin/php?
/csi_btf

/etc/haproxy/sub_denied.acl
;curl%20
;wget+
file_put_contents
set_magic_quotes_runtime
%EF%BF%BD%EF%BF%BD%
busybox
%20SELECT%20
%20UNION%20
%20WAITFOR%20
%7CCHR%28
%28SELECT%20
base64_encode
<script>
%3Cscript%3
GLOBALS=
REQUEST=

mercredi 3 mars 2021 fabrice prigent 2/3


eval(
javascript:
boot.ini
etc/passwd
self/environ

Vérification de la configuration haproxy


haproxy -c -f /etc/haproxy/haproxy.cfg

Exercice
• Désactivez tout serveur web déjà actif (apache, nginx, etc.) avec par exemple « service httpd
stop ».
• Transformez votre haproxy en « load balancer » du site « http://neverssl.com »

◦ vérifiez ses adresses IP, vous verrez qu’il y en a plusieurs,

◦ enlevez les références au SSL et https sur le frontend, car vous n’êtes pas en mesure
d’avoir un certificat,
◦ enlevez la ligne « option httpchk » qui est incompatible avec ce site.

◦ Le site nécessite de préciser le « host ». On fait cela avec un ordre


http-request set-header Host neverssl.com
• Vérifiez que cela marche.

• Essayez une des attaques bloquées, et vérifiez son blocage, en testant par exemple
http://127.0.0.1/adminer.php

mercredi 3 mars 2021 fabrice prigent 3/3

Vous aimerez peut-être aussi