Firewalld: Bloqueando Ping(ICPM)

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.

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *