Last Updated on 19/01/2023 by administrator
Konfigurace NTP serveru v Linuxu
Motivace:
NTP je protokol pro synchronizaci vnitřních hodin počítačů. Konfigurace NTP serveru tak může zajišťovat synchronizaci času všech počítačů v síti.
OS:
Implementace byla prováděna na Ubuntu 22.04 LTS, Ubuntu 20.04 LTS a Ubuntu 18.04 LTS postup může být podobně aplikovatelný na starší verze Ubuntu.
Implementace:
Aktualizace seznamu balíčků z repozitářů:
sudo apt-get update
Instalace služby NTP:
sudo apt-get install ntp
Pokud je nakonfigurovaný firewall (lze zjistit příkazem sudo ufw status), je nutné povolit provoz UDP/123:
sudo ufw allow 123/udp
Konfigurace NTP serveru je uvedena v configu ntp.conf.
sudo vi /etc/ntp.conf
Částečný výpis příkazu ntp.conf, ukazuje defaultní konfiguraci, kterou je doporučenou nechat, tak jak je vidět níže, jelikož při dotazu obecně na pool.ntp.org (nebo 0.ubuntu.pool.ntp.org, 1.ubuntu.pool.ntp.org, ..) se hledají ty nejbližší NTP servery [1]. Tyto NTP servery se můžou měnit co hodinu [6]. Nastavení iburst vyšle místo jedno paketu dávku osmi paketů, pokud je nějaký server nedosažitelný.
pool 0.ubuntu.pool.ntp.org iburst pool 1.ubuntu.pool.ntp.org iburst pool 2.ubuntu.pool.ntp.org iburst pool 3.ubuntu.pool.ntp.org iburst # Use Ubuntu's ntp server as a fallback. pool ntp.ubuntu.com
Alternativně a nepovinně je možné provést manuální konfiguraci zakomentováním řádků pool a nastavením manuálních NTP serverů v ntp.conf:
sudo vi /etc/ntp.conf
#pool 0.ubuntu.pool.ntp.org iburst #pool 1.ubuntu.pool.ntp.org iburst #pool 2.ubuntu.pool.ntp.org iburst #pool 3.ubuntu.pool.ntp.org iburst #pool ntp.ubuntu.com
A vložit ty české NTP servery do configu ntp.conf:
server tik.cesnet.cz server tak.cesnet.cz server ntp.nic.cz
Další české NTP servery lze najít zde: http://phoenix.inf.upol.cz/~bazgierv/ntp.html
Jak již bylo uvedeno, je doporučené nechat původní nastavení v ntp.conf.
Volitelně je možné posílat NTP zprávy broadcastem do naší sítě pro síťová zařízení. To se provede v configu ntp.conf, odkomentováním příkazu broadcast 192.168.123.255. Např. Pokud se nacházíme na podsíti 192.168.88.0 255.255.255.0, bude původní IP adresa broadcastu 192.168.123.255 nahrazena za 192.168.88.255.
broadcast 192.168.88.255
Pozn. Praktická konfigurace ukázala, že na starším Ubuntu 12.04.5 LTS příkaz broadcast nefungoval resp. neukazovala se ve výpisu ntpq -p IP adresa broadcastu.
Defaultně služba NTP zasílá logy do souboru /var/log/syslog, nicméně logy se v tomto souboru časem přepisují, a tak je možné vytvořit separátní soubor pouze s NTP logy. To se provede opět v configu ntp.conf přidáním následujících řádků:
logfile /var/log/ntp.log logconfig =all
Pozn. Soubor ntp.log není potřeba vytvářet.
Praktická konfigurace ukázala, že na starším Ubuntu 12.04.5 LTS příkaz logfile nefungoval resp. neukazovala se ve výpisu ntpq -p IP adresa broadcastu.
Aby se aplikovaly změny udělat restart NTP služby:
sudo service ntp restart sudo service ntp-systemd-netif restart
Tímto je konfigurace NTP serveru hotova.
Ověření:
sudo service ntp status
Výpis příkazu sudo service ntp status:
ntp.service - Network Time Service Loaded: loaded (/lib/systemd/system/ntp.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-11-13 22:10:44 CET; 2min ago Docs: man:ntpd(8) Process: 2469 ExecStart=/usr/lib/ntp/ntp-systemd-wrapper (code=exited, status=0/SUCCESS) Main PID: 2478 (ntpd) Tasks: 2 (limit: 1058) Memory: 1.1M CGroup: /system.slice/ntp.service └─2478 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 123:130
Alternativní ověření pomocí pomocí zobrazení běžících procesů:
ps -A | grep ntpd
Výpis příkazu ps -A | grep ntpd:
1500 ? 00:00:00 ntpd
Výpis nastavených NTP serverů:
ntpq -p
Výpis příkazu ntpq -p:
remote refid st t when poll reach delay offset jitter ============================================================================== 0.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.002 1.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.002 2.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.002 3.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.002 ntp.ubuntu.com .POOL. 16 p - 64 0 0.000 0.000 0.002 192.168.88.255 .BCST. 16 B - 64 0 0.000 0.000 0.002
Několik minut potrvá, než se servery inicializují a zobrazí. Jakmile inicializace skončí, objeví se u NTP serverů ve většině případů hvězdička či křížek.
ntpq -p
Výpis příkazu ntpq -p:
remote refid st t when poll reach delay offset jitter ============================================================================== 0.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.002 1.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.002 2.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.002 3.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.002 ntp.ubuntu.com .POOL. 16 p - 64 0 0.000 0.000 0.002 192.168.88.255 .BCST. 16 B - 64 0 0.000 0.000 0.002 +lx.ujf.cas.cz .GPS. 1 u 5 128 377 9.591 18.999 9.845 +mort.cihar.com 195.113.144.201 2 u 80 128 377 11.954 9.248 13.198 +time.cloudflare 10.31.8.4 3 u 86 128 377 9.869 23.143 12.487 +tallis.lavondys 195.113.144.201 2 u 87 128 377 12.291 11.693 9.685 +herbrand.noumic 193.190.230.37 2 u 77 128 377 35.567 6.740 13.332 *a1.vnet.cx .GPS. 1 u 74 128 377 13.254 9.796 11.677 -ntp3.kashra-ser 192.168.100.15 2 u 83 128 337 36.479 16.896 10.220 +time.cloudflare 10.31.8.4 3 u 68 128 377 9.693 10.641 12.378 -monit.blesmrt.n 147.231.2.6 2 u 3 128 377 22.025 16.332 6.950 +wrath.majkl578. 147.231.100.11 2 u 3 128 377 14.576 8.742 10.747
Služba NTP vybírá vhodné NTP servery podle dlouhodobých statistik. Vždy se preferuje synchronizace NTP serveru s menším stratum (st) a tím je zrovna NTP server a1.vnet.cx.
Legenda:
„*“ – Aktuální a preferovaný zdroj.
„+“ – Další kandidát pokud aktuální vypadne (považovaný za dobrý zdroj).
- Další znaky jako tečka (.), pomlčka(–), hash(#) či mezera znamenají, že server nesplňuje požadavky, je nedostupný, nebo není potřeba. [2]
remote – IP nebo hostname vzdáleného NTP serveru.
refid – Reference zdroje. GPS znamená, že čas je synchronizovaný pomocí družic, nebo může se objevit i PPS (pulse per second). ATOM jsou atomové hodiny či velmi přesný krystal. Další referenční zdroje lze najít zde.
st – Stratum, který udává vrstvu časového zdroje v hierarchii. Čím menší číslo, tím přesnější čas.
- Stratum 1 značí NTP server s nejpřesnějším časem a jeho referečním externím časovým zařízení jsou atomové, nebo rádiové hodiny či GPS. Tato referenční časová zařízení jsou označena stratum 0 v hierarchii.
- Stratum 16 znamená, že je zdroj nesynchronizovaný.
- Výjimkou je broadcast adresa označená jako BCST, s nesoucím stratum 16, což je standardní.
t – Typ zasílané zprávy (u=unicast, m=multicast, b=broadcast, l=local,..).
when – Počet sekund, které uplynuly od NTP odpovědi (synchronizace).
poll – Při naplnění časovače when, vyšle NTP klient žádost o další synchronizaci, zde po 64 sekundách.
reach – Stav synchronizace v hodnotě hexa, každá logická 1 níže reprezentuje nový přijatý paket (z prava).
- 0x377 = (1111 1111)2 – synchronizace plně funkční, NTP proces přijal úspěšně posledních 8 paketů (to od restartu to může trvat desítek minut).
- 0x0 = (0000 0000)2 – z posledních 8 paketů, NTP proces nepřijal zatím žádné.
- 0x1 = (0000 0001)2 – NTP proces přijal poslední (nejnovější) paket z posledních 8 paketů.
- a tak by se dalo pokračovat…
delay – Odezva (round trip time) v ms (od vyslání NTP žádosti po NTP odpověď).
offset – Časový rozdíl v ms mezi NTP klientem a zdrojem.
jitter – Rozdíl mezi NTP odpověďmi.
Další užitečné informace:
ntpq -c rv
Výpis příkazu ntpq -c rv:
associd=0 status=0615 leap_none, sync_ntp, 1 event, clock_sync, version="ntpd 4.2.8p10@1.3728-o (1)", processor="x86_64", system="Linux/4.15.0-109-generic", leap=00, stratum=2, precision=-19, rootdelay=13.254, rootdisp=34.237, refid=217.30.75.147, reftime=e2f64d93.fdc6abac Sun, Aug 30 2020 18:08:51.991, clock=e2f64f4b.fb056d43 Sun, Aug 30 2020 18:16:11.980, peer=41734, tc=7, mintc=3, offset=13.651486, frequency=-25.865, sys_jitter=6.732608, clk_jitter=14.437, clk_wander=5.903, tai=37, leapsec=201701010000, expire=202012280000
Z výpisu se dá usuzovat, že je náš server je synchronizován (řetězec leap_none, sync_ntp) serverem a1.vnet.cx na IP adrese 217.30.75.147. Připojením na NTP server se stratum 1 se námi nakonfigurovaný server podle hierarchie stává stratum 2, což ukazuje výpis. Poslední synchronizace byla provedena Sun, Aug 30 2020 18:08:51.991.
Logy:
grep "ntpd" /var/log/ntp.log
Částečný výpis příkazu grep „ntpd“ /var/log/ntp.log:
2 Dec 21:36:05 ntpd[2853]: Listen normally on 2 lo 127.0.0.1:123 2 Dec 21:36:05 ntpd[2853]: Listen normally on 3 eth0 192.168.88.15:123 2 Dec 21:36:05 ntpd[2853]: Listen normally on 4 lo [::1]:123 2 Dec 21:36:05 ntpd[2853]: Listen normally on 5 eth0 [fe80::227:eff:fe0e:c6e5%2]:123 2 Dec 21:36:05 ntpd[2853]: Listening on routing socket on fd #22 for interface updates 2 Dec 21:36:05 ntpd[2853]: 0.0.0.0 c01d 0d kern kernel time sync enabled 2 Dec 21:36:05 ntpd[2853]: 0.0.0.0 c012 02 freq_set kernel 8.708 PPM 2 Dec 21:36:05 ntpd[2853]: 0.0.0.0 c016 06 restart 2 Dec 21:36:06 ntpd[2853]: Soliciting pool server 213.32.40.221 2 Dec 21:36:07 ntpd[2853]: Soliciting pool server 31.31.74.35 2 Dec 21:36:07 ntpd[2853]: Soliciting pool server 147.251.48.140 2 Dec 21:36:08 ntpd[2853]: Soliciting pool server 81.2.248.189 2 Dec 21:36:15 ntpd[2853]: 0.0.0.0 c615 05 clock_sync ...
Test synchronizace času na WIN:
Nakonfigurovaný NTP server nám běží na IP 192.168.88.15:
Hodiny byly úspěšně synchronizovány.
Zachycení zpráv – Wireshark:
Zachycení zpráv NTP client/server:
Zachycení zprávy NTP broadcast:
Zabezpečení NTP serveru [3][4][5]:
Příkazem níže se získá verze NTP serveru která by měla být 4.2.7p26, nebo vyšší. Pokud je verze nižší, je potřeba zabezpečit server:
ntpq --version
Pro zabezpečení otevřít soubor ntp.conf a přidat následující řádky pokud neexistují:
restrict -4 default kod notrap nomodify nopeer noquery limited restrict -6 default kod notrap nomodify nopeer noquery limited
Pokud NTP server nemusí odpovádat na dotazy z veřejných IP adres, přidat i příkazy níže pokud neexistují v ntp.conf:
restrict 127.0.0.1 restrict ::1
Aplikovat příkaz níže, který prověří, zda je zaplý monitoring:
ntpdc -n -c monlist localhost
Pokud NTP server vrátí ***Request timed out je monitoring deaktivovaný a žádný další krok není potřeba.
Pokud příkaz níže vrátí dlouhý list IP adres, je NTP server nezabezpečen a je potřeba v souboru ntp.conf a přidat následující řádek, kterým se vypne monitoring:
disable monitor
Aby se aplikovaly změny udělat restart NTP služby:
sudo service ntp restart sudo service ntp-systemd-netif restart
Zdroje:
[1] https://www.ntppool.org/zone
[2] https://support.f5.com/csp/article/K10240
[3] https://support.master.cz/jak-zabezpecit-linux-server/
[4] https://help.fasthosts.co.uk/app/answers/detail/a_id/2153/~/what-is-ntp-and-how-do-i-make-it-secure%3F
[5] https://www.ionos.com/help/web-security/dedicated-server/disable-ntp-monitoring/
[6] https://www.pool.ntp.org/en/use.html
Doporučil bych použít Chrony místo ntpd. 😉
Prozatim jsem nevyzkousel, ale dekuji za info, brzo vyzkousim 🙂