PING (ICMP) O que é? Como Bloquear/Desbloquear?

Ping ou latência como podemos chamar, é um utilitário que usa o protocolo ICMP para testar a conectividade entre equipamentos. É um comando disponível praticamente em todos os sistemas operacionais. Seu funcionamento consiste no envio de pacotes para o equipamento de destino e na "escuta" das respostas. Se o equipamento de destino estiver ativo, uma "resposta" (o "pong", uma analogia ao famoso jogo de ping-pong) é devolvida ao computador solicitante.
O autor da ferramenta, Mike Muuss, deu a ele este nome pois lembrava o som que o sonar emitia. (Depois Dave Mills arrumou um significado para a sigla, "Packet Internet Grouper (Groper)", algo como "Procurador de Pacotes da Internet")
A utilidade do ping para ajudar a diagnosticar problemas de conectividade na Internet foi enfraquecida no final de 2003, quando muitos Provedores de Internet ativaram filtros para o ICMP Tipo 8 (echo request) nos seus roteadores. Esses filtros foram ativados para proteger os computadores de Worms como o Welchia, que inundaram a Internet com requisições de ping, com o objetivo de localizar novos equipamentos para infectar, causando problemas em roteadores ao redor do mundo todo.
Outra ferramenta de rede que utiliza o ICMP de maneira semelhante ao ping é o Traceroute.

A saída do ping, e seus primos, geralmente consiste no tamanho do pacote utilizado, o nome do equipamento "pingado", o número de seqüência do pacote ICMP, o tempo de vida e a latência, com todos os tempos dados em milissegundos.


Bloqueando/Desbloqueando o PING

Usando o sysctl

Existe um arquivo chamado sysctl.conf que geralmente está no diretório /etc (/etc/sysctl.conf). Para bloquear o PING, adicione neste arquivo estas duas linhas:
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_echo_ignore_all = 1
Para ativar a nova configuração, chame o sysctl com a opção -p:
# sysctl -p
...
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_echo_ignore_all = 1
Confira se realmente o PING está bloqueado. Aqui vou dar uma dica esquisita: vamos dar um ping no localhost! Parece bobeira, mas não é. Como qualquer outra máquina da rede, se o PING estiver ativo, o localhost responde para ele mesmo; se não, ele não responde.
# ping -c 5 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

--- 127.0.0.1 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4017ms
-c 5 diz ao ping para enviar apenas 5 pacotes.
Se a máquina for reinicializada, estas informações não são perdidas.
Para desbloquear o PING, basta trocar o valor de net.ipv4.icmp_echo_ignore_broadcasts e denet.ipv4.icmp_echo_ignore_al de 1 para 0 e ativar a nova configuração com um sysctl -p. Não gosto de simplesmente eliminar as linhas porque mais tarde, quando quiser bloquear novamente o PING, não vou conseguir lembrar das diretivas... coisas de vó esquecida :blush:

Usando o iptables

Outra forma de bloquear pacotes do PING é colocando regras no iptables específicas para este protocolo. Podemos bloquear qualquer pacote ICMP para todas as requisições, bloquear pacotes específicos para todas as requisições ou até abrir o PING para determinadas máquinas e fechar para todas as outras.
Exemplo 1: bloquear totalmente o ICMP.
# iptables -A INPUT -p icmp -j DROP
Neste caso, nenhum pacote ICMP é aceito pelo computador chamado. Nem o ping 127.0.0.1 será respondido, pois o localhost também entra nesta regra do iptables.
Exemplo 2: bloquear apenas os pacotes ICMP do tipo echo-request.
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Exemplo 3: liberar para uma máquina e bloquear para todas as outras.
# iptables -A INPUT -s 10.20.30.40 -p icmp -j ACCEPT
# iptables -A INPUT -p icmp -j DROP
A permissão para a máquina cujo endereço IP é 10.20.30.40 precisa vir antes da regra que bloqueia todas as outras solicitações via ICMP.
 Lembre-se de que as regras do iptables não sobrevivem a um reboot. Se você quiser torná-las "permanentes" é preciso criar um shell script que insere as regras desejadas no iptables e chamar este script no boot.
 Para descobrir quais são os tipos de pacotes ICMP chame iptables -p icmp -h

Comentários