Почему NTP требует двунаправленного доступа брандмауэра к порту UDP 123?

17

Из каких правил iptables разрешить ntp? :

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

Также с сайта NTP :

... ntpd требует полного двунаправленного доступа к привилегированному UDP-порту 123. ...

У меня вопрос, почему? Для тех, кто не знаком с NTP, это выглядит как потенциальная дыра в безопасности, особенно когда я прошу моего клиента открыть этот порт в своем брандмауэре, чтобы мои серверы могли синхронизировать свое время. У кого-нибудь есть достойное оправдание, которое я могу дать своему клиенту, чтобы убедить его, что мне нужен этот доступ в брандмауэре? Помощь приветствуется! :)

DuffJ
источник
2
Вы читали часть о "разрешить родственные / установленные"? Если это правило присутствует, нет необходимости в общем правиле ввода для UDP-порта 123.
VMai
1
Это действительно потенциальная дыра в безопасности? Это часто повторяемая фраза, которую я считаю бессмысленной. Наступил 2014 год, когда не нужно наполнять порты со значением менее 1024 специальными свойствами и блокировать весь трафик, который явно не требуется. Вы открываете один порт на одну машину от определенных хостов в Интернете.
dfc
Я согласен, на самом деле это не потенциальная дыра в безопасности, но я работаю в финансовой индустрии, и люди всегда нервничают по поводу открытия брандмауэров на случай, если «что-то пройдет». Всегда стоит иметь под рукой хорошее обоснование, плюс мне самому любопытно ответить на него - действительно ли ntpd на сервере времени устанавливает исходящие соединения со своими клиентами для отправки обновлений времени? Это звучит странно и не особенно масштабируемо.
DuffJ
Я прогуглил это несколько дней назад, он может обойтись без входящего соединения.
Бароп
@VMai человек, который сказал, что на superuser.com/questions/141772/… не привел никакого примера, но я думаю, что он хотел включить исходящие соединения, пакеты, входящие в них. Это отличается от концепции, согласно которой «ntpd требует полного двунаправленного доступа к привилегированному UDP-порту 123. ...», который звучит как входящее соединение. Если он хочет разрешить входящие и исходящие, используя связанные / установленные, то ему нужно 4 правила. 2 для входящих соединений, 2 для исходящих соединений.
Бароп

Ответы:

10

Разрешить входящий трафик для портов NTP необходимо только в том случае, если вы действуете как сервер, позволяющий клиентам синхронизироваться с вами.

В противном случае наличие состояния NTP автоматически определит, заблокирован ли входящий пакет NTP или разрешен существующим состоянием брандмауэра, которое мы инициировали.

iptables -A OUTPUT -p udp --sport 123 --dport 123 -j ПРИНЯТЬ

iptables -A INPUT -m состояние - УСТАНОВЛЕНО, СОПУТСТВУЕТ -j ПРИНЯТЬ

Пожалуйста, дайте мне знать, если правила iptables являются правильными. У меня нет опыта работы с iptables. Мой NTP-клиент синхронизируется на моем маршрутизаторе pfSense с использованием только правила исходящего разрешения, потому что pfSense - это межсетевой экран с отслеживанием состояния.

Бен Кук
источник
1
Это кажется разумным! К сожалению, я больше не в состоянии подтвердить правильность вашего ответа; однако, я приму это, потому что это кажется логичным. Большое спасибо!
DuffJ
1

NTP требует двунаправленного доступа через порт 123, потому что в NTP RFC указывается следующее относительно исходного порта клиента:

При работе в симметричных режимах (1 и 2) это поле должно содержать номер порта NTP PORT (123), назначенный IANA.

Поскольку исходный порт клиента - 123, когда сервер отправляет ответ обратно, он отправляет его на порт 123. Естественно, чтобы иметь возможность получить этот ответ, клиент должен разрешить входящие ответы на порт 123. Обычно ответы возвращаются на некотором эфемерном диапазоне портов .

В качестве упоминал Бен Кук , это требуется только при работе с брандмауэром без сохранения состояния, так как брандмауэр с состоянием позволяет получить ответ без явного правила.

Гурприт Атвал
источник
0

Я думаю, что лучшим решением является включение порта 123 для входа, только для IP-адресов, которые, как ожидается, дадут вашему серверу сигнал ntp.
Внутри конфигурационного файла ntp, /etc/ntp.conf, есть адреса нескольких серверов ntp, на которые должен указывать ваш сервер. Вы можете использовать команду lookup, чтобы найти соответствующий ip для каждого адреса.

host -t a 0.debian.pool.ntp.org

Затем вы можете добавить правило в брандмауэр сервера:

iptables -I INPUT -p udp -s 94.177.187.22 -j ACCEPT

... и так далее.
Это может помешать любому злоумышленнику повредить ваш сервер.
Я думаю, что бесполезно ограничивать вывод.

Леонардо Гульотти
источник
-1

Связь ntp-сервер с портом источника и назначения 123. Наиболее удобно явно разрешить это, по крайней мере, хостам, на которых вы запускаете службу ntp.

Вы могли бы рассмотреть только выставление внешнего хоста в Интернет, чтобы получить время из внешних источников. Внутренняя служба ntp, синхронизирующаяся с этим, может быть источником для всех устройств. Если эти хосты предназначены для этой цели, возможное воздействие ограничено: они принимают только трафик ntp и не хранят другие данные.

Альтернативно, вообще не используйте внешнюю IP-сеть. Например, используйте источник радио, например, GPS.

http://www.diablotin.com/librairie/networking/firewall/ch08_13.htm http://support.ntp.org/bin/view/Support/TrounticationNTP

Джон Маховальд
источник
1
Спасибо за этот ответ, но он не отвечает на вопрос. Что если я системный администратор и хочу открыть свой брандмауэр, чтобы я мог настроить внутреннюю службу NTP? Никто до сих пор, похоже, не имеет ни малейшего представления, почему для NTP требуется двунаправленный доступ (который гораздо более опасен, чем однонаправленный доступ).
DuffJ