Internet via SSH (tunnel+proxy) 🛸

Faut avouer, ça casse sacrément les coui***s dans certaines situations, de ne pas pouvoir avoir accès à internet sur sa bécane. 😒

En effet, dans des cas bien précis comme une machine placée en DMZ, ou encore, une machine que l'on souhaite isoler du net, l'accès à internet🌍est nécessaire pour l'installation de nouveaux paquets, la mise à jour de certains d'entre eux.

Cet article à simple but d'expliquer comment palier à cette problématique!

Avant toutes choses, je pars du principe que vous êtes quelqu'un de bon, et que vous utilisez en conséquence un poste client sous GNU/Linux (bouuuuuh les Windowsiens). Même chose pour le serveur!

Vous devez aussi posséder:

  • Un client SSH (narmol) sur le poste client;
  • Un serveur SSH (ça va de soi) sur le serveur.

Installation & configuration

Bon, maintenant que vous vous êtes assurés que vous avez bien les prérequis, on va installer le paquet tinyproxy qui est un petit serveur mandataire et qui va nous servir pour rediriger les flux vers internet (et donc faire office de serveur mandataire: LOL).

Notre proxy verra tout ce qui transite!

Bon, trêve de bavardage, passons à la pratique maestro! On va commencer par mettre à jour la liste des paquets disponibles (je suis sur 2 machines Debian 10 pour ma démo):

sudo apt update

Maintenant que c'est fait, on installe le paquet souhaité:

sudo apt install tinyproxy -y

Bon, c'est bien beau tout ça, maintenant on va attaquer la configuration ma gueule! Pour se faire, on commence par désactiver le lancement du service au démarrage de notre machine puis on le stoppe:

sudo systemctl disable tinyproxy; sudo systemctl stop tinyproxy

On va configurer le port d'écoute ainsi que l'interface en éditant le fichier /etc/tinyproxy/tinyproxy.conf et en modifiant comme suit:

Port 3128
Listen 127.0.0.1
Bien sûr vous êtes libre d'utiliser le port que vous souhaitez!

A présent, il reste à démarrer le service!

sudo systemctl start tinyproxy; sudo systemctl status tinyproxy

Connexion 🚙

Bon bah maintenant, on va initier la connexion en créant notre fameux tunnel SSH vers notre serveur.

Pour ce faire, voici la commande à utiliser pour se connecter à la machine tout en initiant le tunnel:

ssh -R 3128:127.0.0.1:3128 username@host

Une fois connecté, on va rediriger les flux http et https vers notre proxy monté dans le tunnel:

export http_proxy=http://127.0.0.1:3128
export https_proxy=http://127.0.0.1:3128

Plus qu'à tester!

Pour tester, on va pas s'emmerder, on va juste faire un simple mise à jour de la liste des paquets disponibles:

sudo apt update

Voilà! Vous êtes fin prêt à tout faire fumer! (J'avoue que j'aurais pu mettre un bon vieux mazout Renault reprogrammé juste pour la blague, mais je n'ai pas envie de m'attirer la flamme des pros-Renault).

Sans oublier de couper le service tinyproxy à la toute fin!

En complément

Si on doit utiliser le proxy régulièrement, il peut être sympa de se créer des petits alias pour éviter les commandes à rallonge systemctl...

Vous gagnerez un peu en productivité aussi !

Ajouter la configuration suivante dans le fichier ~/.bashrc:

alias proxy-start="sudo systemctl start tinyproxy"
alias proxy-status="sudo systemctl status tinyproxy"
alias proxy-stop="sudo systemctl stop tinyproxy"

Recharger le fichier:

. .bashrc

Je vous laisse le soin d'essayer, le nom des alias et plus que parlant!