Warum benötigt NTP einen bidirektionalen Firewall-Zugriff auf UDP-Port 123?

17

Von Was sind die Iptables-Regeln, um NTP zuzulassen? :

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

Auch von der NTP-Website :

... ntpd erfordert vollständigen bidirektionalen Zugriff auf den privilegierten UDP-Port 123. ...

Meine Frage ist, warum? Für jemanden, der nicht mit NTP vertraut ist, scheint dies eine potenzielle Sicherheitslücke zu sein, insbesondere wenn ich einen Client von mir auffordere, diesen Port in seiner Firewall zu öffnen, damit meine Server ihre Zeit synchronisieren können. Hat jemand eine anständige Rechtfertigung, die ich meinem Kunden geben kann, um ihn davon zu überzeugen, dass ich diesen Zugriff in der Firewall benötige? Hilfe wird geschätzt! :)

DuffJ
quelle
2
Haben Sie den Teil über "verwandte / etablierte zulassen" gelesen? Wenn diese Regel vorhanden ist, ist keine allgemeine Eingaberegel für UDP-Port 123
erforderlich.
1
Ist das wirklich eine potenzielle Sicherheitslücke? Dies ist ein oft wiederholter Satz, den ich für bedeutungslos halte. Es ist 2014, Zeit, Ports mit weniger als 1024 mit speziellen Eigenschaften zu versehen und den gesamten Verkehr zu blockieren, der nicht explizit erforderlich ist. Sie öffnen einen Port für einen Computer von bestimmten Hosts im Internet.
DFC
Ich stimme zu, es ist nicht wirklich eine potenzielle Sicherheitslücke, aber ich arbeite in der Finanzindustrie und die Leute sind immer nervös, wenn es darum geht, Firewalls zu öffnen, falls "etwas durchkommt". Es lohnt sich immer, eine gute Begründung zur Hand zu haben, und ich bin gespannt auf die Antwort selbst. Baut ntpd auf einem Zeitserver tatsächlich ausgehende Verbindungen zu seinen Clients auf, um Zeitaktualisierungen zu senden? Das klingt komisch und nicht besonders skalierbar.
DuffJ
Ich habe diesen vor ein paar Tagen gegoogelt, er kann ohne eingehende Verbindung auskommen.
Barlop
@ VMai die Person, die sagte, dass auf superuser.com/questions/141772/… gab kein Beispiel, aber ich denke, er wollte ausgehende Verbindungen ermöglichen, Pakete, die in ihnen eingehen . Dies unterscheidet sich von dem Konzept, dass "ntpd einen vollständigen bidirektionalen Zugriff auf den privilegierten UDP-Port 123 erfordert. ...", was sich wie eine eingehende Verbindung anhört. Wenn er eingehende und ausgehende Nachrichten mit "related / established" zulassen wollte, brauchte er vier Regeln. 2 für eingehende Verbindungen, 2 für ausgehende Verbindungen.
Barlop

Antworten:

10

Sie müssen die NTP-Ports für eingehenden Datenverkehr nur zulassen, wenn Sie als Server fungieren, damit Clients mit Ihnen synchronisieren können.

Andernfalls bestimmt das Vorhandensein eines NTP-Status automatisch, ob das eingehende NTP-Paket von einem vorhandenen, von uns initiierten Firewall-Status blockiert oder zugelassen wird.

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

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

Bitte lassen Sie mich wissen, ob die Iptables-Regeln korrekt sind. Ich habe keine Erfahrung mit Iptables. Mein NTP-Client bleibt auf meinem pfSense-Router mit nur einer ausgehenden Zulassungsregel synchronisiert, da pfSense eine Stateful-Firewall ist.

Ben Cook
quelle
1
Das scheint vernünftig! Leider bin ich nicht mehr in der Lage, die Richtigkeit Ihrer Antwort zu bestätigen. Ich werde es jedoch akzeptieren, da es logisch erscheint. Danke vielmals!
DuffJ
1

NTP erfordert einen bidirektionalen Zugriff auf Port 123, da der NTP-RFC Folgendes in Bezug auf den Quellport des Clients angibt:

Im symmetrischen Modus (1 und 2) muss dieses Feld die von der IANA zugewiesene NTP-Portnummer PORT (123) enthalten.

Da der Quellport des Clients 123 ist, sendet der Server die Antwort beim Zurücksenden an Port 123. Um diese Antwort empfangen zu können, muss der Client natürlich eingehende Antworten auf Port 123 zulassen. Normalerweise werden Antworten zurückgesendet auf einigen kurzlebigen Port Range.

Wie Ben Cook bereits erwähnt hat, ist dies nur erforderlich, wenn es sich um eine zustandslose Firewall handelt, da bei einer statusbehafteten Firewall die Antwort ohne explizite Regel zurückgegeben werden kann.

Gurpreet Atwal
quelle
0

Ich denke, dass die beste Lösung ist, Port 123 für die Eingabe zu aktivieren, nur für die IP-Adressen, von denen erwartet wird, dass sie Ihrem Server das NTP-Signal geben.
In der NTP-Konfigurationsdatei /etc/ntp.conf befinden sich die Adressen mehrerer NTP-Server, auf die Ihr Server verweisen sollte. Sie können den Befehl lookup verwenden, um die entsprechende IP-Adresse für jede Adresse zu ermitteln.

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

Anschließend können Sie die Regel zur Server-Firewall hinzufügen:

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

... und so weiter.
Dies kann verhindern, dass böswillige Personen Ihren Server beschädigen.
Ich denke, es nützt nichts, die Ausgabe einzuschränken.

Leonardo Gugliotti
quelle
-1

Die Kommunikation zwischen ntp-Servern erfolgt über den Quell- und Zielport 123. Es ist am bequemsten, dies zumindest den Hosts zu erlauben, auf denen Sie einen ntp-Dienst ausführen.

Möglicherweise möchten Sie nur einen externen Host dem Internet aussetzen, um Zeit von externen Quellen zu erhalten. Ein interner NTP-Dienst, der mit diesem synchronisiert wird, kann die Quelle für alle Geräte sein. Wenn diese Hosts dem Zweck dienen, ist die mögliche Gefährdung begrenzt: Sie akzeptieren nur NTP-Verkehr und speichern keine anderen Daten.

Verwenden Sie alternativ überhaupt kein externes IP-Netzwerk. Verwenden Sie beispielsweise eine Funkquelle wie GPS für die Zeit.

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

John Mahowald
quelle
1
Danke für diese Antwort, aber sie beantwortet die Frage nicht. Was ist, wenn ich der Systemadministrator bin und meine Firewall öffnen möchte, damit ich den internen NTP-Dienst einrichten kann? Niemand scheint noch eine Ahnung zu haben, warum für NTP ein bidirektionaler Zugriff erforderlich ist (der viel gefährlicher ist als ein unidirektionaler Zugriff).
DuffJ