segunda-feira, 1 de setembro de 2008

Mantendo atualizada a hora de seus servidores com ntpd e openntpd

Um servidor NTP é um software que implementa o protocolo Network Time Protocol sendo extremamente útil para manter a data e hora correta nas estações de trabalho e principalmente no servidores! É de grande importancia para arquivos de log pois de nada serve ter um horário errado! Caso seja necessário realizar alguma auditoria nestes arquivos por invasão, acesso a determinados recursos ou qualquer informação na qual se necessite saber com precisão a hora de acesso, a data contida ali é crucial!

Recentemente implementei um servidor NTP em minha rede e consegui ter uma consistencia de horários em meus servidores! Eu tenho alguns servidores Debian e Ubuntu e cada um sincronizava com o servidor que vinha por padrão no programa ntpdate, e sempre existia uma diferença de tempo (as vezes de alguns minutos) entre eles.

A implementação do servidor é simples e não tive problemas com ela. Para meu servidor NTP usei um Debian que tinha ai fazendo outras funções em minha rede e instalei o pacote da seguinte forma:
aptitude install ntp
A instalação ocorreu sem problemas! O arquivo de configuração no Debian esta localizado em /etc/ntp.conf. Acrescentei algumas linhas no padrão que ele usa e esta funcionando muito bem. As linhas acrescentadas foram as seguintes:
restrict 10.11.12.0 mask 255.255.255.0 nomodify notrap
restrict 13.14.15.0 mask 255.255.255.0 nomodify notrap
Estas linhas basicamente permitem o acesso ao servidor a estas redes! É uma proteção que vai além das regras de firewall que você tiver no seu servidor! Depois de adicionar essas linhas inicie o servidor e com o comando ntpdc você poderá ver a lista de servidores que ele utilizará para se sincronizar! O comando exato é: ntpdc -s. Atento aos logs você verá mensagens do software como esta:
ntpd[6381]: ntpd 4.2.2p4@1.1585-o Sun Mar 4 13:21:35 UTC 2007
ntpd[6382]: precision = 2.000 usec
ntpd[6382]: Listening on interface wildcard, 0.0.0.0#123 Disabled
ntpd[6382]: Listening on interface lo, 127.0.0.1#123 Enabled
ntpd[6382]: Listening on interface eth1, 13.14.15.16#123 Enabled
ntpd[6382]: kernel time sync status 0040
ntpd[6382]: frequency initialized 0.000 PPM from /var/lib/ntp/ntp.drift
Se você encontrar essas linhas em seu servidor, ele está iniciando o processo de se sincronizar com os servidores que estão no arquivo de configuração. Aqui meu servidor precisou de aproximadamente 5 minutos até que ele estivesse pronto para receber requisições. Quando isso acontecer você verá uma mensagem assim em seu log:
ntpd[6382]: synchronized to 208.75.88.4, stratum 2
ntpd[6382]: kernel time sync enabled 0001
Isso esta indiciando o ip do servidor escolhido para se sincronizar e qual o nivel (stratum) deste na hierarquia NTP. Com isto seu servidor está pronto para receber requisições de seus servidores ou computadores de sua rede interna.

Com o servidor instalado, agora é a fase da instalação do cliente ntp nos seus servidores ou computadores com linux! A instalação é tão simples quanto a do servidor e fiz da seguinte maneira:
aptitude install openntpd
Este programa é em minha opnião, muito melhor do que o ntpdate, pois ele verifica constantemente o horário do seu servidor evitando ter uma hora errada! O que você pode fazer se o horário dos seus servidores estiverem com uma grande diferença é utilizar o ntpdate para a primeira atualização e o openntpd para manter ele sincronizado!

Após concluída a instalação, aqui em meus servidores existia uma falha no script de inicialização do serviço que não especificava o arquivo de PID, acarretando em erros na hora de reinicializar o processo ou mesmo de parar-lo. Para arrumar isso é necessário agregar este parâmetro "--pidfile /var/run/openntpd/openntpd.pid" junto ao comando start-stop-daemon! Você pode fazer isso editando o arquivo na mão ou pode usar o sed para mudar isso para você:
sed -e 's/start-stop-daemon /start-stop-daemon --pidfile \/var\/run\/openntpd\/openntpd.pid /g' openntpd > openntpd.novo
Depois é só mover o novo para o antigo e iniciarlizar o processo! Caso você tenha algum erro na inicialização, pode ser que exista algum processo preso e será necessário executar um kill em seu PID! Com isso tudo no lugar vamos configurar agora nosso cliente para se autenticar no servidor que acabamos de criar! Como no servidor não foi necessário mudar muito para que ele funcionasse, o meu arquivo está assim:
listen on 10.11.12.13
server 10.11.12.14
Ao iniciar o processo você deve ficar atento aos logs para verificar se não existe nenhuma mensagem de erro, você deve ver algo parecido com isto em seus arquivos:
ntpd[779]: listening on 10.11.12.13
ntpd[779]: ntp engine ready
ntpd[779]: peer 10.11.12.14 now valid

Neste ponto você já possui sua estação se sincronizando com seu servidor NTP local! Essa é uma ferramenta muito importante em uma rede! Espero que este artigo ajude a implementar o de vocês!




Nenhum comentário: