Записки IT специалиста
Мы уже неоднократно поднимали вопрос важности синхронизации времени, особенно сейчас, когда даже в небольших сетях появляется все больше и больше служб критичных к точному времени. Это криптография, системы контроля доступа и видеонаблюдения, кассовые узлы. В этих условиях точности обычных аппаратных часов начинает не хватать и хотя во многих случаях допускается разбег времени не более пяти минут, лучше не ждать пока это случится (как всегда в самый неподходящий момент), а обеспечить свою инфраструктуру собственным сервером времени. В данной статье мы рассмотрим, как это сделать в системах основанных на Debian.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Перед установкой сервера времени убедитесь. что в вашей системе правильно настроен часовой пояс, проверить и изменить его можно командой:
Данную и все последующие команды следует выполнять с правами суперпользователя.
После установки часового пояса обновите список пакетов и установите пакет NTP-сервера:
apt update
apt install ntp
Пакет работоспособен сразу после установки и конфигурация из коробки достаточно актуальна, но лучше внести в нее некоторые дополнительные штрихи. Для изменения настроек откроем файл /etc/ntp.conf.
Начнем с вышестоящих серверов для синхронизации времени, рекомендуется выбирать ближайшие к вам сервера, их адреса можно получить на сайте ntppool.org. Затем найдем в конфигурационном файле следующую секцию:
И заменим значения на следующие:
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, что соответствует конечному хосту.
Кроме адресов строки списка содержат флаги, флаги указывают на те или иные ограничения, если строка не содержит флагов — это означает полный доступ к серверу. По умолчанию список контроля доступа, следующий:
Разберем его подробнее. Первые две строки задают значения по умолчанию, т.е. для любых клиентов, в сетях 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
Расположение строк не имеет значения, так как при запуске сервера все адреса будут отсортированы по возрастанию адреса/маски.
После внесения изменений следует перезапустить службу:
Проверить ее статус можно командой:
Состояние синхронизации с вышестоящими серверами можно узнать командой:
Которая выдаст нам следующий вывод:
На что следует обратить внимание? Прежде всего на символы слева от адреса сервера:
- * — сервер выбран для синхронизации
- + — сервер пригодный для синхронизации
- — — синхронизация с этим сервером не рекомендуется
- 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 перестанет быть «китайской грамотой» и вы будете понимать, как именно работает ваш сервер.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Синхронизация времени linux debian
Network Time Protocol. This will make your system date match actual date, by synchronizing with network time servers.
4 Фев 2020 18:02:19 | 5 комментариев
Использование systemd-timesyncd для синхронизации времени в Debian/Ubuntu
В Linux для синхронизации времени традиционно используется ntpd как стандарт де-факто, но есть другая и более простая альтернатива — это systemd-timesyncd.
Давайте настроим его для синхронизации времени, а про ntpd забудем и удалим его.
С ntpd все просто, ставится пакет ntp, настраивается файл конфигурации /etc/ntp.conf и включается служба ntp (systemctl start ntp), далее проверяем с помощью утилиты ntpstat факт синхронизации локальных часов с удаленным сервером и радуемся.
Все бы хорошо, но с помощью ntpd можно не только забирать время с удаленных сервером, но и выступать в качестве сервера времени для других, то есть ntpd принимает входящие соединения и его некорректная настройка может послужить причиной участия вашего сервера в DDoS-атаки (см. apt-get remove ntp ntpstat —purge apt autoremove
Удалить ntpd или например chronyd нужно потом, что иначе systemd-timesyncd не будет синхронизировать время. За такую проверку отвечает файл /lib/systemd/system/systemd-timesyncd.service.d/disable-with-time-daemon.conf в котором прописан список бинарников, при наличии которых в системе демон systemd-timesyncd не будет работать.
Теперь настроим systemd-timesyncd, для этого в файл конфигурации /etc/systemd/timesyncd.conf пропишем список серверов времени:
echo 'NTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org' >> /etc/systemd/timesyncd.conf
Таким образом мы добавили в файл настройку NTP= определяющую список основных серверов времени, можно добавить настройку FallbackNTP= которая определит список резервных серверов времени:
echo 'FallbackNTP=ntp.ubuntu.com' >> /etc/systemd/timesyncd.conf
Смотрим текущий статус синхронизации часов:
Local time: Вт 2020-02-04 13:13:04 +05 Universal time: Вт 2020-02-04 08:13:04 UTC RTC time: Вт 2020-02-04 08:14:11 Time zone: Asia/Yekaterinburg (+05, +0500) Network time on: yes NTP synchronized: no RTC in local TZ: no
В строке «NTP synchronized» может стоять no если синхронизация часов по ntp до этого не была настроена вообще или yes, если до этого часы синхронизировались с помощью ntpd
Включаем использование systemd-timesyncd для синхронизации времени:
Включаем и перезапускаем службу systemd-timesyncd:
systemctl enable --now systemd-timesyncd.service systemctl restart systemd-timesyncd.service
systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/systemd-timesyncd.service.d └─disable-with-time-daemon.conf Active: active (running) since Вт 2020-02-04 13:14:22 +05; 16min ago Docs: man:systemd-timesyncd.service(8) Main PID: 11666 (systemd-timesyn) Status: "Synchronized to time server 91.206.16.3:123 (0.debian.pool.ntp.org)." Tasks: 2 Memory: 388.0K CPU: 10ms CGroup: /system.slice/systemd-timesyncd.service └─11666 /lib/systemd/systemd-timesyncd фев 04 13:14:22 myserver systemd[1]: Starting Network Time Synchronization. фев 04 13:14:22 myserver systemd[1]: Started Network Time Synchronization. фев 04 13:12:34 myserver systemd-timesyncd[11666]: Synchronized to time server 91.206.16.3:123 (0.debian.pool.n
Через несколько минут можно проверить с помощью timedatectl состояние синхронизации:
Local time: Вт 2020-02-04 13:32:03 +05 Universal time: Вт 2020-02-04 08:32:03 UTC RTC time: Вт 2020-02-04 08:32:03 Time zone: Asia/Yekaterinburg (+05, +0500) Network time on: yes NTP synchronized: yes RTC in local TZ: no
Значение в строке «NTP synchronized» должно измениться на yes
Если systemd-timesyncd не синхронизирует часы, то прежде всего проверьте настройки межсетевого экрана (iptables) на предмет разрешения исходящих подключений на 123 порт по протоколу UDP.
Детальную информацию о состоянии синхронизации времени можно посмотреть командой:
timedatectl timesync-status
Server: 103.134.252.11 (0.debian.pool.ntp.org) Poll interval: 34min 8s (min: 32s; max 34min 8s) Leap: normal Version: 4 Stratum: 2 Reference: 68D34CE2 Precision: 1us (-24) Root distance: 65.284ms (max: 5s) Offset: +10.793ms Delay: 149.152ms Jitter: 6.030ms Packet count: 8 Frequency: +47.109ppm
P.S. Утилиту timedatectl так же можно использовать для смены часового пояса, пример:
Выведем список временных зон:
timedatectl list-timezones
Установим временную зону Asia/Yekaterinburg:
timedatectl set-timezone Asia/Yekaterinburg
+5 свидетельствует об установке нашей зоны (Asia/Yekaterinburg это UTC+5)
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.