Konfigurace NTP serveru v Linuxu

By | 02/06/2019

Last Updated on 28/08/2021 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 18.04 LTS a Ubuntu 20.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 vim /etc/ntp.conf

Částečný výpis příkazu ntp.conf, kde je vidět defaultní konfigurace, 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]. 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 vim /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é 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).
pool – 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:

Konfigurace NTP serveru

Hodiny byly úspěšně synchronizovány.

Zachycení zpráv – Wireshark:

Zachycení zpráv NTP client/server:

Konfigurace NTP serveru

Zachycení zprávy NTP broadcast:

Konfigurace NTP serveru

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.pool.ntp.org/en/use.html
[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/

2 thoughts on “Konfigurace NTP serveru v Linuxu

    1. administrator Post author

      Prozatim jsem nevyzkousel, ale dekuji za info, brzo vyzkousim 🙂

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *