some dude from data center accidentally modify one of the web server date/time
Este é o seu primeiro problema. É provavelmente causado por uma combinação de:
- 'cara [s] do [centro] de dados' com treinamento insuficiente e
- Privilégios excessivamente altos
A alteração da hora do sistema requer privilégios administrativos. Alterar a hora manualmente em um sistema que não só tem a hora correta, mas cujo tempo está sendo gerenciado usando o NTP é um sinal de treinamento insuficiente. Resolva este problema primeiro, porque até que você o resolva, o tempo exato do sistema é provavelmente o mais visível dos seus problemas. O que mais eles estão fazendo neste sistema e por quê?
My managers ... said we shouldn't use timestamp to check expiry in the first place
Se houver uma opção alternativa viável que tenha sido proposta, eu pelo menos consideraria isso. De alguma forma eu suspeito que não é o caso.
Network Time Protocol is implemented, because of data centers are spread across different continents so we have one NTP server in each data center.
Eu recomendaria dois em cada centro de dados. E cada um deles faria referência a um conjunto diferente de servidores NTP externos, além de fazer referência um ao outro. Isso vai resultar em um tempo mais estável e torná-lo muito mais robusto para falhas únicas. Eu também sou paranóico e super engenheiro, então tem isso. Ainda assim, os servidores NTP exigem aproximadamente zero em termos de recursos, portanto, execute-os em qualquer lugar.
The servers within the data center will have cron jobs to check against the time with their NTP server from the same data center. If time is out of sync it will auto update the server date/time.
Este é um plano ruim. Cron não tem lugar mudando o tempo em um sistema NTP. Os servidores devem executar clientes NTP reais. Esses clientes devem referenciar os (dois) servidores NTP locais.
Se você deseja usar o cron, use o cron em cada servidor para verificar se o servidor foi sincronizado com êxito com os servidores NTP locais. Você pode fazer isso examinando a saída do comando ntpq. Você deve aprender sobre a saída do comando ntpq; é seu amigo.
Para resolver as questões que você relata como tendo sido levantadas:
But then with our managers not happy with it, and think it could still easily causes the same problem. e.g. what if someone accidentally modify the NTP date/time? what if all the NTP servers are out of sync with each other? which NTP servers we can really trust? and blah blah..
A primeira pergunta não é insana. Um pouco paranoico se levado ao extremo, mas bem. Respostas são:
- Use mais de um relógio de referência independente. (um único erro será ignorado em vez do tempo estável de outras fontes)
- Use um relógio de referência confiável (por exemplo, GPS) (Se os seus caras operacionais puderem modificar a hora em um satélite GPS acidentalmente, você terá problemas mais sérios do que os relógios do servidor da Web.)
- Use chaves criptográficas para garantir que o relógio de referência com o qual você está se comunicando seja o que você confia.
O segundo é resolvido configurando os servidores NTP para referenciar um ao outro. Eles tendem a se unir, todas as outras coisas sendo iguais. Também usando relógios independentes de referência confiáveis.
- Se um dos três relógios de referência de estrato inferior ficar dessincronizado, ele será ignorado.
- Se dois ficarem fora de sincronia, eles serão ignorados.
- Se todos os três relógios ficarem descontroladamente fora de sincronia, o NTP irá ignorar todos os três e fazer o melhor que puder (ainda muito bom, especialmente se houver um relógio de estrato igual ao qual possa fazer referência).
- Você praticamente só precisa se preocupar com um ataque mal-intencionado aqui.
Pode ser complexo descrever esses casos, mas o NTP é estável primeiro e precisa se tiver uma fonte precisa.
No que diz respeito à confiança, a maioria das pessoas que executam um servidor NTP público não tem motivos para interferir no seu tempo. Muitos deles têm um motivo para fornecer um tempo preciso. Em termos de nível de interesse em fornecer um tempo preciso, sugiro que:
- satélites GPS.
- Servidores NIST NTP.
- Qualquer fornecedor de estratos 1 bem conhecido.
- Qualquer fornecedor bem conhecido de estrato 2.
- O seu datacenter (supondo que você adquira hospedagem) provavelmente deve ter um servidor NTP ou três próprios, para uso próprio, se não houver outro.
Além disso, e isso é importante: o protocolo NTP é projetado para sincronizar o tempo em milissegundos. Não é o segundo. Se você usar o cron + ntpdate, seu tempo pode ser desligado por vários segundos (latência variável de agradecimento!). O NTP manterá seus relógios muito mais estáveis e precisos em circunstâncias semelhantes.