ICMP

O que é ICMP?

ICMP significa Internet Control Message Protocol.

Ele é um protocolo da camada de rede no modelo OSI e faz parte do conjunto de protocolos da Internet.

O ICMP é usado principalmente para diagnóstico de rede e para relatar erros de comunicação na transmissão de pacotes de dados entre dispositivos.

Ele não é usado para transportar dados de aplicações, como páginas web ou arquivos. Sua função principal é informar problemas e ajudar na análise da comunicação entre hosts.


Para que o ICMP é usado?

O ICMP é usado para enviar mensagens de controle, teste e erro na rede.

Exemplos comuns:

Testar se um host está online.
Verificar se existe conectividade entre dois dispositivos.
Identificar falhas de rota.
Diagnosticar perda de pacotes.
Verificar tempo de resposta de uma conexão.
Auxiliar ferramentas como ping e traceroute.
Informar quando um destino está inalcançável.


ICMP é a mesma coisa que TCP ou UDP?

Não.

O ICMP é diferente de TCP e UDP.

TCP e UDP são usados para comunicação entre aplicações.
ICMP é usado para mensagens de controle, erro e diagnóstico de rede.

Resumo:

ProtocoloFunção principalExemplo de uso
TCPComunicação confiável entre aplicaçõesHTTP, HTTPS, SSH
UDPComunicação rápida sem confirmaçãoDNS, VoIP, jogos online
ICMPDiagnóstico e mensagens de erroping, traceroute

Como o ICMP funciona?

O ICMP funciona enviando mensagens entre dispositivos de rede.

Quando ocorre algum problema durante a entrega de um pacote, o ICMP pode enviar uma mensagem para o dispositivo de origem informando o erro.

Fluxo básico:

Um dispositivo envia um pacote pela rede.
O pacote passa por roteadores até chegar ao destino.
Se ocorrer erro, o equipamento que detectou o problema gera uma mensagem ICMP.
Essa mensagem é enviada de volta para a origem.
A origem recebe a informação e pode identificar o problema.

Exemplo:

Se um pacote não puder chegar ao destino, o roteador pode responder com uma mensagem ICMP indicando que o destino está inacessível.


Características principais do ICMP

O ICMP possui algumas características importantes:

Mensagens de erro.
Mensagens de controle.
Diagnóstico de conectividade.
Funcionamento na camada de rede.
Uso por ferramentas de teste como ping e traceroute.
Não usa portas TCP ou UDP.
Pode ser bloqueado por firewall.


ICMP usa porta?

Não.

O ICMP não usa portas como TCP ou UDP.

Por isso, não existe “porta ICMP 80” ou “porta ICMP 443”.

Quando se fala em liberar ICMP no firewall, normalmente se libera o protocolo ICMP, e não uma porta.

Exemplo:

sudo ufw allow proto icmp

Em alguns firewalls, a liberação é feita por tipo de mensagem ICMP, como Echo Request e Echo Reply.


ICMP usa TCP ou UDP?

Não.

O ICMP não usa TCP nem UDP.

Ele funciona diretamente sobre o IP.

Resumo:

ProtocoloUsa porta?Camada
TCPSimTransporte
UDPSimTransporte
ICMPNãoRede

O que é Echo Request e Echo Reply?

O Echo Request é uma mensagem ICMP enviada para testar se um dispositivo está acessível.

O Echo Reply é a resposta enviada pelo dispositivo de destino.

Essas mensagens são usadas pelo comando ping.

Exemplo:

ping google.com

Fluxo básico:

O computador envia um ICMP Echo Request.
O servidor responde com ICMP Echo Reply.
O sistema mostra o tempo de resposta.


Como usar o ping com ICMP?

O comando ping usa ICMP para testar conectividade.

Exemplo:

ping 8.8.8.8

Exemplo com domínio:

ping google.com

Limitar a quantidade de pacotes:

ping -c 4 google.com

Esse comando envia 4 pacotes ICMP para o destino.

Exemplo de saída:

64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=12.5 ms

Significado básico:

icmp_seq mostra a sequência do pacote.
ttl mostra o tempo de vida do pacote.
time mostra o tempo de resposta.


Como usar traceroute com ICMP?

O traceroute ajuda a identificar o caminho percorrido até um destino.

Instalar no Debian, Ubuntu e derivados:

sudo apt update
sudo apt install traceroute

Usar:

traceroute google.com

Em alguns sistemas, para usar ICMP no traceroute:

traceroute -I google.com

O traceroute envia pacotes com valores crescentes de TTL.

Quando o TTL chega a zero, um roteador responde com uma mensagem ICMP chamada:

Time Exceeded

Assim, é possível mapear os roteadores pelo caminho.


O que é TTL no ICMP?

TTL significa Time To Live.

Ele define por quantos saltos um pacote pode passar antes de ser descartado.

Cada roteador reduz o TTL em 1.

Quando o TTL chega a 0, o pacote é descartado e uma mensagem ICMP pode ser enviada para a origem.

Exemplo de erro:

Time Exceeded

O TTL ajuda a evitar que pacotes fiquem circulando infinitamente na rede.


Tipos comuns de mensagens ICMP

Tipo ICMPNomeFunção
0Echo ReplyResposta do ping
3Destination UnreachableDestino inalcançável
5RedirectRedirecionamento de rota
8Echo RequestSolicitação do ping
11Time ExceededTempo de vida excedido
12Parameter ProblemProblema em parâmetro do pacote

Diferença entre ping e traceroute

FerramentaUsa ICMP?Função
pingSimTesta se o destino responde
traceroutePode usar ICMPMostra o caminho até o destino

O ping testa conectividade.

O traceroute mostra por onde o pacote passa até chegar ao destino.


Como liberar ICMP no firewall?

No Linux com UFW, o ICMP pode já estar permitido por padrão.

Para verificar:

sudo ufw status

Em alguns casos, é necessário editar regras do UFW:

sudo nano /etc/ufw/before.rules

Para iptables, exemplo liberando ping:

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Liberar respostas ICMP:

sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Com firewalld:

sudo firewall-cmd --permanent --add-icmp-block-inversion
sudo firewall-cmd --reload

A configuração pode variar conforme a distribuição e a política do firewall.


Como bloquear ping ICMP?

Bloquear ping com iptables:

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Com UFW, pode ser necessário editar:

sudo nano /etc/ufw/before.rules

E ajustar as regras relacionadas ao ICMP.

Também é possível bloquear respostas ICMP pelo sistema:

sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1

Para voltar ao normal:

sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0

Para deixar permanente, edite:

sudo nano /etc/sysctl.conf

Adicione:

net.ipv4.icmp_echo_ignore_all=1

Aplicar:

sudo sysctl -p

ICMP é perigoso?

O ICMP não é perigoso por si só.

Ele é uma ferramenta importante para diagnóstico e funcionamento da rede.

Porém, pode ser usado em alguns ataques, como:

Ping flood.
ICMP flood.
Mapeamento de rede.
Varredura de hosts ativos.

Por isso, em redes mais restritas, algumas mensagens ICMP podem ser limitadas ou bloqueadas.

Mas bloquear todo ICMP pode atrapalhar diagnósticos e até causar problemas em alguns recursos de rede.


Erros comuns com ICMP

Request timeout

Erro:

Request timeout

Ou:

Destination Host Unreachable

Possíveis causas:

Host desligado.
Firewall bloqueando ICMP.
Rota incorreta.
Problema de rede.
Servidor configurado para não responder ping.

Teste:

ping ip_do_destino

Verificar rota:

ip route

Testar outro destino:

ping 8.8.8.8

Destination Host Unreachable

Erro:

Destination Host Unreachable

Possíveis causas:

O host de destino está fora do ar.
Não existe rota até o destino.
Gateway incorreto.
Problema na rede local.
Firewall bloqueando tráfego.

Verifique o IP:

ip addr

Verifique o gateway:

ip route

Teste o gateway:

ping ip_do_gateway

Destination Network Unreachable

Erro:

Destination Network Unreachable

Possíveis causas:

Rede de destino não encontrada.
Rota ausente.
Gateway mal configurado.
Problema no roteador.

Verificar rotas:

ip route

Adicionar rota manual, se necessário:

sudo ip route add rede_destino/mask via ip_do_gateway

Exemplo:

sudo ip route add 192.168.10.0/24 via 192.168.0.1

Time Exceeded

Erro:

Time Exceeded

Possíveis causas:

TTL chegou a zero.
Loop de roteamento.
Rota muito longa.
Problema entre roteadores.

Teste com traceroute:

traceroute destino.com

Ou:

traceroute -I destino.com

Ping funciona, mas site não abre

Esse caso pode acontecer.

Possíveis causas:

DNS com problema.
Porta HTTP/HTTPS bloqueada.
Servidor web fora do ar.
Firewall bloqueando TCP.
ICMP permitido, mas TCP bloqueado.

Testar DNS:

nslookup dominio.com

Testar porta 80:

nc -vz dominio.com 80

Testar porta 443:

nc -vz dominio.com 443

Testar HTTP:

curl -I https://dominio.com

Ping não funciona, mas site abre

Também pode acontecer.

Possíveis causas:

Servidor bloqueia ICMP.
Firewall bloqueia Echo Request.
Rede bloqueia ping.
ICMP foi desativado no destino.

Testar HTTPS:

curl -I https://dominio.com

Testar porta:

nc -vz dominio.com 443

Nesse caso, o site pode estar funcionando mesmo sem responder ping.


Como testar se o ICMP está funcionando?

Testar IP público:

ping -c 4 8.8.8.8

Testar domínio:

ping -c 4 google.com

Testar gateway local:

ping -c 4 ip_do_gateway

Verificar rota:

traceroute -I google.com

Verificar se o host responde:

fping ip_do_destino

Instalar fping:

sudo apt install fping

Comandos principais relacionados ao ICMP

ComandoFunção
ping destinoTesta conectividade usando ICMP
ping -c 4 destinoEnvia 4 pacotes ICMP
traceroute destinoMostra a rota até o destino
traceroute -I destinoUsa ICMP no traceroute
ip routeMostra as rotas da máquina
nc -vz destino portaTesta conexão TCP em uma porta
iptables -A INPUT -p icmp -j ACCEPTLibera ICMP no firewall
iptables -A INPUT -p icmp -j DROPBloqueia ICMP no firewall
sysctl net.ipv4.icmp_echo_ignore_allVerifica se o sistema ignora ping

Exemplo completo de diagnóstico com ICMP

Testar se há conexão com a internet:

ping -c 4 8.8.8.8

Testar se o DNS está funcionando:

ping -c 4 google.com

Verificar rota até o destino:

traceroute -I google.com

Verificar rotas locais:

ip route

Testar gateway:

ping -c 4 ip_do_gateway

Testar uma porta específica, caso o ping funcione mas o serviço não:

nc -vz google.com 443

Esse exemplo testa conectividade, DNS, rota, gateway e acesso a serviço.


Boas práticas de segurança

Permitir ICMP necessário para diagnóstico.
Evitar bloquear todo ICMP sem necessidade.
Limitar ICMP em servidores expostos à internet.
Usar firewall para controlar tipos de mensagens ICMP.
Monitorar tráfego ICMP anormal.
Evitar permitir respostas ICMP desnecessárias em redes sensíveis.
Usar rate limit para reduzir risco de flood.
Não depender apenas de ping para dizer se um serviço está online.
Testar também portas TCP e UDP usadas pela aplicação.
Manter roteadores, firewalls e sistemas atualizados.