Dlaczego NTP wymaga dwukierunkowego dostępu zapory do portu UDP 123?

17

Od Jakie są reguły iptables, aby zezwolić na NTTP? :

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

Ponadto ze strony internetowej NTP :

... ntpd wymaga pełnego dwukierunkowego dostępu do uprzywilejowanego portu 123 UDP. ...

Moje pytanie brzmi: dlaczego? Dla kogoś, kto nie jest zaznajomiony z NTP, wydaje się to potencjalną luką w zabezpieczeniach, szczególnie gdy proszę mojego klienta o otwarcie tego portu w zaporze ogniowej, aby moje serwery mogły zsynchronizować swój czas. Czy ktoś ma dobre uzasadnienie, które mogę przekazać mojemu klientowi, aby przekonać go, że potrzebuję tego dostępu w zaporze? Doceniamy pomoc! :)

DuffJ
źródło
2
Czy czytałeś już część o „zezwalaj na powiązane / ustalone”? Jeśli ta reguła jest obecna, nie ma potrzeby stosowania ogólnej reguły wprowadzania dla portu UDP 123.
VMai
1
Czy to naprawdę potencjalna dziura w zabezpieczeniach? To jest często powtarzane zdanie, które moim zdaniem jest bez znaczenia. Jest rok 2014, aby nie nasycać portów mniejszych niż 1024 specjalnymi właściwościami i blokować cały ruch, który nie jest wyraźnie wymagany. Otwierasz port od jednego komputera od niektórych hostów w Internecie.
dfc
Zgadzam się, że tak naprawdę nie jest to potencjalna dziura w zabezpieczeniach, ale pracuję w branży finansowej i ludzie zawsze denerwują się otwieraniem zapór na wypadek, gdyby „coś przedostało się”. Zawsze warto mieć dobre uzasadnienie, a ja osobiście jestem ciekawy odpowiedzi - czy ntpd na serwerze czasu faktycznie nawiązuje wychodzące połączenia ze swoimi klientami, aby wysyłać aktualizacje czasu? Brzmi dziwnie i niezbyt skalowalnie.
DuffJ
Przeszukałem go kilka dni temu, można nim zarządzać bez połączenia przychodzącego.
barlop
@VMai osoba, która powiedziała to na superuser.com/questions/141772/... nie podała żadnego przykładu, ale myślę, że chciał umożliwić połączenia wychodzące, przychodzące pakiety w nich. Różni się to od koncepcji, że „ntpd wymaga pełnego dwukierunkowego dostępu do uprzywilejowanego portu UDP 123. ...”, co brzmi jak połączenie przychodzące. Jeśli chciałby zezwolić na przychodzące i wychodzące korzystanie z powiązanych / ustalonych, potrzebowałby 4 zasad. 2 dla połączeń przychodzących, 2 dla połączeń wychodzących.
barlop

Odpowiedzi:

10

Zezwól na porty przychodzące ruchu NTP tylko wtedy, gdy działasz jako serwer, umożliwiając klientom synchronizację z tobą.

W przeciwnym razie istnienie stanu NTP automatycznie określi, czy przychodzący pakiet NTP jest blokowany lub dozwolony przez istniejący stan zapory, który zainicjowaliśmy.

iptables -A WYJŚCIE -p udp --sport 123 --port 123 -j AKCEPTUJ

iptables -A WEJŚCIE -m stan - stan USTANOWIONO, POWIĄZANE -j AKCEPTUJ

Daj mi znać, jeśli zasady iptables są prawidłowe. Nie mam doświadczenia z iptables. Mój klient NTP pozostaje zsynchronizowany na moim routerze pfSense tylko z regułą wychodzącą, ponieważ pfSense jest zaporą stanową.

Ben Cook
źródło
1
To wydaje się rozsądne! Niestety nie jestem już w stanie potwierdzić poprawności twojej odpowiedzi; jednak zaakceptuję to, ponieważ wydaje się to logiczne. Wielkie dzięki!
DuffJ
1

NTP wymaga dwukierunkowego dostępu do portu 123, ponieważ NTP RFC określa następujące informacje dotyczące portu źródłowego klienta:

Podczas pracy w trybach symetrycznych (1 i 2), pole to musi zawierać numer portu NTP PORT (123) przypisany przez IANA.

Ponieważ portem źródłowym klienta jest 123, gdy serwer odsyła odpowiedź, odeśle ją do portu 123. Oczywiście, aby móc otrzymać tę odpowiedź, klient musi zezwolić na przychodzące odpowiedzi na porcie 123. Zwykle odpowiedzi wrócą w niektórych efemerycznych zakresach portów .

Jak wspomniano powyżej Ben Cook , jest to wymagane tylko w przypadku bezstanowej zapory ogniowej, ponieważ zapora stanowa pozwala na powrót odpowiedzi bez wyraźnej reguły.

Gurpreet Atwal
źródło
0

Myślę, że najlepszym rozwiązaniem jest włączenie portu 123 dla wejścia, tylko dla adresów IP, które mają dać serwerowi sygnał NTTP.
W pliku konfiguracyjnym NTTP /etc/ntp.conf znajdują się adresy kilku serwerów NTTP, na które serwer powinien wskazywać. Możesz użyć polecenia odnośnika, aby znaleźć odpowiedni adres IP dla każdego adresu.

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

Następnie możesz dodać regułę do zapory serwera:

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

... i tak dalej.
Może to zapobiec uszkodzeniu serwera przez jakąkolwiek złośliwą osobę.
Myślę, że nie ma sensu ograniczać wydajności.

Leonardo Gugliotti
źródło
-1

Komunikacja między serwerem ntp to port źródłowy i docelowy 123. Najwygodniej jest jawnie zezwolić na to przynajmniej hostom, na których uruchomiona jest usługa ntp.

Można rozważyć udostępnienie tylko zewnętrznego hosta w Internecie, aby uzyskać czas ze źródeł zewnętrznych. Synchronizacja z wewnętrzną usługą NTTP może być źródłem dla wszystkich urządzeń. Jeśli hosty te są przeznaczone do tego celu, możliwa ekspozycja jest ograniczona: akceptują tylko ruch NTTP i nie przechowują innych danych.

Alternatywnie, w ogóle nie używaj zewnętrznej sieci IP. Na przykład użyj źródła radiowego, takiego jak GPS.

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

John Mahowald
źródło
1
Dzięki za tę odpowiedź, ale nie odpowiada na pytanie. Co się stanie, jeśli jestem administratorem systemu i chcę otworzyć zaporę ogniową, aby móc skonfigurować wewnętrzną usługę NTP? Wydaje się, że nikt nie ma pojęcia, dlaczego dla NTP wymagany jest dostęp dwukierunkowy (który jest znacznie bardziej niebezpieczny niż dostęp jednokierunkowy).
DuffJ