
就像現(xiàn)實(shí)生活中任何一件事情一樣,即便是像時(shí)間服務(wù)器這樣的公益項(xiàng)目,也會(huì)遭受不稱職的或者惡意的濫用。
消費(fèi)類網(wǎng)絡(luò)設(shè)備的供應(yīng)商因制造了大混亂而臭名昭著。我回想起的第一件事發(fā)生在 2003 年,那時(shí),NetGear 在它們的路由器中硬編碼了威斯康星大學(xué)的 NTP 時(shí)間服務(wù)器地址。使得時(shí)間服務(wù)器的查詢請(qǐng)求突然增加,隨著 NetGear 賣出越來(lái)越多的路由器,這種情況越發(fā)嚴(yán)重。更有意思的是,路由器的程序設(shè)置是每秒鐘發(fā)送一次請(qǐng)求,這將使服務(wù)器難堪重負(fù)。后來(lái) Netgear 發(fā)布了升級(jí)固件,但是,升級(jí)他們的設(shè)備的用戶很少,并且他們的其中一些用戶的設(shè)備,到今天為止,還在不停地每秒鐘查詢一次威斯康星大學(xué)的 NTP 服務(wù)器。Netgear 給威斯康星大學(xué)捐獻(xiàn)了一些錢,以幫助彌補(bǔ)他們帶來(lái)的成本增加,直到這些路由器全部淘汰。類似的事件還有 D-Link、Snapchat、TP-Link 等等。
對(duì) NTP 協(xié)議進(jìn)行反射和放大,已經(jīng)成為發(fā)起 DDOS 攻擊的一個(gè)選擇。當(dāng)攻擊者使用一個(gè)偽造的目標(biāo)受害者的源地址向時(shí)間服務(wù)器發(fā)送請(qǐng)求,稱為反射攻擊;攻擊者發(fā)送請(qǐng)求到多個(gè)服務(wù)器,這些服務(wù)器將回復(fù)請(qǐng)求,這樣就使偽造的源地址受到轟炸。放大攻擊是指一個(gè)很小的請(qǐng)求收到大量的回復(fù)信息。例如,在 Linux 上,ntpq 命令是一個(gè)查詢你的 NTP 服務(wù)器并驗(yàn)證它們的系統(tǒng)時(shí)間是否正確的很有用的工具。一些回復(fù),比如,對(duì)端列表,是非常大的。組合使用反射和放大,攻擊者可以將 10 倍甚至更多帶寬的數(shù)據(jù)量發(fā)送到被攻擊者。
那么,如何保護(hù)提供公益服務(wù)的公共 NTP 服務(wù)器呢?從使用 NTP 4.2.7p26 或者更新的版本開(kāi)始,它們可以幫助你的 Linux 發(fā)行版不會(huì)發(fā)生前面所說(shuō)的這種問(wèn)題,因?yàn)樗鼈兌际窃?2010 年以后發(fā)布的。這個(gè)發(fā)行版都默認(rèn)禁用了最常見(jiàn)的濫用攻擊。目前,最新版本是 4.2.8p10,它發(fā)布于 2017 年。
你可以采用的另一個(gè)措施是,在你的網(wǎng)絡(luò)上啟用入站和出站過(guò)濾器。阻塞宣稱來(lái)自你的網(wǎng)絡(luò)的數(shù)據(jù)包進(jìn)入你的網(wǎng)絡(luò),以及攔截發(fā)送到偽造返回地址的出站數(shù)據(jù)包。入站過(guò)濾器可以幫助你,而出站過(guò)濾器則幫助你和其他人。閱讀 BCP38.info 了解更多信息。
NTP 有超過(guò) 30 年的歷史了,它是至今還在使用的最老的因特網(wǎng)協(xié)議之一。它的用途是保持計(jì)算機(jī)與世界標(biāo)準(zhǔn)時(shí)間(UTC)的同步。NTP 網(wǎng)絡(luò)是分層組織的,并且同層的設(shè)備是對(duì)等的。層次Stratum 0 包含主報(bào)時(shí)設(shè)備,比如,原子鐘。層級(jí) 1 的時(shí)間服務(wù)器與層級(jí) 0 的設(shè)備同步。層級(jí) 2 的設(shè)備與層級(jí) 1 的設(shè)備同步,層級(jí) 3 的設(shè)備與層級(jí) 2 的設(shè)備同步。NTP 協(xié)議支持 16 個(gè)層級(jí),現(xiàn)實(shí)中并沒(méi)有使用那么多的層級(jí)。同一個(gè)層級(jí)的服務(wù)器是相互對(duì)等的。
過(guò)去很長(zhǎng)一段時(shí)間內(nèi),我們都為客戶端選擇配置單一的 NTP 服務(wù)器,而現(xiàn)在更好的做法是使用 NTP 服務(wù)器地址池,它使用輪詢的 DNS 信息去共享負(fù)載。池地址只是為客戶端服務(wù)的,比如單一的 PC 和你的本地局域網(wǎng) NTP 服務(wù)器。當(dāng)你運(yùn)行一臺(tái)自己的公共服務(wù)器時(shí),你不用使用這些池地址。
公共 NTP 服務(wù)器配置
運(yùn)行一臺(tái)公共 NTP 服務(wù)器只有兩步:設(shè)置你的服務(wù)器,然后申請(qǐng)加入到 NTP 服務(wù)器池。運(yùn)行一臺(tái)公共的 NTP 服務(wù)器是一種很高尚的行為,但是你得先知道這意味著什么。加入 NTP 服務(wù)器池是一種長(zhǎng)期責(zé)任,因?yàn)榧词鼓慵尤敕?wù)器池后,運(yùn)行了很短的時(shí)間馬上退出,然后接下來(lái)的很多年你仍然會(huì)接收到請(qǐng)求。
你需要一個(gè)靜態(tài)的公共 IP 地址,一個(gè)至少 512Kb/s 帶寬的、可靠的、持久的因特網(wǎng)連接。NTP 使用的是 udp 的 123 端口。它對(duì)機(jī)器本身要求并不高,很多管理員在其它的面向公共的服務(wù)器(比如,Web 服務(wù)器)上順帶架設(shè)了 NTP 服務(wù)。
配置一臺(tái)公共的 NTP 服務(wù)器與配置一臺(tái)用于局域網(wǎng)的 NTP 服務(wù)器是一樣的,只需要幾個(gè)配置。我們從閱讀 協(xié)議規(guī)則 開(kāi)始。遵守規(guī)則并注意你的行為;幾乎每個(gè)時(shí)間服務(wù)器的維護(hù)者都是像你這樣的志愿者。然后,從 StratumTwoTimeServers 中選擇 4 到 7 個(gè)層級(jí) 2 的上游服務(wù)器。選擇的時(shí)候,選取地理位置上靠近(小于 300 英里的)你的因特網(wǎng)服務(wù)提供商的上游服務(wù)器,閱讀他們的訪問(wèn)規(guī)則,然后,使用 ping和 mtr去找到延遲和跳數(shù)最小的服務(wù)器。
以下的 /etc/ntp.conf配置示例文件,包括了 IPv4 和 IPv6,以及基本的安全防護(hù):
复制代码
- # stratum 2 server list server servername_1 iburst server servername_2 iburst server servername_3 iburst server servername_4 iburst server servername_5 iburst # access restrictions restrict -4default kod noquery nomodify notrap nopeer limited restrict -6default kod noquery nomodify notrap nopeer limited #Allow ntpq and ntpdc queries only from localhost restrict 127.0.0.1 restrict ::1
啟動(dòng)你的 NTP 服務(wù)器,讓它運(yùn)行幾分鐘,然后測(cè)試它對(duì)遠(yuǎn)程服務(wù)器的查詢:
复制代码
- $ ntpq -p remote refid st t when poll reach delay offset jitter ================================================================= +tock.no-such-ag 200.98.196.2122 u 3664798.65488.43965.123 +PBX.cytranet.ne 45.33.84.2083 u 3764772.419113.535129.313 *eterna.binary.n 199.102.46.702 u 3964792.93398.47556.778 +time.mclarkdev.132.236.56.2503 u 37645111.05988.02974.919
目前表現(xiàn)很好。現(xiàn)在從另一臺(tái) PC 上使用你的 NTP 服務(wù)器名字進(jìn)行測(cè)試。以下的示例是一個(gè)正確的輸出。如果有不正確的地方,你將看到一些錯(cuò)誤信息。
复制代码
- $ ntpdate -q yourservername server 66.96.99.10, stratum 2, offset 0.017690, delay 0.12794 server 98.191.213.2, stratum 1, offset 0.014798, delay 0.22887 server 173.49.198.27, stratum 2, offset 0.020665, delay 0.15012 server 129.6.15.28, stratum 1, offset -0.018846, delay 0.20966 26Jan11:13:54 ntpdate[17293]: adjust time server 98.191.213.2 offset 0.014798 sec
一旦你的服務(wù)器運(yùn)行的很好,你就可以向 manage.ntppool.org 申請(qǐng)加入池中。
查看官方的手冊(cè) 分布式網(wǎng)絡(luò)時(shí)間服務(wù)器(NTP) 學(xué)習(xí)所有的命令、配置選項(xiàng)、以及高級(jí)特性,比如,管理、查詢、和驗(yàn)證。訪問(wèn)以下的站點(diǎn)學(xué)習(xí)關(guān)于運(yùn)行一臺(tái)時(shí)間服務(wù)器所需要的一切東西。