Comment appliquer le SSH Proxy Socks à tout le système?

Bonjour,

j’ai crée le socket local d’un tunnel ssh qui permet de se connecter à une machine proxy, en tapant la commande :

$ ssh foo@ip_proxy -p 443 -D 8888

je sais qu’on peut utiliser ce SSH Proxy Socks pour tout le système, en utilisant NetworkManager.

Pour cela, il suffit d’aller dans Paramètres > Réseau > Serveur mandataire, puis on saisi l’adresse du socket local, donc ici 127.0.0.1:8888, ainsi, il n’y a plus besoin d’aller dans les paramètres de n’importe quelle application cliente (comme chrome, firefox, thunderbird, etc) pour configurer le proxy socks, car tout l’internet de la machine passe par le proxy socks.

Le problème, est que je ne souhaite pas être dépendant de NetworkManager, je voudrais appliquer le proxy socks à tout le système en ligne de commande.

Pour cela, j’ai fouillé dans les fichiers de configuration de NetworkManager dans /etc/ pour savoir comment il a fait, mais je n’ai rien trouvé.

La commande iptables -v -L -n ne donne rien non plus.

Je me dit que peut-être qu’il faut toucher un ou des fichiers du dossier /proc/sys/net/…, ou /et passer par iptables.

Par contre, en tapant la commande set | egrep -i proxy ou env | egrep -i proxy, je remarque que NetworkManager a ajouté deux variables d’environnement qui sont all_proxy et ALL_PROXY :

all_proxy=socks://127.0.0.1:8888/
ALL_PROXY=socks://127.0.0.1:8888/

J’ai testé ces variables d’environnements en les ajoutant dans le fichier ~/.profile de mon utilisateur de session, comme ceci :

export all_proxy=socks://127.0.0.1:8888/
export ALL_PROXY=socks://127.0.0.1:8888/

J’ai vu aussi dans la doc de NetworkManager, qu’il utilisait un fichier PAC et la fonction javascript FindProxyForURL() : proxy: NetworkManager Reference Manual

Puis, après reboot, et en retapant la commande ssh foo@ip_proxy -p 443 -D 8888, et en ouvrant chrome, ça ne marche pas.

Une idée ?

Bonjour,

Il y a aussi un moyen de faire un VPN avec ssh, chercher « VIRTUAL PRIVATE NETWORKS » dans la page de man de ssh .

Cependant, ssh fonctionne avec TCP. Or, faire passer du TCP par-dessus du TCP pose des problèmes.
On peut trouver des informations à ce sujet en recherchant « TCP meltdown » sur le web. Ici, pour Wikipédia .

OpenVPN, à ma connaissance, utilise des techniques pour mitiger le problème du TCP meltdown lorsqu’il est configuré pour fonctionner en mode TCP.
Je suggère donc de partir sur l’utilisation d’OpenVPN.

La solution utilisée par défaut par OpenVPN pour faire passer « tout » le trafic réseau via le VPN fonctionne relativement bien.
Si tu veux améliorer ce point, il faudra bosser cette documentation : https://www.wireguard.com/netns/
( OpenVPN utilise la technique " Overriding The Default Route" )


AnonymousCoward

1 J'aime

Sinon, renseignes toi sur redsocks (avec des règles iptables effectivement), mais ous networkmanager, je crois qu’il suffit de rajouter

[proxy]
method=auto
socks=127.0.0.1:3128

dans /etc/NetworkManager/system-connections/nom_de_la_connexion.nmconnection mais pas sur que ça fonctionne. Je crois que redsocks est la solution la plus complète

1 J'aime

quel est l’objectif de ce proxy?

Merci pour vos réponses.

En faite, je crois que ça ne sert à rien de rediriger tous les packets de la chaine OUTPUT ou de la chaine POSTROUTING vers le port local du SOCKS, car d’après la page SOCKS — Wikipédia, SOCKS est un « protocole », càd que le client (comme chrome ou firefox) qui souhaite envoyer ses paquets à la socket local à destination du serveur SOCKS, doit faire un pré-traitement sur ces paquets, càd les mettre au format SOCKS. Donc en gros, chrome ou firefox doivent mettre leurs données http au format SOCKS avant de les envoyer au socket local. Et donc rediriger les paquets http vers le port du socket local avec iptables ne sert à rien, car iptables ne sait pas mettre les paquets http au format SOCKS.

Salut,

En effet il faut que l’application parle socks.
Un tunnel ssh établi qui écoute en local.
Avec Firefox, et le plugin qui va bien, ca va marcher. EDIT, pour firefox: FoxyProxy.

Ce n’est pas le cas de toutes les applications.

1 J'aime

Je crois que c’est le role de redsocks, de ce que je vois:

  1. install de redsocks:
apt install redsocks
  1. Installation de la «tuyauterie» redsocks → proxy socks (en 3128): fichier /etc/redsocks.conf
base {
    log_debug = off;
    log_info = on;
    log = stderr;
    daemon = on;
    redirector = iptables;
}

redsocks {
    local_ip = 127.0.0.1;
    local_port = 12345;
    ip = 127.0.0.1;
    port = 3128;
    type = socks5;
}
  1. Règles de dérivation:
iptables -t nat -N REDSOCKS
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner redsocks -j REDSOCKS

(redsocks est l’utilisateur du démon redsocks)

Ce sont des notes que j’avais prises mais je n’avais pas développé, ça venait d’un site je pense

1 J'aime