X-Space

Aller au contenu | Aller au menu | Aller à la recherche

Connexion SSH au travers d'un proxy

Préambule

La méthode que je vais vous décrire offre la possibilité de contourner des protections/limitations mises en place par le biais d'un proxy ou d'un firewall. Son usage est sous votre entière responsabilité et peut être contraire à la politique de sécurité du lieu ou vous vous trouvez.

SSH over HTTPS

Dans mon entreprise actuelle, seuls deux ports sont disponibles en sortie : les ports web 80 et 443. Il m'est donc impossible de me connecter à mon serveur via SSH pour intervenir en cas de dysfonctionnement.

La première solution, que j'ai mise en place, a été d'utiliser un des deux ports disponibles et de rediriger son trafic vers le port SSH. Rien de plus facile avec iptables.

iptables -t nat -A PREROUTING -i eth0 -s 10.20.30.40 -p tcp --dport 443 -j REDIRECT --to-ports 22

Mais...

Dans ce cas, il n'est plus possible de me connecter à mes pages en HTTPS (webmail par exemple). Et d'autre part, l'ip est fixe. Cette solution est donc limitée.

Port-knocking à votre service

Voici donc qu'arrive le port knocking. Je vous renvois à l'article de Wikipedia pour comprendre de quoi il retourne.

Maintenant, il me suffit de faire des requêtes dans un certain ordre sur les ports 80 et 443 et une fois la séquence finie : le port 443 est redirigé vers le 22 (SSH). 10 secondes plus tard tout est rentré dans l'ordre.

Installation :

sudo aptitude install knockd

Editer : /etc/knockd.conf

[options]
    UseSyslog

[opencloseSSH]
    sequence      = 443:udp,80:udp
    seq_timeout   = 10
    tcpflags      = syn,ack
    start_command = /sbin/iptables -t nat -A PREROUTING -i eth0 -s %IP% -p tcp --dport 443 -j REDIRECT --to-ports 22
    cmd_timeout   = 10
    stop_command = /sbin/iptables -t nat -D PREROUTING -i eth0 -s %IP% -p tcp --dport 443 -j REDIRECT --to-ports 22

Et on lance le démon :

sudo knockd -d -c /etc/knockd.conf

Utilisation :

knock IP_SERVEUR 443:udp 80:udp

Il reste alors 10 secondes pour se connecter en SSH.

Debbuging

knockd peut se lancer comme une commande simple avec console. C'est pratique pour comprendre ce qui ne marche pas.

sudo knockd -D -v -c /etc/knockd.conf

Quelques références :

Commentaires

1. Le samedi, mars 19 2011, 12:06 par ED

En fait c'est loin d'être parfait cette solution.

1° : seul TCP passe par le proxy (donc tcpflags : syn)
2° : le proxy cache les pages sur le port 80 (j'essaye de forcer les header, on vera...)
3° : Vu que c'est du TCP sur le port 443 et 80 : le port knock voit toutes les requêtes web classiques donc c'est dérangeant => j'utilise une autre ip (non "publique") donc une autre interface reseau

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet