29.11. Sincronização de Relógio com NTP

Com o tempo, o relógio de um computador está propenso a se desviar. Isso é problemático, pois muitos serviços de rede exigem que os computadores em uma rede compartilhem o mesmo tempo exato. Tempo preciso também é necessário para garantir que os registros de data e hora dos arquivos permaneçam consistentes. O protocolo de horário da rede (NTP) é uma maneira de fornecer precisão de relógio em uma rede.

O FreeBSD inclui o ntpd(8) o qual pode ser configurado para consultar outros servidores NTP para sincronizar o relógio nessa máquina ou para fornecer serviços de horário para outros computadores na rede.

Esta seção descreve como configurar o ntpd no FreeBSD. Mais documentação pode ser encontrada em /usr/share/doc/ntp/ no formato HTML.

29.11.1. Configuração de NTP

No FreeBSD, o ntpd nativo pode ser usado para sincronizar o relógio do sistema. O Ntpd é configurado usando variáveis no rc.conf(5) e no /etc/ntp.conf, conforme detalhado nas seções a seguir.

O Ntpd se comunica com seus network peers usando pacotes UDP. Quaisquer firewalls entre sua máquina e seus NTP peers devem ser configurados para permitir a entrada e saída de pacotes UDP na porta 123.

29.11.1.1. O arquivo /etc/ntp.conf

O Ntpd faz a leitura do /etc/ntp.conf para determinar quais servidores NTP que ele deve consultar. É recomendável escolher vários servidores NTP, caso um dos servidores se torne inacessível ou seu relógio torne-se não confiável. Como o ntpd recebe respostas, ele favorece servidores confiáveis em vez dos menos confiáveis. Os servidores consultados podem ser locais na rede, fornecidos por um ISP ou selecionados a partir de uma lista online de servidores NTP publicamente acessíveis. Ao escolher um servidor NTP público, selecione um servidor geograficamente próximo e revise sua política de uso. A palavra-chave pool de configuração seleciona um ou mais servidores de um pool de servidores. Está disponível uma lista online de pools NTP publicamente acessíveis, organizada por área geográfica. Além disso, o FreeBSD fornece um pool patrocinado pelo projeto, 0.freebsd.pool.ntp.org.

Exemplo 29.3. Exemplo de /etc/ntp.conf

Este é um exemplo simples de um arquivo ntp.conf. Ele pode ser usado com segurança como está; ele contém as opções restrict recomendadas para operação em uma conexão de rede pública.

# Disallow ntpq control/query access.  Allow peers to be added only
# based on pool and server statements in this file.
restrict default limited kod nomodify notrap noquery nopeer
restrict source  limited kod nomodify notrap noquery

# Allow unrestricted access from localhost for queries and control.
restrict 127.0.0.1
restrict ::1

# Add a specific server.
server ntplocal.example.com iburst

# Add FreeBSD pool servers until 3-6 good servers are available.
tos minclock 3 maxclock 6
pool 0.freebsd.pool.ntp.org iburst

# Use a local leap-seconds file.
leapfile "/var/db/ntpd.leap-seconds.list"

O formato deste arquivo é descrito em ntp.conf(5). As descrições abaixo fornecem uma visão geral rápida apenas das palavras-chave usadas no arquivo de exemplo acima.

Por padrão, um servidor NTP pode ser acessado de qualquer host da rede. A palavra-chave restrict controla quais sistemas podem acessar o servidor. Múltiplas entradas restrict são suportadas, cada uma refinando as restrições fornecidas nas instruções anteriores. Os valores mostrados no exemplo concedem ao sistema local o acesso completo à consulta e controle, enquanto permitem aos sistemas remotos apenas a capacidade de consultar o horário. Para obter mais detalhes, consulte a subseção Access Control Support de ntp.conf(5).

A palavra-chave server especifica um único servidor para consulta. O arquivo pode conter várias palavras-chave server, com um servidor listado em cada linha. A palavra-chave pool especifica um pool de servidores. O Ntpd adicionará um ou mais servidores desse pool, conforme necessário, para atingir o número de peers especificado usando o valor tos minclock. A palavra-chave iburst direciona o ntpd para executar um burst de oito trocas rápidas de pacotes com um servidor quando o contato é estabelecido pela primeira vez, para ajudar a sincronizar rapidamente a hora do sistema.

A palavra-chave leapfile especifica o local de um arquivo que contém informações sobre segundos bissextos. O arquivo é atualizado automaticamente pelo periodic(8). O local do arquivo especificado por esta palavra-chave deve corresponder ao local definido na variável ntp_db_leapfile em /etc/rc.conf.

29.11.1.2. Entradas NTP no /etc/rc.conf

Defina ntpd_enable=YES para iniciar o ntpd no momento do boot do sistema. Depois que o ntpd_enable=YES for adicionado ao /etc/rc.conf, o ntpd poderá ser iniciado imediatamente sem reiniciar o sistema, digitando:

# service ntpd start

Somente ntpd_enable deve ser configurado para usar o ntpd. As variáveis rc.conf listadas abaixo também podem ser definidas conforme necessário.

Defina ntpd_sync_on_start=YES para permitir que o ntpd adiante o relógio, uma vez na inicialização. Normalmente, o ntpd registra uma mensagem de erro e se finaliza se o relógio estiver dessincronizado por mais de 1000 segundos. Essa opção é especialmente útil em sistemas sem um relógio em tempo real com bateria.

Defina ntpd_oomprotect=YES para proteger o serviço ntpd de ser finalizado pelo sistema quando ele tentar se recuperar de uma condição de Falta de Nemória (OOM).

Defina ntpd_config= para o local de um arquivo ntp.conf alternativo.

Defina ntpd_flags= para conter outras flags ntpd conforme necessário, mas evite usar as flags gerenciadas internamente pelo /etc/rc.d/ntpd:

  • -p (local do arquivo pid)

  • -c (configure ntpd_config= como alternativa)

29.11.1.3. O Ntpd e o usuário não privilegiado ntpd

O Ntpd no FreeBSD pode ser iniciado e executado como um usuário não privilegiado. Para isso, é necessário o módulo de política mac_ntpd(4). O script de inicialização /etc/rc.d/ntpd examina primeiro a configuração do NTP. Se possível, ele carrega o módulo mac_ntpd e inicia o ntpd como um usuário não vinculado ntpd (user id 123). Para evitar problemas com o acesso a arquivos e diretórios, o script de inicialização não iniciará automaticamente o ntpd como ntpd quando a configuração contiver quaisquer opções relacionadas a arquivos.

A presença de qualquer um dos itens a seguir em ntpd_flags requer configuração manual, conforme descrito abaixo, para ser executada como o usuário ntpd user:

  • -f or --driftfile

  • -i or --jaildir

  • -k or --keyfile

  • -l or --logfile

  • -s or --statsdir

A presença de qualquer uma das seguintes palavras-chave no ntp.conf requer configuração manual, conforme descrito abaixo, para ser executado como usuário ntpd:

  • crypto

  • driftfile

  • key

  • logdir

  • statsdir

Para configurar manualmente o ntpd para ser executado como usuário ntpd, você deve:

  • Certifique-se de que o usuário ntpd tenha acesso a todos os arquivos e diretórios especificados na configuração.

  • Se certifique para que o módulo mac_ntpd seja carregado ou compilado no kernel. Consulte mac_ntpd(4) para obter detalhes.

  • Defina ntpd_user="ntpd" no /etc/rc.conf

29.11.2. Usando NTP com uma Conexão PPP

O ntpd não precisa de uma conexão permanente com a Internet para funcionar corretamente. No entanto, se uma conexão PPP estiver configurada para discar sob demanda, o tráfego de NTP deverá ser impedido de disparar uma discagem ou manter a conexão ativa. Isso pode ser configurado com as diretivas filter em /etc/ppp/ppp.conf. Por exemplo:

set filter dial 0 deny udp src eq 123
# Prevent NTP traffic from initiating dial out
set filter dial 1 permit 0 0
set filter alive 0 deny udp src eq 123
# Prevent incoming NTP traffic from keeping the connection open
set filter alive 1 deny udp dst eq 123
# Prevent outgoing NTP traffic from keeping the connection open
set filter alive 2 permit 0/0 0/0

Para mais detalhes, consulte a seção PACKET FILTERING em ppp(8) e os exemplos em /usr/share/examples/ppp/.

Nota:

Alguns provedores de acesso à Internet bloqueiam portas de números baixos, impedindo o funcionamento do NTP, pois as respostas nunca chegam à máquina.

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.