歡迎光臨
每天分享高質量文章

如何在 Linux 上執行你自己的公共時間伺服器 | Linux 中國

大多數公共時間伺服器都是由志願者管理,以滿足不斷增長的需求。這裡學習一下如何執行你自己的時間伺服器,為基礎公共利益做貢獻。
— Carla Schroder


致謝
編譯自 | https://www.linux.com/learn/intro-to-linux/2018/2/how-run-your-own-public-time-server-linux 
 作者 | Carla Schroder
 譯者 | qhwdw ? ? ? ? ? 共計翻譯:100 篇 貢獻時間:140 天

最重要的公共服務之一就是報時timekeeping,但是很多人並沒有意識到這一點。大多數公共時間伺服器都是由志願者管理,以滿足不斷增長的需求。這裡學習一下如何執行你自己的時間伺服器,為基礎公共利益做貢獻。(檢視 在 Linux 上使用 NTP 保持精確時間[1] 去學習如何設定一臺區域網時間伺服器)

著名的時間伺服器濫用事件

就像現實生活中任何一件事情一樣,即便是像時間伺服器這樣的公益專案,也會遭受不稱職的或者惡意的濫用。

消費類網路裝置的供應商因製造了大混亂而臭名昭著。我回想起的第一件事發生在 2003 年,那時,NetGear 在它們的路由器中硬編碼了威斯康星大學的 NTP 時間伺服器地址。使得時間伺服器的查詢請求突然增加,隨著 NetGear 賣出越來越多的路由器,這種情況越發嚴重。更有意思的是,路由器的程式設定是每秒鐘傳送一次請求,這將使伺服器難堪重負。後來 Netgear 釋出了升級韌體,但是,升級他們的裝置的使用者很少,並且他們的其中一些使用者的裝置,到今天為止,還在不停地每秒鐘查詢一次威斯康星大學的 NTP 伺服器。Netgear 給威斯康星大學捐獻了一些錢,以幫助彌補他們帶來的成本增加,直到這些路由器全部淘汰。類似的事件還有 D-Link、Snapchat、TP-Link 等等。

對 NTP 協議進行反射和放大,已經成為發起 DDoS 攻擊的一個選擇。當攻擊者使用一個偽造的標的受害者的源地址向時間伺服器傳送請求,稱為反射攻擊;攻擊者傳送請求到多個伺服器,這些伺服器將回覆請求,這樣就使偽造的源地址受到轟炸。放大攻擊是指一個很小的請求收到大量的回覆資訊。例如,在 Linux 上,ntpq 命令是一個查詢你的 NTP 伺服器並驗證它們的系統時間是否正確的很有用的工具。一些回覆,比如,對端串列,是非常大的。組合使用反射和放大,攻擊者可以將 10 倍甚至更多頻寬的資料量傳送到被攻擊者。

那麼,如何保護提供公益服務的公共 NTP 伺服器呢?從使用 NTP 4.2.7p26 或者更新的版本開始,它們可以幫助你的 Linux 發行版不會發生前面所說的這種問題,因為它們都是在 2010 年以後釋出的。這個發行版都預設禁用了最常見的濫用攻擊。目前,最新版本是 4.2.8p10[2],它釋出於 2017 年。

你可以採用的另一個措施是,在你的網路上啟用入站和出站過濾器。阻塞宣稱來自你的網路的資料包進入你的網路,以及攔截傳送到偽造傳回地址的出站資料包。入站過濾器可以幫助你,而出站過濾器則幫助你和其他人。閱讀 BCP38.info[3] 瞭解更多資訊。

層級為 0、1、2 的時間伺服器

NTP 有超過 30 年的歷史了,它是至今還在使用的最老的因特網協議之一。它的用途是保持計算機與世界標準時間(UTC)的同步。NTP 網路是分層組織的,並且同層的裝置是對等的。層次Stratum 0 包含主報時裝置,比如,原子鐘。層級 1 的時間伺服器與層級 0 的裝置同步。層級 2 的裝置與層級 1 的裝置同步,層級 3 的裝置與層級 2 的裝置同步。NTP 協議支援 16 個層級,現實中並沒有使用那麼多的層級。同一個層級的伺服器是相互對等的。

過去很長一段時間內,我們都為客戶端選擇配置單一的 NTP 伺服器,而現在更好的做法是使用 NTP 伺服器地址池[4],它使用輪詢的 DNS 資訊去共享負載。池地址只是為客戶端服務的,比如單一的 PC 和你的本地區域網 NTP 伺服器。當你執行一臺自己的公共伺服器時,你不用使用這些池地址。

公共 NTP 伺服器配置

執行一臺公共 NTP 伺服器只有兩步:設定你的伺服器,然後申請加入到 NTP 伺服器池。執行一臺公共的 NTP 伺服器是一種很高尚的行為,但是你得先知道這意味著什麼。加入 NTP 伺服器池是一種長期責任,因為即使你加入伺服器池後,運行了很短的時間馬上退出,然後接下來的很多年你仍然會接收到請求。

你需要一個靜態的公共 IP 地址,一個至少 512Kb/s 頻寬的、可靠的、持久的因特網連線。NTP 使用的是 UDP 的 123 埠。它對機器本身要求並不高,很多管理員在其它的面向公共的伺服器(比如,Web 伺服器)上順帶架設了 NTP 服務。

配置一臺公共的 NTP 伺服器與配置一臺用於區域網的 NTP 伺服器是一樣的,只需要幾個配置。我們從閱讀 協議規則[5] 開始。遵守規則並註意你的行為;幾乎每個時間伺服器的維護者都是像你這樣的志願者。然後,從 StratumTwoTimeServers[6] 中選擇 4 到 7 個層級 2 的上游伺服器。選擇的時候,選取地理位置上靠近(小於 300 英里的)你的因特網服務提供商的上游伺服器,閱讀他們的訪問規則,然後,使用 ping 和 mtr 去找到延遲和跳數最小的伺服器。

以下的 /etc/ntp.conf 配置示例檔案,包括了 IPv4 和 IPv6,以及基本的安全防護:

  1. # stratum 2 server list

  2. server servername_1 iburst

  3. server servername_2 iburst

  4. server servername_3 iburst

  5. server servername_4 iburst

  6. server servername_5 iburst

  7. # access restrictions

  8. restrict -4 default kod noquery nomodify notrap nopeer limited

  9. restrict -6 default kod noquery nomodify notrap nopeer limited

  10. # Allow ntpq and ntpdc queries only from localhost

  11. restrict 127.0.0.1

  12. restrict ::1

啟動你的 NTP 伺服器,讓它執行幾分鐘,然後測試它對遠端伺服器的查詢:

  1. $ ntpq -p

  2. remote refid st t when poll reach delay offset jitter

  3. =================================================================

  4. +tock.no-such-ag 200.98.196.212 2 u 36 64 7 98.654 88.439 65.123

  5. +PBX.cytranet.ne 45.33.84.208 3 u 37 64 7 72.419 113.535 129.313

  6. *eterna.binary.n 199.102.46.70 2 u 39 64 7 92.933 98.475 56.778

  7. +time.mclarkdev. 132.236.56.250 3 u 37 64 5 111.059 88.029 74.919

目前表現很好。現在從另一臺 PC 上使用你的 NTP 伺服器名字進行測試。以下的示例是一個正確的輸出。如果有不正確的地方,你將看到一些錯誤資訊。

  1. $ ntpdate -q yourservername

  2. server 66.96.99.10, stratum 2, offset 0.017690, delay 0.12794

  3. server 98.191.213.2, stratum 1, offset 0.014798, delay 0.22887

  4. server 173.49.198.27, stratum 2, offset 0.020665, delay 0.15012

  5. server 129.6.15.28, stratum 1, offset -0.018846, delay 0.20966

  6. 26 Jan 11:13:54 ntpdate[17293]: adjust time server 98.191.213.2 offset 0.014798 sec

一旦你的伺服器執行的很好,你就可以向 manage.ntppool.org[7] 申請加入池中。

檢視官方的手冊 分散式網路時間伺服器(NTP)[8] 學習所有的命令、配置選項、以及高階特性,比如,管理、查詢、和驗證。訪問以下的站點學習關於執行一臺時間伺服器所需要的一切東西。

透過來自 Linux 基金會和 edX 的免費課程 “Linux 入門”[9] 學習更多 Linux 的知識。


via: https://www.linux.com/learn/intro-to-linux/2018/2/how-run-your-own-public-time-server-linux

作者:CARLA SCHRODER[11] 譯者:qhwdw 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂

© 2022 知識星球   網站地圖