如何在Linux/Unix之上绑定ntpd到特定的IP地址
默认的情况下,我们的ntpd/NTP服务器会监听所有的端口或者IP地址,也就是:0.0.0.0:123。怎么才可以在一个Linux或是FreeBSDUnix服务器上,确保只监听特定的IP地址,比如localhost或者是192.168.1.1:123
NTP是网络时间协议NetworkTimeProtocol的首字母简写,这是一个用来同步两台电脑之间时间的协议。ntpd是一个操作系统守护进程,可以设置并且保证系统的时间与互联网标准时间服务器同步。
NTP使用/etc/directory之下的ntp.conf作为配置文件。
/etc/ntp.conf之中的端口指令
你可以通过设置端口命令来防止ntpd监听0.0.0.0:123,语法如下:
interfacelistenIPv4|IPv6|all
interfaceignoreIPv4|IPv6|all
interfacedropIPv4|IPv6|all
上面的配置可以使ntpd监听那个地址或者不出来任何请求而直接丢弃。ignore会防止打开匹配的地址,drop会导致ntpd打开该地址并丢弃所有接收到的包,而不做任何检查。举个例子,如果要忽略所有端口之上的监听,加入下面的语句到/etc/ntp.conf:
interfaceignorewildcard
如果只监听127.0.0.1和192.168.1.1则是这样:
interfacelisten127.0.0.1
interfacelisten192.168.1.1
这是我FreeBSD云服务器上的样例/etc/ntp.conf文件:
$egrep-v'^#|$^'/etc/ntp.conf
样例输出为:
tosminclock3maxclock6
pool0.freebsd.pool.ntp.orgiburst
restrictdefaultlimitedkodnomodifynotrapnoquerynopeer
restrict-6defaultlimitedkodnomodifynotrapnoquerynopeer
restrictsourcelimitedkodnomodifynotrapnoquery
restrict127.0.0.1
restrict-6::1
leapfile"/var/db/ntpd.leap-seconds.list"
interfaceignorewildcard
interfacelisten172.16.3.1
interfacelisten10.105.28.1
重启ntpd
在FreeBSDUnix之上重新加载/重启ntpd:
$sudo/etc/rc.d/ntpdrestart
或者在Debian和UbuntuLinux之上使用下面的命令:
$sudosystemctlrestartntp
或者在CentOS/RHEL7/FedoraLinux之上使用下面的命令:
$sudosystemctlrestartntpd
校验
使用netstat和ss命令来检查ntpd只绑定到了特定的IP地址:
$netstat-tulpn|grep:123
或是:
$ss-tulpn|grep:123
样例输出:
udp0010.105.28.1:1230.0.0.0:*-
udp00172.16.3.1:1230.0.0.0:*-
在FreeBSDUnix服务器上使用sockstat命令:
$sudosockstat
$sudosockstat-4
$sudosockstat-4|grep:123
样例输出:
rootntpd5991422udp4127.0.0.1:123*:*
rootntpd5991424udp4127.0.1.1:123*:*