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
/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
<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
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
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
# 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.
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.
Muito bom!
Só encontrei um porém, quanto ativamos um nftables, o servidor não consegue mais realizar a sincronização.
Atualizei o post, colocado os ips do ntp.br para aceitar as conexões related e established no nftables, agora fica seguro e funcional.