У меня есть несколько серверов с общедоступными 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. В любом случае концепция одна и та же.
Для межсетевого экрана подсети:
A.B.C.10
Для брандмауэра хоста на сервере NTP:
например чтобы разрешить 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