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:
| Protocolo | Função principal | Exemplo de uso |
|---|---|---|
| TCP | Comunicação confiável entre aplicações | HTTP, HTTPS, SSH |
| UDP | Comunicação rápida sem confirmação | DNS, VoIP, jogos online |
| ICMP | Diagnóstico e mensagens de erro | ping, 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 icmpEm 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:
| Protocolo | Usa porta? | Camada |
|---|---|---|
| TCP | Sim | Transporte |
| UDP | Sim | Transporte |
| ICMP | Não | Rede |
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.comFluxo 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.8Exemplo com domínio:
ping google.comLimitar a quantidade de pacotes:
ping -c 4 google.comEsse 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 msSignificado 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 tracerouteUsar:
traceroute google.comEm alguns sistemas, para usar ICMP no traceroute:
traceroute -I google.comO traceroute envia pacotes com valores crescentes de TTL.
Quando o TTL chega a zero, um roteador responde com uma mensagem ICMP chamada:
Time ExceededAssim, é 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 ExceededO TTL ajuda a evitar que pacotes fiquem circulando infinitamente na rede.
Tipos comuns de mensagens ICMP
| Tipo ICMP | Nome | Função |
|---|---|---|
| 0 | Echo Reply | Resposta do ping |
| 3 | Destination Unreachable | Destino inalcançável |
| 5 | Redirect | Redirecionamento de rota |
| 8 | Echo Request | Solicitação do ping |
| 11 | Time Exceeded | Tempo de vida excedido |
| 12 | Parameter Problem | Problema em parâmetro do pacote |
Diferença entre ping e traceroute
| Ferramenta | Usa ICMP? | Função |
|---|---|---|
| ping | Sim | Testa se o destino responde |
| traceroute | Pode usar ICMP | Mostra 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 statusEm alguns casos, é necessário editar regras do UFW:
sudo nano /etc/ufw/before.rulesPara iptables, exemplo liberando ping:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPTLiberar respostas ICMP:
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPTCom firewalld:
sudo firewall-cmd --permanent --add-icmp-block-inversion
sudo firewall-cmd --reloadA 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 DROPCom UFW, pode ser necessário editar:
sudo nano /etc/ufw/before.rulesE ajustar as regras relacionadas ao ICMP.
Também é possível bloquear respostas ICMP pelo sistema:
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1Para voltar ao normal:
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0Para deixar permanente, edite:
sudo nano /etc/sysctl.confAdicione:
net.ipv4.icmp_echo_ignore_all=1Aplicar:
sudo sysctl -pICMP é 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 timeoutOu:
Destination Host UnreachablePossíveis causas:
Host desligado.
Firewall bloqueando ICMP.
Rota incorreta.
Problema de rede.
Servidor configurado para não responder ping.
Teste:
ping ip_do_destinoVerificar rota:
ip routeTestar outro destino:
ping 8.8.8.8Destination Host Unreachable
Erro:
Destination Host UnreachablePossí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 addrVerifique o gateway:
ip routeTeste o gateway:
ping ip_do_gatewayDestination Network Unreachable
Erro:
Destination Network UnreachablePossíveis causas:
Rede de destino não encontrada.
Rota ausente.
Gateway mal configurado.
Problema no roteador.
Verificar rotas:
ip routeAdicionar rota manual, se necessário:
sudo ip route add rede_destino/mask via ip_do_gatewayExemplo:
sudo ip route add 192.168.10.0/24 via 192.168.0.1Time Exceeded
Erro:
Time ExceededPossíveis causas:
TTL chegou a zero.
Loop de roteamento.
Rota muito longa.
Problema entre roteadores.
Teste com traceroute:
traceroute destino.comOu:
traceroute -I destino.comPing 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.comTestar porta 80:
nc -vz dominio.com 80Testar porta 443:
nc -vz dominio.com 443Testar HTTP:
curl -I https://dominio.comPing 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.comTestar porta:
nc -vz dominio.com 443Nesse 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.8Testar domínio:
ping -c 4 google.comTestar gateway local:
ping -c 4 ip_do_gatewayVerificar rota:
traceroute -I google.comVerificar se o host responde:
fping ip_do_destinoInstalar fping:
sudo apt install fpingComandos principais relacionados ao ICMP
| Comando | Função |
|---|---|
ping destino | Testa conectividade usando ICMP |
ping -c 4 destino | Envia 4 pacotes ICMP |
traceroute destino | Mostra a rota até o destino |
traceroute -I destino | Usa ICMP no traceroute |
ip route | Mostra as rotas da máquina |
nc -vz destino porta | Testa conexão TCP em uma porta |
iptables -A INPUT -p icmp -j ACCEPT | Libera ICMP no firewall |
iptables -A INPUT -p icmp -j DROP | Bloqueia ICMP no firewall |
sysctl net.ipv4.icmp_echo_ignore_all | Verifica 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.8Testar se o DNS está funcionando:
ping -c 4 google.comVerificar rota até o destino:
traceroute -I google.comVerificar rotas locais:
ip routeTestar gateway:
ping -c 4 ip_do_gatewayTestar uma porta específica, caso o ping funcione mas o serviço não:
nc -vz google.com 443Esse 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.