Antes de falarmos do comando ping devemos saber o que é ICMP.
ICMP
ICMP(Internet Control Message Protocol ou Protocolo de Mensagem de Controle de Internet) é usado para comunicação na camada de rede. O uso mais como do ICPM é passa relatórios de erros. Podemos usar icmp para ver se um dispositivo em nossa rede está “alcançável”, ou seja, se o seu computador consegue enxergá-lo.
Aqui entra o comando ping.
PING
Ping é uma ferramenta que faz uso do protocolo ICMP para testar se um dispositivo(celular, comptuador..) é alcançável na rede.
Ping usa dois tipos de mensagens:
- Echo Request: Faz uma requisição a um computador para saber se este está alcançável na rede
- Echo Reply: Uma reposta do computador que se deseja saber se é alcançável na rede.
Por exemplo, estamos acessados no computador com ip 192.168.0.41 e usamos o comando “ping 192.168.0.44” para sabermos se o computador de ip 192.168.0.44 é alcançável é enviado um request e, se o computador 192.168.0.44 estiver disponível ele enviará uma resposta(reply).
elder@server02:~$ ping 192.168.44 -c4 PING 192.168.44 (192.168.0.44) 56(84) bytes of data. 64 bytes from 192.168.0.44: icmp_seq=1 ttl=64 time=0.378 ms 64 bytes from 192.168.0.44: icmp_seq=2 ttl=64 time=0.301 ms 64 bytes from 192.168.0.44: icmp_seq=3 ttl=64 time=0.312 ms 64 bytes from 192.168.0.44: icmp_seq=4 ttl=64 time=0.291 ms --- 192.168.44 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 7ms rtt min/avg/max/mdev = 0.291/0.320/0.378/0.038 ms
Ao final nos é dado um relatório relatando pacotes transmitidos(packets transmited), recebidos(received), se houve perda de pacotes(packet loss)…
Às vezes muitos usuários desejam desativar o ping para evitar alguns tipos de ataques em rede onde hackers podem fazer uso de ping para tentar congestionar uma rede. Desses ataques podemos citar o ping flood attack. Há outros motivos que não cabe aqui relatar.
Retomando o tema, iremos ver como bloquear respostas ao comando ping em computadores que usam o firewalld.
Vendo Tipos de ICMP e Se Há Bloqueios
Abaixo executamos o comando “firewall-cmd list-all” para saber se há bloqueios icpm. Vemos, em laranja, que não há; icmp-blocks está vazio, sem valor.
[elder@empresa10 ~]$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: cockpit dhcpv6-client
ports: 8301/tcp 8300/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Vamos ver os tipos disponíveis de icmp usando o comando “firewall-cmd get-icmptypes”. Dos tipos abaixo iremos usar echo-reply e echo-request em uma das alternativas de como se bloquear o repostas ao comando ping.
[elder@empresa10 ~]$ sudo firewall-cmd --get-icmptypes
address-unreachable bad-header beyond-scope communication-prohibited
destination-unreachable echo-reply echo-request failed-policy fragmentation-needed
host-precedence-violation host-prohibited host-redirect host-unknown
host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation
network-prohibited network-redirect network-unknown network-unreachable no-route
packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable
redirect reject-route required-option-missing router-advertisement router-solicitation
source-quench source-route-failed time-exceeded timestamp-reply timestamp-request
tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable
ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
Bloqueando Ping com FIrewalld
Obs.: Lembre-se que se não utilizar a opção “permanent” as alterações serão temporárias e então perdidas ao recarregarmos ou reiniciarmos o firewalld.
Há alguns métodos para bloquearmos o ping.
Método 01: Bloqueando echo-reply e echo-request
Acima listamos os tipos de icmp e destacamos de laranja dois deles: echo-request e echo-reply. Vamos usar o coamando “firewall-cmd add-icmp-block=…” para bloquearmos. Vejamos abaixo:
[elder@empresa10 ~]$ sudo firewall-cmd --add-icmp-block=echo-reply --permanent
[elder@empresa10 ~]$ sudo firewall-cmd --add-icmp-block=echo-request --permanent
[elder@empresa10 ~]$ sudo firewall-cmd --reload
Acima bloqueamos echo-reply e echo-request e o terceiro aplicou(recarregou) as alterações.
De um outro computador com Windows ao tentarmos usar o comando ping veremos
C:\Users\administrator>ping 192.168.0.44 Disparando 192.168.0.44 com 32 bytes de dados: Resposta de 192.168.0.44: Rede de destino inacessível. Resposta de 192.168.0.44: Rede de destino inacessível. Resposta de 192.168.0.44: Rede de destino inacessível. Resposta de 192.168.0.44: Rede de destino inacessível. Estatísticas do Ping para 192.168.0.44: Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de perda),
De um outro computador com Linux ao veremos ao usar ping
elder@server02:~$ ping 192.168.44 -c4 PING 192.168.44 (192.168.0.44) 56(84) bytes of data. From 192.168.0.44 icmp_seq=1 Packet filtered From 192.168.0.44 icmp_seq=2 Packet filtered From 192.168.0.44 icmp_seq=3 Packet filtered From 192.168.0.44 icmp_seq=4 Packet filtered --- 192.168.44 ping statistics --- 4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 11ms
Método 2: Bloqueando com “add-icmp-block-inversion”
Obs.: Como teste aqui não utilizei “permanent”. Só precisamos exeuctar “firewall-cmd reload” quando usamos “permanent”.
O comando “firewall-cmd add-icmp-block-inversion” inverte o valor em icmp-block
Vamos mais uma vez listar o conteúdo da nossa zona pública
[elder@empresa10 ~]$ sudo firewall-cmd --list-all [sudo] senha para elder: public (active) target: default icmp-block-inversion: no interfaces: enp0s3 sources: services: cockpit dhcpv6-client ports: 8301/tcp 8300/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: echo-request echo-reply rich rules:
Acima alaranjei as duas opções referentes à este método 02. Podemos ver que icmp-block está bloqueando echo-request e echo-reply. Também notamos que icmp-block-inversion está com o valor no(não). Vamos executar
Vamos “firewall-cmd add-icmp-block-inversion” para definir seu valor como yes(sim).
[elder@empresa10 ~]$ sudo firewall-cmd --add-icmp-block-inversion success
Vamos listar mais uma vez o conteúdo da nossa zona pública
[elder@empresa10 ~]$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: yes
interfaces: enp0s3
sources:
services: cockpit dhcpv6-client
ports: 8301/tcp 8300/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks: echo-request echo-reply
rich rules:
A opção icmp-block-inversion quando recebe o valor de yes passa a inverter(inversion) o valor de icmp-block. Por exemplo, acima se temos icmp-block-inversion para “yes”; icmp-block vai passa a permitir echo-request e echo-reply.
Vamos executar um ping. lembrando que no método 01 bloqueamos o ping.
elder@server02:~$ ping 192.168.44 -c4 PING 192.168.44 (192.168.0.44) 56(84) bytes of data. 64 bytes from 192.168.0.44: icmp_seq=1 ttl=64 time=0.374 ms 64 bytes from 192.168.0.44: icmp_seq=2 ttl=64 time=0.270 ms 64 bytes from 192.168.0.44: icmp_seq=3 ttl=64 time=0.282 ms 64 bytes from 192.168.0.44: icmp_seq=4 ttl=64 time=0.331 ms --- 192.168.44 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 21ms rtt min/avg/max/mdev = 0.270/0.314/0.374/0.043 ms
Acima vemos que o ping alcançou o 192.168.0.44 mesmo com “icmp-blocks: echo-request echo-reply“.
Como o objetivo aqui é bloquear o ping então vamos remover os echo-request e echo-reply
[elder@empresa10 ~]$ sudo firewall-cmd --remove-icmp-block=echo-request success [elder@empresa10 ~]$ sudo firewall-cmd --remove-icmp-block=echo-reply success
Vamos ver se o ping responde
elder@server02:~$ ping 192.168.44 -c4 PING 192.168.44 (192.168.0.44) 56(84) bytes of data. From 192.168.0.44 icmp_seq=1 Packet filtered From 192.168.0.44 icmp_seq=2 Packet filtered From 192.168.0.44 icmp_seq=3 Packet filtered From 192.168.0.44 icmp_seq=4 Packet filtered --- 192.168.44 ping statistics --- 4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 8ms
Não está respondendo. Nossas alterações surtiram efeito.
Método 3: Definindo a Zona drop como padrão, usando “set-default-zone=…”
Poderia ser alguma outra zona mais restrita, porém gosto de usar a drop. Drop significa cair e é a zona mais restrita. Ela faz faz cair praticamente todas as conexões.
Lembre-se que existem zonas mutáveis e as não mutáveis. Drop é mutável. Visite nosso post anterior para saber mais sobre zonas: Gerenciando Firewall com Firewalld.
Observe que se estivermos acessados via ssh ao alterar a zona padrão para drop perderemos a conexão. A opção “permanent” não se aplica em mudanças de zonas, pois a opção “set-default-zone=…” uma fez executada já deixa a alteração permanente(permanet).
Abservação.: Se tiver usando outras portas libere-as também antes de ativar a zona drop.
Para não perdermos acesso ssh antes de colocarmos(ativarmos) a zona drop como padrão vamos liberar a porta ssh nela de forma permanente(permanent). A porta do ssh é a 22, mas no meu pc alterei de 22 para 8380.
[elder@empresa10 ~]$ sudo firewall-cmd --zone=drop --add-port=8380/tcp --permanent
success
[elder@empresa10 ~]$ sudo firewall-cmd --reload
success
Vamos definir a zona drop como padrão
[elder@empresa10 ~]$ sudo firewall-cmd --set-default-zone=drop success
Confirme qual zona é a padrão usando list-all
[elder@empresa10 ~]$ sudo firewall-cmd --list-all drop (active) target: DROP icmp-block-inversion: no interfaces: enp0s3 sources: services: ports: 8380/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
No outro windows vamos executar o ping
C:\Users\administrator>ping 192.168.0.44 Disparando 192.168.0.44 com 32 bytes de dados: Esgotado o tempo limite do pedido. Esgotado o tempo limite do pedido. Esgotado o tempo limite do pedido. Esgotado o tempo limite do pedido. Estatísticas do Ping para 192.168.0.44: Pacotes: Enviados = 4, Recebidos = 0, Perdidos = 4 (100% de perda),
Agora executemos o ping em um pc com Linux 🙂
elder@server02:~$ ping 192.168.44 -c4 PING 192.168.44 (192.168.0.44) 56(84) bytes of data. --- 192.168.44 ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 74ms
Conclusão
Aqui vimos como bloquear respostas para o comando ping.
É bom lembrar que pode haver programas em seu ambiente que use o icmp e que ao bloquear icmp request e reply esses programas podem a vir se comportar diferente.
Uma coisa a se notar é que ao bloquearmos icmp reply e request o Linux e Windows recebem respostas diferentes
- Windows: Rede de destino inacessível.
- Linux: icmp_seq=1 Packet filtered
Comportamentos diferentes entre Windows e Linux também há em relação à zona drop ativada:
- Windows: Esgotado o tempo limite do pedido
- Linux:
Nesse caso o linux não traz nada de resposta em seu relatório.