# 15.2 NTP 服務器的安裝與設定
## 15.2 NTP 服務器的安裝與設定
NTP 服務器也是一個很容易就可以架設成功的玩意兒,不過這個軟件在不同的 distribution 上面可能有不一樣的名稱, 你要作的其實就是將他安裝起來之后,規定一部上層 NTP 服務器來同步化你的時間即可啊! 如果你只是想要進行你自己單部主機的時間同步化,別架設 NTP ,直接使用 NTP 客戶端軟件即可喔!
- - - - - -
### 15.2.1 所需軟件與軟件結構
在 CentOS 6.x 上頭,你所需要的軟件其實僅有 ntp 這個玩意兒而已,請自行使用 rpm 去找找看,若沒有安裝,請利用 yum install ntp 即可啊!不過,我們還需要時區相關的數據文件,所以你需要的軟件有:
- ntp: 就是 NTP 服務器的主要軟件啦,包括配置文件以及執行檔等等。
- tzdata: 軟件名稱為『 Time Zone data 』的縮寫,提供各時區對應的顯示格式。
與時間及 NTP 服務器設定相關的配置文件與重要數據文件有底下幾個:
- /etc/ntp.conf: 就是 NTP 服務器的主要配置文件,也是唯一的一個;
- /usr/share/zoneinfo/: 由 tzdata 所提供,為各時區的時間格式對應檔。 例如臺灣地區的時區格式對應檔案在 /usr/share/zoneinfo/Asia/Taipei 就是了!這個目錄里面的檔案與底下要談的兩個檔案 (clock 與 localtime) 是有關系的喔!
- /etc/sysconfig/clock: 設定時區與是否使用 UTC 時間鐘的配置文件。 每次開機后 Linux 會自動的讀取這個檔案來設定自己系統所默認要顯示的時間說!舉個例子來說, 在我們臺灣地區的本地時間設定中,這個檔案內應該會出現一行『ZONE="Asia/Taipei"』的字樣, 這表示我們的時間配置文件案『要取用 /usr/share/zoneinfo/Asia/Taipei 那個檔案』的意思!
- /etc/localtime: 這個檔案就是『本地端的時間配置文件』啦!剛剛那個 clock 檔案里面規定了使用的時間配置文件 (ZONE) 為 /usr/share/zoneinfo/Asia/Taipei ,所以說這就是本地端的時間了,此時 Linux 系統就會將 Taipei 那個檔案復制一份成為 /etc/localtime ,所以未來我們的時間顯示就會以 Taipei 那個時間配置文件案為準。
至于在常用于時間服務器與修改時間的指令方面,主要有底下這幾個啦:
- /bin/date: 用于 Linux 時間 (軟件時鐘) 的修改與顯示的指令;
- /sbin/hwclock: 用于 BIOS 時鐘 (硬件時鐘) 的修改與顯示的指令。 這是一個 root 才能執行的指令,因為 Linux 系統上面 BIOS 時間與 Linux 系統時間是分開的,所以使用 date 這個指令調整了時間之后,還需要使用 hwclock 才能將修改過后的時間寫入 BIOS 當中!
- /usr/sbin/ntpd: 主要提供 NTP 服務的程序啰!配置文件為 /etc/ntp.conf
- /usr/sbin/ntpdate: 用于客戶端的時間校正,如果你沒有要啟用 NTP 而僅想要使用 NTP Client 功能的話,那么只會用到這個指令而已啦!
例題:假設你的筆記本電腦安裝 CentOS 這套系統,而且選擇的時區為臺灣。現在,你將有一個月的時間要出差到美國的紐約去, 你會帶著這個筆電,那么到了美國之后,時間會不一致啊!你該如何手動的調整時間參數呢?答:因為時區數據文件在 /usr/share/zoneinfo 內,在該目錄內會找到 /usr/share/zoneinfo/America/New\_York 這個時區檔。 而時區配置文件在 /etc/sysconfig/clock ,且目前的時間格式在 /etc/localtime ,所以你應該這樣做:
```
[root@www ~]# date
Thu Jul 28 15:08:39 CST 2011 <==重點是 CST 這個時區喔!
[root@www ~]# vim /etc/sysconfig/clock
ZONE="America/New_York" <==改的是這里啦!
[root@www ~]# cp /usr/share/zoneinfo/America/New_York /etc/localtime
[root@www ~]# date
Thu Jul 28 03:09:21 EDT 2011 <==時區與時間都改變了!
```
這個范例做完之后,記得將這兩個檔案改回來!不然以后你的時間都是美國時間啦!
接下來,我們先來談一談如何設計那個 /etc/ntp.conf 吧!
- - - - - -
### 15.2.2 主要配置文件 ntp.conf 的處理
由于 NTP 服務器的設定需要有上游服務器的支持才行,因此請回頭參考一下 [15.1.4](#theory_NTP) 及 [15.1.5](#theory_stratum) 的介紹,這樣才能夠理解為何底下的設定是這樣呦!好了,我假設俺的 NTP 服務器所需要設定的架構如下:
- 我的上層 NTP 服務器共有 tock.stdtime.gov.tw, tick.stdtime.gov.tw, time.stdtime.gov.tw 三部,其中以 tock.stdtime.gov.tw 最優先使用 (prefer);
- 不對 Internet 提供服務,僅允許來自內部網域 192.168.100.0/24 的查詢而已;
- 偵測一些 BIOS 時鐘與 Linux 系統時間的差異并寫入 /var/lib/ntp/drift 檔案當中。
好了,先讓我們談一談如何在 ntp.conf 里面設定權限控制吧!
- 利用 restrict 來管理權限控制
在 ntp.conf 檔案內可以利用『 restrict 』來控管權限,這個參數的設定方式為:
```
restrict [你的IP] mask [netmask_IP] [parameter]
```
其中 parameter 的參數主要有底下這些:
- ignore: 拒絕所有類型的 NTP 聯機;
- nomodify: 客戶端不能使用 ntpc 與 ntpq 這兩支程序來修改服務器的時間參數, 但客戶端仍可透過這部主機來進行網絡校時的;
- noquery: 客戶端不能夠使用 ntpq, ntpc 等指令來查詢時間服務器,等于不提供 NTP 的網絡校時啰;
- notrap: 不提供 trap 這個遠程事件登錄 (remote event logging) 的功能。
- notrust: 拒絕沒有認證的客戶端。
那如果你沒有在 parameter 的地方加上任何參數的話,這表示『該 IP 或網段不受任何限制』的意思喔!一般來說,我們可以先關閉 NTP 的權限,然后再一個一個的啟用允許登入的網段。
- 利用 server 設定上層 NTP 服務器
上層 NTP 服務器的設定方式為:
```
server [IP or hostname] [prefer]
```
在 server 后端可以接 IP 或主機名,鳥哥個人比較喜歡使用 IP 來設定說!至于那個 perfer 表示『優先使用』的服務器啰~有夠簡單吧!
- 以 driftfile 記錄時間差異
設定的方式如下:
```
driftfile [可以被 ntpd 寫入的目錄與檔案]
```
因為預設的 NTP Server 本身的時間計算是依據 BIOS 的芯片震蕩周期頻率來計算的,但是這個數值與上層 Time Server 不見得會一致啊!所以 NTP 這個 daemon (ntpd) 會自動的去計算我們自己主機的頻率與上層 Time server 的頻率,并且將兩個頻率的誤差記錄下來,記錄下來的檔案就是在 driftfile 后面接的完整檔名當中了!關于檔名你必須要知道:
- driftfile 后面接的檔案需要使用完整路徑文件名;
- 該檔案不能是連結檔;
- 該檔案需要設定成 ntpd 這個 daemon 可以寫入的權限。
- 該檔案所記錄的數值單位為:百萬分之一秒 (ppm)。
driftfile 后面接的檔案會被 ntpd 自動更新,所以他的權限一定要能夠讓 ntpd 寫入才行。在 CentOS 6.x 預設的 NTP 服務器中,使用的 ntpd 的 owner 是 ntp ,這部份可以查閱 /etc/sysconfig/ntpd 就可以知道啦!
- keys \[key\_file\]
除了以 restrict 來限制客戶端的聯機之外,我們也可以透過密鑰系統來給客戶端認證, 如此一來可以讓主機端更放心了。不過在這個章節里面我們暫不討論這個部分,有興趣的朋友可以參考 ntp-keygen 這個指令的相關說明喔!
- - - - - -
根據上面的說明,我們最終可以取得這樣的配置文件案內容喔 (底下僅修改部分數據,保留大部分的設定值喔)!
```
[root@www ~]# vim /etc/ntp.conf
# 1\. 先處理權限方面的問題,包括放行上層服務器以及開放區網用戶來源:
restrict default kod nomodify notrap nopeer noquery <==拒絕 IPv4 的用戶
restrict -6 default kod nomodify notrap nopeer noquery <==拒絕 IPv6 的用戶
restrict 220.130.158.71 <==放行 tock.stdtime.gov.tw 進入本 NTP 服務器
restrict 59.124.196.83 <==放行 tick.stdtime.gov.tw 進入本 NTP 服務器
restrict 59.124.196.84 <==放行 time.stdtime.gov.tw 進入本 NTP 服務器
restrict 127.0.0.1 <==底下兩個是默認值,放行本機來源
restrict -6 ::1
restrict 192.168.100.0 mask 255.255.255.0 nomodify <==放行區網來源
# 2\. 設定主機來源,請先將原本的 [0|1|2].centos.pool.ntp.org 的設定批注掉:
server 220.130.158.71 prefer <==以這部主機為最優先
server 59.124.196.83
server 59.124.196.84
# 3.預設時間差異分析檔案與暫不用到的 keys 等,不需要更動它:
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys
```
這樣就設定妥當了,準備來啟動 NTP 服務吧!
- - - - - -
### 15.2.3 NTP 的啟動與觀察
設定完 ntp.conf 之后就可以啟動 ntp 服務器了。啟動與觀察的方式如下:
```
# 1\. 啟動 NTP
[root@www ~]# /etc/init.d/ntpd start
[root@www ~]# chkconfig ntpd on
[root@www ~]# tail /var/log/messages <==自行檢查看看有無錯誤
# 2\. 觀察啟動的埠口看看:
[root@www ~]# netstat -tlunp | grep ntp
Proto Recv-Q Send-Q Local Address Foreign Address PID/Program name
udp 0 0 192.168.100.254:123 0.0.0.0:* 3492/ntpd
udp 0 0 192.168.1.100:123 0.0.0.0:* 3492/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 3492/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 3492/ntpd
udp 0 0 ::1:123 :::* 3492/ntpd
udp 0 0 :::123 :::* 3492/ntpd
# 主要是 UDP 封包,且在 port 123 這個埠口的啦!
```
這樣就表示我們的 NTP 服務器已經啟動了,不過要與上層 NTP 服務器聯機則還需要一些時間, 通常啟動 NTP 后約在 15 分鐘內才會和上層 NTP 服務器順利連接上。 那要如何確認我們的 NTP 服務器有順利的更新自己的時間呢?你可以使用底下幾個指令來查閱喔 (請自行等待數分鐘后再以下列指令查閱):
```
[root@www ~]# ntpstat
synchronised to NTP server (220.130.158.71) at stratum 3
time correct to within 538 ms
polling server every 128 s
```
這個指令可以列出我們的 NTP 服務器有跟上層聯機否。由上述的輸出結果可以知道,時間有校正約 538 \* 10^(-3) 秒,且每隔 64 秒會主動去更新時間喔!
```
[root@www ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*tock.stdtime.go 59.124.196.87 2 u 19 128 377 12.092 -0.953 0.942
+59-124-196-83.H 59.124.196.86 2 u 8 128 377 14.154 7.616 1.533
+59-124-196-84.H 59.124.196.86 2 u 2 128 377 14.524 4.354 1.079
```
這個 ntpq -p 可以列出目前我們的 NTP 與相關的上層 NTP 的狀態,上頭的幾個字段的意義為:
- remote:亦即是 NTP 主機的 IP 或主機名啰~注意最左邊的符號
- 如果有『 \* 』代表目前正在作用當中的上層 NTP
- 如果是『 + 』代表也有連上線,而且可作為下一個提供時間更新的候選者。
- refid:參考的上一層 NTP 主機的地址
- st:就是 stratum 階層啰!
- when:幾秒鐘前曾經做過時間同步化更新的動作;
- poll:下一次更新在幾秒鐘之后;
- reach:已經向上層 NTP 服務器要求更新的次數
- delay:網絡傳輸過程當中延遲的時間,單位為 10^(-6) 秒
- offset:時間補償的結果,單位與 10^(-3) 秒
- jitter:Linux 系統時間與 BIOS 硬件時間的差異時間, 單位為 10^(-6) 秒。
事實上這個輸出的結果告訴我們,時間真的很準了啦!因為差異都在 0.001 秒以內, 可以符合我們的一般使用了。另外,你也可以檢查一下你的 BIOS 時間與 Linux 系統時間的差異, 就是 /var/lib/ntp/drift 這個檔案的內容,就能了解到咱們的 Linux 系統時間與 BIOS 硬件時鐘到底差多久?單位為 10^(-6) 秒啦!
要讓你的 NTP Server/Client 真的能運作,在上述的動作中得注意:
- 上述的 ntpstat 以及 ntpq -p 的輸出結果中,你的 NTP 服務器真的要能夠連結上層 NTP 才行喔! 否則你的客戶端將無法對你的 NTP 服務器進行同步更新的!重要重要!
- 你的 NTP 服務器時間不可與上層差異太多。舉例來說,鳥哥測試 NTP 服務器約在 2011/7/28 下午, 如果我的服務器時間原本是錯誤的 2010/7/28,足足差了一年,那么上層服務器恐怕就不會將正確的時間傳給我! 這時就會造成困擾了!
- 服務器防火墻在 UDP port 123 有沒有開啊?要特別注意的呢!
- 等待的時間夠不夠長?鳥哥設定 NTP 等過最久的時間大約是一小時!你有等這么久過否?
- - \*
### 15.2.4 安全性設定
NTP 服務器在安全的相關性方面,其實剛剛我們在 /etc/ntp.conf 里面的 restrict 參數中就已經設定了 NTP 這個 daemon 的服務限制范圍了!不過,在防火墻 iptables 的部分,還是需要開啟聯機監聽的啦!所以,在你的 iptables 規則的 scripts 當中,需要加入這一段 (我是以開放 192.168.100.0/24 這個網域作為范例的!)
```
[root@www ~]# vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -p udp -s 192.168.100.0/24 --dport 123 -j ACCEPT
[root@www ~]# /usr/local/virus/iptables/iptables.rule
```
若還要開放其他的網段或者客戶端主機,請自行修改 /etc/ntpd.conf 以及你的防火墻機制咯!
- - - - - -
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀