Client ssh et port forwarding sont derrière un proxy...


Logo OpenSSH

Mon but : Avoir accès à tous les services de mon serveur perso depuis le boulot.

Le truc : Un firewall bloque tous les ports (on ne peut atteindre que les ports HTTP et HHTPS), donc impossible pour moi d'accéder à mon serveur IMAP ou autre.

La solution : SSH et le port forwarding !


Vous avez un serveur linux à la maison ?
Vous avez plein de services auxquels vous voulez accéder ?
Vous ne pouvez pas car les ports sont bloqués par le firewall de votre boîte ? Le proxy ne permet de sortir que vers les ports HTTP et HTTPS ?

Cette page est pour vous :-)

Sur le serveur

1. Autoriser le X11 forwarding (pouvoir lancer des applications graphiques du serveur à distance)

Editer /etc/ssh/sshd_config, mettre yes devant X11Forwarding

Redémarrer ssh en tapant: /etc/init.d/ssh restart

2. Rendre le serveur SSH accessible depuis le port TCP 443

Trois solutions :

  • Le top : iptables et le prerouting redirect. Expliqué ici.
  • Sinon : Rediriger le port TCP 443 de votre box / routeur vers le port TCP 22 de votre serveur. Tuto ici par exemple. C'est ce que j'ai fais chez moi.
  • Au pire : Faire écouter le serveur SSH sur le port 443. Il y a 2 inconvénients: on est obligé de spécifier le port quand on est dans le LAN (ssh -p 443 serveur) et on ne peut pas mettre de serveur HTTPS sur ce même port. Je vous déconseille cette solution mais elle fonctionne. Il faut modifier la 5ème ligne du fichier /etc/ssh/sshd_config et redémarrer le service.

Sur un client Linux

1. Récupérer le script ssh-https-tunnel

Télécharger le script:

cd /usr/local/bin wget http://www.uq.edu.au/~suter/software/ssh-https-tunnel/ssh-https-tunnel

Modifier les 4 lignes en fonction de votre proxy:

# Proxy details
my $host = "proxy.example.com";
my $port = 3128;
# Basic Proxy Authentication - leave empty if you don't need it
my $user = "";
my $pass = "";

Rendre le fichier exécutable par tous:

chmod 755 /usr/local/bin/ssh-https-tunnel

2. Créer le fichier de config ssh

Pour éviter de taper une longue ligne de commande SSH, nous allons créer un fichier de config pour la connexion.

Créer ou éditer le fichier ~/.ssh/config de cette façon :

# Nom de la connexion
Host maison
# Activer le compression à 6/10
Compression yes
CompressionLevel 6
# Limiter le nombre de tentatives de connexion
ConnectionAttempts 3
# Activer le déport des applications graphiques X11
ForwardX11 yes
# Permettre aux machines distantes de se connecter aux ports locaux redirigés
GatewayPorts yes
# Adresse IP de votre box
HostName ADRESSE.IP.ADSL.MAISON
# Port d'écoute du SSH
Port 443
# Envoyer régulièrement de messages de maintient de la connexion. A ajuster / supprimer suivant la qualité de votre connexion. 
ProtocolKeepAlives 5
# Utiliser le script ssh-https-tunnel pour joindre ce serveur
ProxyCommand /usr/local/bin/ssh-https-tunnel %h %p
# Si vous utilisez une clé publique/privée pour se connecter automatiquement, décommentez et modifiez cette ligne.
#IdentityFile /etc/ssh/id_rsa_frans
# PARTIE INTÉRESSANTE # Redirection de ports locaux vers le serveur
# SSH client -> serveur:2222 (pour accéder à sa machine de boulot depuis la maison par la commande ssh -p 2222 login@localhost)
RemoteForward 2222 localhost:22
# Redirection de ports du serveur vers le client (la partie encore plus intéressante !)
# imap (TCP 143) serveur -> client (sur TCP 1143) (pour accéder à mes mails perso)
LocalForward *:1143 localhost:143
# smtp (TCP 25) serveur -> client (sur TCP 1025) (pour envoyer mes mails perso)
LocalForward *:1025 localhost:25
# LDAP (TCP 389) serveur -> client (sur TCP 1389) (pour avoir accès à mon carnet d'adresses)
LocalForward *:1389 localhost:389
# Squid serveur -> client (pour surfer rapidement ^^)
LocalForward *:8000 localhost:8000
# On peut ajouter ce que l'on veut (webmin, mldonkey, serveur icecast...)

3. Se connecter

Il suffit de taper ssh maison

Sur un client Windows

Je vous renvoie vers un excellent tuto très bien expliqué.

Utilisation

Vous pouvez maintenant configurer vos clients (mails et autres) pour qu'ils se connectent sur localhost. Pareil pour le proxy, vous pouvez utiliser localhost:8000 pour passer par le proxy de la maison :-) Les services sont accessibles tant que la connexion est active. Encore une fois: **Merci SSH !!!**

Commentaires