Для избежания возможного использования сервера в различных зловредных целях не обязательно его полностью фаерволить, можно просто отконфигурить соответствующим образом. Достаточно закрыть возможность использовать клиентские команды и команды управления демоном извне.
Короткий рецепт выглядит приблизительно так:
- вписываем сервера для синхронизации
server ntp1.colocall.net
server ntp2.colocall.net
server ntp.time.in.ua
server ntp2.time.in.ua
- запрещаем доступ всем
restrict default ignore
- открываем полный доступ для локалхоста
restrict 127.0.0.1
-открываем доступ всем остальным, для начала тем серверам с которыми синхронизируемся
restrict ntp1.colocall.net nomodify noquery nopeer notrap
restrict ntp2.colocall.net nomodify noquery nopeer notrap
restrict ntp.time.in.ua nomodify noquery nopeer notrap
restrict ntp2.time.in.ua nomodify noquery nopeer notrap
restrict 0.ua.pool.ntp.org nomodify noquery nopeer notrap
restrict 1.ua.pool.ntp.org nomodify noquery nopeer notrap
restrict 2.ua.pool.ntp.org nomodify noquery nopeer notrap
restrict 3.ua.pool.ntp.org nomodify noquery nopeer notrap
restrict time.windows.com nomodify noquery nopeer notrap
restrict time.nist.gov nomodify noquery nopeer notrap
- можно открыть доступ для синхронизации времени из подсети
restrict 192.168.200.0 mask 255.255.255.0 nomodify noquery nopeer notrap
Проверяем и видим успешные конекты:
# ntpq -c peers
remote refid st t when poll reach delay offset jitter
==============================================================================
-ns4.pay-port.ki 193.190.230.65 2 u 47 64 377 0.679 12.676 0.845
193.27.209.211 .RMOT. 16 u - 64 0 0.000 0.000 0.000
shkvoren.tntu.e .INIT. 16 u - 64 0 0.000 0.000 0.000
alpha.lvivlan.n .RMOT. 16 u - 64 0 0.000 0.000 0.000
ntp1.colocall.n 62.149.0.30 2 u 42 64 377 0.666 13.765 0.778
servers-gw.colo 62.149.0.30 2 u 46 64 377 0.849 14.301 1.010
*ntp.time.in.ua .GPS. 1 u 42 64 377 0.798 13.666 0.729
+ntp2.time.in.ua .GPS. 1 u 39 64 377 0.695 12.768 1.155
212.111.205.73 .INIT. 16 u - 64 0 0.000 0.000 0.000
burka.carrier.k .INIT. 16 u - 64 0 0.000 0.000 0.000
x64.4.10.33 10.20.229.51 2 u 43 64 377 189.454 28.234 9.058
+nist1-chi.ustim .ACTS. 1 u 47 64 157 140.767 14.555 2.913
Значения директив из ман ntp.conf :
noquery Deny ntpq(8) and ntpdc(8) queries. Time service is not
affected.
nopeer Deny packets which would result in mobilizing a new asso-
ciation. This includes broadcast and symmetric active
packets when a configured association does not exist.
nomodify Deny ntpq(8) and ntpdc(8) queries which attempt to modify
the state of the server (i.e., run time reconfiguration).
Queries which return information are permitted.
notrap Decline to provide mode 6 control message trap service to
matching hosts. The trap service is a subsystem of the
ntpdq control message protocol which is intended for use
by remote event logging programs.
Уязвимость, или точнее, возможность использования, а также один из вариантов решения описаны здесь - http://freehost.com.ua/faq/articles/ataka-s-pomoschju-servera-vremeni-ntp-na-vashem-servere/ :
13 января 2014 года US-CERT выпустило предупреждение о новом способе DDOS атак, при помощи уязвимости в старых версиях протокола NTP. Данный протокол используется для синхронизации времени.
Атака основана на опции monlist, которая включена по умолчанию на старых версия протокола. Этот запрос получает список последних 600 клиентов воспользовавшихся сервисом. Вследствие поддельного адреса отправителя список отсылается жертве. Поскольку объем ответа многократно больше запроса, злоумышленнику удается усилить объем трафика направленного на жертву. Помимо увеличения трафика на сервере так же увеличивается, многократно нагрузка.
Поскольку ответами от сервера являются обычные данные, которые вполне могли запрашиватся у обычных серверов времени, данный тип атак особенно сложно «разоблачить». Решение является отключение возможности мониторинга серверов или обновление версии.
На платформе unix c помощью данной команды можно проверить наличие уязвимости:
# ntpdc -c monlist 127.0.0.1
# ntpdc -c monlist 127.0.0.1
remote address port local address count m ver code avgint lstint
===============================================================================
localhost 51569 127.0.0.1 1 7 2 0 0 0
x.x.x.x 4641 10.100.0.254 261324 3 3 180 30 2
.....................................................................................................
откллючаем функцию мониторинга
# vi /etc/ntp.conf
в конце файла добавиляем
disable monitor
Выполняем перезагрузку сервера
команда в зависимости от ОС. Обычно reboot
/etc/rc.d/ntpd restart
Проверить правильность выполненных действий можно так:
# ntpdc -c monlist 127.0.0.1
***Server reports data not found
---------------------------------------------------------------------------------------
Конфиг для копипаста(строгий, запросы времени отключены для всех):
##################################################
server ntp.time.in.ua
server ntp2.time.in.ua
server ntp1.colocall.net
server ntp2.colocall.net
restrict default ignore
restrict 127.0.0.1
restrict ntp.time.in.ua nomodify noquery nopeer notrap
restrict ntp2.time.in.ua nomodify noquery nopeer notrap
restrict ntp1.colocall.net nomodify noquery nopeer notrap
restrict ntp2.colocall.net nomodify noquery nopeer notrap
restrict 0.ua.pool.ntp.org nomodify noquery nopeer notrap
restrict 1.ua.pool.ntp.org nomodify noquery nopeer notrap
restrict 2.ua.pool.ntp.org nomodify noquery nopeer notrap
restrict 3.ua.pool.ntp.org nomodify noquery nopeer notrap
restrict time.windows.com nomodify noquery nopeer notrap
restrict time.nist.gov nomodify noquery nopeer notrap
################################################
Конфиг для копипаста(не строгий, запросы времени разрешены):
##################################################
server ntp.time.in.ua
server ntp2.time.in.ua
server ntp1.colocall.net
server ntp2.colocall.net
restrict default nomodify nopeer noquery notransfer notrap limited kod
restrict 127.0.0.1