2 votes

Comment les règles nftables utilisant des noms d'hôte devraient-elles être réécrites pour gérer plusieurs adresses ?

J'ai cette règle nftables :

ip daddr { "0.nixos.pool.ntp.org", "1.nixos.pool.ntp.org", "2.nixos.pool.ntp.org", "3.nixos.pool.ntp.org" } udp dport ntp accept comment "Autoriser le trafic NTP pour l'heure système"

L'objectif est d'autoriser le trafic NTP à partir d'un hôte qui autrement refuse la plupart du trafic (politique de rejet par défaut). Les noms d'hôtes dans la règle proviennent de la configuration NTP par défaut du système (donc ce sont les mêmes noms d'hôtes avec lesquels le démon NTP est configuré).

Cependant, cela échoue au chargement, car 0.nixos.pool.ntp.org (et les autres) ont plusieurs adresses :

$ host 0.nixos.pool.ntp.org
0.nixos.pool.ntp.org a une adresse 66.228.42.59
0.nixos.pool.ntp.org a une adresse 216.229.4.66
0.nixos.pool.ntp.org a une adresse 216.229.0.50
0.nixos.pool.ntp.org a une adresse 69.10.161.7

Donc nftables se plaint et refuse de charger l'ensemble de règles :

# nft -f ...-nftables-rules
...-nftables-rules:37:16-37: Error: Le nom d'hôte se résout sur plusieurs adresses
    ip daddr { "0.nixos.pool.ntp.org", ... } udp dport ntp accept comment "..."
               ^^^^^^^^^^^^^^^^^^^^^^

Ces noms de domaine sont hors de mon contrôle. Ainsi, je ne peux pas les empêcher de se résoudre sur plusieurs adresses. Je ne sais pas non plus quand les enregistrements d'adresses associés pourraient changer.

Comment dois-je écrire mon ensemble de règles nftables pour gérer ce cas ?

2voto

Paul Gear Points 3883

Pour clarifier dès le départ : ce n'est pas une réponse à votre question sur nftables. C'est pour offrir quelques autres options.

  1. Si vous contrôlez entièrement la machine en question (c'est-à-dire s'il n'y a pas d'utilisateurs non dignes de confiance qui pourraient générer des requêtes NTP malveillantes), alors il n'y a pas de différence substantielle en termes de sécurité entre autoriser le trafic sortant NTP vers n'importe quel serveur et autoriser l'accès uniquement aux serveurs retournés par la requête DNS, car le pool NTP est garanti de changer ces noms d'hôtes en fonction des poids des serveurs dans le pool. Donc la solution simple est simplement d'autoriser tout le trafic sortant NTP.

  2. Si vous avez des utilisateurs non dignes de confiance et que vous souhaitez sécuriser vos règles pour autoriser uniquement les adresses IP retournées par le serveur DNS du pool NTP pour ces noms spécifiques et que vous utilisez dnsmasq comme résolveur (ou êtes prêt à passer à celui-ci), alors une option pourrait être d'utiliser dnsmasq pour peupler un ipset, puis de faire référence à cet ipset dans votre règle nftables (en supposant que nftables prend en charge les ipsets). J'utilise ceci avec iptables pour limiter certains trafics sortants (par exemple HTTPS) uniquement à ces domaines que je sais vouloir utiliser, sans avoir besoin de connaître les adresses IP à l'avance.

Si vous suivez la dernière approche, utilisez des définitions d'ipset comme ceci :

ipset create ntp       hash:ip family inet  counters  # IPv4
ipset create ntp-inet6 hash:ip family inet6 counters  # IPv6

avec une option dnsmasq comme ceci :

ipset=/nixos.pool.ntp.org/ntp,ntp-inet6

Avec la configuration ci-dessus, dnsmasq ajoutera les adresses IPv4 pour les noms qu'il résout à l'ipset ntp, et les adresses IPv6 à l'ipset ntp-inet6. Ensuite, vous pouvez faire référence à ces ipsets dans vos règles. Vous pouvez également configurer un délai d'expiration sur les ipsets, mais cela est probablement déconseillé dans ce cas, car le NTP continuera d'utiliser les serveurs du pool pendant de longues périodes après la requête DNS, si la source est considérée comme stable.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X