Linux - Como Montar um Servidor NTP (Servidor de Hora)

Como Montar um Servidor NTP
Como fazer para montar um servidor na sua rede local para sincronizar
o relogio de todos os seus servidores e estações.
O que é?
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 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 http://www.ntp.org/
Configurando o servidor
Para configurar o servidor basta editar apenas um arquivo 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 RPN em http://www.rnp.br/_arquivo/cais/manual_ntp_v1b.pdf essa
documentação é muito boa, nesse arquivos irei centralizar na criação
rápida e fácil de um servidor.
------------------------------------------------------------------------------------------------------------------------------------------------------------
# Permite acesso ao <span class="hilite term-0">servidor</span> 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
# <span class="hilite term-0">Servidor</span> 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 permiçõ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
$ rcconf
Marca a opção ntp
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
?
1
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 <span class="hilite term-0">SERVIDOR</span>
ntpd[1688]: ntpd 4.2.0a@1.1196-r Fri May 12 09:51:35 EDT 2006 (1)
Jun 13 12:13:17 <span class="hilite term-0">SERVIDOR</span>
ntpd[1688]: precision = 3.000 usec
Jun 13 12:13:17 <span class="hilite term-0">SERVIDOR</span>
ntpd[1688]: Listening on interface wildcard, 0.0.0.0#123
Jun 13 12:13:17 <span class="hilite term-0">SERVIDOR</span>
ntpd[1688]: Listening on interface wildcard, ::#123
Jun 13 12:13:17 <span class="hilite term-0">SERVIDOR</span>
ntpd[1688]: Listening on interface lo, 127.0.0.1#123
Jun 13 12:13:17 <span class="hilite term-0">SERVIDOR</span>
ntpd[1688]: Listening on interface eth0, 10.10.1.7#123
Jun 13 12:13:17 <span class="hilite term-0">SERVIDOR</span>
ntpd[1688]: kernel time sync status 0040
Jun 13 12:13:17 <span class="hilite term-0">SERVIDOR</span>
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 <span class="hilite term-0">SERVIDOR</span>
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 ntp-client.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
/etc/init.d/ntpd start
Starting ntpd:                                             [  OK  ]
Agora automatize o processo, coloque para que sincronize na
inicialização do pc, coloque no /etc/rc.local.
ntpdate SERVIDOR
Pronto.

Comentários

Postagens mais visitadas