Usando o Netcat para comunicação de rede simples

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá os fundamentos da comunicação de rede usando o Netcat, uma ferramenta versátil frequentemente descrita como o “canivete suíço” das redes. Você descobrirá como esse utilitário permite ler e gravar dados por meio de conexões de rede usando os protocolos TCP ou UDP.

Com atividades práticas, você explorará os fundamentos da comunicação cliente-servidor, criará um sistema de bate-papo simples e compreenderá conceitos essenciais de rede, como as portas. O laboratório também apresentará técnicas básicas de criptografia para a transmissão segura de dados.

Instalando o Netcat

Nesta etapa, vamos preparar a ferramenta certa antes de iniciar nossa comunicação de agente secreto. O Netcat é frequentemente chamado de “canivete suíço” das ferramentas de rede porque consegue realizar diversas tarefas relacionadas a redes. Vamos instalar o Netcat no sistema passo a passo.

Primeiro, abra o terminal. Na área de trabalho, localize e abra o Xfce Terminal. É no terminal que digitaremos todos os comandos para trabalhar com o Netcat.

Captura de tela da abertura do Xfce Terminal

Observação: usuários gratuitos não podem se conectar à internet, portanto o Netcat já vem pré-instalado no ambiente do laboratório. Você pode ir diretamente ao item 4 da lista (verificar se o Netcat está instalado). Faça upgrade para o plano Pro para praticar a instalação do Netcat por conta própria.

Somente para usuários Pro

Depois de abrir o terminal, precisamos atualizar as listas de pacotes. Isso garante que obteremos a versão mais recente do Netcat. Digite o comando a seguir e pressione Enter:

sudo apt update

O sistema pode solicitar sua senha. Digite-a (os caracteres não serão exibidos durante a digitação) e pressione Enter. A parte sudo indica que o comando será executado com privilégios de administrador.

Agora que as listas de pacotes estão atualizadas, vamos instalar o Netcat. O gerenciador de pacotes cuidará automaticamente de todas as dependências. Execute o comando a seguir:

sudo apt install netcat -y

A opção -y responde automaticamente “sim” a todas as confirmações, tornando a instalação mais rápida. Isso é útil quando você tem certeza de que deseja instalar o pacote.

Após a conclusão da instalação, vamos verificar se o Netcat foi instalado corretamente. Para isso, consultaremos sua versão. Execute:
nc -h

Você deverá ver uma saída que começa com “OpenBSD netcat”, seguida por uma lista de opções. Isso significa que o Netcat está instalado e pronto para uso. A opção -h exibe as informações de ajuda, sendo uma boa maneira de testar se um programa está funcionando.

Parabéns! Você acabou de instalar uma poderosa ferramenta de rede. O Netcat oferece muitos recursos, desde transferências simples de arquivos até a criação de conexões de rede. Neste laboratório, vamos nos concentrar no uso básico para ajudar você a entender suas capacidades. Pense no Netcat como uma forma simples de conectar computadores e enviar informações entre eles.

Entendendo portas e criando um listener

Agora que nossa ferramenta de comunicação está pronta, vamos aprender sobre portas e configurar um listener. Em redes, as portas são como diferentes canais de rádio: elas permitem que várias comunicações ocorram simultaneamente no mesmo dispositivo. Imagine-as como portas numeradas, cada uma levando a um serviço ou aplicativo diferente no computador.

Vamos criar um listener. Usaremos a porta 12345 para nossa comunicação. Os números de porta variam de 0 a 65535, e escolhemos 12345 porque é fácil de lembrar e normalmente não é usada por serviços do sistema. No terminal, digite:

nc -l 12345

Esse comando instrui o Netcat a escutar (-l) na porta 12345. A opção -l significa modo “listen”, ou escuta, no qual o computador aguardará conexões de entrada nessa porta.

O terminal parecerá travado. Não se preocupe! Esse comportamento é esperado, pois o Netcat está escutando ativamente e aguardando alguém se conectar à porta 12345. O cursor piscando indica que o programa está funcionando corretamente no modo de escuta.

Para testar nosso listener, precisamos abrir outra janela do terminal. Você pode fazer isso clicando com o botão direito no ícone do terminal e selecionando “New Terminal”, ou usando o atalho Ctrl+Shift+N. Esse segundo terminal funcionará como nosso “cliente”, que se conectará ao listener.

Nesse novo terminal, vamos nos conectar ao listener. Digite:

nc localhost 12345

Esse comando instrui o Netcat a se conectar a localhost (ou seja, ao próprio computador) na porta 12345. localhost é um nome de host especial que sempre aponta para a máquina atual.

Agora, digite uma mensagem simples, como “Hello”, nesse segundo terminal e pressione Enter. Você deverá ver a mensagem aparecer no primeiro terminal, onde o listener está em execução. Isso demonstra como os dados viajam do terminal que iniciou a conexão até o terminal em modo de escuta por meio da porta de rede.

Listener e conexão do Netcat

Você pode continuar digitando mensagens em qualquer um dos terminais, e elas aparecerão no outro. Isso demonstra a capacidade full-duplex do Netcat, ou seja, a comunicação pode fluir simultaneamente nos dois sentidos. Experimente enviar algumas mensagens de um lado para o outro para observar o funcionamento.

Para encerrar a conexão, pressione Ctrl+C nos dois terminais. Esse atalho envia um sinal de interrupção que fecha as sessões do Netcat de forma adequada. É importante encerrar corretamente as conexões quando terminar os testes.

Transferindo arquivos com o Netcat

Agora que aprendemos a estabelecer uma comunicação de rede básica com o Netcat, vamos explorar uma de suas aplicações mais práticas: transferir arquivos entre sistemas. Essa capacidade simples, mas poderosa, torna o Netcat uma ferramenta valiosa para administradores de sistemas e engenheiros de rede.

Primeiro, criaremos um arquivo de exemplo para transferir. No terminal, digite:

cd ~/project
echo "Top Secret: The cake recipe is actually a lie" > secret.txt

Esse comando realiza duas ações: muda para o diretório do projeto e cria um novo arquivo chamado secret.txt, contendo nossa mensagem de exemplo. O símbolo > redireciona a saída do comando echo para um arquivo.

Agora vamos configurar o lado que receberá o arquivo. Abra uma janela do terminal e execute:

cd ~/project
nc -l 12345 > received_secret.txt

Nesse caso, nc -l 12345 inicia o Netcat no modo de escuta na porta 12345. O símbolo > redireciona todos os dados recebidos para um novo arquivo chamado received_secret.txt. Esse terminal aguardará silenciosamente por conexões de entrada.

Em uma janela separada do terminal, mantendo a primeira em execução, enviaremos o arquivo:

cd ~/project
nc localhost 12345 < secret.txt

Esse comando usa o Netcat para se conectar ao nosso listener (localhost significa “este mesmo computador”) na porta 12345. O símbolo < instrui o Netcat a usar secret.txt como entrada, enviando efetivamente o conteúdo do arquivo pela conexão de rede.

A transferência acontece instantaneamente porque os dois lados estão na mesma máquina. Para confirmar que ela foi concluída com sucesso, verifique o conteúdo do arquivo recebido:

cat received_secret.txt

O comando cat exibe o conteúdo do arquivo, que deverá ser exatamente igual à nossa mensagem secreta original.

Captura de tela da transferência de arquivo com o Netcat

Parabéns! Você transferiu um arquivo com sucesso usando o Netcat. Embora tenhamos usado localhost nesta demonstração, o mesmo processo funciona entre computadores diferentes em uma rede: basta substituir localhost pelo endereço IP do computador que receberá o arquivo. Esse método simples pode ser extremamente útil para transferências rápidas quando protocolos mais complexos não estiverem disponíveis.

Implementando comunicação criptografada

Nesta etapa, adicionaremos uma camada de segurança à nossa comunicação implementando criptografia com o OpenSSL e integrando-a ao Netcat. A criptografia é essencial para proteger informações confidenciais contra interceptação e leitura por pessoas não autorizadas durante a transmissão pela rede.

Já aprendemos a usar o OpenSSL nos laboratórios anteriores. O OpenSSL oferece funções criptográficas robustas que usaremos para proteger nossas mensagens. Especificamente, utilizaremos o comando openssl enc para criptografar e descriptografar mensagens com a cifra AES-256-CBC, um forte algoritmo de criptografia simétrica. Também usaremos uma senha para derivar a chave de criptografia — pense nela como um segredo compartilhado entre o remetente e o destinatário.

Primeiro, vamos criar o script do remetente. Esse script será responsável por criptografar e enviar as mensagens. Abra um novo arquivo chamado secure_sender.sh:

nano secure_sender.sh

Adicione o conteúdo a seguir ao arquivo (você pode copiar e colar o conteúdo):

#!/bin/bash

echo "Secure Sender - Enter messages to send. Press Ctrl+C to exit."

while true; do
  echo "Enter message:"
  read message
  encrypted=$(echo "$message" | openssl enc -aes-256-cbc -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null)
  echo "$encrypted" | nc -N localhost 12345
done

O script funciona da seguinte maneira:

  • Solicita continuamente que você digite mensagens dentro de um loop
  • Recebe sua entrada e a encaminha ao OpenSSL para criptografia
  • Usa o Netcat (nc) para enviar os dados criptografados à porta 12345 em localhost
  • Os parâmetros de criptografia incluem salt para aumentar a segurança, codificação base64 para uma transmissão segura e derivação de chave PBKDF2 com 10.000 iterações

Exemplo de script do remetente seguro

Pressione Ctrl+X, depois Y e, por fim, Enter para salvar e sair do arquivo. Torne o script executável:

chmod +x secure_sender.sh

Agora, vamos criar o script do destinatário. Esse script escutará e descriptografará as mensagens recebidas. Abra um novo arquivo chamado secure_receiver.sh:

nano secure_receiver.sh

Adicione o conteúdo a seguir:

#!/bin/bash

echo "Secure Receiver - Waiting for messages. Press Ctrl+C to exit."

while true; do
  encrypted=$(nc -l 12345)
  if [ ! -z "$encrypted" ]; then
    decrypted=$(echo "$encrypted" | openssl enc -aes-256-cbc -d -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null)
    echo "Received message: $decrypted"
  fi
done

No ambiente Ubuntu 22.04 usado neste laboratório, a sintaxe padrão do listener do OpenBSD Netcat é nc -l 12345. Não adicione -p ao usar -l neste caso.

Esse script:

  • Escuta continuamente a porta 12345 em busca de dados recebidos
  • Quando os dados chegam, encaminha-os ao OpenSSL para descriptografia
  • Usa os mesmos parâmetros de criptografia do remetente para descriptografar corretamente a mensagem
  • Exibe a mensagem original em texto claro

Pressione Ctrl+X, depois Y e, por fim, Enter para salvar e sair do arquivo. Torne o script executável:

chmod +x secure_receiver.sh

Agora, vamos testar nosso sistema de comunicação criptografada. Você precisará manter duas janelas do terminal abertas simultaneamente: uma para o destinatário e outra para o remetente.

No primeiro terminal, inicie o destinatário:

./secure_receiver.sh

Você verá uma mensagem informando que o destinatário está aguardando mensagens. O destinatário já estará escutando ativamente na porta 12345.

No segundo terminal, inicie o remetente:

./secure_sender.sh

Será solicitado que você digite mensagens. Tudo o que for digitado será criptografado antes de ser enviado pela rede.

No terminal do remetente, digite uma mensagem e pressione Enter. Você deverá ver a mensagem criptografada sendo enviada, embora a versão criptografada apareça apenas brevemente durante a transmissão.

Mensagem criptografada

No terminal do destinatário, a mensagem descriptografada deverá aparecer exatamente como foi digitada no terminal do remetente.

Você pode continuar enviando mensagens pelo terminal do remetente. Elas serão criptografadas, enviadas, recebidas e descriptografadas automaticamente no terminal do destinatário. Isso demonstra um ciclo completo de comunicação segura.

Para encerrar a comunicação, pressione Ctrl+C nos dois terminais. Isso encerra os dois scripts com segurança.

Essa configuração demonstra um sistema de comunicação criptografada simples, mas eficaz. Embora estejamos usando localhost para os testes, a mesma abordagem funciona em redes. As mensagens são criptografadas automaticamente antes da transmissão e descriptografadas ao chegar, oferecendo um canal seguro de comunicação. Lembre-se de que, em aplicações reais, seria recomendável usar métodos mais seguros para a troca de chaves do que uma senha codificada diretamente no script.

Resumo

Neste laboratório, você aprendeu os fundamentos da comunicação de rede usando o Netcat e explorou técnicas básicas de criptografia para transferir dados com segurança. Você praticou a instalação do Netcat, estabeleceu conexões por meio de portas específicas e transferiu arquivos entre sistemas.

Essa experiência prática demonstrou a importância da criptografia nas comunicações de rede por meio de uma implementação com o OpenSSL. Essas habilidades fundamentais oferecem um ponto de partida sólido para compreender conceitos mais avançados de cibersegurança e protocolos de comunicação segura.