安全,安全,安全!對于區塊鍊動辄幾十萬行的代碼量,安全漏洞時不時就冒出來。敏銳的黑客們,虎視眈眈地盯着漏洞的閘門,一旦看見開閘,便以迅雷不及掩耳的速度展開偷襲。對于使用者來說,最大的風險莫過于錢包被盜,使用者如何才能安全地享受加密貨币帶來的便利?

安全,安全,安全!
對于區塊鍊動辄幾十萬行的代碼量,安全漏洞時不時就冒出來。敏銳的黑客們,虎視眈眈地盯着漏洞的閘門,一旦看見開閘,便以迅雷不及掩耳的速度展開偷襲。
對于使用者來說,最大的風險莫過于錢包被盜,使用者如何才能安全地享受加密貨币帶來的便利?國外專欄作家samparsky在朋友以太坊錢包被盜,損失了0.012236個以太币(價值約人民币22元,對,你沒看錯,就是22元)後,痛定思痛,為我們帶來了這篇誠意滿滿的以太坊錢包安全教程。一秒都别等,趕緊用起來。
從某種意義上來說,保護計算機系統是一場智力的較量:攻擊者識圖找到并利用漏洞,而系統設計者會想方設法關閉漏洞。— Gosser
前車之鑒
近期我一個朋友的以太坊錢包節點遭到了黑客入侵,黑客通過一個開放的RPC (Remote Procedure Call,遠端過程調用)端口指令轉走了他存儲在以太坊錢包中的以太币,下圖是在區塊鍊上留下的記錄。
朋友賬戶的流水
下圖顯示出了黑客賬戶的近幾筆交易流水。
黑客賬戶的流水
與比特币用戶端不同,預設情況下,大多數以太坊用戶端的遠端過程調用并不受密碼保護。
盡管如此,仍有很多種方法可以用來保護以太坊錢包節點的遠端過程調用。其中一些方法包括:
- 為賬戶選擇一個安全性高的強密碼。
- 使用Nginx伺服器作為反向代理和HTTP基本認證機制。
- 使用UFW設定防火牆。
安裝以太坊錢包用戶端
以太坊有兩個主要的錢包用戶端Parity和Geth。兩者功能類似,安裝任何一個錢包用戶端都可以讓你加入到以太坊網絡中。
你可以按照以下任一篇文章進行安裝:
- 安裝Geth
(https://github.com/ethereum/go-ethereum/wiki/Installing-Geth)
- 設定奇偶校驗
(https://wiki.parity.io/Setup)
配置你的以太坊節點
永遠不要這樣做!!!
在錢包節點Geth上啟用遠端過程調用通路時,千萬不要允許帶有解鎖賬戶功能的遠端過程調用的外部通路。例如:
通過以上代碼,原則上你允許了自己以太坊賬戶的外部通路,此時攻擊者可以輕松地将你存儲在錢包中的以太坊轉出,因為你的帳戶已經被解鎖。
不隻是我朋友,好多人以太坊錢包被盜都是由于這個漏洞。
後事之師:如何保護你的以太坊錢包
1.為賬戶選擇一個安全性高的随機密碼
在使用Parity或Geth建立以太坊賬戶時選擇一個安全性高的随機密碼,不知道怎樣生成?可以參考以下網站:
- https://passwordsgenerator.net/
- https://lastpass.com/generatepassword.php
- https://www.random.org/passwords/
2.使用Nginx反向代理伺服器和HTTP基本認證機制
安裝Nginx
你需要安裝并配置Nginx伺服器,具體方法請參考Nginx教程。
設定HTTP基本認證證書
在這一步中,你需要給運作該錢包節點的使用者建立一個密碼。
該密碼和關聯的使用者名将被存儲在你指定的檔案中,其中密碼将被加密,存儲的檔案名你可以任意指定。
你可以檢查新建立檔案的内容以檢視使用者名和經哈希計算加密的密碼。
更新Nginx配置
現在我們已經建立了HTTP基本認證證書,下一步我們要更新Nginx配置以檢視它。
sudo nano /etc/nginx/sites-available/default
更新檔案,在其中加入這些内容:
測試
要應用更改,需要重新加載Nginx。
現在你可以通過這個位址進行遠端過程調用:
改進
為了增強安全性,你可以從letsencrypt網站上安裝免費的SSL(Secure Sockets Layer,安全套接層)證書,具體方法請參考SSL教程。
3.使用UFW設定防火牆
UFW也叫Uncomplicated Firewall,是iptables的接口,旨在簡化配置防火牆的過程。
安裝UFW
設定預設政策
允許特定的以太坊網絡端口
我們需要啟用特定端口,連接配接到以太坊網絡中,以便我們的錢包節點能夠與以太坊區塊鍊進行通信和同步。
以太坊網絡使用的端口為30303。
啟用遠端過程調用端口
為了安全性,我們僅允許從我們信任的節點連接配接到我們的以太坊用戶端,以太坊的預設遠端過程調用端口是8545。
舉個例子,如果我們信任的外部節點伺服器的IP位址是192.168.16.1,那麼指令應該是這樣:
如果你使用了與8545不同的遠端過程調用端口,那麼在指令中也要相應地替換掉。
啟用UFW
啟用UFW指令:
允許其他連接配接
你可以根據需要啟用其他端口進行連接配接。
HTTP-80端口
使用此指令可以允許HTTP連接配接,HTTP連接配接是未加密的Web伺服器使用的連接配接。
你的防火牆現在應該設定為允許連接配接到以太坊遠端過程調用端口和網絡端口。一定要確定你的伺服器允許了任何必要的連接配接,同時限制任何不必要的連接配接,這樣的你伺服器才能正常地、安全地工作。
加密貨币價格的瘋漲自然也會也引起了黑客的注意,在你享受去中心化帶來的便利時,也要千萬注意安全性問題啊,因為去中心化這把雙刃劍使得你錢包被盜後完全沒有任何商量的餘地,你的錢就成了黑客持有的資産,沒有一個權威機構來幫你挽回損失。
動起手來,按照教程從源頭做起,讓你的加密貨币無懈可擊!