Настройка NTP на сервере

21.08.2023
Цод Миранов

Неправильная настройка времени может привести к расхождениям времени между серверами в сети, что может вызвать проблемы при работе со службами, которые требуют точного времени, такими как аутентификация или журналирование. Кроме того, некорректное время может повлиять на выполнение задач и координацию операций между компьютерами.

Например при совместном использовании файлов разными серверами важно, чтобы время машин было синхронизировано, иначе могут появляться ошибки из-за неверно выставленного времени модификации файлов, что может стать причиной конфликта версий или потери данных.

Таких примеров можно собрать большое множество. Чтобы их избежать необходимо настроить синхронизацию времени. В Linux системах для этого используют протокол NTP.

NTP (Network Time Protocol) — это протокол, который используется для синхронизации времени на компьютерах в сети. В сетях Linux точность времени имеет особое значение, поскольку она влияет на работу различных служб и приложений. Корректная настройка NTP сервера позволяет поддерживать точность времени на всех устройствах в сети.

Как работает протокол NTP

Принцип работы NTP основан на использовании иерархии серверов, которая обеспечивает распределение точного времени по всей сети. Уровни этой иерархии называются стратами (англ. strata). Высший уровень 0 представляет источники времени такие как атомные часы. Следующий уровень 1 — это серверы, которые получают точное время от нулевого уровня и сами могут служить источником времени для серверов следующего уровня 2. Этот процесс продолжается до достижения конечных клиентских устройств.

Иерархическая структура протокола NTP построена с учетом отказоустойчивости и избыточности. В случае потери соединения с вышестоящими серверами NTP резервные серверы берут процесс синхронизации на себя. За счет избыточности обеспечивается постоянная доступность NTP-серверов. Синхронизируясь с несколькими серверами, NTP использует данные всех источников, чтобы рассчитать наиболее точное время.

NTP использует алгоритмы для определения разницы во времени между сервером и клиентом, а затем корректирует время на клиентах для обеспечения точности. Протокол NTP также обеспечивает безопасность путем использования ключей шифрования для проверки подлинности серверов.

Установка и настройка NTP-сервера

В Linux NTP сервер работает на базе пакета ntp. Для его работы необходимо установить этот пакет, который доступен в репозитории дистрибутива Linux. В зависимости от настроек демон ntp может выступать как сервером точного времени раздавая его другим хостам так и клиентом.

Настройка NTP сервера включает несколько шагов:

  • Установка пакета ntp.
  • Конфигурация файла ntp.conf.
  • Проверка параметров, ключей шифрования и доступа к клиентам.

Установка

Для установки пакета ntp в Linux можно использовать менеджер пакетов вашего дистрибутива, например, apt-get или yum. После установки необходимо запустить службу NTP.

sudo apt-get install ntp

Настройка

Файл ntp.conf содержит настройки для работы NTP сервера. В нем можно определить уровень сервера, указать ключи шифрования для обеспечения безопасности и задать правила доступа к клиентам.

Для настройки необходимо открыть файл /etc/ntp.conf в любом текстовом редакторе.

sudo nano /etc/ntp.conf

Параметры логирования

driftfile /var/lib/ntp/ntp.drift

В этой строке указывается файл для хранения информации о частоте смещения времени. В этом файле хранится значение, получаемое в результате предшествующих корректировок времени. Если внешние NTP-серверы по той или иной причине становятся недоступными, значение будет взятого из него.

Далее указывается файл, в который будут сохраняться логи синхронизации:

logfile /var/log/ntp.log

Список серверов синхронизации

В конфигурационном файле указывается список NTP-серверов, с которыми будет осуществляться синхронизация.

server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

Каждая строка означает группу серверов, которые будут передавать нам корректное время. Чтобы повысить точность синхронизации можно использовать опцию iburst, она отвечает за отправку на сервер для синхронизации несколько пакетов вместо одного:

server 0.ubuntu.pool.ntp.org iburst
server 1.ubuntu.pool.ntp.org iburst
server 2.ubuntu.pool.ntp.org iburst
server 3.ubuntu.pool.ntp.org iburst

Также можно указать приоритетный серверы для синхронизации используя опцию prefer:

server 0.ubuntu.pool.ntp.org iburst
server 1.ubuntu.pool.ntp.org iburst prefer
server 2.ubuntu.pool.ntp.org iburst
server 3.ubuntu.pool.ntp.org iburst

Уровень сервера 0 — 3 определяет его место в иерархии NTP серверов. Чем меньше значение стратума, тем ближе сервер к источнику времени с высшим уровнем.

Как мы писали выше, иерархия NTP построена с учетом отказоустойчивость и резервирования. NTP-серверы размещены по всему миру. Чтобы обеспечить более точную установку времени желательно использовать ntp-серверы размещенные в регионе размещения сервера, К примеру для России можно использовать:

ru.pool.ntp.org 

Защита и дополнительные настройки

Чтобы наш сервер не стал инструментов в руках злоумышленников, которые научились использовать NTP-сервера для усиления трафика в DDoS-атаках, нужно установить ограничения на доступ для внешних клиентов

По умолчанию в файлe /etc/ntp.conf установлены следующие ограничения:

restrict −4 default kod notrap nomodify nopeer noquery
restrict −6 default kod notrap nomodify nopeer noquery

Параметры nomodify, notrap, nopeer и noquery запрещают сторонним клиентам изменять что-либо на сервере. При использовании параметра kod, клиент, отправляющий слишком частые запросы, сначала получит предупреждение об отказе в обслуживании (так называемый kod-пакет), а затем будет отключен от сервера.

notrap — запрет на прием управляющих команд;
nomodify — запрет команд, которые изменяют состояние или способны это делать;
nopeer — запрет синхронизации с хостом;
4 — если используется протокол IPv4;
6 — если используется протокол IPv6.

Чтобы с NTP-сервером могли синхронизироваться машины из локальной сети, добавим в конфигурационный файл следующую строку:

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

Для того, чтобы сервер мог обмениваться NTP данными сам собой вносим строки:

restrict 127.0.0.1
restrict ::1

Перезапуск и проверка сервера

Для того, чтобы применились все изменения необходимо перезапустить сервер:

sudo service ntp restart

После проверяем статус работы:

sudo service ntp status

В выводе должны увидеть статус работы сервера — Active (running).

Проверяем корректность работы, выполнив команду:

ntpq -pn

В ее выводе будут представлены следующие данные:remote — адрес сервера точного времени (в этой графе отражаются серверы из списка в конфигурационном файле);
refid — вышестоящий сервер (тот, от которого сервер из предыдущей графы получает синхронизацию);
st — уровень (stratum) сервера;
t — тип пира (u — unicast, m — multicast);
when — время последней синхронизации;
poll — время в секундах, за которое демон NTP синхронизируется с пиром;
reach — состояние доступности сервера;
delay — время задержки ответа от сервера;
offset — разница времени между нашим сервером и сервером синхронизации; положительное значение этого параметра означает, что наши часы спешат, отрицательное — что отстают;
jitter — смещение времени на удаленном сервере.Слева от адреса сервера могут быть указаны следующие символы:

* сервер выбран для синхронизации;
+ сервер, пригодный для обновления (с которым можно синхронизироваться);
— с сервером синхронизироваться не рекомендуется;
х сервер недоступен.

Настройка синхронизации клиентов с NTP-сервером

Следующие шаги мы выполним для того, чтобы обеспечить возможность синхронизации клиентов с нашим NTP-сервером, который будет служить для них эталонным источником времени.

Устанавливаем NTP на системе клиента, аналогично нашему серверу:

sudo apt-get install ntp

Устанавливаем в настройках ntp.conf наш сервер в качестве эталонного, добавляя строку:

server ntp-host prefer iburst

где ntp-host — адрес нашего NTP-сервера

Перезапускаем демон

sudo service ntp restart

Проверяем работу смотря на очередь синхронизации:

ntpq -ps

Проверяем, правильно ли сервер отдает время:

ntpdate ntp-host

где ntp-host — адрес нашего NTP-сервера

Смотрим на время рассинхронизации, оно должно измеряться в сотых секунды.

Корректная настройка NTP сервера важна для обеспечения точности времени в сети Linux. Она позволяет избежать проблем, связанных с несоответствием времени, и обеспечивает надежную работу различных служб и приложений. Правильная настройка сервера, а также его регулярное обслуживание и мониторинг, помогут поддерживать точность времени в сети.