如何在 Linux/Unix 之上绑定 ntpd 到特定的 IP 地址
NTP 是网络时间协议的首字母简写，这是一个用来同步两台电脑之间时间的协议。ntpd 是一个操作系统守护进程，可以设置并且保证系统的时间与互联网标准时间服务器同步。
ntp
NTP 是网络时间协议的首字母简写，这是一个用来同步两台电脑之间时间的协议。ntpd 是一个操作系统守护进程，可以设置并且保证系统的时间与互联网标准时间服务器同步。
默认的情况下，我们的 ntpd/NTP 服务器会监听所有的端口或者 IP 地址，也就是：`0.0.0.0:123`。 怎么才可以在一个 Linux 或是 FreeBSD Unix 服务器上，确保只监听特定的 IP 地址，比如 `localhost` 或者是 `192.168.1.1:123` ？


NTP 是<ruby> 网络时间协议 <rt>  Network Time Protocol </rt></ruby>的首字母简写，这是一个用来同步两台电脑之间时间的协议。ntpd 是一个操作系统守护进程，可以设置并且保证系统的时间与互联网标准时间服务器同步。


![](/data/attachment/album/201802/16/205909z7iy3yhnfineelif.jpg)


NTP 使用 `/etc/directory` 之下的 `ntp.conf` 作为配置文件。


### /etc/ntp.conf 之中的端口指令


你可以通过设置端口命令来防止 ntpd 监听 `0.0.0.0:123`，语法如下：



```
interface listen IPv4|IPv6|all
interface ignore IPv4|IPv6|all
interface drop IPv4|IPv6|all

```

上面的配置可以使 `ntpd` 监听那个地址或者不出来任何请求而直接丢弃。`ignore` 会防止打开匹配的地址，`drop` 会导致 ntpd 打开该地址并丢弃所有接收到的包，而不做任何检查。举个例子，如果要忽略所有端口之上的监听，加入下面的语句到 `/etc/ntp.conf`：



```
interface ignore wildcard

```

如果只监听 127.0.0.1 和 192.168.1.1 则是这样：



```
interface listen 127.0.0.1
interface listen 192.168.1.1

```

这是我 FreeBSD 云服务器上的样例 `/etc/ntp.conf` 文件：



```
$ egrep -v '^#|$^' /etc/ntp.conf

```

样例输出为：



```
tos minclock 3 maxclock 6
pool 0.freebsd.pool.ntp.org iburst
restrict    default limited kod nomodify notrap noquery nopeer
restrict -6 default limited kod nomodify notrap noquery nopeer
restrict    source  limited kod nomodify notrap noquery
restrict 127.0.0.1
restrict -6 ::1
leapfile "/var/db/ntpd.leap-seconds.list"
interface ignore wildcard
interface listen 172.16.3.1
interface listen 10.105.28.1

```

### 重启 ntpd


在 FreeBSD Unix 之上重新加载/重启 ntpd：



```
$ sudo /etc/rc.d/ntpd restart

```

或者 [在 Debian 和 Ubuntu Linux 之上使用下面的命令](https://www.cyberciti.biz/faq/restarting-ntp-service-on-linux/)：



```
$ sudo systemctl restart ntp

```

或者 [在 CentOS/RHEL 7/Fedora Linux 之上使用下面的命令](https://www.cyberciti.biz/faq/restarting-ntp-service-on-linux/)：



```
$ sudo systemctl restart ntpd

```

### 校验


使用 `netstat` 和 `ss` 命令来检查 ntpd 只绑定到了特定的 IP 地址：



```
$ netstat -tulpn | grep :123

```

或是：



```
$ ss -tulpn | grep :123

```

样例输出：



```
udp        0      0 10.105.28.1:123         0.0.0.0:*                           -               
udp        0      0 172.16.3.1:123          0.0.0.0:*                           -

```

[在 FreeBSD Unix 服务器上使用 sockstat 命令](https://www.cyberciti.biz/faq/freebsd-unix-find-the-process-pid-listening-on-a-certain-port-commands/)：



```
$ sudo sockstat
$ sudo sockstat -4
$ sudo sockstat -4 | grep :123

```

样例输出：



```
root     ntpd       59914 22 udp4   127.0.0.1:123         *:*
root     ntpd       59914 24 udp4   127.0.1.1:123         *:*

```



---


作者是 nixCraft 的创始人并且是一位经验丰富的系统管理员、DevOps 工程师，也是一名 Linux 操作系统和 Unix shell 脚本的训练师。他为全球不同行业，包括 IT、教育业、安全防护、空间研究和非营利性组织的客户工作。关注他的 [Twitter](https://twitter.com/nixcraft), [Facebook](https://facebook.com/nixcraft), [Google+](https://plus.google.com/+CybercitiBiz)。




---


via: <https://www.cyberciti.biz/faq/how-to-bind-ntpd-to-specific-ip-addresses-on-linuxunix/>


作者：[Vivek Gite](https://www.cyberciti.biz) 译者：[Drshu](https://github.com/Drshu) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

