Perché è importnte che i server abbiano la stessa ora?

Ho letto più volte (anche se non lo riesco adesso) che i centri dati richiedono grande sforzo per assicurarsi che tutti i server abbiano esattamente la stessa ora. Compreso, ma non solo, la preoccupazione per i secondi di salto.

Perché è così importnte che i server abbiano lo stesso tempo? E quali sono le tolleranze reali?

6 Solutions collect form web for “Perché è importnte che i server abbiano la stessa ora?”

Sicurezza

In generale, i timestamp vengono utilizzati in vari protocolli di authentication per impedire gli attacchi di replay , in cui un utente malintenzionato può riutilizzare un token di authentication in grado di rubare (ad esempio annusando la networking).

L'authentication Kerberos esegue esattamente questo, ad esempio. Nella versione di Kerberos utilizzata in Windows, la tolleranza predefinita è di 5 minuti.

Questo è utilizzato anche da vari protocolli di una volta utilizzati per l'authentication a due fattori come Google Authenticator, RSA SecurID, ecc. In questi casi la tolleranza è di solito circa 30-60 secondi.

Senza il tempo di sincronizzazione tra client e server, non sarebbe ansible completare l'authentication. (Questa restrizione viene rimossa nelle versioni più recenti di MIT Kerberos, avendo il richiedente e il KDC determinano l'offset tra i propri orologi durante l'authentication, ma queste modifiche si sono verificate dopo Windows Server 2012 R2 e sarà un po 'prima di vederlo in un Windows ma alcune implementazioni di 2FA probabilmente richiedono sempre orologi sincronizzati.)

Amministrazione

Avere gli orologi in sincronia rende più facile lavorare con sisthemes diversi. Ad esempio, la correlazione delle voci di registro da più server è molto più semplice se tutti i sisthemes hanno lo stesso tempo. In questi casi è di solito ansible lavorare con una tolleranza di 1 secondo, che NTP fornirà, ma idealmente si desidera che i tempi siano sincronizzati sinora come potete permetterti. PTP, che fornisce tolleranze molto più strette, può essere molto più costoso da implementare.

Principalmente, è in modo che puoi correlare gli incidenti dai registri su dispositivi diversi. Supponiamo che tu abbia un incidente di sicurezza in cui qualcuno accede al tuo database tramite il tuo server web: vuoi che i timestamp sul tuo firewall, il tuo bilanciere del carico, il tuo server web e il tuo server di database siano tutti corrispondenti in modo da poter trovare i registri di each dispositivo che si riferiscono all'incidente. Idealmente, vorresti che tutto si trovi in ​​pochi millisecondi. E deve essere in sincronia con il tempo esterno effettivo, in modo da poter correlare i tuoi registri con i registri di terze parti se ciò diventi necessario.

Non solo è importnte da una prospettiva di amministrazione, ma avere orologi in sincronia sono importnti anche dalla correlazione di livello di applicazione. Ciò dipende da come viene progettata la soluzione, come le applicazioni in esecuzione ottengono il timestamp per tutte le transactions con le quali possono lavorare. Ho visto che la validation delle transactions non è rioutput a causa di un'applicazione in esecuzione su un server con troppo offset (era di circa 20 secondi in futuro) rispetto agli altri con cui interagiva.

Anche se virtualizzando ad esempio il server VMWare ESXi e il tempo della VM non è in sincronia con quello del hypervisor, un'azione come il vmotion può ri-sincronizzare l'orologio VM con gli hypervisor e questo a sua volta può portre a risultati imprevedibili se la differenza di tempo è abbastanza grande.

Non so quali sono le tolleranze effettive, perché penso dipende molto da che tipo di sisthemes ci sono, ma penso in generale che è ansible mantenere i server nel datacenter che hanno less di un secondo offset tra l'altro.

Dal momento che hai citato secondi di salto si deve notare che richiedono un trattamento particolarmente difficile.

Di solito vengono aggiunti iniettando un secondo come 23:59:60, questo è problematico se stai validation i timestamp come 0-59 per i campi minuti e secondi. L'alternativa di ripetere 23:59:59 per renderla lunga di 2 secondi non è molto migliore dato che farà confusione con tutto ciò che è temporale sensibile fino a un secondo livello.

Google ha effettivamente trovato una buona soluzione un po 'di tempo che sembra non essere stato ancora ampiamente adottato. La loro soluzione era quella di applicare un salto "smear" e di dividere la modifica per un periodo di tempo, l'integer process è gestito da un server NTP. Hanno pubblicato un blog su di esso nel 2011, fa una lettura interessante e sembra rilevante per questa domanda.

Ogni volta che i timestamp sono coinvolti, i dispositivi disinseriti possono creare incongruenze logiche, come: A invia una query a B e la risposta di B viene con un timestamp precedente a quella della query, forse causando A di ignorarlo.

Sono d'accordo con tutto il punto precedente. Voglio buttare più pensieri
Alcuni database come Cassendra si basano fortemente sul timbro . Questo è il modo in cui affronta la concorrenza.

Il timestamp differente completterà il database.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.