Bloquear timestamp e resposta de timestamp com firewalld

5

SO: CentOS 7.0

De acordo com os resultados de uma análise de segurança, sugerimos que bloqueamos o registro de data e hora do ICMP & mensagens de resposta de timestamp usando o firewall ( CVE-1999-0524 ). Eu usei o firewalld para configurar alguns tipos básicos de filtragem de IP para SSH, além de permitir HTTPS, mas fiquei perplexo com isso.

A única coisa em que consegui pensar foi firewall-cmd --add-icmp-block , mas não consigo encontrar um icmptype que pareça ser relevante para a resposta timestamp ou timestamp.

Os tipos disponíveis ( firewall-cmd --get-icmptypes ) são os seguintes: destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded .

Como bloquear solicitações de registro de data e hora ICMP com firewalld ?

    
por 5ELuqLbb85Hk 20.03.2015 / 21:03

2 respostas

17

firewalld vem com um conjunto padrão de tipos ICMP predefinidos que você pode usar imediatamente:

# firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded timestamp-reply timestamp-request

No entanto, o analisador ( /usr/lib/python2.7/site-packages/firewall/core/io/icmptype.py ) não se limita a esses tipos e permite ser estendido:

Primeiro, como por man iptables-extensions(8) , seção icmp :

icmp (IPv4-specific) This extension can be used if '--protocol icmp' is specified. It provides the following option:

  [!] --icmp-type {type[/code]|typename}
          This allows specification of the ICMP type, which can be a numeric ICMP type, type/code pair, or one of the ICMP type names shown by the command
           iptables -p icmp -h

icmp6 (IPv6-specific) This extension can be used if --protocol ipv6-icmp' or--protocol icmpv6' is specified. It provides the following option:

  [!] --icmpv6-type type[/code]|typename
          This allows specification of the ICMPv6 type, which can be a numeric ICMPv6 type, type and code, or one of the ICMPv6 type names shown by the command
           ip6tables -p ipv6-icmp -h

Os dois tipos que você se refere são específicos do IPv4, portanto, você deve usar o seguinte para descobrir os nomes apropriados conforme reconhecidos por iptables :

# iptables -p icmp -h | grep timestamp
timestamp-request
timestamp-reply

Agora, se você verificar o conteúdo do pacote firewalld , encontrará onde os tipos ICMP predefinidos estão armazenados:

# rpm -ql firewalld | grep icmptype
/etc/firewalld/icmptypes
/usr/lib/firewalld/icmptypes/destination-unreachable.xml
/usr/lib/firewalld/icmptypes/echo-reply.xml
/usr/lib/firewalld/icmptypes/echo-request.xml
/usr/lib/firewalld/icmptypes/parameter-problem.xml
/usr/lib/firewalld/icmptypes/redirect.xml
/usr/lib/firewalld/icmptypes/router-advertisement.xml
/usr/lib/firewalld/icmptypes/router-solicitation.xml
/usr/lib/firewalld/icmptypes/source-quench.xml
/usr/lib/firewalld/icmptypes/time-exceeded.xml
/usr/lib/firewalld/xmlschema/icmptype.xsd
/usr/share/man/man5/firewalld.icmptype.5.gz

Se você verificar o analisador mencionado acima, verá que ele usa o nome do arquivo XML como tipo ICMP ao falar com iptables , portanto, é necessário gravar dois novos arquivos para os tipos ICMP que você deseja usar usando o ICMP tipos encontrados acima. Os tipos ICMP criados pelo usuário devem ser armazenados em /etc/firewalld/icmptypes .

# cat timestamp-request.xml
<?xml version="1.0" encoding="utf-8"?>
<icmptype>
  <short>Timestamp Request</short>
  <description>This message is used for time synchronization.</description>
  <destination ipv4="yes"/>
  <destination ipv6="no"/>
</icmptype>
# cat timestamp-reply.xml
<?xml version="1.0" encoding="utf-8"?>
<icmptype>
  <short>Timestamp Reply</short>
  <description>This message is used to reply to a timestamp message.</description>
  <destination ipv4="yes"/>
  <destination ipv6="no"/>
</icmptype>

Você vai acabar com:

# ll -Z /etc/firewalld/icmptypes
-rw-r--r--. root root system_u:object_r:firewalld_etc_rw_t:s0 timestamp-reply.xml
-rw-r--r--. root root system_u:object_r:firewalld_etc_rw_t:s0 timestamp-request.xml

Valide-os usando o XSD fornecido:

# xmllint --schema /usr/lib/firewalld/xmlschema/icmptype.xsd timestamp-request.xml
timestamp-request.xml validates

# xmllint --noout --schema /usr/lib/firewalld/xmlschema/icmptype.xsd timestamp-reply.xml
timestamp-reply.xml validates

Recarregue o firewall:

# firewall-cmd --reload

E finalmente adicione-os:

# firewall-cmd --add-icmp-block=timestamp-request
# firewall-cmd --add-icmp-block=timestamp-reply

# firewall-cmd --list-icmp-blocks
timestamp-reply timestamp-request

Você pode verificar se eles foram adicionados olhando as regras iptables diretamente:

iptables -nvL | grep icmp
0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 13 reject-with icmp-host-prohibited
0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 14 reject-with icmp-host-prohibited
0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 13 reject-with icmp-host-prohibited
0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 14 reject-with icmp-host-prohibited

Os tipos 13 e 14 são os tipos ICMP recém-adicionados.

Para referência, você pode ler a% man_de% manpage.

Esses tipos de ICMP foram incluídos upstream .

    
por 30.03.2015 / 14:10
-2

Talvez isso possa ser útil também, mesmo que não seja feito com firewalld :

echo "net.ipv4.tcp_timestamps = 0" >> /etc/sysctl.conf
sysctl -p
    
por 31.03.2015 / 13:56