天天看點

nts協定簡析NTS協定簡析

NTS協定簡析

目前網際網路中ntp是仍在使用不安全的網際網路協定之一。後來Cloudflare釋出了NTS協定,去保證NTP的安全。

NTP傳統請求過程

  1. 用戶端向NTP伺服器發送查詢包
  2. 伺服器用時鐘時間進行響應
  3. 用戶端計算其時鐘和遠端時鐘之間的內插補點得到估計值,并試圖補償其中的網絡延遲

注意:NTP 用戶端會查詢多個伺服器并實施算法來選擇最佳估計值,并拒絕明顯錯誤的答案。

NTS連接配接過程

  • 協商在第二階段使用的 AEAD 算法;
  • 協商第二個協定(目前,标準隻定義了 NTS 如何與 NTPv4 協作);
  • 協商 NTP 伺服器的 IP 位址和端口;
  • 建立第二階段使用的 cookie;
  • 從 TLS 會話建立兩個對稱秘鑰(C2S 和 S2C)。

支援NTS協定的伺服器

目前支援NTS的公共伺服器非常少,主要的提供商有Cloudflare和Netnod

如何使用NTS

ntpclient現在有兩個版本,一個是python版本,一個是go版本,另外則是chrony已經有分支支援nts。fedora從33版本已經開始支援NTS了。

條件

系統僅支援Debian 9 (Stretch), Debian 10 (Buster), Ubuntu 16.04 LTS (Xenial Xerus) , Ubuntu 18.04 LTS (Bionic Beaver).

編譯ntsclient

拉取庫

git clone https://gitlab.com/hacklunch/ntsclient; cd ntsclient; make           

假如不想ntsclient以root使用者運作

sudo setcap CAP_SYS_TIME+ep ./ntsclient           

執行

./ntsclient --config ntsclient.toml           

編譯NTPsec

拉取庫,使用./buildprep安裝建構需要的包

git clone https://gitlab.com/NTPsec/ntpsec.git; cd ntpsec;sudo ./buildprep           

建構完成後,可以用waf建構NTPsec

./waf configure
./waf build           

設定配置檔案,建立ntp.conf

# Exchange time with everybody, but don't allow configuration.
# This is the right security setup for 99% of deployments.
restrict default kod limited nomodify nopeer noquery
restrict -6 default kod limited nomodify nopeer noquery

# Local users may interrogate the NTP server more closely.
restrict 127.0.0.1
restrict -6 ::1

# Minimal logging - we declare a drift file and that's it.
driftfile /var/lib/ntp/ntp.drift

 server nts.netnod.se:4460 nts iburst
 server sth1.nts.netnod.se:4460 nts iburst
 server sth2.nts.netnod.se:4460 nts iburst           

開始測試,測試前需要暫停ntp,chrony,openntpd

sudo service ntp stop
sudo service chrony stop
sudo service openntpd stop           

開啟啟動NTPsec伺服器

sudo ./build/main/ntpd/ntpd -n -d -c ntp.conf           

參考連結

繼續閱讀