自從有次過海關的時候電腦被TSA開包檢查硬碟還掉下來了之後,我的被害妄想症就越來越沒救了。
這篇文章假設有人可以物理接觸你的電腦,以及你所在的網路不可信,這種情況下應該怎麼保護你的伺服器數據安全。
- 使用代理登錄SSH以隱藏伺服器IP。如果有多台伺服器,選擇一個位置最近的做跳板機,加密它的文件系統(OpenVZ再見)。設置另外機器的hosts.deny和hosts.allow為僅允許跳板機IP登錄;如果使用不支持tcpwrapper的服務如dropbear,需手動設置iptables。
- 登錄跳板機的方式要和登錄另外機器的方式不同。
- 使用密碼+google authenicator登錄跳板機,然後通過公鑰登錄別的機器。設置跳板機的sudo需要密碼,且設置為不同於當前賬戶的密碼;方法是在/etc/passwd中添加一行toor:x:0:0:root:/root:/usr/sbin/nologin,使用passwd修改toor的密碼,在/etc/sudoers中添加一行Defaults runas_default=toor, runaspw。
- 使用密鑰A登錄跳板機,使用另一個密鑰B登錄別的機器。密鑰B應保存在本地,通過ssh-agent轉發到跳板機。不同設備上的密鑰B可以設置不同的passphrase。dropbear不支持ed25519,而ecdsa據都市傳說可能存在NSA的後門。
- 每三個月更換一次密鑰。
- 保證密鑰的passphrase的強度;不使用任何雲服務保存密碼和密鑰;如果實在記性太差,在本地AES加密一次,然後做好偽裝(比如將二進位密文附到圖片文件之後或壓縮文件之前,[密文|!Rar…] 或 [\xFF\xD8…\xFF\xD9|密文])。
- 設置fail2ban。
- 監控跳板機/var/log/wtmp中的登錄IP。
- 如果沒有必要,關閉SSH和其他各類開放埠。
- 所有明文服務儘可能走tls。如果客戶端支持SNI,配置假證書以防止被猜測域名。可以使用lua-resty-sniproxy。
歡迎交流