Introdução
Bem-vindo a este laboratório sobre Análise de Tráfego de Rede e Acesso Remoto Seguro em Linux. Compreender como monitorizar a atividade de rede e as comunicações seguras é uma habilidade crítica para qualquer administrador de sistemas, desenvolvedor ou entusiasta de segurança.
Neste laboratório, você terá experiência prática com um conjunto de ferramentas poderosas de linha de comando. Você aprenderá a:
- Inspecionar conexões de rede ativas e serviços em escuta usando
netstate seu sucessor moderno,ss. - Capturar e analisar pacotes de rede em tempo real com
tcpdump. - Estabelecer uma conexão remota segura à sua própria máquina usando
ssh. - Verificar a integridade das respostas DNS usando
dige DNSSEC.
Ao final deste laboratório, você terá uma compreensão prática dessas utilidades essenciais de rede e seus papéis na gestão e segurança de um sistema Linux.
Inspecionar Conexões de Rede Ativas com Netstat/SS
Nesta etapa, você aprenderá como visualizar conexões de rede ativas e portas em escuta no seu sistema. Isso é fundamental para entender quais serviços estão em execução e acessíveis pela rede. Usaremos duas ferramentas comuns: netstat e ss.
Primeiro, vamos usar o netstat, uma utilidade clássica e amplamente conhecida. O pacote net-tools, que contém o netstat, foi instalado para você durante a configuração do laboratório.
Execute o seguinte comando para listar todas as portas TCP (-t) e UDP (-u) em escuta em formato numérico (-n) sem resolver nomes, focando apenas em sockets em escuta (-l):
netstat -tuln
Você deverá ver uma saída semelhante a esta. Observe as entradas para o servidor SSH (porta 22) e o servidor web Python (porta 8000) que foram iniciados para você, juntamente com serviços adicionais nas portas 3001 e 3002:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3001 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3002 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.11:37199 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.11:60120 0.0.0.0:*
udp 0 0 0.0.0.0:3001 0.0.0.0:*
Agora, vamos usar o ss, que é o substituto moderno do netstat. Geralmente é mais rápido e fornece informações mais detalhadas. O comando e as flags são muito semelhantes.
ss -tuln
A saída será ligeiramente diferente em formato, mas mostrará as mesmas informações essenciais: os serviços em escuta nas portas 22, 3001, 3002 e 8000, juntamente com alguns serviços internos do Docker:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.11:60120 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:3001 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 5 0.0.0.0:3001 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:3002 0.0.0.0:*
tcp LISTEN 0 5 0.0.0.0:8000 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.11:37199 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
Ao usar esses comandos, você pode obter rapidamente um instantâneo dos serviços voltados para a rede do seu sistema.
Capturar Tráfego de Rede Local com Tcpdump
Nesta etapa, você usará o tcpdump, um poderoso analisador de pacotes de linha de comando, para capturar e inspecionar o tráfego de rede em tempo real. Isso é inestimável para depurar problemas de rede ou entender como os protocolos funcionam.
Primeiro, vamos ver quais interfaces de rede estão disponíveis para capturar tráfego.
sudo tcpdump -D
A saída listará as interfaces disponíveis. lo é a interface "loopback", usada para comunicação de rede dentro da mesma máquina (por exemplo, conectar-se a localhost). Você verá várias interfaces, incluindo a interface de rede principal eth1:
1.eth1 [Up, Running, Connected]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless]
5.nflog (Linux netfilter log (NFLOG) interface) [none]
6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
7.dbus-system (D-Bus system bus) [none]
8.dbus-session (D-Bus session bus) [none]
Capturaremos o tráfego na interface loopback (lo) para ver as requisições ao nosso servidor web local. Para fazer isso, você precisará de dois terminais.
No seu terminal atual, execute o seguinte comando tcpdump. Ele escutará na interface lo (-i lo) e parará após capturar 5 pacotes (-c 5).
sudo tcpdump -i lo -c 5
Agora, clique no ícone + na barra de abas do terminal para abrir um novo terminal. Neste novo terminal, gere algum tráfego de rede fazendo uma requisição ao servidor web local usando curl.
curl http://localhost:8000
Volte para o seu primeiro terminal. Você verá que o tcpdump capturou os pacotes relacionados à sua requisição curl. A saída será algo parecido com isto, mostrando o handshake TCP e a transferência de dados:
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes
14:57:14.158058 IP localhost.57272 > localhost.8000: Flags [S], seq 2025143228, win 65495, options [mss 65495,sackOK,TS val 1006286113 ecr 0,nop,wscale 7], length 0
14:57:14.158072 IP localhost.8000 > localhost.57272: Flags [S.], seq 403368374, ack 2025143229, win 65483, options [mss 65495,sackOK,TS val 1006286113 ecr 1006286113,nop,wscale 7], length 0
14:57:14.158083 IP localhost.57272 > localhost.8000: Flags [.], ack 1, win 512, options [nop,nop,TS val 1006286113 ecr 1006286113], length 0
14:57:14.158129 IP localhost.57272 > localhost.8000: Flags [P.], seq 1:79, ack 1, win 512, options [nop,nop,TS val 1006286113 ecr 1006286113], length 78
14:57:14.158133 IP localhost.8000 > localhost.57272: Flags [.], ack 79, win 511, options [nop,nop,TS val 1006286113 ecr 1006286113], length 0
5 packets captured
24 packets received by filter
0 packets dropped by kernel
Note que se você executar o tcpdump sem gerar tráfego específico, poderá ver consultas DNS em segundo plano e outras comunicações do sistema, como mostrado em seus logs. Este é um comportamento normal do sistema e demonstra que, mesmo quando você não está navegando ativamente, seu sistema mantém várias comunicações de rede.
Você capturou e visualizou com sucesso o tráfego de rede em tempo real.
Demonstrar Acesso Remoto Seguro Usando SSH
Nesta etapa, você aprenderá a usar o SSH (Secure Shell) para acesso remoto seguro. Configuraremos a autenticação baseada em chave, que é mais segura do que usar senhas, para fazer login na sua própria máquina (localhost). O openssh-server já foi iniciado para você.
Primeiro, você precisa gerar um par de chaves SSH (uma chave privada e uma chave pública). Criaremos uma chave RSA com um comprimento de bits de 2048. O flag -f especifica o arquivo para salvar a chave, e -N "" define uma passphrase vazia para conveniência neste laboratório.
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""
Este comando cria id_rsa (sua chave privada) e id_rsa.pub (sua chave pública) dentro do diretório ~/.ssh.
Em seguida, para permitir que seu próprio usuário faça login usando esta chave, você deve adicionar a chave pública ao arquivo authorized_keys. Este arquivo lista todas as chaves públicas que têm permissão para fazer login.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Por segurança, o SSH requer permissões rigorosas no diretório .ssh e seus arquivos. Vamos garantir que eles estejam configurados corretamente. O script de configuração já criou esses arquivos com as permissões corretas, mas é uma boa prática conhecer esses comandos.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Agora tudo está configurado. Você pode testar a conexão segura com localhost. O comando executará echo "Hello from SSH" no lado remoto (que é sua própria máquina) e imprimirá o resultado.
ssh labex@localhost 'echo "Hello from SSH"'
Na primeira vez que você se conectar, pode ser solicitado a verificar a impressão digital do host. Digite yes e pressione Enter. Você deverá então ver a saída do comando echo.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
Hello from SSH
Você configurou e usou com sucesso o SSH para autenticação segura baseada em chave.
Verificar Resolução DNSSEC Usando Dig
Nesta etapa, você usará o dig (Domain Information Groper) para realizar consultas DNS e aprender sobre DNSSEC (DNS Security Extensions). O DNSSEC ajuda a proteger contra spoofing de DNS adicionando assinaturas criptográficas aos dados DNS.
Primeiro, vamos realizar uma consulta DNS padrão para labex.io para ver seu endereço IP.
dig labex.io
A saída mostrará os detalhes da consulta e, o mais importante, a ANSWER SECTION com os registros A (endereços IP). Observe que labex.io possui vários endereços IP para balanceamento de carga:
; <<>> DiG 9.18.24-0ubuntu0.22.04.1-Ubuntu <<>> labex.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9789
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;labex.io. IN A
;; ANSWER SECTION:
labex.io. 10 IN A 104.26.10.219
labex.io. 10 IN A 104.26.11.219
labex.io. 10 IN A 172.67.72.162
;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Tue Aug 05 14:58:16 CST 2025
;; MSG SIZE rcvd: 85
Agora, vamos realizar a mesma consulta, mas pedindo ao resolvedor DNS para fornecer dados relacionados ao DNSSEC adicionando a opção +dnssec.
dig labex.io +dnssec
A saída inclui informações adicionais relacionadas ao DNSSEC na OPT PSEUDOSECTION, mostrando que o DNSSEC foi solicitado (o flag do significa "DNSSEC OK"). No entanto, observe que a seção flags não contém um flag ad (Authenticated Data):
; <<>> DiG 9.18.24-0ubuntu0.22.04.1-Ubuntu <<>> labex.io +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1042
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 65494
; OPT=5: 05 07 08 0a 0d 0e 0f (".......")
; OPT=6: 01 02 04 ("...")
; OPT=7: 01 (".")
;; QUESTION SECTION:
;labex.io. IN A
;; ANSWER SECTION:
labex.io. 5 IN A 172.67.72.162
labex.io. 5 IN A 104.26.11.219
labex.io. 5 IN A 104.26.10.219
;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Tue Aug 05 14:58:21 CST 2025
;; MSG SIZE rcvd: 108
A ausência do flag ad indica que, embora as informações do DNSSEC tenham sido solicitadas, o resolvedor não conseguiu validar as assinaturas ou o domínio não tem o DNSSEC habilitado.
Vamos tentar outro domínio conhecido que usa DNSSEC, icann.org, para vê-lo novamente.
dig icann.org +dnssec
Novamente, inspecione o cabeçalho na saída:
; <<>> DiG 9.18.24-0ubuntu0.22.04.1-Ubuntu <<>> icann.org +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54437
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 65494
; OPT=5: 05 07 08 0a 0d 0e 0f (".......")
; OPT=6: 01 02 04 ("...")
; OPT=7: 01 (".")
;; QUESTION SECTION:
;icann.org. IN A
;; ANSWER SECTION:
icann.org. 10 IN A 192.0.43.7
;; Query time: 72 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Tue Aug 05 14:58:26 CST 2025
;; MSG SIZE rcvd: 77
Semelhante à consulta anterior, não há flag ad na resposta. Isso indica que o resolvedor DNS neste ambiente não está realizando a validação do DNSSEC, o que é comum em ambientes conteinerizados ou virtualizados onde o resolvedor DNS pode ser configurado de forma diferente de um resolvedor de sistema padrão.
Resumo
Parabéns por completar o laboratório! Você ganhou experiência prática com várias ferramentas essenciais de rede e segurança do Linux.
Neste laboratório, você aprendeu a:
- Usar
netstatesspara inspecionar quais serviços de rede estão em execução e aguardando conexões. - Capturar pacotes de rede ao vivo em uma interface específica usando
tcpdumppara analisar o tráfego. - Configurar e usar
sshcom autenticação baseada em chave para acesso remoto seguro. - Utilizar
digpara consultar o Sistema de Nomes de Domínio (DNS) e entender os conceitos de DNSSEC, incluindo como solicitar informações de DNSSEC e interpretar os resultados.
Estas são habilidades fundamentais que são cruciais para gerenciar, solucionar problemas e proteger qualquer ambiente Linux. Encorajamos você a continuar explorando as muitas opções que essas ferramentas poderosas oferecem.



