Aller au contenu
mprinfo

Installation reverse proxy Haproxy et Cerbot (letsencrypt) sur debian

Recommended Posts

Installation reverse proxy Haproxy et Cerbot (letsencrypt) sur debian

 

(Topics En cours de construction)

 

Je vais vous expliquez comment installer un reverse proxy via Haproxy sur linux debian

 

Matériel nécessaires :

  • 1 nom de domaine (dans ce tutoriel j'utiliserai domaine.fr) donc pour par exemple DSM j'utiliserai le sous domaine suivant dsm.domaine.fr hc2.domaine.fr unifi.domaine.fr ces sous domaines doivent être créés chez votre fournisseur de domaine
  • 1 routeur ou box internet
  • 1 machine qui tourne sous debian (dans cette exemple je considère que l'adresse IP sera 192.168.0.100)

 

Je vous recommande fortement surtout pour les personnes qui ne connaissent pas bien linux de ne pas installer autre chose que haproxy sur cette machine afin d'éviter les conflits de ports

 

Installation de linux debian :

 

 

Configuration du routeur

 

il va falloir rediriger les ports 80 et 443 du routeur vers les ports 80 et 443 de notre machine debian haproxy

 

Installation de Haproxy via Putty

apt-get install haproxy

j'ai rencontré une problème lors de cette installation je ne sais pas si cela pareil pour vous

Si probléme erreur 1 executer les commandes suivantes :

mv /var/lib/dpkg/info/haproxy.* /tmp
apt autoremove
apt-get install -f haproxy

Maintenant que l'installation de Haproxy est terminer je vous donne les commandes pour redémarrer stopper ou redémarrer haproxy

(Cela sera utile car a chaque modification du fichier config il faudra redémarrer haproxy)

-- lancement haproxy
service haproxy restart
service haproxy start
service haproxy stop

Nous en avons fin avec l'installation de Haproxy

nous allons maintenant ouvrir le fichier de configuration Haproxy

soit via winscp

/etc/haproxy/haproxy.cfg

soit via Putty

nano /etc/haproxy/haproxy.cfg

Voici un Exemple de configuration pour avoir un accès un NAS synology, Home center 2 et un contrôleurs Unifi en HTTPS (pour le moment vous aurez des  erreur car nous n'avons pas de certificat)

global
	log /dev/log	local0
	log /dev/log	local1 notice
	chroot /var/lib/haproxy
	stats socket /run/haproxy/admin.sock mode 660 level admin
	stats timeout 30s
	user haproxy
	group haproxy
	daemon
    maxconn 2048
	
	# 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
	tune.ssl.default-dh-param 2048
		
defaults
	log	global
	mode	http
	option	httplog
	option forwardfor
    option http-server-close
	option	dontlognull
        timeout connect 5000
        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
#---------------------------------------------------------------------------
# teste de la configuration : haproxy -c -V -f /etc/haproxy/haproxy.cfg
# demmarrer Haproxy : service haproxy (restart, start, stop)
# voir les logs : less /var/log/haproxy.log
#---------------------------------------------------------------------------	

#------------------------------------------------------------------------------
#                                   H T T P
#------------------------------------------------------------------------------

frontend http-in
    option http-keep-alive
    compression algo gzip
    compression type text/html text/plain text/css application/x-javascript
    bind :::80 v4v6
	acl letsencrypt-acl path_beg /.well-known/acme-challenge
	reqadd X-Forwarded-Proto:\ http
    mode http
    option httplog
	
    #********************************************************
    # Define hosts http
    #********************************************************

	#acl unifi hdr(host) unifi.domaine.fr
	
    #********************************************************
	# Use backend
	#********************************************************

    #use_backend backendUNIFI if unifi	
	
    #********************************************************
	use_backend letsencrypt-backend if letsencrypt-acl
	default_backend www-backend
	#	default_backend poubelle

#------------------------------------------------------------------------------
#                                   H T T P S
#------------------------------------------------------------------------------	

frontend https-in
   bind :::443 ssl crt /etc/haproxy/certs/ no-sslv3
   reqadd X-Forwarded-Proto:\ https
   acl letsencrypt-acl path_beg /.well-known/acme-challenge  
   
    #********************************************************
    # Define hosts https
    #********************************************************
   
    acl dsm hdr(host) dsm.domaine.fr
    acl unifi hdr(host) unifi.domaine.fr   
    acl hc2 hdr(host) hc2.domaine.fr
	
    #********************************************************
	# Use backend 
	#********************************************************

    use_backend backendDSM if dsm
    use_backend backendUNIFI if unifi	
    use_backend backendHC2 if hc2

    #********************************************************	
    use_backend letsencrypt-backend if letsencrypt-acl
    default_backend www-backend   
   


#----------------------------------------------------------------------------- 
#  Define backend 
#----------------------------------------------------------------------------- 
backend www-backend
   redirect scheme https if !{ ssl_fc }
   server www-1 127.0.0.1:8888 check
   
backend letsencrypt-backend

   server letsencrypt 127.0.0.1:8888 


backend poubelle
    mode http
    http-request deny	
   
backend backendDSM
    mode http
    option httpchk
    option forwardfor except 127.0.0.1
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    server DSM_ESXI 192.168.0.101:5000
	
backend backendHC2
    mode http
    option httpchk
    option forwardfor except 127.0.0.1
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    server HC2 192.168.0.150:80

backend backendUNIFI
    mode http
    option httpchk
    option forwardfor except 127.0.0.1
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    server unifi 192.168.0.201:8443 check maxconn 32 ssl verify none

Quels explication sur notre fichier config. il peut le décomposer ne plusieurs partie

 

  1. Paramètre Haproxy
  2. La redirection HTTP
    #------------------------------------------------------------------------------
    #                                   H T T P
    #------------------------------------------------------------------------------
    
    frontend http-in
        option http-keep-alive
        compression algo gzip
        compression type text/html text/plain text/css application/x-javascript
        bind :::80 v4v6
    	acl letsencrypt-acl path_beg /.well-known/acme-challenge
    	reqadd X-Forwarded-Proto:\ http
        mode http
        option httplog
    	
        #********************************************************
        # Define hosts http
        #********************************************************
    
    	#acl unifi hdr(host) unifi.domaine.fr
    	
        #********************************************************
    	# Use backend
    	#********************************************************
    
        #use_backend backendUNIFI if unifi	
    	
        #********************************************************
    	use_backend letsencrypt-backend if letsencrypt-acl
    	default_backend www-backend
    	#	default_backend poubelle

     

  3. La redirection HTTPS
    #------------------------------------------------------------------------------
    #                                   H T T P S
    #------------------------------------------------------------------------------	
    
    frontend https-in
       bind :::443 ssl crt /etc/haproxy/certs/ no-sslv3
       reqadd X-Forwarded-Proto:\ https
       acl letsencrypt-acl path_beg /.well-known/acme-challenge  
       
        #********************************************************
        # Define hosts https
        #********************************************************
       
        acl dsm hdr(host) dsm.domaine.fr
        acl unifi hdr(host) unifi.domaine.fr   
        acl hc2 hdr(host) hc2.domaine.fr
    	
        #********************************************************
    	# Use backend 
    	#********************************************************
    
        use_backend backendDSM if dsm
        use_backend backendUNIFI if unifi	
        use_backend backendHC2 if hc2
    
        #********************************************************	
        use_backend letsencrypt-backend if letsencrypt-acl
        default_backend www-backend   
       
    

     

  4. Backend
    #----------------------------------------------------------------------------- 
    #  Define backend 
    #----------------------------------------------------------------------------- 
    backend www-backend
       redirect scheme https if !{ ssl_fc }
       server www-1 127.0.0.1:8888 check
       
    backend letsencrypt-backend
    
       server letsencrypt 127.0.0.1:8888 
    
    
    backend poubelle
        mode http
        http-request deny	
       
    backend backendDSM
        mode http
        option httpchk
        option forwardfor except 127.0.0.1
        http-request add-header X-Forwarded-Proto https if { ssl_fc }
        server DSM_ESXI 192.168.0.101:5000
    	
    backend backendHC2
        mode http
        option httpchk
        option forwardfor except 127.0.0.1
        http-request add-header X-Forwarded-Proto https if { ssl_fc }
        server HC2 192.168.0.150:80
    
    backend backendUNIFI
        mode http
        option httpchk
        option forwardfor except 127.0.0.1
        http-request add-header X-Forwarded-Proto https if { ssl_fc }
        server unifi 192.168.0.201:8443 check maxconn 32 ssl verify none

    Pour le moment je ne détaillerai pas plus ce ficher je ferai cela ultérieurement

 

Installation de cerbot et non pas d'un plugin pour apache2 ou autres

 

Pour éviter les problèmes de port je vous conseil si apache2 est installer de le supprimer

-- suppression apache2
apt remove apache2

-Supprimer des paquets inutile
apt autoremove

installation cerbot

apt-get install -y certbot

Création des certificats letsencrypt ne pas modifier le port si vous utiliser l'exemple que je vous ai donné

certbot certonly --standalone -d dsm.domaine.fr -d unifi.domaine.fr -d hc2.domaine.fr \--non-interactive --agree-tos --email VotreEmail \--http-01-port=8888

nous allons récupérer le certificats afin qu'il soit utilisable sur Haproxy

mkdir /etc/haproxy/certs/

cat /etc/letsencrypt/live/dsm.domaine.fr/fullchain.pem /etc/letsencrypt/live/dsm.domaine.fr/privkey.pem > /etc/haproxy/certs/domaine.fr.pem

Puis nous redémarrons HaProxy

service haproxy restart

 

  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

salut,

comme tu sais j'ai déjà HAProxy installé et configuré sur une Debian.

MAIS

je n'ai jamais réussi à le faire fonctionner pour du TCP (pour faire un backup Syno distant).

Alors, si tu as la solution, je suis super intéressé.

 

Pour Certboot, je vais regarder, car le maire à la minime tous les 3 mois... Sauf que

1) comment il sait qu'il doit aller chercher un nouveau certificat .

2) comment fait-il pour mettre à jours les infos chez le fournisseur de domaine ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Si ça peut aider... je fais du TCP pour MySQL/MariaDB, juste comme ceci :

 

listen ft_mysql
        bind 192.168.1.1:3306
        mode tcp
        server mariadb 192.168.1.2:3307

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×