[gull] Gérer la redirection vers https sur un cluster LVS-DR

TISSOT Jacques jacques.tissot at unifr.ch
Wed Feb 8 16:03:43 CET 2017


Bonjour,

J’ai trouvé l’astuce, en tout cas en partie. La requête http (80) sur l’IPV est redirigée (rewrite) sur https  (443) :

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}$1<https://%25%7bSERVER_NAME%7d$1> [R,L]

Les paquets https sont balancés avec IPVS sur les serveurs réels :

ipvsadm –A –t 192.168.56.110 :443 –s rr
ipvsadm –a –t 192.168.56.110 :443 –r 192.168.56.101:443 –g –w 1
ipvsadm –a –t 192.168.56.110 :443 –r 192.168.56.102:443 –g –w 1

Et ldirectord :

virtual =192.168.56.110 :443
             fallback=127.0.0.1 :443 gate
             real=192.168.56.101 :443 gate
             real=192.168.56.102 :443 gate
             service=https
             checktimeout=30
             checktype=external
             checkcommand= ‘’/root/check_https’’
             scheduler=wlc
             protocol=tcp

Je vais essayer avec ce que tu as dit avec Source Hashing, et je vais creuser avec le coup de iptables.

Merci

Jacques


-----------------

Bonjour,

On 08/02/17 11:22, TISSOT Jacques wrote:
Bonjour la communauté,

J’ai mis en place un cluster apache de test, 3 nœuds (un frontend et deux real servers).
Load balancing LVS-DR avec ipvsadm
Monitoring avec ldirectord
Server web: apache

Tout fonctionne bien en http et en https si on les attaque directement. Mais comment gérer une REDIRECTION vers https via cette infrastructure ?
LVS est en couche 4 et apache est en couche 7, donc, si je comprends bien, pas moyen de gérer la redirection par un Redirect ou un Rewrite dans la config d’apache du nœud frontend ?

Alors comment faire ?

Je configurerais la redirection dans (les N instances de) Apache:

<VirtualHost *:80>
  ServerName http://www.example.org
  ServerAlias example
  # Redirect to SSL
  RewriteEngine On
  RewriteRule ^$ https://www.example.org/ [L,R=301]
  RewriteRule ^/(.*)$ https://www.example.org/$1 [L,R=301]
</VirtualHost>

<VirtualHost *:443>
  ServerName https://www.example.org
 [...]
</VirtualHost>

Tout ce passera de manière transparente au niveau de LVS/ipvsadm (qui effectivement n'a aucun moyen de regard au niveau 7).

Par contre, il faut impérativement travailler en mode "sh" (Source Hashing) ou les sessions SSL/TLS seront invalides d'une connection HTTP(S) à une autre; dans ldirectord.cf:

# WWW (fwm=8080)
virtual=8080
    protocol=fwm
    scheduler=sh
    checkport=80
    [...]

L'astuce supplémentaire consiste à utiliser les "firewall marks" afin de gérer de manière identique les connections 80 et 443 (par exemple pour maintenir les sessions PHP en passant de HTTP à HTTPS); dans iptables:

# Mark = 8080
"${IPTABLES}" --table mangle --append PREROUTING --destination <virtual-ip>/32 --protocol tcp --dport 80 --jump MARK --set-mark 8080
"${IPTABLES}" --table mangle --append PREROUTING --destination <virtual-ip>/32 --protocol tcp --dport 443 --jump MARK --set-mark 8080

Bons tests,

Cédric Dufour



J’ai bien sûr fouillé Internet, mais sans grand résultat.

Merci pour vos expertises et vos avis

Jacques Tissot
Unifr.ch





_______________________________________________

gull mailing list

gull at forum.linux-gull.ch<mailto:gull at forum.linux-gull.ch>

http://forum.linux-gull.ch/mailman/listinfo/gull

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://forum.linux-gull.ch/pipermail/gull/attachments/20170208/ddbedcd6/attachment-0001.html>


More information about the gull mailing list