Openntpd

11 апреля 2018

Openntpd

  • Назначение: компактный безопасный NTP-сервер
  • Сайт: http://openntpd.org/
  • По умолчанию работает в режиме клиента, т.е. синхронизирует локальное время, но не слушает порт 123
  • Используется нами на всех серверах вместо ISC ntpd или периодического вызова ntpdate

Преимущества по сравнению с ISC NTPd

  • Безопасные настройки по умолчанию — не слушает сетевой порт 123
  • Простой синтаксис настроек, минимальный конфиг состоит из одной-двух строк
  • Безопасная архитектура — управляющий сокет, сетевой сокет, системный таймер управляются отдельными процессами с максимально ограниченными привилегиями
  • Меньшее потребление ресурсов
  • Отсутствие зафиксированных уязвимостей
  • Для сравнения — список найденных уязвимостей в ISC ntpd: http://support.ntp.org/bin/view/Main/SecurityNotice
  • Общая репутация OpenBSD

Ограничения по сравнению с ISC NTPd

  • Отсутствие микросекундной точности
  • Только unicast-режим обмена данными, режимы multicast, manycast и broadcast не поддерживаются
  • Нет NTP-аутентификации
  • Нет драйверов для получения данных от устройств точного времени (т.н. Reference Clocks)
  • Полный список см. в http://support.ntp.org/bin/view/Support/OpenNTPD

Преимущества Openntpd по сравнению с периодическим вызовом ntpdate

Во-первых, ntpdate исправляет время рывком — если часы при этом переводятся назад, некоторым программам это не нравится.
Пример: популярный почтовый сервер Dovecot до версии 2.0 https://wiki.dovecot.org/TimeMovedBackwards.

Во-вторых, многим сетевым приложениям требуется постоянная точная синхронизация времени на узлах.
Пример: https://wiki.samba.org/index.php/Time_Synchronisation.

Переводя статью из второго примера на русский, видим, что Active Directory требуется точная синхронизация времени.
Например, правильные отметки времени требуются службе авторизации Kerberos для предотвращения так называемых replay-атак, а Active Directory использует их для исправления конфликтов репликации.
Если у участника или контроллера домена время отличается от общедоменного сильнее, чем на 5 минут (максимально допустимое расхождение часов в AD по умолчанию), доступ в домен ему запрещён.

Установка в CentOS 7

Должен быть подключен repo.docker.ru — сейчас подключение выполняется следующей командой:

yum install -y http://repo.docker.ru/pub/linux/centos/7/noarch/docker-release-1-1.el7.noarch.rpm

Отключите встроенный NTP-клиент CentOS:

timedatectl set-ntp false

Установите пакет с OpenNNTPd:

yum install -y openntpd

Опционально: отредактируйте файл /etc/ntpd.conf — настроек по умолчанию достаточно для запуска, но для работы в режиме сервера надо раскомментировать строку listen ...

Опционально: отредактируйте файл /etc/sysconfig/openntpd — например, добавьте в параметры запуска ключ -s, чтобы openntpd пытался скорректировать при запуске системное время не плавно, а рывком.

Включите автозагрузку сервиса и запустите его:

systemctl enable openntpd
systemctl start openntpd

Установка в CentOS 6

Должен быть подключен repo.docker.ru

yum install -y http://repo.docker.ru/pub/linux/centos/6/noarch/docker-release-1-1.el6.noarch.rpm

Удалите стандартный сервис и установите OpenNTPD:

yum remove ntp ntpdate
yum install -y openntpd

Опционально: отредактируйте /etc/ntpd.conf и /etc/sysconfig/openntpd.

Включите автозагрузку, запустите сервис:

chkconfig openntpd on
service openntpd start

Установка в FreeBSD

Установка:

pkg install openntpd

Отредактируйте файт /etc/rc.conf

  • Добавьте строку openntpd_enable=yes
  • Удалите все строки ntpd_...=...

Остановка встроенного демона и запуск openntpd:

/etc/rc.d/ntpd forcestop
/usr/local/etc/rc.d/openntpd start

Настройки находятся в /usr/local/etc/ntpd.conf

Установка в Ubuntu/Debian

Установка:

apt-get install -y openntpd

Отредактируйте /etc/default/openntpd — можно добавить ключ -s для быстрой коррекции часов при старте демона.

Отредактируйте /etc/openntpd/ntpd.conf.

Запуск:

service openntpd restart

Ошибка в Ubuntu:

  • Сообщение при установке пакета и запуске сервиса: "Starting openntpd: /etc/openntpd/ntpd.conf: Permission denied"
  • Подробности: https://bugs.launchpad.net/ubuntu/+source/openntpd/+bug/458061/comments/24
  • Причина: AppArmor продолжает считать /usr/sbin/ntpd частью другого пакета и запрещает ему доступ к «чужим» файлам.

Исправление:

apt-get purge ntp -y
service apparmor restart
service openntpd restart

Пояснение про вызов timedatectl в CentOS 7 перед установкой Openntpd

  • systemd-timesyncd надо отключать командой timedatectl set-ntp false, потому что он конфликтует с openntpd: тоже постоянно работает как демон и управляет системным временем.
  • Формально timesyncd является самостоятельным SNTP-клиентом, по факту требует установки локального NTP-демона chrony, потому что из всех NTP-серверов только для Chrony RPM-пакет собран с поддержкой интеграции с timesyncd.
  • Подробное описание: https://wiki.archlinux.org/index.php/Systemd-timesyncd

Проблемы с ключом -s под systemd

Условия возникновения ошибки:

  • На сервере запускается и используется собственный DNS-сервис.
  • В /etc/ntpd.conf используются DNS-имена (например, pool.ntp.org).
  • Оба сервиса (openntpd и dns) запускаются Systemd при старте системы после network-online.target.
  • Openntpd инициализируется быстрее, чем DNS.

Результат:

  • Openntpd получает ошибку DNS-распознавания, но не пытается повторить DNS-запрос.
  • Вместо этого он ждёт 15 секунд и выдаёт ошибку "no reply received in time, skipping initial time setting".

Описание ошибки и простейший обходной вариант — https://github.com/openntpd-portable/openntpd-portable/issues/44

Наша сборка в repo.docker.ru содержит для этой цели сценарий /usr/bin/openntpd-wait-resolver-alive, который вызывается из openntpd.service перед ntpd через ExecStartPre.

Репозитории с Openntpd для Redhat-based дистрибутивов

repo.docker.ru

  • для CentOS 6:
    yum install -y http://repo.docker.ru/pub/linux/centos/6/noarch/docker-release-1-1.el6.noarch.rpm
  • для CentOS 7:
    yum install -y http://repo.docker.ru/pub/linux/centos/7/noarch/docker-release-1-1.el7.noarch.rpm
  • Сборка openntpd для CentOS 7 поддерживается, для CentOS 6 закончена в январе 2017 (версия openntpd = 6.0p1).

Fedora

Прочие платформы

Рекомендуемый список NTP-серверов



← Назад в Блог