Passer outre un filtrage réseau (firewall/proxy) grâce à un tunnel SSH
24/09/2018
Il arrive parfois que l'on se connecte à Internet derrière une connexion non-sûre (wifi public), filtrant le contenu (proxy) ou très restrictive et n'autorisant guère plus que les ports 80 (http) et le 443 (https).
Dans ces cas-là, une solution s'impose pour pouvoir surfer en toute liberté : le tunnel SSH !
Nous allons voir comment monter un tunnel SSH vers un serveur accessible par Internet. Ce serveur nous servira de porte de sortie vers un Internet non-bridé.
Le principe de fonctionnement est le suivant :
Nous ouvrons depuis notre ordinateur un tunnel SSH vers un serveur de confiance. Puis, nous redirigeons nos flux réseau vers ce tunnel SSH qui nous servira de passerelle de sortie.
Afin d'être le plus efficace possible, nous utiliserons un serveur disposant d'un port SSH en écoute sur le port 443.
Par défaut, un serveur SSH écoute sur le port TCP 22. Ce qui peut poser problème si l'on se trouve derrière une connexion Internet n'autorisant pas le trafic sur ce port.
Le port TCP 443 (HTTPS) étant très rarement filtré, nous allons faire écouter notre serveur SSH sur ce port.
Pour cela, nous modifions le fichier de configuration de notre serveur OpenSSH (pour Debian/Ubuntu) :
Nous recherchons les lignes suivantes :
Et nous y ajoutons la ligne indiquant à OpenSSH d'être en écoute sur le port 443 :
Ce qui nous donne, une fois la modification saisie, les trois lignes suivantes :
Enfin, nous effectuons un rechargement de la configuration du serveur SSH :
/!\ Attention /!\ : si nous avons également un serveur Apache qui tourne sur le même serveur, nous devons d'abord nous assurer qu'il n'est pas déjà en écoute sur le port 443.
D'une façon générale, pour vérifier simplement si un port TCP est en écoute sur un serveur, un petit coup de telnet suffit :
Ce qui, dans notre cas, donne :
Si notre serveur est en écoute, nous obtiendrons un message du type :
Si notre serveur n'est pas en écoute, nous obtiendrons alors un message du type :
À ce stade, nous disposons d'un serveur SSH en écoute sur le port TCP 443. Il ne nous reste plus qu'à monter notre tunnel !
Nous commençons par télécharger Putty.
Nous lançons le logiciel, puis, dans l'onglet session, nous renseignons les champs "Host name" et "Port" correspondant à notre serveur SSH :
Ensuite, nous nous rendons dans l'onglet SSH > Connection > Tunnels.
Dans le champ "Source port", nous saisissons 1234, et nous choisissons les options "Dynamic" et "Auto", puis nous cliquons sur le bouton "Add" :
Il nous reste à cliquer sur "Open", ce qui lance une connexion classique sur notre serveur distant.
Si vous êtes derrière un proxy
Si nous nous trouvons derrière un proxy (en entreprise, par exemple), il nous faut renseigner les informations du proxy au niveau des paramètres de Putty. Ça se passe dans Connection > Proxy.
Il reste à choisir le type de proxy (généralement HTTP), renseigner l'URL du proxy et le port d'écoute (souvent le 8080).
Si un username & password sont nécessaires pour l'accès au proxy, nous renseignons ces éléments sur cette même page :
Notre tunnel SSH est prêt. Il nous reste à rediriger nos flux vers ce tunnel.
Sous GNU/Linux, la mise en place du tunnel se résume en une seule ligne de commande :
Soit, par exemple :
Notre tunnel SSH est prêt.
Et pour éviter les timeout, nous pouvons ajouter une option de keep alive (option "ServerAliveInterval" avec sa valeur à préciser en seconde) :
Il nous reste à rediriger nos flux vers ce tunnel.
Notre tunnel SSH est monté. Nous souhaitons dorénavant l'utiliser pour rediriger nos flux à travers ce tunnel.
Pour cela, nous utiliserons ce tunnel SSH comme un proxy. C'est d'ailleurs la raison pour laquelle nous avons configuré un port d'écoute local (le port 1234).
Ainsi, pour utiliser ce proxy, nous devons configurer nos logiciels avec les informations suivantes :
- adresse du serveur proxy : localhost (ou 127.0.0.1)
- port du serveur proxy : 1234
Exemple pour Firefox :
Se rendre dans Édition > Préférences > Avancé > Réseau (ou Outils > Options > Avancé > Réseau)
Cliquer sur le bouton "Paramètres...", puis choisir "Configuration manuelle du proxy" et renseigner les paramètres comme suit :
Type : SOCKS5
URL : 127.0.0.1
Port : 1234
Voilà !
Tous nos articles classés par thème
Voir un article au hasard
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.
Dans ces cas-là, une solution s'impose pour pouvoir surfer en toute liberté : le tunnel SSH !
Nous allons voir comment monter un tunnel SSH vers un serveur accessible par Internet. Ce serveur nous servira de porte de sortie vers un Internet non-bridé.
Principe de fonctionnement
Le principe de fonctionnement est le suivant :
Nous ouvrons depuis notre ordinateur un tunnel SSH vers un serveur de confiance. Puis, nous redirigeons nos flux réseau vers ce tunnel SSH qui nous servira de passerelle de sortie.
Afin d'être le plus efficace possible, nous utiliserons un serveur disposant d'un port SSH en écoute sur le port 443.
Mettre en écoute son serveur SSH sur le port 443
Par défaut, un serveur SSH écoute sur le port TCP 22. Ce qui peut poser problème si l'on se trouve derrière une connexion Internet n'autorisant pas le trafic sur ce port.
Le port TCP 443 (HTTPS) étant très rarement filtré, nous allons faire écouter notre serveur SSH sur ce port.
Pour cela, nous modifions le fichier de configuration de notre serveur OpenSSH (pour Debian/Ubuntu) :
myserver# vim /etc/ssh/sshd_config
Nous recherchons les lignes suivantes :
# What ports, IPs and protocols we listen for Port 22
Et nous y ajoutons la ligne indiquant à OpenSSH d'être en écoute sur le port 443 :
Port 443
Ce qui nous donne, une fois la modification saisie, les trois lignes suivantes :
# What ports, IPs and protocols we listen for Port 22 Port 443
Enfin, nous effectuons un rechargement de la configuration du serveur SSH :
myserver# /etc/init.d/ssh reload
/!\ Attention /!\ : si nous avons également un serveur Apache qui tourne sur le même serveur, nous devons d'abord nous assurer qu'il n'est pas déjà en écoute sur le port 443.
D'une façon générale, pour vérifier simplement si un port TCP est en écoute sur un serveur, un petit coup de telnet suffit :
telnet mon-serveur-cible mon-port-cible
Ce qui, dans notre cas, donne :
telnet myserver.mydomain.tld 443
Si notre serveur est en écoute, nous obtiendrons un message du type :
Trying myserver.mydomain.tld... Connected to myserver.mydomain.tld. Escape character is '^]'.
Si notre serveur n'est pas en écoute, nous obtiendrons alors un message du type :
Trying myserver.mydomain.tld... telnet: Unable to connect to remote host: Connection refused
À ce stade, nous disposons d'un serveur SSH en écoute sur le port TCP 443. Il ne nous reste plus qu'à monter notre tunnel !
Monter le tunnel SSH - Solution Windows
Nous commençons par télécharger Putty.
Nous lançons le logiciel, puis, dans l'onglet session, nous renseignons les champs "Host name" et "Port" correspondant à notre serveur SSH :
Ensuite, nous nous rendons dans l'onglet SSH > Connection > Tunnels.
Dans le champ "Source port", nous saisissons 1234, et nous choisissons les options "Dynamic" et "Auto", puis nous cliquons sur le bouton "Add" :
Il nous reste à cliquer sur "Open", ce qui lance une connexion classique sur notre serveur distant.
Si vous êtes derrière un proxy
Si nous nous trouvons derrière un proxy (en entreprise, par exemple), il nous faut renseigner les informations du proxy au niveau des paramètres de Putty. Ça se passe dans Connection > Proxy.
Il reste à choisir le type de proxy (généralement HTTP), renseigner l'URL du proxy et le port d'écoute (souvent le 8080).
Si un username & password sont nécessaires pour l'accès au proxy, nous renseignons ces éléments sur cette même page :
Notre tunnel SSH est prêt. Il nous reste à rediriger nos flux vers ce tunnel.
Monter le tunnel SSH - Solution Linux
Sous GNU/Linux, la mise en place du tunnel se résume en une seule ligne de commande :
ssh -D port-local nomutilisateur@nomhôte -p port-distant
Soit, par exemple :
ssh -D 1234 root@myserver.mydomain.tld -p 443
Notre tunnel SSH est prêt.
Et pour éviter les timeout, nous pouvons ajouter une option de keep alive (option "ServerAliveInterval" avec sa valeur à préciser en seconde) :
ssh -o ServerAliveInterval=2 -D 1234 root@myserver.mydomain.tld -p 443
Il nous reste à rediriger nos flux vers ce tunnel.
Rediriger ses flux réseaux à travers le tunnel VPN
Notre tunnel SSH est monté. Nous souhaitons dorénavant l'utiliser pour rediriger nos flux à travers ce tunnel.
Pour cela, nous utiliserons ce tunnel SSH comme un proxy. C'est d'ailleurs la raison pour laquelle nous avons configuré un port d'écoute local (le port 1234).
Ainsi, pour utiliser ce proxy, nous devons configurer nos logiciels avec les informations suivantes :
- adresse du serveur proxy : localhost (ou 127.0.0.1)
- port du serveur proxy : 1234
Exemple pour Firefox :
Se rendre dans Édition > Préférences > Avancé > Réseau (ou Outils > Options > Avancé > Réseau)
Cliquer sur le bouton "Paramètres...", puis choisir "Configuration manuelle du proxy" et renseigner les paramètres comme suit :
Type : SOCKS5
URL : 127.0.0.1
Port : 1234
Voilà !
Pour aller plus loin
Tous nos articles classés par thème
Voir un article au hasard
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.
Retrouvez nos services et firewall pour pfSense & OPNsense
Aucun commentaire
Flux RSS des commentaires de cet article