Sabe como desativar respostas a pings no Linux? É assim…
Um dos métodos que normalmente usamos para saber se uma máquina está “viva” na rede, é recorrer ao comando ping. Para quem não conhece, o comando ping é dos mais usados no mundo das redes, uma vez que permite testar a conectividade entre equipamentos.
No entanto, ao permitirmos que a nossa máquina responda a pedidos de uma máquina remota, é como se estivéssemos a confirmar que a máquina existe, está ativa e alcançável na rede.
Como bloquear a resposta a "pings"?
O comando ping usa o protocolo ICMP, permitindo testar a conectividade entre equipamentos (end-to-end). Em termo de analogia, o ping pode ser comparado ao ping-pong (se enviarmos a bola para um lado (echo), do outro, se estiver la alguém, vamos receber uma resposta (reply).
Por outro lado, em algumas circunstâncias (pode variar, uma vez que o valor pode ser alterado) é mesmo possível saber qual o sistema operativo que a máquina que está do outro lado está a utilizar. Para tal, basta estarmos atentos ao campo TTL (time to live) e verificar qual o valor.
- UNIX: 255
- Linux: 64
- Windows: 128
Vamos agora ver dois métodos que permitem ativar/desativar a resposta aos pings em máquinas Linux. O primeiro método baseia-se na alteração da flag associada ao icmp_echo_ignore_all, e o segundo método recorre ao iptables.
Método 1
Desativar as respostas ping
sudo -i echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all |
Activar as respostas ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all |
Método 2
Desativar as respostas ping
iptables -I INPUT -i ech0 -p icmp -s 0/0 -d 0/0 -j DROP |
Activar a respostas ping
iptables -I INPUT -i ech0 -p icmp -s 0/0 -d 0/0 -j ACCEPT |
Se a nossa máquina tiver informação sensível e estiver ligada em rede, este pequeno truque pode dar uma ajuda no processo de “ocultar/calar” a máquina na rede. Desta forma, se à nossa máquina estiver a ser feito um pedido ICMP de uma máquina remota, ela simplesmente não responde, ficando o utilizador da máquina remota em dúvida, se a máquina está ou não ativa.
No entanto, obviamente que há algumas técnicas para saber se realmente a máquina existe na rede.
“No entanto, obviamente que há algumas técnicas para saber se realmente a máquina existe na rede.” Isso, na própria rede basta um simples ARP.
Mais interessante e bastante mais util ver todos os outros ICMP.
Como?
## User defined. Hookit on egress and ingress choosed chains
## Logs ICMP (except echo request & reply)
iptables -N ICMP
iptables -A ICMP -p icmp –icmp-type 8/0 -j ACCEPT
iptables -A ICMP -p icmp –icmp-type 0/0 -j ACCEPT
iptables -A ICMP -p icmp –icmp-type 3/0 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPnetunreach# ”
iptables -A ICMP -p icmp –icmp-type 3/1 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPhostunreach# ”
iptables -A ICMP -p icmp –icmp-type 3/2 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPprotounreach# ”
iptables -A ICMP -p icmp –icmp-type 3/3 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPportunreach# ”
iptables -A ICMP -p icmp –icmp-type 3/4 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPFragNeedDFbitset# ”
iptables -A ICMP -p icmp –icmp-type 3/5 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPsourceroutefail# ”
iptables -A ICMP -p icmp –icmp-type 3/11 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPnetunreachforTOS# ”
iptables -A ICMP -p icmp –icmp-type 3/12 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPhostunreachforTOS# ”
iptables -A ICMP -p icmp –icmp-type 3/13 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPprohibitbyfilter# ”
iptables -A ICMP -p icmp –icmp-type 4/0 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPsourcequench# ”
iptables -A ICMP -p icmp –icmp-type 5/0 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPredirectfornetwork# ”
iptables -A ICMP -p icmp –icmp-type 5/1 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPredirectforhost# ”
iptables -A ICMP -p icmp –icmp-type 10/0 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMProutersolicit# ”
iptables -A ICMP -p icmp –icmp-type 11/0 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPTTL0duringtransit# ”
iptables -A ICMP -p icmp –icmp-type 11/1 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPTTL0duringreassemb# ”
iptables -A ICMP -p icmp –icmp-type 12/0 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPIPbadheader# ”
iptables -A ICMP -p icmp –icmp-type 12/1 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPreqoptionmiss# ”
iptables -A ICMP -p icmp –icmp-type 13/0 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPtimestamprequest# ”
iptables -A ICMP -p icmp –icmp-type 14/0 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPtimestampreply# ”
iptables -A ICMP -p icmp –icmp-type 17/0 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPaddrmaskrequest# ”
iptables -A ICMP -p icmp –icmp-type 18/0 -j LOG –log-level warning –log-ip-options –log-tcp-options –log-tcp-sequence –log-prefix “IPT-ICMPaddrmask# ”
iptables -A ICMP -p icmp -j ACCEPT
/etc/rsyslog.conf:
template (name=”IPTFile” type=”list”)
{
constant(value=”/xvar/iptables/logs/”)
property(name=”msg” regex.type=”ERE” regex.expression=”IPT-(.*[^#])# .*” regex.submatch=”1″)
constant(value=”.log”)
}
# goes to /xvar/iptables/logs and /dev/console.
# Grab /dev/console with X client xconsole
if $syslogfacility-text == ‘kern’ and $syslogseverity-text == ‘warning’ and $msg contains ‘IPT-‘ then
{
action(name=”IPT” type=”omfile” dynaFile=”IPTFile” Template=”ipt” closeTimeout=”10″
dynaFileCacheSize=”20″ ioBufferSize=”32k” flushInterval=”5″ asyncWriting=”on”
queue.size=”1000″ queue.workerthreadminimummessages=”100″ queue.workerthreads=”4″ queue.type=”linkedlist”)
& /dev/console
stop
}
Embora sem consequencias para o resultado adicionei intencionalmente um erro. Alguem identifica?
Qual erro ?
O erro e inocuo dado que tudo funciona na mesma.
–log-tcp-options –log-tcp-sequence
ICMP transita apenas em pacotes IP. Nao ha tcp nem udp.
Portanto acrescentar –log-tcp-options –log-tcp-sequence e irrelevante.
A resposta ao ping permite também que terceiros possam usar a nossa máquina para realizarem debug de acesso à nossa rede. Não responder é semelhante a não responder ao nosso vizinho, inútil em termos de segurança e privacidade, mas má educação.
A sério que não percebi o teu comentário. O primeira passo de uma ataque é o reconhecimento, por isso….. “O debug” de acesso à nossa rede deve ser o menor das nossas preocupações. É falta de educação não responder a indesejados?
A sério? Disparar contra os dois pés?
Num ping a uma máquina Debian dá-me o TTL=62.