NTP Server – Mantenha a hora certa em sua rede!

Que tal nunca mais ver logs com datas e horas erradas?!

Esse é um tutorial bem simples, mas que ainda vejo muitas pessoas sofrer para implementarem um servido de horas (NTP) em sua rede.

Está instalação será feira no Debian 10, mas não vejo necessidade de você criar um Servidor/VM só para esta finalidade, o pacote ntp usa praticamente nada de recursos de hardware, então você pode instalar em um de seu servidores, o importante aqui é FECHAR A PORTA UDP 123 para o mundo, vou ensinar isso também criando um firewall bem simples com nftables.

Mão na massa!

NTP

# apt install ntp
# sntp --version
sntp 4.2.8p12@1.3728-o (1)

Vamos dar uma olhada com quais servidores o mesmo está sincronizando:

# ntpq -p

Ira listar algo como:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 0.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 1.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 2.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 3.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
-ntp9.kashra-ser 192.168.100.15   2 u    5   64    1  205.880   -7.287   1.474
+y.ns.gin.ntt.ne 249.224.99.213   2 u    6   64    1  135.825   -0.532   2.092
-ec2-3-121-254-2 192.53.103.108   2 u    8   64    1  239.185   -3.357   1.845
 li290-38.member 209.180.247.49   2 u    9   64    1  162.385    4.319   2.840
-ntp5.flashdance 194.58.202.20    2 u    4   64    1  235.258    3.704   0.929
-main13.ip-conne 118.188.39.164   2 u   10   64    1  255.868   -6.108   3.203
+ntp1.hetzner.de 124.216.164.14   2 u   12   64    1  215.892   -0.202   2.642
-2001:440:1880:5 .PPS.            1 u   14   64    1  246.402    2.843   1.336
#shackleton.red. 147.156.1.135    2 u   22   64    1  236.816   11.631   1.291
-ntp.exact-time. .GPS.            1 u   23   64    1  240.908   -1.950   1.239
#ip.tcp.lv       194.100.2.194    2 u   27   64    1  274.910   20.462   1.673
#2606:6680:8:1:: 107.46.198.112   2 u   26   64    1  147.792    8.065   9.809
*mail.agrogradv. 118.188.39.164   2 u   27   64    1  243.763   -0.331   1.383
#dns1.campus-rv. 31.28.161.68     2 u   26   64    1  240.321    3.779   0.878
#ntp18.kashra-se 192.168.100.15   2 u   26   64    1  228.172  -15.113   0.715
+main.hosting-sk 192.53.103.108   2 u   27   64    1  212.732   -0.447   0.990

Você conhece o ntp.br ?
O projeto NTP.br tem por objetivo oferecer condições para que os servidores Internet no Brasil estejam sincronizados com a Horal Legal Brasileira. Para isso foi firmado um acordo entre o Observatório Nacional (ON) e o NIC.br.

Iremos ajustar nossas configurações para usar o ntp.br. Você pode incluir outros servidores NTPs dependendo de seu país se desejar. Irei criar um arquivo novo.

# mv /etc/ntp.conf /etc/ntp.conf.orig
# vim /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift

# Definição de segundos bissextos fornecida por tzdata
leapfile /usr/share/zoneinfo/leap-seconds.list

# Ative-o se quiser que as estatísticas sejam registradas.
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# Informe os servidores para sincronizar a hora
server a.st1.ntp.br iburst
server b.st1.ntp.br iburst
server c.st1.ntp.br iburst
server d.st1.ntp.br iburst
server gps.ntp.br iburst
server a.ntp.br iburst
server b.ntp.br iburst
server c.ntp.br iburst

# Configuração de controle de acesso; consulte /usr/share/doc/ntp-doc/html/accopt.html para
# detalhes. A página da web <http://support.ntp.org/bin/view/Support/AccessRestrictions>
# também pode ser útil.
#
# Observe que "restrict" se aplica a servidores e clientes, portanto, uma configuração
# que pode ter como objetivo bloquear solicitações de certos clientes também pode terminar
# bloqueando respostas de seus próprios servidores upstream.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
restrict source notrap nomodify noquery
restrict 127.0.0.1
restrict ::1

# Se desejar deixar a porta 123 UDP sendo ouvida apenas por alguma interface segue ex. comentado.
#interface ignore wildcard
#interface listen 127.0.0.1
#interface listen ::1
#interface listen 192.168.171.2
#interface listen 2001:db8:bebe:cafe::2

Crie o arquivo ntp.drift e reinicie o serviço ntp

# touch /var/lib/ntp/ntp.drift
# systemctl restart ntp

Verifique novamente

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+a.st1.ntp.br    .ONBR.           1 u   23   64    3   22.847    1.804   2.047
 b.st1.ntp.br    .INIT.          16 u    -   64    0    0.000    0.000   0.000
-c.st1.ntp.br    .ONBR.           1 u   20   64    3   25.247    3.287   1.720
-d.st1.ntp.br    .ONBR.           1 u   18   64    3   28.425    1.562   7.737
*gps.jd.ntp.br   .GPS.            1 u   23   64    3   20.985    0.912   2.678
+a.ntp.br        200.160.7.186    2 u   23   64    3   21.051    0.859   2.229
-b.ntp.br        200.160.7.186    2 u   22   64    3  169.422  -49.325   2.108
-c.ntp.br        200.160.7.186    2 u   20   64    3  129.587   50.390   1.710

Você pode consultar se a porta foi aberta:

# ss -tulpn | grep :123
udp   UNCONN 0      0                  200.200.200.40:123          0.0.0.0:*     users:(("ntpd",pid=26866,fd=17))                                               
udp   UNCONN 0      0                       127.0.0.1:123          0.0.0.0:*     users:(("ntpd",pid=26866,fd=16))                                               
udp   UNCONN 0      0        [2001:db8:bebe:cafe::aa]:123             [::]:*     users:(("ntpd",pid=26866,fd=19))                                               
udp   UNCONN 0      0                           [::1]:123             [::]:*     users:(("ntpd",pid=26866,fd=18)) 

Consulte também as informações

# ntpq -c sysinfo
associd=0 status=0614 leap_none, sync_ntp, 1 event, freq_mode,
system peer:        a.st1.ntp.br:123
system peer mode:   client
leap indicator:     00
stratum:            2
log2 precision:     -23
root delay:         17.453
root dispersion:    5.114
reference ID:       200.160.7.186
reference time:     e4513036.6d7962c1  Thu, May 20 2021 16:00:06.427
system jitter:      0.406513
clock jitter:       2.205
clock wander:       0.000
broadcast delay:    -50.000
symm. auth. delay:  0.000

Para ver a hora use o comando

# date
sex mai 21 18:41:04 -03 2021

Caso sua instalação tenha o Time Zone (UTC) errado use o comando para ajustar de acordo com sua região

# dpkg-reconfigure tzdata

NFTABLES

Agora precisamos fechar essa porta urgente, caso contrário irai receber aquele lindo e famoso email do nic.br 🙂 Para isso vamos usar o nftables. Faça a instalação do mesmo e habilite-o para iniciar com o sistema.

# apt install nftables
# systemctl enable nftables

Cri o arquivo, perceba que ele é bem intuitivo, temos uma lista chama acesso-ntp4/acesso-ntp6 onde iremos informar todos os IPs que podem solicitar informação de hora. (IP de sua rede!)

# vim /etc/nftables.conf
#!/usr/sbin/nft -f
  
flush ruleset

table inet filter {

    # Permite os ips da sua rede
    set acesso-ntp-local-v4 {
        type ipv4_addr
        flags interval
        elements = { 127.0.0.1, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 100.64.0.0/10, 200.200.200.0/22 }
    }
    set acesso-ntp-local-v6 {
        type ipv6_addr
        flags interval
        elements = { ::1,  2804:ff4:bebe::/48 }
    }

    # Permite que os servidores do ntp.br falem com seu servidor!
    set acesso-ntp-br-v4 {
        type ipv4_addr
        flags interval
        elements = { 200.160.7.186, 201.49.148.135, 200.186.125.195, 200.20.186.76, 200.160.7.197, 200.160.0.8, 200.189.40.8, 200.192.232.8 }
    }
    set acesso-ntp-br-v6 {
        type ipv6_addr
        flags interval
        elements = { 2001:12f8:b:1::8, 2001:12ff:0:7::186, 2001:12ff:0:7::197, 2001:12f8:9:1::8, 2001:12ff::8 }
    }

    chain input {
        type filter hook input priority 0;

        # NTP
        ip saddr  @acesso-ntp-local-v4 udp dport 123 counter accept
        ip6 saddr @acesso-ntp-local-v6 udp dport 123 counter accept
        ip saddr  @acesso-ntp-br-v4 udp dport 123 counter ct state related,established accept
        ip6 saddr @acesso-ntp-br-v6 udp dport 123 counter ct state related,established accept
        udp dport 123 counter drop

        type filter hook input priority 0;
    }
    chain forward {
        type filter hook forward priority 0;
    }
    chain output {
        type filter hook output priority 0;
    }
}

Reinicie o nftables em seguida verifique se as regras foram carregadas:

# systemctl restart nftables
# nft list ruleset 

Configurando os NTP clientes

Alguns exemplo, onde 10.20.30.1 seria o IP do nosso servidor NTP (contribuição #MAFIADOPING):

Linux (deb)

# apt install ntpdate
# ntpdate 10.20.30.1

Mikrotik

Fonte

/system clock
set time-zone-autodetect=no time-zone-name=America/Sao_Paulo
/system ntp client
set enabled=yes primary-ntp=10.20.30.1

Huawei NE

Fonte

<NE8000-root> system-view
[~NE8000-root] ntp-service refclock-master 2

[*NE8000-root] ntp-service unicast-server 10.20.30.1

[*NE8000-root] display ntp status
 clock status: synchronized
 clock stratum: 2
 reference clock ID: LOCAL(0) 
 nominal frequency: 100.0000 Hz
 actual frequency: 100.0000 Hz
 clock precision: 2^17
 clock offset: 0.0000 ms
 root delay: 0.00 ms
 root dispersion: 0.00 ms
 peer dispersion: 10.00 ms
 reference time: 18:50:19.981 UTC May 22 2021
 synchronization state: clock set

[*NE8000-root] clock timezone 1 minus 03:00:00

[*NE8000-root] commit

[~NE8000-root] display clock
2021-05-22 15:56:18-03:00
Saturday
Time Zone(1) : UTC-03:00

Juniper

Fonte

user@host# set system ntp boot-server 10.20.30.1
user@host# set system ntp server 10.20.30.1
user@host# set time-zone America/Sao_Paulo
user@host# show ntp status
user@host# show ntp associations

Cisco

Fonte

Router(config)# ntp server 10.20.30.1
Router(config-if)# show ntp associations 
switch(config)#clock timezone EST -3
Router# show ntp status
Router# show clock

VyOS

Fonte

# set system ntp server 10.20.30.1
# set system time-zone America/Sao_Paulo

Ubiquiti

Praticamente todos é só buscar o campo:

Gostou? Quer me ajudar? 🙂

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

4 Resultados

  1. Jorge Ciriaco disse:

    Muito bom, nunca pensei que fosse utilizar um desses. Acaba se tornando mais pratico quando não se tem NAT para a caixa em si.

  2. Victor disse:

    Muito bom!
    Só encontrei um porém, quanto ativamos um nftables, o servidor não consegue mais realizar a sincronização.

  1. 19 de junho de 2021

    […] O NTP é um protocolo que é utilizado para sincronizar a hora dos seus servidores e computador com uma fonte confiável de informação de hora, como por exemplo os servidores do projeto NTP.br. Há um tutorial muito completo sobre como manter seus servidores com a data correta aqui. […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *