Introdução
Neste laboratório, você aprenderá a utilizar o iptables, um poderoso utilitário de firewall via linha de comando no Linux, para bloquear o tráfego ICMP de entrada. Você configurará uma regra de firewall para descartar (drop) pacotes do protocolo ICMP, que é frequentemente utilizado pelo comando ping para testar a conectividade de rede. Esta é uma habilidade fundamental para proteger um sistema Linux, controlando o acesso à rede em nível de protocolo.
Você começará realizando uma varredura de rede preliminar com o nmap para avaliar as portas abertas do sistema. Em seguida, estabelecerá uma base de comparação usando o ping para verificar se o tráfego ICMP está inicialmente permitido. O núcleo do laboratório envolve a criação e aplicação de uma regra específica do iptables para descartar todos os pacotes ICMP de entrada. Por fim, você verificará se a regra está ativa e testará sua eficácia tentando realizar um ping na sua máquina novamente, confirmando que as requisições agora são bloqueadas com sucesso.
Escanear Portas TCP e UDP Abertas com nmap
Nesta etapa, você aprenderá a usar a ferramenta nmap para escanear seu próprio sistema em busca de portas de rede abertas. As portas de rede são os pontos finais de comunicação em um sistema operacional. Quando um programa deseja receber informações da rede, ele "escuta" em uma porta específica. Escanear portas abertas é um primeiro passo fundamental na avaliação da segurança de uma máquina, pois cada porta aberta representa um ponto de entrada potencial para um invasor.
Primeiro, você precisa instalar o nmap, pois ele não está incluído no ambiente base. É uma boa prática atualizar sua lista de pacotes antes de instalar novos softwares.
Execute o seguinte comando para atualizar a lista de pacotes:
sudo apt-get update
Agora, instale o nmap executando:
sudo apt-get install -y nmap
Você verá uma saída indicando que o nmap e suas dependências estão sendo instalados.
Em seguida, você precisa encontrar o endereço IP da sua máquina para informar ao nmap o que escanear. Você pode encontrar isso usando o comando ip.
ip addr show
Procure por uma entrada como eth0 ou ens33. Seu endereço IP estará listado ao lado de inet. Ele será algo parecido com 172.16.50.13/24.
Como identificar seu endereço IP a partir da saída:
- Procure pela interface que possui o estado
state UP(geralmenteeth0). - Encontre a linha que começa com
inet(nãoinet6). - Pegue apenas a parte do endereço IP antes da barra
/(ex: se você virinet 172.16.50.13/24, seu endereço IP é172.16.50.13). - Ignore a interface de loopback (
lo) com o IP127.0.0.1.
Para o restante deste laboratório, usaremos <your_IP_address> como um marcador para o seu endereço IP real.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:04:c3:1d brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
inet 172.16.50.13/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
valid_lft 1892159940sec preferred_lft 1892159940sec
inet6 fe80::216:3eff:fe04:c31d/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:1d:45:49:f8 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
Agora você está pronto para realizar sua primeira varredura. Vamos começar escaneando portas TCP (Transmission Control Protocol) abertas. O TCP é um protocolo orientado à conexão usado para muitos serviços comuns, como SSH (porta 22) e HTTP (porta 80). A opção -sT no nmap realiza uma varredura de conexão TCP.
Importante: Substitua <your_IP_address> pelo IP real que você encontrou na etapa anterior. Por exemplo, se o seu IP for 172.16.50.13, o comando seria nmap -sT 172.16.50.13.
Substitua <your_IP_address> pelo seu IP e execute o comando:
nmap -sT <your_IP_address>
A saída listará as portas que estão no estado "open" (aberta). Seu sistema provavelmente terá a porta SSH (22) aberta por padrão e pode ter serviços adicionais rodando em outras portas.
Starting Nmap 7.80 ( https://nmap.org ) at 2025-07-01 14:08 CST
Nmap scan report for iZrj93qpoj98oqswu96cqfZ (172.16.50.13)
Host is up (0.00013s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
3000/tcp open ppp
3001/tcp open nessus
Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
Em seguida, vamos escanear portas UDP (User Datagram Protocol). O UDP é um protocolo sem conexão usado para serviços como DNS (porta 53) e DHCP (porta 67/68). Varreduras UDP podem ser mais lentas e menos confiáveis que as TCP. Usar sudo fornece melhores resultados para varreduras UDP. A opção -sU instrui o nmap a realizar uma varredura UDP.
Lembre-se: Substitua <your_IP_address> pelo seu endereço IP real.
Substitua <your_IP_address> pelo seu IP e execute o comando:
sudo nmap -sU <your_IP_address>
A saída pode mostrar portas como open|filtered. Isso significa que o nmap não consegue determinar se a porta está aberta ou se um firewall está bloqueando a varredura. Este é um resultado comum para varreduras UDP.
Starting Nmap 7.80 ( https://nmap.org ) at 2025-07-01 14:09 CST
Nmap scan report for iZrj93qpoj98oqswu96cqfZ (172.16.50.13)
Host is up (0.0000060s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
68/udp open|filtered dhcpc
5353/udp open|filtered zeroconf
Nmap done: 1 IP address (1 host up) scanned in 1.29 seconds
Ao concluir essas varreduras, você identificou com sucesso os serviços que estão aguardando conexões de rede em sua máquina.
Verificar a Conectividade de Rede Inicial com ping
Nesta etapa, você usará o comando ping para verificar se o seu sistema está respondendo a requisições de rede antes de implementar qualquer regra de firewall. O comando ping envia pacotes de "echo request" (solicitação de eco) do protocolo ICMP (Internet Control Message Protocol) para um host de destino. Se o host estiver acessível e configurado para responder, ele enviará de volta um pacote de "echo reply" (resposta de eco). Esta é uma forma fundamental de testar a conectividade básica de rede.
Antes de criarmos uma regra de firewall para bloquear esse tipo de tráfego, devemos primeiro confirmar que o tráfego está sendo permitido no momento. Isso garante que, quando testarmos nossa regra mais tarde, teremos certeza de que a regra é a causa do bloqueio, e não algum outro problema de rede pré-existente.
Faremos o ping para o endereço de "loopback", 127.0.0.1. Este endereço IP especial sempre aponta para a sua própria máquina, permitindo testar a pilha de rede local sem a necessidade de uma conexão externa ou mesmo de saber o endereço IP atribuído à sua máquina.
Para enviar apenas quatro pacotes e depois parar, usaremos a opção -c 4. Isso é importante porque, sem ela, o ping rodaria continuamente até que você o interrompesse manualmente com Ctrl+C.
Abra seu terminal e execute o seguinte comando:
ping -c 4 127.0.0.1
Você deve ver uma saída mostrando que quatro pacotes foram enviados e quatro foram recebidos, indicando que seu sistema está respondendo corretamente às solicitações ICMP.
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.055 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.052 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.053 ms
--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3070ms
rtt min/avg/max/mdev = 0.045/0.051/0.055/0.003 ms
A linha 0% packet loss confirma que a conexão está funcionando perfeitamente. Agora que você estabeleceu uma base de comparação, está pronto para configurar uma regra de firewall para bloquear exatamente esse tipo de comunicação.
Criar uma Regra de iptables para Descartar Pacotes ICMP
Nesta etapa, você configurará uma regra de firewall simples usando o iptables, o utilitário de linha de comando padrão para gerenciar regras de filtragem de pacotes de rede no kernel do Linux. Criaremos uma regra para bloquear o tráfego ICMP que você testou anteriormente com o comando ping.
O iptables funciona com um sistema de tabelas, cadeias (chains) e regras.
- Tabelas: São coleções de cadeias para um propósito específico. A tabela mais comum é a
filter, que é a padrão e usada para filtragem de pacotes. - Cadeias (Chains): São listas de regras que são verificadas em ordem. Para tráfego de entrada, a cadeia
INPUTé utilizada. - Regras: Uma regra especifica critérios para um pacote (como seu protocolo ou endereço de origem) e um alvo (o que fazer com o pacote, ex:
ACCEPTpara aceitar ouDROPpara descartar).
Primeiro, vamos examinar o conjunto atual de regras. Como o iptables modifica as configurações do kernel, você deve usar sudo. A opção -L lista as regras na tabela filter padrão.
sudo iptables -L
Você verá as três cadeias padrão: INPUT, FORWARD e OUTPUT. Neste ambiente, você pode notar que o Docker já criou algumas regras na cadeia FORWARD e adicionou cadeias personalizadas para a rede de containers. As cadeias INPUT e OUTPUT ainda estão usando a política padrão ACCEPT para o tráfego regular.
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target prot opt source destination
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Agora, vamos adicionar uma regra para bloquear pacotes ICMP de entrada. Vamos anexar (-A) uma nova regra à cadeia INPUT.
O comando é construído da seguinte forma:
sudo iptables: O comando para gerenciar o firewall.-A INPUT: Anexa uma regra à cadeiaINPUT.-p icmp: Esta regra se aplica a pacotes que usam o protocoloicmp.-j DROP: Se um pacote corresponder, pula para o alvoDROP, que descarta silenciosamente o pacote sem enviar uma resposta.
Execute o seguinte comando para criar a regra:
sudo iptables -A INPUT -p icmp -j DROP
Este comando não produzirá nenhuma saída se for bem-sucedido. Você agora instruiu o firewall do kernel a descartar todos os pacotes ICMP de entrada de qualquer origem.
Verificar a Regra de Firewall e Testar o Bloqueio
Nesta etapa final, você confirmará que sua nova regra de firewall foi adicionada com sucesso e testará seu efeito tentando dar um ping no seu sistema novamente. Este processo de verificação é crítico na administração de redes para garantir que as políticas de segurança sejam implementadas corretamente.
Primeiro, vamos visualizar a lista de regras novamente para ver sua nova adição. Ao executar o mesmo comando de antes, você poderá ver o estado atual do firewall.
sudo iptables -L
Você deve agora ver sua nova regra listada sob a cadeia INPUT. A saída mostra claramente que pacotes correspondentes ao protocolo icmp serão enviados para o alvo DROP.
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Agora que você confirmou que a regra está em vigor, vamos testá-la. Execute o mesmo comando ping que você usou na Etapa 2.
ping -c 4 127.0.0.1
Desta vez, você não verá respostas. O comando parecerá travar por alguns segundos e depois encerrará. A saída mostrará 100% packet loss. Este é o comportamento esperado porque o firewall do kernel está agora descartando silenciosamente os pacotes ICMP de entrada, exatamente como você instruiu.
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
--- 127.0.0.1 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3055ms
Você bloqueou com sucesso o tráfego ICMP! As regras que você cria com o iptables não são persistentes e serão apagadas após a reinicialização do sistema. No entanto, é uma boa prática saber como remover uma regra manualmente. Você pode fazer isso usando a flag -D (delete), especificando exatamente a mesma regra que você adicionou.
Vamos remover a regra para restaurar a conectividade.
sudo iptables -D INPUT -p icmp -j DROP
Para confirmar que a regra foi removida e a conectividade restaurada, execute o ping uma última vez.
ping -c 2 127.0.0.1
O ping deve agora ser bem-sucedido, confirmando que você removeu com sucesso a regra do firewall.
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.058 ms
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1024ms
rtt min/avg/max/mdev = 0.048/0.053/0.058/0.005 ms
Resumo
Neste laboratório, você aprendeu como realizar o reconhecimento inicial de rede em um sistema Linux. Você começou instalando a ferramenta nmap para escanear portas TCP e UDP abertas após identificar o endereço IP da máquina. Em seguida, estabeleceu uma base de conectividade de rede usando o comando ping, que confirmou que o sistema estava recebendo e respondendo com sucesso ao tráfego ICMP.
O núcleo do laboratório envolveu o uso do utilitário de firewall iptables para manipular o tráfego de rede. Você construiu e aplicou uma regra específica à cadeia INPUT para descartar (DROP) todos os pacotes ICMP de entrada, bloqueando efetivamente ferramentas como o ping. Para concluir o processo, você verificou que a nova regra estava ativa listando o conjunto de regras atual do iptables e testou o bloqueio tentando realizar o ping na máquina novamente, confirmando que as requisições agora expiravam conforme o esperado.



