Często wdrażając mechanizmy i procedury bezpieczeństwa u klienta, jestem pytany co jest podstawą bezpieczeństwa w sieci. Odpowiedź jest jedna: własny serwer NTP. Zaskoczeni?
Truizmem jest stwierdzenie, że aby diagnozować usterki, analizować stan urządzeń i sieci, lub przeprowadzać analizę powłamaniową należy mieć centralny system logów. Logi spływające do jednego urządzenia, które dodatkowo umożliwia łatwy wgląd i analizę są podstawą, bez której żadna poważna firma nie może się obejść. Często jednak osoby odpowiedzialne za bezpieczeństwo zapominają o pewnym drobnym fakcie – aby logi były miarodajne, czas na każdej z maszyn musi być taki sam. W innym przypadku analizę logów będziecie rozpoczynali od sprawdzenia czasu na interesującym was serwerze i ewentualnej korekcie. Przyznacie, że nie brzmi zachęcająco.
Protokół NTP jest jednym z najstarszych protokołów będących do tej pory w użyciu. Pozwala on na synchronizację zegarów na hostach w sieci. Każda z maszyn może być klientem NTP lub serwerem. Często jest tak, że serwer synchronizowany jest przez inny serwer. W prawidłowo zaprojektowanej i bezpiecznej sieci istnieje serwer z którego wszystkie inne urządzenia, czy to stacje robocze, czy serwery, czy też urządzenia aktywne sieci pobierają aktualny czas. Spytacie, a co będzie jak serwer NTP nie zsynchronizuje się z żadnym z zaufanych serwerów? Nic się nie stanie, bo cała wasza sieć będzie „odbierała na tych samych falach”, a więc nie trzeba będzie przetwarzać dodatkowo logów. Każde zdarzenie będzie zapisane we właściwej kolejności relatywnie do innych zdarzeń. Sieć wewnętrzną należy traktować jak naczynie zamknięte – nie ważne jest jaki czas jest na zewnątrz, ważne jest to, aby w sieci czas był taki sam dla wszystkich urządzeń.
Serwer NTP
Na dystrybucjach typu Red Hat instalujemy ntp:
Otwieramy plik konfiguracyjny znajdujący się w /etc/ntp.config i wpisujemy w nim serwery zewnętrzne. Aby wybrać bezpieczne serwery warto je wziąć ze strony: http://www.pool.ntp.org/zone/pl
Ważne jest ograniczenie zasięgu naszej usługi. Aby to zrobić wpisujemy:
Oznacza to, że tylko hosty z sieci 192.168.1.0/24 będą korzystały z tego serwera.
Jeżeli w naszym środowisku posiadamy Solarisy może też odznaczyć opcję:
Należy jednak pamiętać, że w takim przypadku zalewamy sieć ruchem multicastowym.
Dodatkowo warto pamiętać o dodaniu reguły do firewalla, aby przepuszczała ruch:
Na koniec należy zrestartować usługę:
W celach weryfikacji wydajemy polecenie:
Klient NTP
Na kliencie (linux, unix) konfigurujemy tylko adres serwera:
po zapisaniu pliku wykonujemy:
Nic nie szkodzi na przeszkodzie, aby dokonać manualnej synchronizacji. W tym celu wydajemy polecenie:
Na kliencie Widnows możemy synchronizacji dokonać klikając na datę i godzinę -> zmień ustawienia daty godziny.. ->Czas z Internetu i wpisujemy adres IP naszego serwera.
Można też tak:
Na urządzeniach aktywnych sieci firmy Cisco konfiguracja jest równie łatwa:
Po wydaniu tych poleceń weryfikujemy, czy urządzenie się zsynchronizowało:
Po tych krokach urządzenia w naszej sieci egzystują w tym samym czasie.
A więc pora na serwer logów!
Truizmem jest stwierdzenie, że aby diagnozować usterki, analizować stan urządzeń i sieci, lub przeprowadzać analizę powłamaniową należy mieć centralny system logów. Logi spływające do jednego urządzenia, które dodatkowo umożliwia łatwy wgląd i analizę są podstawą, bez której żadna poważna firma nie może się obejść. Często jednak osoby odpowiedzialne za bezpieczeństwo zapominają o pewnym drobnym fakcie – aby logi były miarodajne, czas na każdej z maszyn musi być taki sam. W innym przypadku analizę logów będziecie rozpoczynali od sprawdzenia czasu na interesującym was serwerze i ewentualnej korekcie. Przyznacie, że nie brzmi zachęcająco.
Protokół NTP jest jednym z najstarszych protokołów będących do tej pory w użyciu. Pozwala on na synchronizację zegarów na hostach w sieci. Każda z maszyn może być klientem NTP lub serwerem. Często jest tak, że serwer synchronizowany jest przez inny serwer. W prawidłowo zaprojektowanej i bezpiecznej sieci istnieje serwer z którego wszystkie inne urządzenia, czy to stacje robocze, czy serwery, czy też urządzenia aktywne sieci pobierają aktualny czas. Spytacie, a co będzie jak serwer NTP nie zsynchronizuje się z żadnym z zaufanych serwerów? Nic się nie stanie, bo cała wasza sieć będzie „odbierała na tych samych falach”, a więc nie trzeba będzie przetwarzać dodatkowo logów. Każde zdarzenie będzie zapisane we właściwej kolejności relatywnie do innych zdarzeń. Sieć wewnętrzną należy traktować jak naczynie zamknięte – nie ważne jest jaki czas jest na zewnątrz, ważne jest to, aby w sieci czas był taki sam dla wszystkich urządzeń.
Serwer NTP
Na dystrybucjach typu Red Hat instalujemy ntp:
KOD: ZAZNACZ CAŁY
Code:
# yum install ntp
# chkconfig ntpd on
Otwieramy plik konfiguracyjny znajdujący się w /etc/ntp.config i wpisujemy w nim serwery zewnętrzne. Aby wybrać bezpieczne serwery warto je wziąć ze strony: http://www.pool.ntp.org/zone/pl
KOD: ZAZNACZ CAŁY
Code:
server 0.pl.pool.ntp.org prefer
server 1.pl.pool.ntp.org
server 2.pl.pool.ntp.org
server 3.pl.pool.ntp.org
Ważne jest ograniczenie zasięgu naszej usługi. Aby to zrobić wpisujemy:
KOD: ZAZNACZ CAŁY
Code:
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
Oznacza to, że tylko hosty z sieci 192.168.1.0/24 będą korzystały z tego serwera.
Jeżeli w naszym środowisku posiadamy Solarisy może też odznaczyć opcję:
KOD: ZAZNACZ CAŁY
Code:
#broadcast 224.0.1.1 autokey
Należy jednak pamiętać, że w takim przypadku zalewamy sieć ruchem multicastowym.
Dodatkowo warto pamiętać o dodaniu reguły do firewalla, aby przepuszczała ruch:
KOD: ZAZNACZ CAŁY
Code:
/sbin/iptables –A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
Na koniec należy zrestartować usługę:
KOD: ZAZNACZ CAŁY
Code:
/etc/init.d/ntpd restart
W celach weryfikacji wydajemy polecenie:
KOD: ZAZNACZ CAŁY
Code:
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
96-7.cpe.smnt.p 91.237.52.68 3 u 7 64 1 24.372 0.098 0.000
96-1.cpe.smnt.p 31.216.56.5 2 u 6 64 1 21.311 -8.576 0.000
195.46.37.22 212.244.36.227 2 u 5 64 1 38.141 -4.985 0.000
ntp-03.ipartner 212.244.36.227 2 u 5 64 1 66.471 -6.225 0.000
Klient NTP
Na kliencie (linux, unix) konfigurujemy tylko adres serwera:
KOD: ZAZNACZ CAŁY
Code:
serwer 192.168.1.1
po zapisaniu pliku wykonujemy:
KOD: ZAZNACZ CAŁY
Code:
# echo '30 * * * * root /usr/sbin/ntpd -q -u ntp:ntp' > /etc/cron.d/ntpd
Nic nie szkodzi na przeszkodzie, aby dokonać manualnej synchronizacji. W tym celu wydajemy polecenie:
KOD: ZAZNACZ CAŁY
Code:
ntpdate 192.168.1.1, gdzie 192.168.1.1 jest naszym serwerem ntp.
Na kliencie Widnows możemy synchronizacji dokonać klikając na datę i godzinę -> zmień ustawienia daty godziny.. ->Czas z Internetu i wpisujemy adres IP naszego serwera.
Można też tak:
KOD: ZAZNACZ CAŁY
Code:
net time /setsntp:192.168.1.1
Na urządzeniach aktywnych sieci firmy Cisco konfiguracja jest równie łatwa:
KOD: ZAZNACZ CAŁY
Code:
cisco1841#config t
ntp serwer 192.168.1.1
Po wydaniu tych poleceń weryfikujemy, czy urządzenie się zsynchronizowało:
KOD: ZAZNACZ CAŁY
Code:
cisco1841#show ntp status
Clock is synchronized, stratum 5, reference is 192.168.1.1
nominal freq is 250.0000 Hz, actual freq is 249.9997 Hz, precision is 2**18
reference time is D5FFBE6D.568CA957 (11:37:17.338 UTC Wed Oct 9 2013)
clock offset is 4.2759 msec, root delay is 40.04 msec
root dispersion is 105.99 msec, peer dispersion is 0.99 msec
Po tych krokach urządzenia w naszej sieci egzystują w tym samym czasie.
A więc pora na serwer logów!