User Tools

Site Tools


notes:formation_webperso:rpsni

On n'a besoin d'un reverse proxy que dans le cas ou on n'a pas d'ipv6.
et comme tout le monde n'a pas encore ipv6 (il y a même des gens qui vont désactiver l'ipv6 sur leur machine…) on va mettre en place un reverse proxy:

il suffit d'installer par exemple un server Haproxy, que ce soit dans l'hyperviseur ou une machine virtuelle.

il est préférable d'installer le reverse proxy dans une machine virtuelle ou un conteneur plutôt que dans l'hyperviseur de façon à faciliter les sauvegardes.

et dans mon cas j'ai choisi d'installer le reverse proxy dans la même machine qui fait serveur de nom de domaine faisant autorité

dans mon cas les machines virtuelles et les conteneurs ont de l'ipv6, donc les noms de domaines vont directement sur ces machines, pas besoin de reverse proxy sni pour l'ipv6.
le problème c'est que je n'ai qu'une seule ipv4 publique (la box de mon fournisseur d'accès à Internet) et que je suis obligé de partager cette unique ipv4 publique pour toutes mes machines virtuelles ou conteneurs.
c'est pour permettre cette cohabitation que j'installe un reverse proxy sni.

avec l'ipv6, c'est simple: toutes les machines ont un accès direct à Internet et sont directement joignable depuis Internet, elles sont indépendantes et n'ont pas de problèmes de ports à partager donc pas de problèmes de traduction d'adresses.

reverse proxy sni

on installe le paquet haproxy disponible dans Debian
apt install haproxy

un seul fichier à éditer: /etc/haproxy/haproxy.cfg

global
        maxconn 60000
        log 127.0.0.1  local0  notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon
 
        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private
 
        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        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-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
 
 
defaults
log global
 mode http
        option logasap
        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
 
frontend httpweb
  mode http
  option httplog
  bind [::]:80 v6only
  bind *:80 
  http-request add-header X-Forwarded-For %[src]
  use_backend err404_servers if { req.hdr(host) -i err404.numericore.com  }
  use_backend planet_servers if { req.hdr(host) -i planet.numericore.com }
  default_backend err404_servers
 
frontend httpsweb
  mode tcp
  option tcplog
  bind [::]:443 v6only
  bind *:443
  use_backend err404_s_servers if { req.hdr(host) -i err404.numericore.com  }
  use_backend planet_s_servers if { req.hdr(host) -i planet.numericore.com }
  default_backend err404_s_servers
 
 
backend err404_servers
  mode http
  balance roundrobin
  server err40401 ct-err404:80 check send-proxy
 
backend err404_s_servers
  mode tcp
  balance roundrobin
  option ssl-hello-chk
  server err40401 ct-err404:443 check send-proxy
 
 
backend ikce_servers
  mode http
  balance roundrobin
  server planet01 ct-ikce:80 check  send-proxy
 
backend ikce_s_servers
  mode tcp
  balance roundrobin
  option ssl-hello-chk
  server planet01 ct-ikce:443 check send-proxy

à la place de ct-err404 et ct-ikce vous utiliserez les ip de vos machines ou leur nom si vous utilisez votre serveur dns.
je sépare les bind sur deux lignes: ipv6 et ipv4 pour avoir des logs qui s'affichent mieux.
check est utilisé pour vérifier régulièrement la disponibilité du serveur (je n'en ai qu'un mais je pourrais répartir la charge facilement en rajoutant des lignes server)
send-proxy est utilisé pour envoyer l'ip réelle et pas celle du reverse proxy

les machines (virtuelles, conteneurs ou autre)

dans ces machines, il suffit de modifier /etc/nginx/nginx.conf:

http {

real_ip_header proxy_protocol;
real_ip_recursive on;
set_real_ip_from 192.168.1.17;

vous indiquerez l'ip de votre serveur proxy à la place de 192.168.1.17 et vous relancerez nginx avec systemctl reload nginx

lorsque on modifie le fichier de conf nginx, Yunohost ne va pas être content et refusera de les mettre à jour car ils auront étés modifiés, celà vaut pour les certificats, il suffit de forcer pour passer outre.

la box

sur la box il faut rediriger les ports 80 et 443 vers l'ip de la machine qui héberge le reverse proxy sni

notes/formation_webperso/rpsni.txt · Last modified: 2025/04/29 18:08 by err404

Page Tools