
Proxy HTTP/HTTPS via SSH
Proxy HTTP/HTTPS via SSH.
go install github.com/justmao945/mallory/cmd/mallory@latestLe chemin par défaut est $HOME/.config/mallory.json, peut être défini au lancement du programme :
mallory -config path/to/config.json
Contenu :
id_rsa est le chemin vers notre fichier de clé privée, peut être généré par ssh-keygenlocal_smart est l'adresse locale pour servir le proxy HTTP avec détection intelligente de l'hôte de destinationlocal_normal est similaire à local_smart mais envoie tout le trafic via le serveur SSH distant sans détection de l'hôte de destinationremote est l'adresse distante du serveur SSHblocked est une liste de domaines nécessitant un proxy, tous les autres domaines se connecteront directement à leur serveur{
"id_rsa": "$HOME/.ssh/id_rsa",
"local_smart": ":1315",
"local_normal": ":1316",
"remote": "ssh://[email protected]:22",
"blocked": [
"angularjs.org",
"golang.org",
"google.com",
"google.co.jp",
"googleapis.com",
"googleusercontent.com",
"google-analytics.com",
"gstatic.com",
"twitter.com",
"youtube.com"
]
}
La liste bloquée dans le fichier de configuration est rechargée automatiquement lorsqu'elle est modifiée, et vous pouvez le faire manuellement :
# envoyer un signal pour recharger
kill -USR2 <pid de mallory>
# ou utiliser la commande reload en envoyant une requête http
mallory -reload
localhost avec le port 1315 pour utiliser la liste de blocagehttp_proxy et https_proxy sur localhost:1316 pour une utilisation en terminalmallory -suffix www.google.com
# installer : go get github.com/justmao945/mallory/cmd/forward
# tout le trafic via le port 20022 sera redirigé vers destination.com:22
forward -network tcp -listen :20022 -forward destination.com:22
# vous pouvez vous connecter en ssh à destination:22 via localhost:20022
ssh root@localhost -p 20022
En considérant le fichier de configuration suivant :
$ cat mallory.json
{
"id_rsa": "/tmp/id_rsa",
"local_smart": ":1315",
"local_normal": ":1316",
"remote": "ssh://[email protected]:22"
}
Vous pouvez exécuter le conteneur (zoobab/mallory) en montant le fichier de configuration, la clé SSH, et en mappant les 2 ports :
$ docker run -v $PWD/mallory.json:/root/.config/mallory.json -p 1316:1316 -p 1315:1315 -v $PWD/.ssh/id_rsa:/tmp/id_rsa zoobab/mallory
mallory: 2020/03/30 16:51:10 main.go:22: Starting...
mallory: 2020/03/30 16:51:10 main.go:23: PID: 1
mallory: 2020/03/30 16:51:10 config.go:103: Loading: /root/.config/mallory.json
mallory: 2020/03/30 16:51:10 main.go:30: Connecting remote SSH server: ssh://[email protected]:22
mallory: 2020/03/30 16:51:10 main.go:38: Local normal HTTP proxy: :1316
mallory: 2020/03/30 16:51:10 main.go:48: Local smart HTTP proxy: :1315
Mon cas d'utilisation était de me connecter à un cluster Kubernetes (Openshift) installé derrière un bastion SSH :
$ export http_proxy=http://localhost:1316
$ export https_proxy=https://localhost:1316
$ oc login https://master.mycluster.zoobab.com:8443
Authentication required for https://master.mycluster.zoobab.com:8443 (openshift)
Username: bhenrion
Password:
Login successful.