diff --git a/content/posts/netcat.pt.md b/content/posts/netcat.pt.md new file mode 100644 index 0000000..d0d0fa2 --- /dev/null +++ b/content/posts/netcat.pt.md @@ -0,0 +1,129 @@ ++++ +date = '2024-10-31T22:00:53-03:00' +title = 'Netcat' +description = "Post no blog do Thanwer sobre a ferramenta netcat." +tags = [ + "GNU/Linux", + "Tools", +] +canonical = "/posts/netcat" ++++ + +Já ouvi muitas vezes de algum colega de trabalho, ou de algum prestador de serviços frases como "Tem algo de errado com a rede", ou "Essa porta não está aberta!". + +Voce pode usar testes online para verificar as portas abertas, uma rapida pesquisa no Google vai te trazer resultados bons, porem nem sempre isso é o suficiente. + +## O problema +Vamos supor que voce seguiu meu outro post sobre [restringir por endereço de origem no iptables({{< ref "/posts/iptables-basics" >}} "Iptables basics"), nesse caso essas ferramentas aleatórias não vão lhe ajudar, então voce pode usar o nmap! + +Farei um post sobre o nmap no futuro, por enquanto vamos usa-lo de forma bem simples para verificar se uma porta está aberta: + +```bash +$ sudo nmap -sS -p 80 example.com +Password: +Starting Nmap 7.95 ( https://nmap.org ) at 2024-10-31 22:08 -03 +Nmap scan report for example.com (192.0.0.4) +Host is up (0.18s latency). +Other addresses for example.com (not scanned): 2001:db8::192:0:0:4 + +PORT STATE SERVICE +80/tcp open http + +Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds +``` + +Como voce pode ver, a parte importante é o -p 80, que especifica a porta que queremos testar, 80 nesse caso, e o ultimo argumento é o host que estamos escaneando. + +Agora vamos supor que a outra pessoa está configurando uma central telefonica, que é um exemplo clássico... Eu tenho muitas historias para contar sobre essa galera da telefonia... Por exemplo, ele pode ter errado uma configuração simples, como o gateway ou a mascara de rede, e isso vai fazer com que o seu serviço não funcione. Ele vai fazer os testes que expliquei acima e em vez da porta aparecer como "open" ela vai dizer "filtered". + +Com isso ele vai ter o argumento pronto, e vai culpar a sua rede por isso. Como podemos provar que as nossas regras de firewall estão corretas e funcionando? + +A forma mais simples é usar o netcat! + +## netcat (nc) + +O netcat é uma ferramenta super simples, porem muito poderosa para esses casos. Com ela voce pode subir rapidamente um serviço em qualquer porta TCP ou UDP! + +### Instalação + +A instalação é muito simples! Em um sistema Debian basta executar o seguinte comando: +```bash +$ sudo apt install netcat +``` + +### Usando a ferramenta + +Lhes convido a ler a [man page do nc](https://linux.die.net/man/1/nc). + +Os principais argumentos que precisamos são: + +* -p : Isso especifica a porta que queremos escutar. +* -k : Isso mantem o netcat aberto mesmo depois do cliente desconectar. +* -u : Isso faz o netcat escutar UDP em vez de TCP. + +### Casos de uso + +#### Testar comunicação de rede + +Escutar na porta 2000: +```bash +$ nc -l 2000 + +``` +Isso inicia um serviço na porta 2000. + +Agora vamos abrir outro terminal e conectar um cliente a essa porta: +```bash +$ nc localhost 2000 + +``` + +Em ambos os terminais voce deve ver algo semelhante a um chat funcionando, isso é transmitido atravéz da rede! + +Veja um exemplo disso funcionando: + +![Exemplo de uso do netcat](/images/nc-example1.gif) + +#### Transferencia de arquivos + +O netcat tambem pode ser usado para transferir arquivos entre dois hosts, isso é util em casos de ambientes sem acessos FTP ou SCP. + +No receptor: + +```bash +$ nc -l -p 1234 > arquivo_recebido.txt +``` +No transmissor, assumindo que o receptor seja o IP 192.0.0.2:: + +```bash +$ nc 192.0.0.2 -p 1234 < arquivo_para_enviar.txt +``` + +Isso pode ser util para transferir um arquivo de log, por exemplo. + +#### Port scac + +nc pode ser usado como uma alternativa "mais barata" para o nmap: +```bash +$ nc -z host.example.com 20-30 +Connection to host.example.com 22 port [tcp/ssh] succeeded! +Connection to host.example.com 25 port [tcp/smtp] succeeded! +``` + +#### Falar diretamente com servidores + +nc também pode ser usado como alternativa para o telnet em alguns casos para troubleshooting. + +Por exemplo, podemos falar diretamente com um servidor SMTP na porta 25: + +```bash +$ nc localhost 25 << EOF +HELO host.example.com +MAIL FROM: +RCPT TO: +DATA +Body of email. +. +QUIT +EOF +```