Назад | Перейти на главную страницу

Как сделать так, чтобы ntpd обслуживал только мою локальную подсеть

У меня есть несколько серверов с общедоступными IP-адресами в Интернете, например A.B.C.x. Один из моих хозяев (A.B.C.10) запускает ntpd, и я синхронизирую время с europe.pool.ntp.org.

Теперь я хочу разрешить только хостам из моей подсети (A.B.C.x), чтобы иметь возможность синхронизироваться с A.B.C.10. По умолчанию весь мир может синхронизироваться с моим NTP-сервером. Как мне этого добиться?


Все примеры, которые я могу найти, предполагают, что я синхронизируюсь с определенными IP-адресами, но я синхронизируюсь с DNS-именами, и насколько я могу сообщить IP-адресам, что DNS-имена x.europe.pool.ntp.org указывают на переменные. Поэтому я не могу настроить исключения в своем брандмауэре и не могу использовать restrict вариант в ntp.conf, потому что он тоже принимает только IP-адреса и нет DNS-имена (Ой! И restrict применяется как к клиентам, так и к серверам, как правила брандмауэра!)

Базовый ntp.conf для обслуживания локальной сети выглядит так

####
driftfile       /etc/ntp.drift
disable         monitor
restrict -4     default kod nomodify nopeer noquery notrap
restrict -6     default kod nomodify nopeer noquery notrap
restrict        127.0.0.1
restrict        127.127.1.0
restrict -6     ::1

restrict        10.0.0.0    mask 255.0.0.0
restrict        172.16.0.0  mask 255.240.0.0
restrict        192.168.0.0 mask 255.255.0.0

server          0.pool.ntp.org       iburst
server          1.pool.ntp.org       iburst
server          2.pool.ntp.org       iburst
####

Две самые длинные строки по умолчанию запрещают доступ к серверу, а затем другие restric директивы разрешают только определенные хосты и подсети.

У вас есть несколько вариантов, и это зависит от того, где размещены брандмауэры и / или с какими из них вы предпочитаете работать. В идеале у вас должен быть брандмауэр, которым вы можете управлять в подсети. Менее идеально вы будете иметь дело только с межсетевым экраном уровня хоста на сервере NTP. В любом случае концепция одна и та же.

Для межсетевого экрана подсети:

  • Разрешить UDP-порт 123 из подсети только из A.B.C.10
  • Запретить порт 123 UDP для всего остального.

Для брандмауэра хоста на сервере NTP:

  • Разрешить UDP-порт 123 из вашей подсети (и с localhost)
  • Запретить UDP-порт 123 отовсюду (правило запретить все позже в цепочке).

например чтобы разрешить 10.0.0.0/8:

# allow 10.0.0.0/8
iptables -A INPUT -s 10.0.0.0/8 -p udp -m udp --dport 123 -j ACCEPT
# allow localhost
iptables -A INPUT -s 127.0.0.0/8 -p udp -m udp --dport 123 -j ACCEPT
# allow NTP packets _from_ your host to everyone else
iptables -A OUTPUT -p udp --sport 123 --dport 123 -m state --state NEW,ESTABLISHED -j ACCEPT
# allow replies from hosts you've sent NTP packets to
iptables -A INPUT  -p udp --sport 123 --dport 123 -m state --state ESTABLISHED -j ACCEPT
# the following is only useful if you have a policy ACCEPT for INPUT
iptables -A INPUT  -p udp -m udp --dport 123 -j DROP

Я не нашел эти ответы очень полезными, поэтому вот что сработало для меня. Это на машине под управлением NTP 4.2.6p5

driftfile        /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/

restrict    default ignore

restrict        127.0.0.1
restrict        127.127.1.0
restrict -6     ::1

restrict -4     <whitelist.ip.0>    mask    255.255.255.255
restrict -4     <whitelist.ip.1>    mask    255.255.255.255
restrict -4     <whitelist.ip.2>    mask    255.255.255.255 

server      0.pool.ntp.org  iburst nomodify notrap nopeer noquery
restrict    0.pool.ntp.org  iburst nomodify notrap nopeer noquery
server      1.pool.ntp.org  iburst nomodify notrap nopeer noquery
restrict    1.pool.ntp.org  iburst nomodify notrap nopeer noquery
server      2.pool.ntp.org  iburst nomodify notrap nopeer noquery
restrict    2.pool.ntp.org  iburst nomodify notrap nopeer noquery


statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

Я знаю, что это старый поток, но подумал, что это может кому-то помочь. В этом примере вы должны заменить whitelist.ip.0, whitelist.ip.1, whitelist.ip.2 хостами из белого списка. Очевидно, вы также можете изменить аргумент маски, чтобы разрешить, например, сеть / 24