在本文中,我將在驗(yàn)證節(jié)點(diǎn)的安全性和可用性方面討論兩個(gè)主題。我知道,這里介紹的技巧僅僅涵蓋了POS驗(yàn)證節(jié)點(diǎn)的“安全性和可用性”冰山一角。不過(guò),我發(fā)現(xiàn)它們對(duì)于您的測(cè)試實(shí)例提供最小的安全性和可用性是有用的。
保護(hù)驗(yàn)證節(jié)點(diǎn)
在互聯(lián)網(wǎng)上公開(kāi)區(qū)塊鏈或加密服務(wù)會(huì)吸引攻擊者試圖攻擊您的系統(tǒng)。所以最好準(zhǔn)備好采取任何措施來(lái)降低被危害的風(fēng)險(xiǎn)。
在運(yùn)行我的polkadot驗(yàn)證節(jié)點(diǎn)時(shí),我觀察到大量的攻擊者試圖強(qiáng)行使用我的ssh密碼。
我做的第一件事就是安裝SSHGuard。那么什么是SSHGuard?正如Andrew Schartzmeyer在他的博客中所描述的那樣:
sshguard監(jiān)控服務(wù)器的日志記錄活動(dòng)。當(dāng)日志顯示有人在攻擊時(shí),sshguard會(huì)作出相應(yīng)防護(hù)措施阻止攻擊。
在我們的例子中,我們使用它來(lái)保護(hù)我們的SSH端口,安裝過(guò)程非常簡(jiǎn)單,默認(rèn)情況下,它將開(kāi)始檢查Ubuntu服務(wù)器上的/var/log/auth.log(其中記錄了SSH攻擊等) )。
在Ubuntu服務(wù)器上運(yùn)行以下命令以安裝SSHGuard,它將使用iptables作為系統(tǒng)防火墻。 iptables是一個(gè)用于配置和管理內(nèi)核netfilter模塊的程序。
apt-get update apt-get install -y sshguard
當(dāng)sshguard阻止任何惡意用戶(通過(guò)阻止其IP地址)時(shí),它將使用sshguard鏈。準(zhǔn)備好sshguard鏈并確保在檢測(cè)到新的傳入連接時(shí)也會(huì)觸發(fā)鏈,最后重新啟動(dòng)sshguard。
iptables -N sshguard
ip6tables -N sshguard
iptables -A INPUT -j sshguard
ip6tables -A INPUT -j
sshguard service sshguard restart
在下面的示例中,sshguard在4次登錄嘗試失敗后開(kāi)始阻止一次嘗試,如果攻擊者繼續(xù)攻擊,則會(huì)逐漸增加阻止時(shí)間。
要查看被阻止的IP地址,請(qǐng)運(yùn)行以下命令:
iptables -nvL sshguard
通過(guò)這個(gè)簡(jiǎn)單的設(shè)置,您可以確保您的明智的sshd端口受到保護(hù),以防愚蠢的攻擊者試圖侵入您的系統(tǒng)。
polkadot驗(yàn)證節(jié)點(diǎn)的進(jìn)入端口
哪個(gè)端口,是polkadot驗(yàn)證器所需要的。驗(yàn)證節(jié)點(diǎn)需要三個(gè)入站端口:
30333用于Peer2Peer協(xié)議的端口;
9933用于RPC;
9944用于WebSocket(WS)通信;
理想情況下,驗(yàn)證節(jié)點(diǎn)將只公開(kāi)這三個(gè)端口以及允許您登錄系統(tǒng)的sshd端口。
polkadot驗(yàn)證節(jié)點(diǎn)的出端口
關(guān)于保護(hù)以及驗(yàn)證程序的出站端口的一些想法。如security.stackexchange線程中所述
https://security.stackexchange.com/questions/24310/why-block-outgoing-network-traffic-with-a-firewall
進(jìn)入流量阻塞只能阻止未經(jīng)請(qǐng)求的流量到達(dá)您的內(nèi)部網(wǎng)絡(luò)。但是,如果您在內(nèi)部計(jì)算機(jī)上收到惡意軟件(通過(guò)運(yùn)行不受信任的可執(zhí)行文件或利用漏洞),您仍然會(huì)受到攻擊。
通過(guò)阻止惡意軟件連接到命令和控制服務(wù)器或清除數(shù)據(jù),阻止傳出流量有助于限制損壞。
因此,在生產(chǎn)驗(yàn)證程序節(jié)點(diǎn)中,這可能被認(rèn)為是至關(guān)重要的,但要注意:
在高度安全環(huán)境中,出站過(guò)濾的想法似乎是一個(gè)自然的過(guò)程。然而,這是一項(xiàng)非常龐大和復(fù)雜的事情。
為了說(shuō)明這一點(diǎn),我通過(guò)分析驗(yàn)證節(jié)點(diǎn)的通信模式運(yùn)行了一個(gè)快速練習(xí)。
為此,我使用了優(yōu)秀的工具Wire Shark。
“Wireshark是世界上最重要、應(yīng)用最廣泛的網(wǎng)絡(luò)協(xié)議分析儀。它可以讓您在微觀層面上了解您的網(wǎng)絡(luò)上發(fā)生了什么,并且是許多商業(yè)和非盈利企業(yè)、政府機(jī)構(gòu)和教育機(jī)構(gòu)的事實(shí)(通常是法律上的)標(biāo)準(zhǔn)。”
為了獲得WireShark的輸入文件,我必須在我的驗(yàn)證器節(jié)點(diǎn)上運(yùn)行tcpdump命令…
[email protected]:~# tcpdump -w dump.out -i venet0 -c 1000 -vvv
tcpdump: listening on venet0, link-type LINUX_SLL (Linux cooked),
capture size 262144 bytes 1000 packets captured 1125 packets
received by filter 0 packets dropped by kernel
并將其加載到Wire Shark中。 正如下面的截圖所示。 驗(yàn)證節(jié)點(diǎn)使用了大量的出站端口。
預(yù)計(jì)這將考慮到Validator將使用Peer2Peer通信方案,以便與其他網(wǎng)絡(luò)中的45個(gè)驗(yàn)證節(jié)點(diǎn)進(jìn)行通信。
為了保護(hù)出站端口,詳細(xì)了解底層P2P庫(kù)是如何工作的,這超出了本文的范圍(考慮保護(hù)測(cè)試節(jié)點(diǎn))。
不過(guò),值得一提的是,支付卡行業(yè)數(shù)據(jù)安全標(biāo)準(zhǔn)只是要求提供信用卡的組織(也是某種驗(yàn)證器)這樣做。
PCI DSS要求1.2.1的重點(diǎn)是組織制定政策和程序,將流量限制為業(yè)務(wù)目的的入站和出站絕對(duì)必要的流量。PCI要求1.2.1規(guī)定,“將入站和出站流量限制為持卡人數(shù)據(jù)環(huán)境所必需的流量,并明確拒絕所有其他流量。”PCI要求1.2.1的目標(biāo)是將流量限制為僅必要的、所需的協(xié)議、端口或服務(wù),并為所需的ELE提供商業(yè)理由。
那么在生產(chǎn)環(huán)境中運(yùn)行Polkadot Validator節(jié)點(diǎn)的最低要求是什么。
那么,讓我們切換到本文的第二個(gè)主題。
提高驗(yàn)證節(jié)點(diǎn)的可用性
我正在以7x24方式運(yùn)行Validator POC-2節(jié)點(diǎn),并試圖將削減(由于我的節(jié)點(diǎn)不可用)減少到最小。
盡管如此,該進(jìn)程不時(shí)會(huì)收到一個(gè)終止信號(hào),導(dǎo)致必須啟動(dòng)該進(jìn)程。
為了自動(dòng)執(zhí)行此任務(wù)并將削減概率降至最低,我編寫(xiě)了一個(gè)小的cron作業(yè)腳本,每分鐘執(zhí)行一次。
要觸發(fā)的腳本(monitorValidator.sh)將檢查是否沒(méi)有運(yùn)行polkadot進(jìn)程
#!/bin/bash
timestamp()
{
date +“%Y-%m-%d %T”
}
a=$(/bin/netstat -tulpn | awk ‘{print $7}’ | grep polkadot | wc -l )
if test $a = “0” then
echo “$(timestamp): Polkadot Validator Down” 》》 /var/log/run.log
/root/.cargo/bin/polkadot --name $POLKADOT_NAME_POC2 --validator
--key $POLKADOT_KEY_POC2 &》》 /var/log/run.log
fi
要安裝crontab,請(qǐng)執(zhí)行以下命令
(/usr/bin/crontab -l ; echo “ * * * * * bash -l -c
‘/root/monitorValidator.sh 》 /dev/null 2》&1’”) | /usr/bin/crontab
如果驗(yàn)證程序進(jìn)程仍在運(yùn)行,這將導(dǎo)致每60秒檢查一次,否則將重新啟動(dòng)。
在公開(kāi)報(bào)告中,為了協(xié)調(diào)在Web3空間中工作的團(tuán)隊(duì)的協(xié)作,一個(gè)問(wèn)題是“為polkadot創(chuàng)建和運(yùn)行節(jié)點(diǎn)集群服務(wù)”(https://github.com/w3f/web3 collaboration/issues/43),這將解決可用性問(wèn)題。
Cosmos比Polkadot更為成熟,它涉及一些主題,其中包括:
· 提供哨兵節(jié)點(diǎn)體系結(jié)構(gòu),這是一個(gè)基礎(chǔ)設(shè)施示例,用于緩解GAIA/COSMOS集線器網(wǎng)絡(luò)驗(yàn)證程序節(jié)點(diǎn)上的DDOS。
“為了緩解這個(gè)問(wèn)題,在云環(huán)境中部署了多個(gè)分布式節(jié)點(diǎn)(哨兵節(jié)點(diǎn))。由于易于擴(kuò)展,很難對(duì)驗(yàn)證程序節(jié)點(diǎn)產(chǎn)生影響。新的哨兵節(jié)點(diǎn)可以在DDOS攻擊期間出現(xiàn),并且可以使用八卦網(wǎng)絡(luò)將它們集成到事務(wù)流中。”
· Tendermint HSM密鑰管理系統(tǒng)(KMS)
“一種輕量級(jí)服務(wù),旨在與GAIAD服務(wù)(理想情況下在單獨(dú)的物理主機(jī)上)一起部署,它提供以下功能:
· 對(duì)驗(yàn)證程序簽名密鑰的高可用性訪問(wèn);
· 即使在驗(yàn)證程序進(jìn)程受到影響的情況下,也要防止雙重簽名;
· 硬件安全模塊存儲(chǔ)驗(yàn)證程序密鑰,可在主機(jī)損壞后繼續(xù)使用”
今天就是這樣,至少在驗(yàn)證程序冰山一角的表面上,您已經(jīng)完成了第一步來(lái)確保和提高可用性。
在安全性和可用性的背景下,觀察polkadot如何隨著時(shí)間的推移而發(fā)展將是很有趣的。
評(píng)論
查看更多