06 - Telnet (23) - Histórico e Limitações
video: https://youtu.be/... no frontmatter da nota.Telnet (porta 23) — Histórico e Limitações
1. Definição
O Telnet (TELetype NETwork) é um protocolo da camada de aplicação, definido na RFC 854 (1983), que permite a um terminal acessar remotamente um computador como se estivesse localmente conectado. Usa TCP na porta 23 e oferece um canal bidirecional interativo com um shell remoto. Foi o primeiro protocolo padronizado da ARPANET (RFC 97, 1971) e durante três décadas foi o padrão de fato para administração remota de servidores, roteadores e mainframes.
Hoje, o Telnet é considerado obsoleto e inseguro para acesso remoto administrativo, substituído universalmente pelo SSH (RFC 4251, 2006) a partir dos anos 2000. Ainda encontra uso legítimo em testes de conectividade TCP (substituto do netcat), em dispositivos embarcados antigos (routers, switches legados, impressoras) e em ambientes isolados (laboratórios, redes out-of-band).
Características Técnicas
| Atributo | Valor |
|---|---|
| RFC base | 854 (1983), sucessoras 855-861 |
| Porta TCP | 23 |
| Transporte | TCP (orientado a conexão, confiável) |
| Criptografia | Nenhuma |
| Autenticação | Usuário/senha em texto puro |
| Modelo | Cliente/servidor, terminal virtual (NVT) |
| Encoding | ASCII 7-bit (NVT), negociável para 8-bit |
| Multiplexação | Não (conexão 1:1) |
| Tamanho máximo de linha | Negociado (geralmente 512 bytes) |
2. Contexto Histórico
O Telnet precede a própria internet. Em 1969, na ARPANET, o primeiro comando de login remoto foi implementado para permitir que pesquisadores acessassem computadores distantes. A padronização formal veio com a RFC 97 (1971) e a consolidação na RFC 854 (1983), que define a Network Virtual Terminal (NVT) — uma abstração de terminal que permite interoperabilidade entre sistemas heterogêneos (IBM mainframes, PDP-11 Unix, VMS).
Linha do Tempo
| Ano | Evento |
|---|---|
| 1969 | Primeiro login remoto na ARPANET (UCLA → SRI) |
| 1971 | RFC 97 — primeira especificação Telnet |
| 1983 | RFC 854 — padronização do Telnet moderno com NVT |
| 1983 | RFC 855-861 — opções (Negociações Telnet) |
| 1995 | Tatu Ylönen lança SSH 1.0 (substituto seguro) |
| 2000 | SSH 2.0 (RFC 4251) consolida substituição |
| 2000s | Provedores e vendors desativam Telnet por padrão |
| 2010s | CISCO, Juniper desabilitam Telnet em novos equipamentos |
| Hoje | Apenas testes de porta, dispositivos legados |
Por que o Telnet dominou por tanto tempo? Porque a internet original era uma rede de confiança entre pesquisadores e militares, sem adversários na rede. A necessidade de criptografia só emergiu quando a internet se massificou nos anos 1990 e ataques de sniffing se tornaram triviais.
3. Arquitetura — Network Virtual Terminal (NVT)
A NVT é uma abstração de um terminal "mínimo comum" — um terminal de impressão imaginário com teclado e papel, operando em ASCII 7-bit. O cliente Telnet traduz as teclas locais para NVT; o servidor traduz NVT para o terminal real do sistema operacional. Isso garante interoperabilidade entre sistemas com terminais diferentes (VT100, ANSI, IBM 3270).
Negociação de Opções (IAC)
O Telnet usa o byte 0xFF (255) como Interpret As Command (IAC) para inserir comandos de controle no fluxo de dados. Após IAC, vêm o código de comando e opcionalmente opções:
| Comando | Código | Função |
|---|---|---|
IAC |
255 | Início de comando |
DONT |
254 | Pedir para desabilitar opção |
DO |
253 | Pedir para habilitar opção |
WONT |
252 | Recusar habilitar opção |
WILL |
251 | Aceitar habilitar opção |
SB |
250 | Início de sub-negociação |
SE |
240 | Fim de sub-negociação |
Opções Comuns
| Código | Opção | Função |
|---|---|---|
| 0 | Binary Transmission | Modo 8-bit |
| 1 | Echo | Servidor ecoa caracteres |
| 3 | Suppress Go Ahead | Modo caractere-a-caractere |
| 24 | Terminal Type | Negociar tipo (VT100, xterm) |
| 31 | Window Size | Negociar tamanho (NAWS) |
| 34 | Linemode | Modo linha (em vez de char) |
Exemplo de negociação capturada: servidor envia IAC DO 24 ("Você suporta Terminal Type?"), cliente responde IAC WILL 24 ("Sim"), servidor envia IAC SB 24 1 IAC SE ("Qual seu tipo?"), cliente responde IAC SB 24 0 XTERM IAC SE ("Sou xterm").
4. Limitações e Vulnerabilidades
O Telnet é inaceitável em redes modernas por questões fundamentais de segurança:
1. Senhas em Texto Puro
Todo o tráfego — comandos USER, PASS e a sessão inteira de shell — viaja em ASCII legível. Qualquer sniffer na rota (Wireshark, tcpdump, ettercap) captura credenciais instantaneamente:
$ tcpdump -A -i eth0 port 23
12:34:56 IP cliente.54321 > servidor.telnet: ...
..USER admin..
..PASS s3nha123..
..ls -la..
2. Sem Integridade
Um atacante na rota (MITM) pode alterar comandos em trânsito — por exemplo, injetar rm -rf / em uma sessão de root.
3. Sem Autenticidade do Servidor
O cliente não valida a identidade do servidor. Qualquer máquina pode se passar por um servidor Telnet e capturar senhas (ataque de honeypot).
4. Sem Forward Secrecy
Mesmo que o tráfego seja capturado e armazenado hoje, se a senha não for trocada, a captura histórica permite acesso anos depois.
5. Ataques Específicos
- Telnet Bounce: usar um servidor Telnet como proxy para mascarar origem de ataques.
- Session Hijacking: sequestrar sessão TCP via ARP spoofing + injeção de pacotes.
- Brute-force sem rate-limit: servidores Telnet antigos não têm proteção contra força bruta.
5. Por que foi Substituído pelo SSH
O SSH (Secure Shell), lançado em 1995 por Tatu Ylönen em resposta a um sniffer que capturou 30.000 senhas na universidade de Helsinki, resolve todas as limitações do Telnet:
| Característica | Telnet | SSH |
|---|---|---|
| Criptografia | Nenhuma | AES, ChaCha20, Curve25519 |
| Autenticação senha | Texto puro | Cifrada no canal |
| Autenticação chave pública | Não | Sim (Ed25519, RSA) |
| Integridade | Nenhuma | HMAC, Poly1305 |
| Forward do agente | Não | Sim (com cautela) |
| Port forwarding | Não | Sim (-L, -R, -D) |
| Túnel X11 | Não | Sim |
| SFTP/SCP | Não | Sim |
| Auditabilidade | Limitada | Logs ricos (auth.log) |
| Compliance (PCI, LGPD) | Falha | Conforme |
A migração Telnet → SSH nos anos 2000 foi um dos marcos de segurança da internet. Vendors como Cisco desabilitaram Telnet por padrão em novos equipamentos a partir de 2010.
6. Uso Moderno Legítimo
Apesar de obsoleto para administração, o Telnet ainda tem nichos de uso:
1. Teste de Conectividade TCP
telnet host porta verifica se uma porta TCP está aberta — substituto simples do nc (netcat):
telnet www.exemplo.com 80 # Testar web
telnet smtp.exemplo.com 25 # Testar SMTP
telnet db.exemplo.com 5432 # Testar PostgreSQL
# Conectado → porta aberta; Connection refused → fechada; Timeout → firewall drop
Nota: o comando nc (netcat) é hoje preferido para esse fim, por não enviar IAC nem tentar negociação NVT.
2. Dispositivos Embarcados Legados
Routers domésticos antigos, switches gerenciáveis antigos, impressoras de rede e equipamentos industriais frequentemente oferecem apenas Telnet como interface de gerenciamento. Nesses casos, deve-se isolar em rede separada (VLAN out-of-band) ou usar túnel SSH como wrapper.
3. Diagnóstico de Protocolos Textuais
Protocolos texto (SMTP, FTP, POP3, IMAP, HTTP/1.1) podem ser testados manualmente via Telnet para validar respostas, simular clientes e debugar. Por exemplo, conversar com POP3 (porta 110): enviar USER, PASS, LIST e QUIT para validar resposta de mensagens.
7. Diagnóstico de Problemas Comuns
| Sintoma | Causa | Solução |
|---|---|---|
Connection refused |
Porta 23 fechada no servidor | Habilitar ou usar SSH |
Connection timeout |
Firewall bloqueando | Verificar ACL/FW |
| Caracteres aparecem duplicados | Echo local + echo remoto | stty -echo no servidor |
| Teclas seta não funcionam | Tipo de terminal errado | export TERM=xterm |
\r\n aparece como ^M |
Tradução LF/CRLF | Configurar cliente |
| Não consegue sair | ^] para prompt Telnet |
quit ou ^D |
Comandos do Cliente Telnet
Dentro de uma sessão Telnet, ^] (Ctrl+]) abre o prompt telnet>: ? lista comandos, status mostra estado, mode line/mode char alterna modos, toggle crlf traduz CRLF, quit sai.
8. Alternativas Modernas
| Caso | Substituto |
|---|---|
| Acesso shell remoto | SSH (ssh user@host) |
| Teste de porta TCP | nc -zv host porta, nmap, curl -v telnet://host:porta |
| Transferência de arquivos | SFTP, SCP, rsync |
| Acesso a console serial | screen /dev/ttyUSB0 115200, minicom, picocom |
| Debug de protocolos | openssl s_client, nc, socat |
9. Boas Práticas (quando inevitável)
| Prática | Recomendação |
|---|---|
| Desabilitar Telnet em servidores | systemctl disable telnetd |
| Substituir por SSH | Sempre que possível |
| Isolar dispositivos legados | VLAN out-of-band dedicada |
| Wrapper SSH | ssh -L 23:host-legado:23 bastion |
| Não usar em produção | Jamais expor porta 23 à internet |
| Auditoria | Monitorar tentativas de login |
| Senhas únicas | Senhas distintas para Telnet legado |
| Documentar | Marcar como débito técnico a migrar |
10. Conclusão
O Telnet é uma das peças mais importantes da história da internet: por 30 anos foi o protocolo padrão para acesso remoto, permitindo que a ARPANET e a internet crescessem. Sua substituição pelo SSH nos anos 2000 marca a transição da "internet de confiança" para a "internet hostil" moderna. Hoje, deve ser visto como uma relíquia técnica: impossível para administração (senhas em texto puro, sem criptografia, sem integridade), mas ainda útil como ferramenta de diagnóstico (teste de porta TCP, debug de protocolos textuais) e em nichos legados (dispositivos embarcados antigos). Em novos projetos, sempre preferir SSH; manter Telnet apenas em ambientes isolados, documentados como dívida técnica a ser quitada com migração.