Настройка NTP-сервера в Debian или Ubuntu

  • Автор:

NTP-server-debian-ubuntu-000.pngМы уже неоднократно поднимали вопрос важности синхронизации времени, особенно сейчас, когда даже в небольших сетях появляется все больше и больше служб критичных к точному времени. Это криптография, системы контроля доступа и видеонаблюдения, кассовые узлы. В этих условиях точности обычных аппаратных часов начинает не хватать и хотя во многих случаях допускается разбег времени не более пяти минут, лучше не ждать пока это случится (как всегда в самый неподходящий момент), а обеспечить свою инфраструктуру собственным сервером времени. В данной статье мы рассмотрим, как это сделать в системах основанных на Debian.

Перед установкой сервера времени убедитесь. что в вашей системе правильно настроен часовой пояс, проверить и изменить его можно командой:

dpkg-reconfigure tzdata

Данную и все последующие команды следует выполнять с правами суперпользователя.

После установки часового пояса обновите список пакетов и установите пакет NTP-сервера:

apt update
apt install ntp

Пакет работоспособен сразу после установки и конфигурация из коробки достаточно актуальна, но лучше внести в нее некоторые дополнительные штрихи. Для изменения настроек откроем файл /etc/ntp.conf.

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

NTP-server-debian-ubuntu-001.pngИ заменим значения на следующие:

pool 0.ru.pool.ntp.org iburst
pool 1.ru.pool.ntp.org iburst
pool 2.ru.pool.ntp.org iburst
pool 3.ru.pool.ntp.org iburst

В нашем примере приведены настройки для использования российских серверов времени. Ниже зададим настройку для синхронизации с аппаратными часами на случай отсутствия синхронизации с серверами в интернет:

server 127.127.1.0
fudge 127.127.1.0 stratum 10

Первая строка задает адрес аппаратных часов - 127.127.1.0, вторая указывает приоритет - stratum - он выбран таким образом, чтобы при наличии интернета NTP-сервер не синхронизировался с аппаратными часами. У серверов входящих в пулы ntp.org значение stratum равно двум.

Затем перейдем к списку контроля доступа, который состоит из сетевых адресов отсортированных по возрастанию адресов и масок. Запись по умолчанию - default соответствует адресу 0.0.0.0 с маской 0.0.0.0, если в записи не указана маска, то автоматически подставляется значение 255.255.255.255, что соответствует конечному хосту.

Кроме адресов строки списка содержат флаги, флаги указывают на те или иные ограничения, если строка не содержит флагов - это означает полный доступ к серверу. По умолчанию список контроля доступа, следующий:

NTP-server-debian-ubuntu-002.pngРазберем его подробнее. Первые две строки задают значения по умолчанию, т.е. для любых клиентов, в сетях IPv4 и IPv6:

restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

Перечисленные флаги имеют значения:

  • kod - отправка клиенту, посылающему нежелательные запросы, пакета KoD (Kiss O'Death), получатель такого пакета обязан выполнить предписанную ему проверку и изменить свое поведение, в противном случае такой клиент будет отключен от сервера.
  • notrap - запрет приема управляющих сообщений
  • nomodify - запрет приема сообщений, изменяющих состояние сервера
  • nopeer - запрет установки одноранговых отношений с другими NTP-серверами
  • noquery - запрет любых запросов для синхронизации времени поступающих с других серверов
  • limited - запрет обслуживания, если интервал между пакетами от клиента превышает разрешенные значения

Под ними расположены строки, дающие полный доступ к серверу локальной системе:

restrict 127.0.0.1
restrict ::1

Отсутствие маски указывает на то, что это конечный узел, а отсутствие флагов предоставляет полный доступ.

При необходимости мы можем добавить свои записи, скажем для клиентов собственной сети с меньшим числом ограничений:

restrict 192.168.111.0 mask 255.255.255.0 nomodify notrap

Если нужно запретить доступ к серверу времени, то следует использовать флаг ignore. Допустим, мы хотим запретить доступ для всех клиентов доменной сети, кроме эмулятора PDC:

restrict 192.168.122.0 mask 255.255.255.0 ignore #доменная сеть
restrict 192.168.122.101 nomodify notrap #PDC

Расположение строк не имеет значения, так как при запуске сервера все адреса будут отсортированы по возрастанию адреса/маски.

После внесения изменений следует перезапустить службу:

systemctl restart ntp

Проверить ее статус можно командой:

systemctl status ntp

Состояние синхронизации с вышестоящими серверами можно узнать командой:

ntpq -p

Которая выдаст нам следующий вывод:

NTP-server-debian-ubuntu-003.pngНа что следует обратить внимание? Прежде всего на символы слева от адреса сервера:

  • * - сервер выбран для синхронизации
  • + - сервер пригодный для синхронизации
  • - - синхронизация с этим сервером не рекомендуется
  • x - сервер недоступен

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

В колонке st указывается stratum - приоритет сервера, а delay содержит задержку ответа от сервера. Как видим, в нашем случае служба времени выбрала для синхронизации сервер с приоритетом 1, который синхронизируется от GPS-часов, несмотря на более высокий уровень задержки при работе с ним.

Ну и не забудьте разрешить доступ к вашему NTP-серверу в брандмауэре, добавив в правила iptables строку:

iptables -A INPUT -p udp --dport 123 -j ACCEPT

При необходимости можно ограничить доступ сетевым интерфейсом:

iptables -A INPUT -i ens33 -p udp --dport 123 -j ACCEPT

Либо подсетью:

iptables -A INPUT -s 192.168.111.0/24 -p udp --dport 123 -j ACCEPT

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