Aller au contenu

Haproxy : Ssh Et Ssl Sur Le M


Messages recommandés

Bonjour à tous,

J'ai lu qu'il était possible, via haproxy, de faire fonctionner ssl et ssh sur le même port un peu comme on peut le faire avec sslh.

L'intérêt, dans mon cas, est de pouvoir accéder à mon syno en ssh depuis le port 443 qui est le seul port ouvert depuis le boulot.

Voici la conf que j'ai mise en place et que j'ai mise dans le fichier de conf haproxy ( /usr/local/haproxy/var/haproxy.cfg)

defaults
  timeout connect 5s
  timeout client 50s
  timeout server 20s

listen ssl :444
  tcp-request inspect-delay 2s
  acl is_ssl req_ssl_ver 2:3.1
  tcp-request content accept if is_ssl
  use_backend ssh if !is_ssl
  server www-ssl :443
  timeout client 2h

backend ssh
  mode tcp
  server ssh :22
  timeout server 2h

L'idée est d'écouter le traffic sur le port 444 du syno (redirection du port 443 de la freebox sur le port 444 du syno) et en fonction de ce que haproxy voit il oriente soit sur son port 443 (ssh) soit sur son port 22 (ssh).

C'est la conf que l'on trouve partout sur le net pour cette config (pour la version 1.4 je crois)

quand je lance haproxy j'ai une erreur


/var/packages/haproxy/scripts/start-stop-status start
Starting HAProxy ...
[WARNING] 061/150555 (10478) : [/usr/local/haproxy/sbin/haproxy.main()] Cannot raise FD limit to 4011.
[ALERT] 061/150555 (10478) : Starting proxy ssl: cannot bind socket [0.0.0.0:444]

J'ai essayé de changer de port de mettre les adresses IP, j'ai ouvert le port 444 dans le firewall....ça ne change rien

J'ai beau chercher je ne trouve pas de réponse à ce problème.

Je ne sais pas si cela vient d'un pb de la conf ou d'une limitation du syno

Quand je passe la commande "netstat -lpn" le port 444 n'est pas pris par un autre processus.

Si une âme charitable et surtout plus douée que moi peut m'aider, merci d'avance.

Vincent

Modifié par vrolland
Lien vers le commentaire
Partager sur d’autres sites

Bon, ça intéresse personne on dirait :wacko:

Pourtant il y a plein d'avantage a faire tourne ssh sur le port 443 il y a beaucoup moins d'attaque par exemple

et puis du boulot on peut monter un tunnel ssh et encapsuler le traffic http dedans pour naviguer sur tous les sites

sans filtrage de l'entreprise et sans laisser de trace....

Lien vers le commentaire
Partager sur d’autres sites

Nounours44 m'as envoyé ca config pour faire cela :


listen https_in
bind : 80443
mode tcp
option tcplog
log 127.0.0.1 user info
tcp-request inspect-delay 8s
acl is_ssl req_ssl_ver 2:3.1
use_backend ssh if !is_ssl
tcp-request content accept if is_ssl
tcp-request content accept if { req_ssl_hello_type 1 }
<autres backends>

backend ssh
mode tcp
server ssh : 443
timeout connect 5s
timeout server 1h

Lien vers le commentaire
Partager sur d’autres sites

Salut,

merci beaucoup pour ta réponse.

As tu testé cette conf de ton côté ? Voila ce que ça donne chez moi.

Il semble qu'il n'aime pas trop le port 80443 (bind : 80443) au lancement j'ai cette erreur :

[ALERT] 075/092926 (23420) : parsing [/usr/local/haproxy/var/haproxy.cfg:8] : 'bind' : invalid port '80443' specified for address '*:80443'.
J'ai donc changé le port (1002 ici mais j'en ai essayé d'autres) et au lancement la même erreur qu'avant
Starting HAProxy ...
[WARNING] 075/093224 (2416) : [/usr/local/haproxy/sbin/haproxy.main()] Cannot raise FD limit to 4011.
[ALERT] 075/093224 (2416) : Starting proxy https_in: cannot bind socket [0.0.0.0:1002]
Modifié par vrolland
Lien vers le commentaire
Partager sur d’autres sites

Oui mais c'est définie dans le fichier de conf ça ou c'est en dure ?

Voici la première ligne de mon fichier de conf original

frontend https
    bind :5443 ssl crt /usr/local/haproxy/var/crt/default.pem

C'est ce qui me fait penser que l'on peut changer cette valeur, cependant je vais essayer avec le port 5443

Lien vers le commentaire
Partager sur d’autres sites

Je suis reparti de la conf sur mon premier post, en mettant le port 50443 dans la partie 'listen ssl'.
Je n'ai plus d'erreur sur le port mais d'autres...ce sont des WARNING mais haproxy ne se lance pas pour autant.
[WARNING] 076/232737 (17439) : [/usr/local/haproxy/sbin/haproxy.main()] Cannot raise FD limit to 4011.
[WARNING] 076/232737 (17439) : [/usr/local/haproxy/sbin/haproxy.main()] FD limit (1024) too low for maxconn=2000/maxsock=4011. Please raise 'ulimit-n' to 4011 or more to avoid any trouble.
Je tourne un peu en rond, c'est dommage car un package sslh a été abandonné car Haproxy devait faire la même chose...

Edit :

Le package est bien lancé...mais les connexions ssl/ssh sur le port 50443 sont refusées...

28562 root 2976 S /bin/sh /var/packages/haproxy/scripts/start-stop-status start
28567 haproxy 2976 S -sh -c PATH=/usr/local/haproxy/bin:/usr/local/haproxy/env/bin:/usr/loc
28569 haproxy 4912 S /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/var/haproxy.cfg
Modifié par vrolland
Lien vers le commentaire
Partager sur d’autres sites

la mise au point du paramétrage haproxy pour ce type de besoin est assez délicate. Le mieux est de partir d'un fichier minimal auquel tu ajoutes progressivement d'autres backends.

Pour cela, n'utilise pas l'outil de paramétrage fourni avec le spk, mais édite directement le fichier /usr/local/haproxy/var/haproxy.cfg.

Ensuite tu fais un "/var/packages/haproxy/scripts/start-stop-status restart" pour prendre en compte tes modifications.

Il existe quelques pages sur internet qui décrivent ces paramétrages, et il y a également la documentation officielle : http://haproxy.1wt.eu/download/1.5/doc/configuration.txt

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Salut,

Non j'ai abandonné cette idée...a priori personne ne l'a fait, Je n'ai pas eu plus d'aide sur le forum anglais.

Pour terminé j'ai acheté un raspberry que je fais tourner sous archlinux avec sslh et apache qui fait reverse proxy.

Avantage de cette solution : quand je fais une mise a jour du NAS je n'ai plus rien à reconfigurer...

A+

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...
  • 3 semaines après...
  • 1 mois après...
  • 4 mois après...

Hello,

J'ai réussi à faire fonctionner ssl et ssh sur le même port avec la config suivante :

global
daemon
maxconn 256
log localhost user info
spread-checks 10

defaults
# mode http
stats enable
default-server inter 30s fastinter 5s
log global
# option httplog
timeout connect 5s
timeout client 50s
timeout server 50s
timeout tunnel 1h

listen stats :8280
stats uri /
stats show-legends
stats refresh 10s
stats realm Haproxy Statistics
stats auth admin:admin

listen ssl :5443
tcp-request inspect-delay 2s
acl is_ssl req_ssl_ver 2:3.1
tcp-request content accept if is_ssl
use_backend ssh if !is_ssl
server www-ssl 127.0.0.1:443
timeout client 2h
option forwardfor
option httpclose

frontend http
bind :5080
option http-server-close
option forwardfor
default_backend web

backend ssh
mode tcp
server ssh :22
timeout server 2h

backend web
server web localhost:80 check

J'ai également redirigé les ports 443 vers 5443 et 80 vers 5080.

Fabien

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Déjà merci Moonface pour ta conf.

Cependant, il reste un petit truc que j'aimerai faire.

Lorsque je ne fais pas du ssh, j'aimerai pouvoir rediriger vers mon frontend https afin que haproxy en fonction de l'url me renvoie vers tel ou tel backend paramétré. Mon intuition me fait dire que haproxy voit en entré une url du type 127.0.0.1 et ne permet donc pas de matcher vers le bon backend.

Quelqu'un a-t-il une idée?

Merci

Fried.

Lien vers le commentaire
Partager sur d’autres sites

Hello,

Voici la config que j'ai finalement terminé. Je sais pas si elle répondra complètement à tes besoins :

global
daemon
maxconn 256
log localhost user info
spread-checks 10

defaults
# mode http
stats enable
default-server inter 30s fastinter 5s
log global
# option httplog
timeout connect 5s
timeout client 50s
timeout server 50s
timeout tunnel 1h

listen stats :8280
mode http
stats uri /
stats show-legends
stats refresh 10s
stats realm Haproxy Statistics
stats auth admin:password


listen ssl :5443
tcp-request inspect-delay 2s
acl is_ssl req_ssl_ver 2:3.1
tcp-request content accept if is_ssl
use_backend ssh if !is_ssl
server www-ssl 127.0.0.1:5444
timeout client 2h
option forwardfor
option httpclose

frontend http
bind :5080
mode http
option http-server-close
use_backend proxy if { hdr_beg(Host) -i proxy. }
http-request redirect scheme https if { hdr_beg(Host) -i audio. file. dl. free. cam. }
default_backend web


frontend https
bind :5444 ssl crt /usr/local/haproxy/var/crt/default.pem
mode http
option http-server-close
option forwardfor

use_backend audio if { hdr_beg(Host) -i audio. }
use_backend file if { hdr_beg(Host) -i file. }
use_backend dl if { hdr_beg(Host) -i dl. }
use_backend free if { hdr_beg(Host) -i free. }
use_backend cam if { hdr_beg(Host) -i cam. }
default_backend web

backend web
mode http
server web localhost:80 check

backend audio
mode http
server audio localhost:8800 check

backend proxy
mode http
server proxy localhost:8280 check

backend file
mode http
server file localhost:7000 check

backend dl
mode http
server dl localhost:8000 check

backend cam
mode http
server cam localhost:9900 check

backend free
mode http
server free mafreebox.free.fr:80 check

backend ssh
mode tcp
server ssh :22
timeout server 2h

Fabien

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.