Konfigurace NTP serveru v Linuxu

By | 02/06/2019

Last Updated on 03/09/2022 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 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é 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).
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/

Dobrovolný dar

Ahoj čtenáři, rád bych tě poprosil aby ses zamyslel, co je vše potřeba ke vzniku článku.
Jakožto amatérký softwarový kutil musím:

1) Nejdříve vše nastudovat v cizích jazycích.
2) Vše následně prakticky vyzkoušet.
3) Svoje poznatky a zkušenosti napsat do článku který si právě přečetl v jazyku kterému rozumíš.
4) Dát článku hlavu a patu a publikovat.

Každý článek zabere několik hodin práce, za kterou mi nikdo neplatí.
Prosím zvaž, kolik času jsem ti právě ušetřil.
Pokud ti to stojí aspoň za cenu jedné kávy, tak mi ji kup.
Předem moc děkuji.

Příspěvek tak můžeš provést zasláním libovolné částky na mé číslo účtu 1558701011/3030

Nebo můžeš dar poslat kliknutím na tento odkaz Podpořit tento WEB , který tě přesměruje na mou platební bránu Revolut.

Dar je také možné poslat ve formě Bitcoinu na BTC peněženku bc1qqdf5fp42a7srwwhh2rut8zr9x4jm5c8fqc9qw6

Veškeré peněžní prostředky budu také používat na zlepšení kvality své webové tvorby a na psaní nových technických návodů. Za každý dar předem děkuji.

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 *