Como Rodar ShellInABox Atrás de um Túnel Cloudflare Sem Erros

ShellInABox é uma ferramenta leve para acesso remoto via terminal web. No entanto, ao colocá-lo atrás de um túnel da Cloudflare, é comum se deparar com o erro:

400 Bad Request

Este post cobre o cenário de execução local no Debian 11, com o ShellInABox configurado para trabalhar sem SSL e o túnel Cloudflare gerenciando a camada segura (TLS).


1. Cenário

[ Navegador ] ⇄ [ Cloudflare Tunnel ] ⇄ [ ShellInABox localhost:4200 ]
  • URL pública: https://terminal.seudominio.com
  • Serviço local: ShellInABox rodando em HTTP na porta 4200
  • TLS termina no túnel

2. Problema

Por padrão, o ShellInABox escuta com SSL habilitado. Isso conflita com a terminação TLS feita pela Cloudflare e resulta em erro HTTP 400.


3. Solução: Desabilitar SSL no ShellInABox

3.1 Editar o arquivo de configuração

Abra o arquivo:

vi /etc/default/shellinabox

Localize a linha:

SHELLINABOX_ARGS="--no-beep"

E altere para:

SHELLINABOX_ARGS="--no-beep --disable-ssl"

Isso faz o ShellInABox escutar requisições HTTP simples, o que é o comportamento esperado quando está por trás de um túnel com TLS externo.

3.2 Reiniciar o serviço

systemctl restart shellinabox

3.3 Testar localmente

curl -i http://localhost:4200

Se tudo estiver certo, você verá:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
...

4. Configurar o Túnel Cloudflare

No arquivo config.yml do seu túnel (geralmente em /etc/cloudflared/), defina:

tunnel: <id-do-seu-tunel>
credentials-file: /etc/cloudflared/<credenciais>.json

ingress:
  - hostname: terminal.seudominio.com
    service: http://localhost:4200
  - service: http_status:404

Depois disso, atualize ou reinicie o túnel:

cloudflared tunnel run <nome-do-tunel>

5. Segurança

Ao desabilitar o SSL no ShellInABox, o serviço fica vulnerável caso exposto diretamente à internet. Portanto:

  • Nunca exponha diretamente a porta 4200
  • Garanta que apenas o túnel tenha acesso a ela (via firewall ou bind local)

6. Debug

Verifique se a porta está escutando:

ss -lntp | grep 4200

Verifique os logs do túnel:

cloudflared tunnel run --loglevel debug <nome-do-tunel>

Conclusão

Desabilitar SSL no ShellInABox e deixá-lo atrás de um túnel TLS da Cloudflare resolve o problema de erro 400 e simplifica a comunicação. Esta abordagem mantém segurança (TLS externo) e simplicidade (HTTP interno).

Rolar para cima