NTP Servidor – Hora certa

O que é NTP?

A grosso modo podemos dizer que o NTP é um protocolo que visa manter os relógios dos diversos equipamentos de rede sincronizados. http://pt.wikipedia.org/wiki/NTP

Para que relógios sincronizados?

Simples, em caso de ataques ou análise de logs é muito importante que todos os equipamentos estejam com os relógios acertados.

Imagine que você precise ver o que um usuário fez, primeiro você olha o firewall, horário de entrada 09:03:42, depois olha o servidor web, horário de acesso 09:02:07, depois o servidor de email, 09:15:48, cada maquina com um horário diferente e que foram acessadas praticamente ao mesmo tempo.

Ao verificar o relógio de cada maquina você vê uma diferença absurda em cada relógio, você pode fazer isso ai nas suas maquinas para constatar, nenhum terá o horário igual a outra, a diferença varias em minutos e não em segundos.

Isso é muito prejudicial, e no horário de verão? Ajustar o horário maquina por maquina?

Todos esse problemas podem ser resolvidos usando o NTP, por exemplo, para sincronizar uma maquina basta utilizar o comando.

# ntpdate pcdsh05.on.br
13 Jun 11:16:45 ntpdate[1437]: adjust time server 200.20.186.75 offset -0.032176 sec
Com esse comando eu sincronizo o meu Linux com o servidor NTP pcdsh05.on.br, esse servidor é do Observatório Nacional

Essa solução é totalmente viável para apenas uma ou duas maquinas mas se você quiser sincronizar todas as maquina da rede isso fica um pouco complicado devido a trafego na Internet, o protocolo é bem compacto, usa UDP e cada troca de informação são usados poucos pacotes como podemos ver abaixo

11:22:28.967672 IP 10.10.1.7.123 > 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.967888 IP 10.10.1.1.123 > 10.10.1.7.123: NTPv4, Server, length 48
11:22:28.968853 IP 10.10.1.7.123 > 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.969001 IP 10.10.1.1.123 > 10.10.1.7.123: NTPv4, Server, length 48
11:22:28.969550 IP 10.10.1.7.123 > 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.969684 IP 10.10.1.1.123 > 10.10.1.7.123: NTPv4, Server, length 48
11:22:28.970373 IP 10.10.1.7.123 > 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.970516 IP 10.10.1.1.123 > 10.10.1.7.123: NTPv4, Server, length 48
Porem isso sendo feito por algunas centenas de maquina gera bastante trafego no seu link, para contornar isso irei mostrar como montar um servidor NTP em sua própria rede.

Maquina usada nos testes

# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 7
model name : Pentium III (Katmai)
stepping : 3
cpu MHz : 501.212
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
bogomips : 1004.19
# free
total used free shared buffers cached
Mem: 254048 230196 23852 0 74748 63128
-/+ buffers/cache: 92320 161728
Swap: 522104 96 522008
# cat /etc/fedora-release
Fedora Core release 4 (Stentz)
Softwares necessários

Para instalar usando o Fedora Core/Centos basta digitar o comando

yum install ntp
Com isso será instalado tanto os softwares clientes como o servidor.

Ou você pode baixar a ultima versão do site oficial do ntop

Configurando o servidor

Para configurar o servidor basta editar apenas um arquivo /etc/ntp.conf essa é a copia do arquivo que estou usando atualmente.

Não vou me estender muito nas configuração que podem ser feitas no arquivo, para isso você pode ler o arquivo que está disponível no site da [http://www.rnp.br/_arquivo/cais/manual_ntp_v1b.pdf RPN] essa documentação é muito boa, nesse arquivos irei centralizar na criação rápida e fácil de um servidor.

# Permite acesso ao servidor para sincronizar mas nao permite modificacoes no servico
restrict default nomodify notrap noquery
# Permite acesso complete para a interface local
restrict 127.0.0.1
# Libera acesso a minha rede local
restrict 10.10.1.0 mask 255.255.255.0 nomodify notrap
restrict 10.1.0.0 mask 255.255.0.0 nomodify notrap
# Servidor para sincronizar o relógio
# Será usado em ordem
# o pcdsh05.on.br e stratum 1 todos os outros são stratum 2
server pcdsh05.on.br
server ntp.cais.rnp.br
server ntp.puc-rio.br
server ntp1.pucpr.br
server ntp.pop-rs.rnp.br
Mais servidores podem ser vistos em http://www.rnp.br/ntp/ntp-stratum2.html

para ver como estão as suas permissões use o comando ntpdc.

# ntpdc -nc reslist
address mask count flags
=====================================================================
0.0.0.0 0.0.0.0 14147 noquery, nomodify, notrap
10.1.0.0 255.255.0.0 2199 nomodify, notrap
10.10.1.0 255.255.255.0 10519 nomodify, notrap
10.10.1.1 255.255.255.255 0 ntpport, interface, ignore
127.0.0.1 255.255.255.255 2 none
127.0.0.1 255.255.255.255 0 ntpport, interface, ignore
Outro comando util é o ntpq com ele é possivel ver como status dos servidores.

Com ele podemos ver o nivel na hierarquia que o servidor se encontra, o delay e outras informações.

# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*pcdsh05.on.br .IRIG. 1 u 292 1024 377 45.989 -12.245 5.186
-titan.cais.rnp. 3.111.157.113 2 u 159 1024 377 180.385 -73.748 106.281
+139.82.34.11 200.143.193.3 3 u 208 1024 377 30.473 -15.311 0.586
+ntp.pucpr.br 192.5.41.209 2 u 249 1024 377 44.354 -23.184 1.113
-delta.pop-rs.rn 192.5.41.41 2 u 704 1024 377 69.726 -29.118 2.322
LOCAL(0) LOCAL(0) 10 l 63 64 377 0.000 0.000 0.004
Pronto agora que já configurou o arquivo basta iniciar o serviço

# service ntpd start
e configurar para que ele seja iniciado todo vez que reiniciar a maquina

# chkconfig ntpd on
Pronto seu servidor está configurado e funcionando, para isso vá em um cliente Linux e digite o comando.

# ntpdate SERVIDOR
se você receber uma mensagem do tipo

# 13 Jun 12:13:51 ntpdate[6157]: no server suitable for synchronization found
Quer dizer que o seu servidor não está funcionando ainda, para saber o porque digite o comando

# ntpdate -d SERVIDOR
para executar o ntpdate em modo debug

Looking for host SERVIDOR and service ntp
host found : SERVIDOR
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
10.10.1.7: Server dropped: strata too high
server 10.10.1.7, port 123
stratum 16, precision -18, leap 11, trust 000
refid [10.10.1.7], delay 0.02612, dispersion 0.00000
transmitted 4, in filter 4
reference time: 00000000.00000000 Thu, Feb 7 2036 4:28:16.000
originate timestamp: c83954b4.4aeed890 Tue, Jun 13 2006 12:13:56.292
transmit timestamp: c83954b4.4c0b45ae Tue, Jun 13 2006 12:13:56.297
filter delay: 0.02629 0.02620 0.02617 0.02612
0.00000 0.00000 0.00000 0.00000
filter offset: -0.00467 -0.00466 -0.00466 -0.00467
0.000000 0.000000 0.000000 0.000000
delay 0.02612, dispersion 0.00000
offset -0.004673
13 Jun 12:13:56 ntpdate[6158]: no server suitable for synchronization found
Com isso podemos encontrar o problema na linha stratum 16, precision -18, leap 11, trust 000 essa linha fala que o nosso servidor está em stratum 16, esse é o stratum máximo de um servidor NTP, ou seja, ele está em um nível muito baixo e que não é confiável para ser usado para atualização de nossas maquinas.

Mas porque isso está acontecendo se tudo está configurado corretamente?

Fácil de responder, basta olhar no log do seu servidor.

# tail /var/log/messages
Jun 13 12:13:16 SERVIDOR ntpd[1688]: ntpd 4.2.0a@1.1196-r Fri May 12 09:51:35 EDT 2006 (1)
Jun 13 12:13:17 SERVIDOR ntpd[1688]: precision = 3.000 usec
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface wildcard, 0.0.0.0#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface wildcard, ::#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface lo, 127.0.0.1#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface eth0, 10.10.1.7#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: kernel time sync status 0040
Jun 13 12:13:17 SERVIDOR ntpd[1688]: frequency initialized 0.000 PPM from /var/lib/ntp/drift
O servidor NTP foi iniciado só que ainda não fez nenhuma sincronização, aguarde um pouco até aparecer algo como.

Jun 13 12:16:33 SERVIDOR ntpd[1688]: synchronized to 200.20.186.75, stratum 1
Pronto, pelo que você pode verificar demorou cerca de três minutos para ele fazer a primeira sincronização, o seu pode demorar um pouco mais, isso é feito de forma automática por um algoritimo interno do servidor e não pode ser mudado, ele mesmo calcula quando deve buscar uma sincronização com o servidor de stratum superior.

Pronto agora você pode executar o ntpdate no cliente.

# ntpdate SERVIDOR
13 Jun 12:22:23 ntpdate[6187]: adjust time server 10.10.1.7 offset -0.021264 sec
Pronto agora sim o nosso cliente foi sincronizado com sucesso, uma diferença de -0.021264 segundos, essa diferença varia muito.

Automatizando com ntpd

Essa configuração é mais recomendada pois o ntpd utiliza um algoritimo interno para determinar a quantidade de vezes que ele precisa sincronizar, diminuindo o trafego de pacotes ntpd em sua rede.

Para fazer uma configuração mais redonda você pode configurar o arquivo /etc/ntp.conf do cliente informando os seguintes parametros.

restrict default nomodify notrap noquery
restrict 127.0.0.1
server 10.10.1.1
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
keys /etc/ntp/keys
Com esse simples arquivo de configuração o cliente irá manter o relógio sincronizado, porém somente a própria maquina poderá acessar a interface aonde o NTP está rodando.

Para ativar o serviço basta executar os seguintes comandos

# chkconfig ntpd on
# service ntpd start
Starting ntpd: [ OK ]
Automatizando com ntpdate

Para deixar as maquinas sincronizado a cada hora, basta criar um script no diretório /etc/cron.hourly/ chamado timesync com a seguinte linha.

# vi /etc/cron.hourly/timesync
#!/bin/sh
/usr/sbin/ntpdate -s 10.10.1.1
A opção -s server para ele não mostrar nada na saida padrão, o retorno será enviado para o syslog coloco ele como executável.

# chmod +x /etc/cron.hourly/timesync
Pronto desta forma a minha maquina será sincronizada toda hora.

O NTPDate está sendo descontinuado http://ntp.isc.org/bin/view/Dev/DeprecatingNtpdate, porém eu ainda utilizo ele para fazer os testes iniciais de funcionamento do servidor, essa informação foi passada pelo Marcos Vinicius Lazarini.

Horário de verão

Para evitar problemas com o horário de verão eu configuro os meus servidor para usarem o relógio de hardware em UTC, para fazer isso no Fedora/Centos sigo os seguintes passos

Edito o arquivo /etc/sysconfig/clock e altero a linha UTC=false para UTC=true, executo o comando.

hwclock –set –date=”HH:MM” –utc

Para poder ajustar o relógio do hardware para UTC, três horas a menos que o nosso horário.

Como o NTP só configura relógio de software o relógio de hardware ficará com uma referência que pode ser entendida posteriormente.

Para verificar o horário de Greewich acesse http://www.timeanddate.com/worldclock/city.html?n=45

Cisco IOS

Para configurar o roteador Cisco para utilizar o servidor NTP é bem simples, acesso seu roteador e siga os comandos.

Router> enable
password: *********
Router# config t
Router(config)# ntp server 10.10.1.1
Router(config)# ntp server 10.10.1.2
Router(config)# exit
Router# wr mem
Maquinas com Microsoft Windows Windows XP

Duplo clique o relógio na barra de tarefas Clicar na aba horário na Internet Marcar a opção sincronizar automaticamente e colocar o endereço do seu servidor e clicar em atualizar agora. Pronto

É importante lembrar que o serviço Horário do Windows tem que estar iniciado

O Windows só atualiza o relógio a cada 10 dias e não funcionou corretamente em meus testes.

Windows 2000/2003

No Windows 2000 em diante inclusive o Windows XP existe um serviço para sincronizar o relógio interno. para utiliza-lo você deve abrir o Prompt de Comand.

Clique em Inciar → Executar.

Digite cmd e clique em OK.

No Prompt de Comando digite.

net stop w32time
net time /setsntp:SERVIDOR
net start w32time
Lembrando que o serviço Horário do Windows deve estar configurado como automático.

Outras versões do Windows

Você pode usar o programa SP_TimeSync, que eu uso, ou o About Time ambos são gratuitos e funcionam bem melhor que o do Windows XP por dois motivos, posso usar em outras versões do Windows e também posso especificar em que período de tempo deverá ocorrer os sincronismos do relógio.

Deixe um comentário