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).
