Utiliser SSH comme proxy SOCKS

A quoi va nous servir ceci ?

A naviguer plus anonymement, en gros on fait passer (presque) tous par un tunnel SSH, ce qui fait que le serveur finale, lui n'a connaissance que de l'IP du serveur qui héberge SSH. En gros c'est presque comme un tunnel VPN, en plus simple.

Avantages

Plus simple à mettre en place qu'un serveur VPN, natif sous linux.

Inconvénients

Les requêtes dns ne passe pas par ce tunnel, mais tous le reste. Il faut également configurer chaque applications pour qu'elle passe par ce proxy.

Comment sa marche ?

Sans rentré dans les détails techniques, la solution que nous allons utilisé utilise le SSH de notre dédié, plus putty sur le client, rien de plus simple.
En gros on configure putty pour qu'il créé un tunnel sur un port spécifique (port locale au client), puis on connecte l'application cliente sur ce port locale.

On attaque ?

Sur le dédié

Ba en fait on a rien a faire, sauf si SSH n'est pas installé, mais normalement cela est fait.

Sur le client

Sous windows

Il faut utilisé un client SSH, Ici nous utiliserons putty (même si je lui préfère kitty).
Pour le configurer, c'est plutôt simple.
Déjà configurer le de la même manière que vous le faites pour vous connecté au serveur (si vous avez enregistré vos paramètres, choisissez le bon et cliquer sur load). Sauf qu'il faut ajouter une options :
Dans Connection -> SSH -> Tunnels :
Ajouté dans "Source port", un port voulu, perso j'utilise 8080.
Sélectionné "Dynamic".
Et cliquer sur "Add", normalement vous avez D8080 qui apparait dans la liste au dessus.
Il n'y a plus qu'a ouvrir la session en cliquant sur Open.

Une fenêtre s'ouvre comme d'habitude, si vous n'utilisez pas d'authentification par clé, connecté vous. Ne fermez surtout pas la fenêtre, sinon le tunnel se terminera
Et c'est tous.

Sous linux

Ouvrez une console et taper :

ssh -D 8080 login@dédiéIP

D pour dynamic, et 8080 le numéro de port choisi (ceci n'est pas le port SSH, mais un port choisi arbitrairement).
A adapté si vous utilisez une connexion par clé, ou un autre port

L'application

Nous allons prendre comme exemple Firefox.
Allez dans les options, puis Avancés, Réseau, et cliquez sur Paramètres en face de de Connexions.
Et configurer comme sur l'image :

Pour tester allez sur le site http://www.mon-ip.com/, et vérifiez que l'IP affiché est celle de votre dédié.

Bonus, configurer une passerelle, ou comment bien faire les choses

Petit bonus que j'utilise chez moi, j'ai un raspberry (mais sa peut être n'importe qu'elle serveur) qui me sers de passerelle a ce proxy SOCKS. Cela évite de devoir configurer toutes les machines de la maison de cette manière, et c'est plutôt contraignant de devoir tous reconfigurer a chaque reboot.

Pour ce faire, il faut une connexion par clé. Puisque nous faisons les choses bien, nous allons créé un nouvelle utilisateur sur le dédié, pour gérer tous seul ceci. (Je ne partirais pas sur les spécifications que certains ont pour la configuration du serveur ssh, comme le match d'user ou autres).

Sur le dédié

On ajoute un utilisateur :

adduser sshtunnel

Et c'est tous pour le dédié.

Sur le RPI (ou autres)

Création de l'utilisateur

On ajoute également un user :

$ adduser sshtunnel

On ce connecte sur cette user :

$ sudo su - sshtunnel

ou

$ su - sshtunnel

Création de la clé RSA

On crée la clé RSA :

$ ssh-keygen -t RSA -b 4096 # Oui c'est une grosse clé

On ne mets pas de passphrase

On transfère la clé publique :

$ ssh-copy-id -i ~/.ssh/id_rsa.pub sshtunnel@dédiéIP

Si vous avez un autre port:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 2222 sshtunnel@dédiéIP"

on test si la connexion passe :

$ ssh -i ~/.ssh/id_rsa sshtunnel@dédiéIP

Si on ce connecte, c'est tous bon.

Configuration SSH :

Nous allons configurer un alias pour cette connexion, pour ce faire, créé ce fichier :

nano ~/.ssh/config

Et on ajoute ceci dedans :

Host dedie
    HostName dédiéIP
    User sshtunnel
    IdentityFile ~/.ssh/id_rsa
    Port 22
    DynamicForward 0.0.0.0:8080

Explication :

  • Host : C'est juste un nom, on peu mettre ce qu'on veux
  • HostName : L'ip de votre dédié
  • User : L'user de connexion
  • IdentityFile : La clé privé
  • Port : le port de connexion ssh
  • DynamicForward : le port d'écoute plus l'ip d'écoute

On test :

$ ssh dedie

Si sa fonctionne, on quitte.
et on relance avec :

$ ssh -f -N dedie

Ceci permets de faire tourner la connexion en background

Script de relance

$ nano /opt/tunnel.sh
#!/bin/bash

PORT=8080

netstat -an | grep $PORT  > /dev/null 2>&1
if [ $? -eq 1 ]
then
    ssh -f -N dedie
fi

Le script est plutôt simple, si la connexion n'existe pas, on relance.

On va créé une petite tache cron qui s'executera toutes les minutes, pour évité les coupures, puisqu'il arrive qu'une connexion ssh ce coupe.

$ crontab -e 

et on ajoute :

* * * * * /opt/tunnel.sh

Sur les clients

Configuration

On reprends firefox, on refait pareil, mais a la place de mettre 127.0.0.1, on mets l'ip du RPI (pour moi 192.168.1.16).

On test de nouveau avec mon-ip.com, et normalement, tous devrait correctement fonctionner.

Contribution

Toute contribution est la bienvenue.

N'hésitez pas à contribuer au Tutoriel, ajout d'information, correction de fautes (et il y en a), amélioration etc ...

Ça se passe ici

Questions

Toute question sur la discussion ou sur github

2 ans plus tard
Répondre…