Pourquoi NTP nécessite-t-il un accès pare-feu bidirectionnel au port UDP 123?

17

De Quelles sont les règles iptables pour autoriser ntp? :

iptables -A INPUT -p udp --dport 123 -j ACCEPT
iptables -A OUTPUT -p udp --sport 123 -j ACCEPT

Aussi, à partir du site Web du NTP :

... ntpd nécessite un accès bidirectionnel complet au port UDP privilégié 123. ...

Ma question est, pourquoi? Pour quelqu'un qui n'est pas familier avec NTP, cela semble être une faille de sécurité potentielle, surtout lorsque je demande à un de mes clients d'ouvrir ce port dans leur pare-feu afin que mes serveurs puissent synchroniser leur temps. Quelqu'un a-t-il une justification décente à donner à mon client pour le convaincre que j'ai besoin de cet accès dans le pare-feu? L'aide est appréciée! :)

DuffJ
la source
2
Avez-vous lu la partie sur "autoriser les liens / établis"? Si cette règle est présente, il n'est pas nécessaire d'avoir une règle d'entrée générale pour le port UDP 123.
VMai
1
Est-ce vraiment un trou de sécurité potentiel? C'est une phrase souvent répétée qui, à mon avis, n'a aucun sens. Il est 2014, il est temps de ne pas imprégner les ports inférieurs à 1024 avec des propriétés spéciales et de bloquer tout le trafic qui n'est pas explicitement requis. Vous ouvrez un port à une machine à partir de certains hôtes sur Internet.
dfc
Je suis d'accord, ce n'est pas vraiment un trou de sécurité potentiel, mais je travaille dans le secteur financier et les gens sont toujours nerveux à l'idée d'ouvrir des pare-feu au cas où "quelque chose passerait". Cela vaut toujours la peine d'avoir une bonne justification sous la main, et je suis moi-même curieux de savoir la réponse - ntpd sur un serveur de temps établit-il réellement des connexions sortantes avec ses clients pour envoyer des mises à jour de temps? Cela semble étrange et pas particulièrement évolutif.
DuffJ
J'ai googlé celui-ci il y a quelques jours, il peut se gérer sans qu'une connexion entrante ne soit établie.
barlop
@VMai la personne qui a dit cela sur superuser.com/questions/141772/… n'a donné aucun exemple, mais je pense qu'il voulait permettre les connexions sortantes, les paquets entrant en leur sein. Cela est différent du concept selon lequel "ntpd nécessite un accès bidirectionnel complet au port UDP privilégié 123. ..." qui ressemble à une connexion entrante. S'il voulait autoriser les entrées et les sorties en utilisant les liens liés / établis, il aurait besoin de 4 règles. 2 pour les connexions entrantes, 2 pour les connexions sortantes.
barlop

Réponses:

10

Vous devez uniquement autoriser les ports NTP du trafic entrant si vous agissez en tant que serveur, permettant aux clients de se synchroniser avec vous.

Sinon, l'existence d'un état NTP déterminera automatiquement si le paquet NTP entrant est bloqué ou autorisé par un état de pare-feu existant que nous avons lancé.

iptables -A SORTIE -p udp --sport 123 --dport 123 -j ACCEPTER

iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT

Veuillez me faire savoir si les règles iptables sont appropriées. Je n'ai aucune expérience avec iptables. Mon client NTP reste synchronisé sur mon routeur pfSense avec uniquement une règle d'autorisation sortante car pfSense est un pare-feu dynamique.

Ben Cook
la source
1
Cela semble raisonnable! Malheureusement, je ne suis plus en mesure de confirmer l'exactitude de votre réponse; cependant, je l'accepterai car cela semble logique. Merci beaucoup!
DuffJ
1

NTP nécessite un accès bidirectionnel sur le port 123 car le RFC NTP spécifie les éléments suivants concernant le port source du client:

En fonctionnement en modes symétriques (1 et 2), ce champ doit contenir le numéro de port NTP PORT (123) attribué par l'IANA.

Étant donné que le port source du client est 123, lorsque le serveur renvoie la réponse, il l'envoie au port 123. Naturellement, pour pouvoir recevoir cette réponse, le client doit autoriser les réponses entrantes sur le port 123. Normalement, les réponses reviennent sur une gamme de ports éphémères .

Comme Ben Cook l'a mentionné ci-dessus, cela n'est requis que lorsqu'il s'agit d'un pare-feu sans état, car un pare-feu avec état permettrait à la réponse de revenir sans règle explicite.

Gurpreet Atwal
la source
0

Je pense que la meilleure solution est d'activer le port 123 pour l'entrée, uniquement pour les adresses IP censées donner à votre serveur le signal ntp.
Dans le fichier de configuration ntp, /etc/ntp.conf, il y a les adresses de plusieurs serveurs ntp sur lesquels votre serveur doit pointer. Vous pouvez utiliser la commande de recherche pour trouver l'IP correspondante pour chaque adresse.

host -t a 0.debian.pool.ntp.org

Ensuite, vous pouvez ajouter la règle au pare-feu du serveur:

iptables -I INPUT -p udp -s 94.177.187.22 -j ACCEPT

... et ainsi de suite.
Cela peut empêcher toute personne malveillante d'endommager votre serveur.
Je pense qu'il est inutile de restreindre la sortie.

Leonardo Gugliotti
la source
-1

La communication serveur à serveur ntp est le port source et de destination 123. Il est plus pratique d'autoriser explicitement cela au moins aux hôtes sur lesquels vous exécutez un service ntp.

Vous pourriez envisager d'exposer uniquement un hôte externe à Internet pour obtenir du temps de sources externes. Un service ntp interne se synchronisant avec cela peut être la source de tous les appareils. Si ces hôtes sont dédiés à l'objectif, l'exposition possible est limitée: ils acceptent uniquement le trafic ntp et ne stockent pas d'autres données.

Sinon, n'utilisez pas du tout de réseau IP externe. Utilisez une source radio comme le GPS pour l'heure, par exemple.

http://www.diablotin.com/librairie/networking/firewall/ch08_13.htm http://support.ntp.org/bin/view/Support/TroubleshootingNTP

John Mahowald
la source
1
Merci pour cette réponse, mais cela ne répond pas à la question. Que faire si je suis l'administrateur système et que je souhaite ouvrir mon pare-feu afin de pouvoir configurer le service NTP interne? Personne ne semble encore savoir pourquoi l'accès bidirectionnel (qui est beaucoup plus dangereux que l'accès unidirectionnel) est requis pour NTP.
DuffJ