Configurando o serviço NTP – Network Time Protocol

Introdução

O servidor NTP – Network Time Protocol, é responsável por sincronizar tempo (data e hora) em uma máquina.

É importante deixar o horário correto porque muitas aplicações (transações, backups, replicações, atualizações e outras) dependem de horários determinados para executar. Além disso, em casos de incidentes de segurança, a precisão dos relógios dos sistemas é fundamental para manter a consistência dos logs, e auxilia nas investigações e identificação de responsáveis.

Os servidores NTP permitem aos seus clientes a sincronização de seus computadores e outros equipamentos de rede a partir de uma referência padrão de tempo aceita mundialmente, conhecida como UTC (Universal Time Coordinated).

O NTP implementa em seu funcionamento, um modelo de sincronização entre seus servidores em um formato hierárquico distribuído. Essa hierarquia é subdividida entre os seus níveis que são chamados de stratum. Cada ponto da hierarquia é considerado um stratum.

No topo da hierarquia, encontram-se os servidores de stratum 1, conectados diretamente a dispositivos conhecidos como “relógios referência” (ou servidores stratum 0) de altíssima precisão (como relógios atômicos, equipamentos GPS – Global Positioning System, entre outros).

Veja um exemplo de hierarquia NTP:

Crédito da imagem: http://www.pop-sc.rnp.br/?page=publico/servicos_ntp.html

Exemplo hierarquia NTP

A RNP (Rede Nacional de Pesquisa) possui uma lista de servidores que podem ser utilizados para configuração do NTP. Essa lista pode ser acessada clicando aqui, e nesse site tem a lista internacional de servidores NTP stratum 2.

Nesse post, vou configurar um servidor NTP stratum 3 que irá sincronizar com um servidor de stratum 2 da RNP, que por sua vez irá o seu horário com um servidor stratum 1, que obtém o tempo diretamente de um servidor stratum 0.

Todo servidor configurado sempre vai pertencer a um stratum subsequente ao do servidor no qual ele irá sincronizar. Isso quer dizer que um servidor NTP que tenha como referência de tempo um servidor stratum 1 passa a ser um stratum 2, o servidor NTP que tenha como referência de tempo um servidor stratum 2 passa a ser um stratum 3, e assim por diante.

Instalação e configuração

A implementação do serviço NTP será realizada em um servidor Debian, porém os passos aqui demonstrados podem ser utilizados como referência para instalação em outras distribuições.

Os pacotes a serem instalados são:

ntp – servidor, utilitários e arquivos de configuração
ntpdate – cliente NTP

Para instalar:

# apt-get install ntp ntpdate

Após instalar os pacotes, como sempre, é boa ideia fazer um backup do arquivo de configuração original:

# cp /etc/ntp.conf /root/backup/ntp.conf.ORIGINAL

Feito o backup, vou criar um arquivo ntp.conf personalizado e analisar as principais configurações.

Arquivo ntp.conf personalizado

1 # —— SERVIDORES ——-
2 server ntp1.pucpr.br
3
4 # —- OPÇÕES DE CONTROLE DE ACESSO —–
5 restrict ntp1.pucpr.br
6 restrict 127.0.0.1
7
8 # —— OPÇÕES DE LOGGING ——-
9 logconfig all
10 logfile /var/log/ntp/ntp.log
11
12 # —— OPÇÕES DIVERSAS ——-
13 driftfile /var/lib/ntp/ntp.drift

Coloquei as linhas numeradas para facilitar a análise. Primeiro bloco:

1 # —— SERVIDORES ——-
2 server ntp1.pucpr.br

A primeira linha configurada no arquivo, define quem será o servidor base, isto é, quem será o servidor NTP público que iremos sincronizar. Para isso, devemos colocar a diretiva server e o endereço do servidor que será utilizado.

No arquivo podemos ter mais servidores, basta criar outra linha, sempre escolhendo um servidor que seja público. A ideia de ter outros servidores é que se um não responder, o serviço irá tentar usar o próximo.

4 # —- OPÇÕES DE CONTROLE DE ACESSO —–
5 restrict ntp1.pucpr.br nomodify
6 restrict 127.0.0.1

As linhas acima foram incluídas para definir políticas de acesso. A diretiva restrict obedece a seguinte sintaxe:

restrict <endereço_IP> mask <máscara> [flag]

O daemon do NTP implementa uma lista de restrição baseada na dupla endereço IP/máscara. Esta lista é ordenada, em primeira instância, por endereço IP e, em segunda instância, por máscara, obedecendo à seguinte regra básica: o último parâmetro (flag) definirá as restrições que serão associadas aos pacotes do protocolo NTP que chegam ao servidor.

Acima linha restrict ntp1.pucpr.br nomodify diz que não é permitido aos servidores NTP com os quais o servidor local for sincronizar, fazerem modificacoes na configuração.

A linha restrict 127.0.0.1 indica que não há nenhuma restrição para a máquina local, e a partir dela será feita inclusive a configuração.

Abaixo, uma tabela com as flags mais utilizadas e suas permissões:

Flags NTP

Flags NTP

No bloco abaixo, falamos sobre opções de log. No Linux, tudo que é feito gera um log, e aqui não é diferente.

8 # —— OPÇÕES DE LOGGING ——-
9 logconfig all
10 logfile /var/log/ntp/ntp.log

A diretiva logconfig indica que será feito registro de tudo que acontecer no NTP. Caso a linha não esteja no arquivo, será feito um registro no padrão do syslog. O log próprio do NTP tem 4 categorias:

  • clock – Informações relacionadas ao relógio
  • peer  – Informações relacionadas aos servidores (os que estão sendo utilizados)
  • sys – Informações relacionadas ao sistema
  • sync – Informações relacionadas ao processo de sincronização

Como colocamos a opção all, todas as categorias mencionadas acima serão registradas.

A diretiva, logfile, indica o local onde os logs serão armazenados.

Falando sobre o último bloco de configuração, a diretiva driftfile indica o arquivo que mantém o valor de frequência do relógio a ser atualizado.

12 # —— OPÇÕES DIVERSAS ——-
13 driftfile /var/lib/ntp/ntp.drift

Um dos primeiros passos que o daemon realiza quando inicializado, é computar o erro de frequência do relógio no computador onde ele está rodando.

Normalmente, pode levar um dia ou mais para o daemon estimar um valor adequado. Uma vez que este valor é computado, ele mudará de maneira pouco significativa durante o restante da operação. Caso a conexão de rede esteja temporariamente indisponível, o protocolo NTP poderá usar este valor como valor inicial, de modo que seja evitada a perda de tempo no dia em recalcular novamente.

Depois de configurar o arquivo, salvar e sair e fazer os ajustes finais:

1) Necessário criar o diretório /var/log/ntp, definido no bloco Opções de Logging, que irá guardar os logs do NTP:

# mkdir /var/log/ntp

2) Durante a instalação, o serviço NTP foi iniciado. Porém, antes de colocar o serviço definitivamente no ar, é necessário ajustar a hora do próprio servidor NTP. Para isso, vamos parar o serviço NTP:

# invoke-rc.d ntp stop

Também vamos ajustar a sua hora do servidor com o comando ntpdate:

# ntpdate ntp1.pucpr.br
23 Jun 15:34:28 ntpdate[3410]: adjust time server 200.192.112.8 offset 0.035959 sec

Esse processo é necessário pois a função da máquina é ser cliente ou servidor NTP. Assim, antes de colocar o serviço no ar, é importante que o servidor esteja com sua hora correta😉 .

3) Iniciar o serviço:

# invoke-rc.d ntp start

Outras dicas

O serviço NTP escuta a porta 123/udp. Para checar se o serviço subiu corretamente:

# netstat -anup | grep 123
udp        0      0 192.168.0.108:123       0.0.0.0:*                           3450/ntpd       
udp        0      0 127.0.0.1:123           0.0.0.0:*                           3450/ntpd       
udp        0      0 0.0.0.0:123             0.0.0.0:*                           3450/ntpd

Para verificar se o daemon ntpd foi corretamente inicializado podem ser usados os utilitários ntpq e ntpdc que fazem consultas e monitoram o estado do servidor:

# ntpq -p 192.168.0.108
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp.pucpr.br    192.5.41.209     2 u    3   64  377   18.107  -13.075  12.880

Acima, a opção  -p é utilizada para listar os peers conhecidos, isto é, os servidores que estamos utilizando para sincronizar.

# ntpdc 192.168.0.108
ntpdc> sysinfo
system peer:          ntp1.pucpr.br
system peer mode:     client
leap indicator:       00
stratum:              3
precision:            -20
root distance:        0.20050 s
root dispersion:      0.06854 s
reference ID:         [200.192.112.8]
reference time:       d1ae0857.3d17f3ef  Thu, Jun 23 2011 15:45:43.238
system flags:         auth monitor ntp kernel stats
jitter:               0.015411 s
stability:            0.000 ppm
broadcastdelay:       0.003998 s
authdelay:            0.000000 s

ntpdc> showpeer -4 ntp1.pucpr.br
remote 200.192.112.8, local 192.168.0.108
hmode client, pmode unspec, stratum 2, precision -20
leap 00, refid [192.5.41.209], rootdistance 0.18196, rootdispersion 0.03687
ppoll 6, hpoll 6, keyid 0, version 4, association 23207
reach 377, unreach 0, flash 0x0000, boffset 0.00400, ttl/mode 0
timer 0s, flags system_peer, config, bclient
reference time:      d1ae0539.caa5f714  Thu, Jun 23 2011 15:32:25.791
originate timestamp: d1ae08d6.40ab3d22  Thu, Jun 23 2011 15:47:50.252
receive timestamp:   d1ae08d6.3f75f7b0  Thu, Jun 23 2011 15:47:50.247
transmit timestamp:  d1ae08d6.383e7099  Thu, Jun 23 2011 15:47:50.219
filter delay:  0.02808  0.02682  0.01854  0.01909
               0.01930  0.01895  0.02341  0.01999
filter offset: 0.018758 0.018512 0.015041 0.011073
               0.007236 0.002796 0.000292 -0.00744
filter order:  2        5        3        4       
               7        6        1        0       
offset 0.015041, delay 0.01854, error bound 0.05531, filter error 0.10866

Sincronização nos clientes

Linux

Instalar o pacote ntpdate e executar o comando:

# ntpdate 192.168.0.108

O ideal é que o ntpdate rode durante a inicialização, assim o cliente já inicia com a hora correta. Nesse caso, um script simples resolve o problema:

# vim /etc/init.d/acerta-hora.sh

#!/bin/bash

### Ajustar data e hora na inicializacao ###

ntpdate 192.168.0.108

Salva, sai do arquivo e dá permissão de execução:

# chmod +x /etc/init.d/acerta-hora.sh

Coloca o script no runlevel que inicia o sistema:

# cd /etc/rc2.d

# ln -s /etc/init.d/acerta-hora.sh S35acerta-hora

Já escrevi um post sobre runlevel, para conhecer, clique aqui.

Windows

Para configurar o servidor NTP no Windows, clicar como botão direito e selecionar “Ajustar data e hora”. Na tela que abrir, na aba “Horário na Internet”, marcar a caixa “Sincronizar automaticamente com um servidor de horário na Internet”.

Informar o servidor e clicar em “Atualizar agora”. Abaixo, um exemplo:

Configurando NTP no cliente Windows

Configurando NTP no cliente Windows

Não fiz testes com outros clientes NTP em ambientes Windows, apenas realizei o procedimento na máquina que tirei o print acima.

Maiores informações sobre ferramentas e configurações para ambientes Windows, podem ser encontradas clicando aqui.

Considerações Finais

Como dito na introdução, é importante ter a data e hora das máquinas da rede atualizadas. O post não pretende esgotar o assunto, existem mais configurações a serem feitas na parte de segurança do serviço a serem estudadas.

Para conhecer mais:

# man 5 ntp.conf

# man ntpdc

# man ntpq

NTP.br – A Hora Legal Brasileira, via Internet.

Manual NTP

NTP: The Network Time Protocol

Manual Completo do Linux (Guia do Administrador)
Autor: Evi Nemeth, Garth Snyder, Trent R. Hein – Editora: Pearson Books

Crédito da imagem utilizada no exemplo hierarquia NTP:  http://www.pop-sc.rnp.br/?page=publico/servicos_ntp.html

0 Responses to “Configurando o serviço NTP – Network Time Protocol”



  1. Deixe um comentário

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




Follow Nix on WordPress.com
junho 2011
S T Q Q S S D
« maio   jul »
 12345
6789101112
13141516171819
20212223242526
27282930  

Flickr Photos

Fast-flying Falcon

Mais fotos

%d blogueiros gostam disto: