SSH安全優秀實踐
眾所周知,SSH是遠程控制中使用最廣泛和最重要的工具,所有*nix系統都是默認啟動SSH服務。雖然SSH可以保證數據傳輸的安全,但是默認配置的情況下SSH存在被探測、被暴力破解的危險,很多主機由此淪為了肉雞。本文蟲蟲給大家介紹一下SSH安全最佳實踐,以提高主機安全。
網絡限制
信息安全最根本最有效的方法是,保障網絡安全,通過網絡限制可以最大程度保障系統安全,對SSH服務也是如此,可以通過硬防、安全組(針對云資源,相當于硬防)、主機防火墻等限制SSH端口,以保障安全。
防火墻
防火墻的主要工作是使用預定義的規則檢查傳入和傳出的流量。關于硬件防火墻和安全組在此不在多說。
*nix系主機可以使用iptables防火墻,iptables是對netfilter應用級打包,可以用來數據包過濾,接受或拒絕數據包(或采取其他行動)以保護系統免受攻擊。
使用iptables可以定義規則,限制IP地址、端口或協議的SSH流量。還可以跟蹤最近的SSH端口連接。也可以使用速率限制連接,根據IP地址連接到SSH的速率來阻止它們。
使用防火墻并調整其配置有助于減少SSH攻擊的機會。一個典型Iptables白名單訪問的例子如下:
- …
- -A INPUT -s 192.168.1.8 -p tcp -m state --state NEW -m tcp --dport 2022 -j ACCEPT
- -A INPUT -s 192.168.1.6 -p tcp -m state --state NEW -m tcp --dport 2022 -j ACCEPT
- -A INPUT -p tcp --dport 2022 -j REJECT --reject-with icmp-host-prohibite
- …
以上規則中,只允許Ip地址192.168.1.6和192.168.1.8訪問2022端口(修改過的ssh端口)。
堡壘機
堡壘主是專門設計用于阻止來自網絡的惡意流量和攻擊的安全網關。堡壘在公共網絡上公開的安全代理和審計服務,通過堡壘機和限制和審計用戶操作,記錄用戶操作,可以對可疑操作進行告警或者直接阻斷從而減少對主機威脅。
當兩個通道建立SSH連接時,設置堡壘主機可能有助于提高安全性并保護系統。
堡壘機是個非常重要的安全設備,但是同時它本身也是風險點和單點,如果堡壘機由于漏洞或者其他因素被人攻陷或者出現故障,會造成重大問題。畢竟把所有雞蛋都放在一個籃子里,摔了那就都碎了。所以保障堡壘機安全和高可用至關重要。
雙因子認證(2FA)
在雙因子認證的體系中,系統需要兩種不同形式的身份驗證才能獲得訪問權限。最常見的雙因子驗證是用戶登陸時候除了輸入用戶名和密碼外,還要通過手機短信驗證碼才能通登陸系統。雖然發送到移動設備的一次性密碼會受到中間人 (MITM) 攻擊 ,但使用第二個因子總比沒有第二個因子要好。
更安全的雙因子認證還有硬件是安全校驗卡YubiKey 和 Apple TouchID等。開源方法有基于google-authenticator和FreeOPT的方式以及基于freeipa的方式。
通過啟用雙因子驗證功能,系統管理員可確保任何通過SSH登錄遠程系統的用戶都必須使用多個容易被盜的憑據進行身份驗證,可保證比單獨使用密碼或SSH密鑰更安全。
另外在國家網絡安全等級保護標準中,在網絡、主機等部分密碼要求都明確要求了雙因子認證。
公鑰和SSH Certificate-based 驗證
盡管基于SSH密鑰身份驗證是密認證的更好替代方案,可以增強遠程登錄過程的安全性,但它也有其潛在的障礙。例如,用戶必須將私鑰存儲在其設備上,其設備有可能是被盜或者因為攻陷導致泄密。而且SSH證書實際上只是另一個名稱的密碼,私鑰也可以泄露,被人利用。
為了防止私鑰泄露,在生成證書時候可以設置密碼保護是個很好的做法,另外將私鑰保存在非常用的~/.ssh/目錄也可以一定程度上避免泄露。
基于CA簽發證書的SSH Certificate-based身份驗證是一個更好的選擇。SSH證書通過使用CA公鑰來保護登錄過程,同時還提供證書來驗證每個密鑰的身份。
通過使用這種身份驗證方法,無需每次去服務器上添加用戶公鑰,只需在sshd_config添加一CA 的公鑰信任既可以:
- TrustedUserCAKeys /etc/ssh/user_ca_key.pub
同時在簽發證書時候可以對簽發的公鑰進行用戶名、時間、源地址等限制。配置成功后,訪問ssh就是基于用戶私鑰(userss)和CA簽發的cert證書(user-cert.pub)認證:
- ssh -p2022 -o CertificateFile = user-cert.pub -i userss user@192.168.1.22
為了方便可以配置ssh config簡化訪問時候選項設置:
- Host test
- HostName 192.168.1.22
- Port 2022
- User user
- CertificateFile ~/.ssh/user-cert.pub
- IdentityFile ~/.ssh/users
然后就可以簡便的ssh test訪問了。
SSH Certificate-based身份驗證提供了一種對任何計算環境進行身份驗證的安全且可擴展的方法。
修改默認SSH設置
OpenSSH 默認選項通常通過文件/etc/ssh/sshd_config來配置。前面我們也提到了,默認配置存在著安全風險,需要優化配置。
更改默認22端口
默認情況下,SSH服務監聽tcp端口22。任何一個時候,在互聯網上都存在大量探測機器人對22端口進行探測,并且自動暴力攻擊常見用戶和字典密碼。你新開一臺vps主機,然后安全組開放22端口,幾分鐘內就會收到SSH密碼嘗試攻擊的日志。
在端口探測時候,往往都是通過默認22端口對SSH服務探測,如果更改為非22端口就可以避免絕大多數該類探測。修改sshd默認端口的方法是修改/etc/ssh/sshd_config文件
找到:
- Port 22
修改為:
- Port 2022
修改后重啟sshd服務即可:
- systemctl restart sshd.service
當然也可以設置其他的小于65535的端口。注意修改之前記得先在防火墻上開放該端口,免得把自己踢出去,登陸不了了。
- Iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 2022 -j ACCEPT
禁用root登錄
其次,默認情況下,用戶可以以root身份通過SSH連接到服務器。SSH根帳戶或超級用戶帳戶是一個非常危險的功能,因為它允許完全訪問和控制整個系統。 而且網絡暴力嘗試攻擊中,root用戶最容易被攻擊的賬號。通過在服務器上禁用root SSH登錄,可以避免攻擊成功可能性,而且通過權限分配,可以更好進行用戶行為審計和溯源跟蹤。禁止root登陸方法是修改/etc/ssh/sshd_config文件,在最后增加一行:
- PermitRootLogin no
禁用密碼登陸
前面說了密碼認證雖然方便,但是最容易被暴力攻擊,也容易賬號泄露,這可能是系統被黑的最常見的原因(root 建議密碼)。應該完全禁止基于密碼的SSH身份驗證并選擇至少使用SSH密鑰。禁止密碼登陸方法是修改/etc/ssh/sshd_config文件,在最后增加一行:
- PasswordAuthentication no
利用 ”AllowUsers”來限制訪問
此外,默認情況下,所有系統用戶都可以使用他們的密碼或公鑰登錄SSH,這也帶來潛在安全隱患。并非所有系統用戶都需要通過SSH遠程登錄。同限制特定用戶對SSH訪問極大地增強了安全性。可以通過/etc/ssh/sshd_config文件中配置來設置可以訪問SSH的白名單:
- AllowUsers user1 user2 chongchong
這樣系統中就只能有user1 user2 chongchong三個用戶可以SSH登陸。對應還有
- AllowGroups 用戶組白名單
- DenyUsers 用戶黑名單
- DenyGroups用戶組黑名單
總結
本本中蟲蟲給介紹SSH安全最佳實踐,但是這是最常見最有效的加固方法。取決于環境和合規性要求這些方法在實際中可以按需調整。需要指出的是,要注意遵循優秀實踐并正確實施這些實踐通常具有挑戰性。