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
- Страница пакета https://copr.fedorainfracloud.org/coprs/poettlerric/openntpd/.
- Начиная с того момента, как мы начали выкладывать сборки openntpd на repo.docker.ru, деятельность мантейнера в основном свелась к приёму наших pull request'ов: https://github.com/poettler-ric/fedora-spec/pulls?q=is%3Apr+is%3Aclosed.
Прочие платформы
- https://pkgs.org/download/openntpd — не считая Дебиана и Убунты, большинство сборок древние.
Рекомендуемый список NTP-серверов
- Для ленивых:
servers pool.ntp.org
- Для пунктуальных:
stratum 1
из http://www.vniiftri.ru/index.php/ru/services/22-ntp — обязательно из нескольких разных доменов и разных сетей!