
Proxy HTTP/HTTPS sobre SSH
Proxy HTTP/HTTPS sobre SSH.
go install github.com/justmao945/mallory/cmd/mallory@latestO caminho padrão é $HOME/.config/mallory.json, pode ser definido ao iniciar o programa
mallory -config path/to/config.json
Conteúdo:
id_rsa é o caminho para o nosso arquivo de chave privada, pode ser gerado por ssh-keygenlocal_smart é o endereço local para servir proxy HTTP com detecção inteligente do host de destinolocal_normal é semelhante a local_smart, mas envia todo o tráfego através do servidor SSH remoto sem detecção do host de destinoremote é o endereço remoto do servidor SSHblocked é uma lista de domínios que precisam usar proxy, qualquer outro domínio se conectará diretamente ao seu servidor{
"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"
]
}
A lista de bloqueio no arquivo de configuração será recarregada automaticamente quando atualizada, e você pode fazer isso manualmente:
# enviar sinal para recarregar
kill -USR2 <pid do mallory>
# ou usar o comando reload enviando uma requisição http
mallory -reload
localhost com a porta 1315 para usar com a lista de bloqueiohttp_proxy e https_proxy para localhost:1316 para uso no terminalmallory -suffix www.google.com
# instalar: go get github.com/justmao945/mallory/cmd/forward
# todo o tráfego através da porta 20022 será encaminhado para destination.com:22
forward -network tcp -listen :20022 -forward destination.com:22
# você pode usar ssh para destination:22 através de localhost:20022
ssh root@localhost -p 20022
Considerando o seguinte arquivo de configuração:
$ cat mallory.json
{
"id_rsa": "/tmp/id_rsa",
"local_smart": ":1315",
"local_normal": ":1316",
"remote": "ssh://[email protected]:22"
}
Você pode executar o container (zoobab/mallory) montando o arquivo de configuração, a chave SSH e mapeando as 2 portas:
$ 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
Meu caso de uso foi conectar a um cluster Kubernetes (Openshift) instalado atrás de um bastião 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.