SSH簡介 SSH的主要特性 SSH的組成 SSH處理過程 SSH協議的實現工具 ssh 客戶端 ssh 伺服器 ssh 服務的最佳實踐 要使用預設埠 禁止使用protocol version 1 限制可登錄用戶 設定空閑會話超時時長 利用防火牆設置ssh 訪問策略 僅監聽特定的IP 地址 基於口 ...
SSH簡介
1)ssh(secure shell),是由IETF小組所制定的,ssh是創建在應用層和傳輸層基礎上的安全協議,為電腦上的shell提供安全的傳輸和使用環境。
2)ssh目前是較為可靠的,專為遠程登錄會話和其他網路服務提供安全性協議,利用ssh協議可以有效防止遠程管理過程中的信息泄漏問題,通過ssh可以對所有傳輸的數據進行加密,也能防止DNS欺騙和IP欺騙。
3)ssh的另一個優點就是其傳輸的數據是可以經過壓縮的,所以可以加快傳輸的速度,ssh有很多功能,它既可以代替Telnet,有可為FTP、POP、甚至PPP提供一個安全通道。
4)ssh是一種協議,監聽在TCP的22埠,主要提供安全的遠程登錄功能。
5)openssh是ssh協議的開源實現,在嵌入式伺服器中,用戶通過遠程主機通過openssh連接伺服器,在linux下,是基於tty運行login程式來供client程式連接。
6)具體的軟體實現:
OpenSSH:ssh協議的開源實現,CentOS 預設安裝
dropbear:另一個開源實現
7)SSH 協議版本
v1:基於CRC-32做MAC,不安全,man-in-middle
v2:雙方主機協議選擇安全的MAC方式
基於DH演算法做密鑰交換,基於RSA或DSA實現身份認證
8)用戶登錄認證的兩種方式:
1》基於password
只要你知道自己帳號和口令,就可以登錄到遠程主機。
所有傳輸的數據都會被加密,但是不能保證你正在連接的伺服器就是你想連接的伺服器。
可能會有別的伺服器在冒充真正的伺服器,也就是受到“中間人”這種方式的攻擊。
2》基於key
ssh結合了公鑰(public key)和私鑰(secret key)。
公鑰用於在建立安全通道前在客戶端和服務端之間傳輸密鑰和進行身份認證;
私鑰則用來作為ssh會話的安全保證,對數據進行加密和解密。
SSH的主要特性
1)加密:
避免數據內容泄漏。
2)通信的完整性:
避免數據被篡改,以及避免發送或接受地址偽裝。
檢查數據是否被篡改,數據是否來自發送者:
SSH-2通過MD5和SSH-1實現
SSH-1是使用CRC-32實現
3)認證:
識別數據發送者或接收者身份。
客戶端驗證SSH服務端身份:
避免中介人攻擊和重定向請求的攻擊,openssh通過在know-hosts中存儲的主機名和host key對服務端身份進行認證
服務端驗證請求者身份:
提供安全性較弱的用戶密碼方式,和安全性更強的per-user public-key signature,此外ssh還支持與第三方安全服務系統的集成,如kerberos等。
4)授權:
用戶訪問控制
5)寄發或建立通道來加密傳遞基於TCP/IP的會話。
可以通過ssh為telnet、ftp等提供通信安全保障。
支持三種類型的寄發操作:
埠寄發
X寄發
代理寄發
SSH的組成
1)傳輸層協議 [SSH-TRANS]
提供了伺服器認證,保密性及完整性。
此外它有時還提供壓縮功能。
SSH-TRANS 通常運行在TCP/IP連接上,也可能用於其它可靠數據流上。
SSH-TRANS 提供了強力的加密技術、密碼主機認證及完整性保護。
該協議中的認證基於主機,並且該協議不執行用戶認證。
更高層的用戶認證協議可以設計為在此協議之上。
2)用戶認證協議 [SSH-USERAUTH]
用於向伺服器提供客戶端用戶鑒別功能。
它運行在傳輸層協議 SSH-TRANS 上面。
當SSH-USERAUTH 開始後,它從低層協議那裡接收會話標識符(從第一次密鑰交換中的交換哈希)。
會話標識符唯一標識此會話並且適用於標記以證明私鑰的所有權。
SSH-USERAUTH 也需要知道低層協議是否提供保密性保護。
3)連接協議 [SSH-CONNECT]
將多個加密隧道分成邏輯通道。
它運行在用戶認證協議上。
它提供了互動式登錄話路、遠程命令執行、轉發TCP/IP連接和轉發X11連接。
SSH處理過程
分解為4個主要階段:
1)協商階段
2)服務端認證階段
3)客戶端認證階段
4)數據傳輸階段
1)協商階段
1》伺服器打開服務埠(預設為22),等待客戶端連接。
2》客戶端發起TCP連接請求,服務端接收到該請求後向客戶端發送包括SSH協議版本信息。
3》客戶端根據該版本信息與自己的版本。決定將要使用的SSH版本,並向服務端發送選用的SSH版本信息。
4》服務端檢查是否支持客戶端的決定使用的SSH版本、
5》上面為止,雙方協商已經完成。在該過程中,客戶端和服務短髮送ssh版本無法相容時,任何一方都可以斷開連接。
2)服務端認證階段
完成協議協商後,客戶端和服務端已經建立的明文的通信通道,之後進入服務端認證階段。
而ssh協議中沒有明確的服務端認證過程,而是通過一系列服務和客戶端的交互來確定服務端的身份的,該過程中還會我那次host key、session key、server key等在客戶和服務端間進行傳輸。
1》建立明文通道連接後,服務端向客戶端發送:
host key:用於認證服務端身份。
server key:用於幫助建立安全的數據傳輸通道。
8位元組的隨機數:客戶端通過在下一次響應中包含該隨機數,防止IP地址欺詐。
服務端支持加密演算法、壓縮方式和認證方式。
此時,客戶端和服務端使用host key、server key和8位元組隨機數生成一個128為的MD5值,作為此次會話的session id。
2》客戶端在接收到服務端host key後,會檢查自己的know host資料庫中(一般為~/.ssh/know_hosts文件),是否已經包含當前服務端的host key,如果有則繼續下一步,如果沒有或包含當前服務端的其他host key,則由用戶決定是否值得信任該服務端,或終止當前連接。
3》客戶端向服務端發送session key,由於當前通道還是採用明文的方式傳輸,所有客戶端會採用host key和server key對session key進行兩次解密來加強安全性。
4》服務端得到session key後,客戶端和服務端就可以通過session key對數據進行加密操作,到此,雙方完成安全加密的通信連接。
5》註意:
1。。host key 和server key都是公鑰加密(非對稱加密),只有通過服務端的私鑰才能對其進行解密,以得到session key。
2。。在正式使用安全通道前,客戶端要求服務端發送使用的session key加密的確認信息,以驗證服務端的身份。
3。。為避免session key的泄漏,ssh還採取了其他的安全措施:session key僅保存在記憶體避免其泄漏,周期性更好session key,預設為1小時。
3)客戶端認證階段
SSH提供了多種客戶端認證方式
SSH-1的客戶端認證方式:
password
key
kerberos
Rhost &&RhostsRSA
TIS
SSH-2的客戶端認證方式:
password
key
hostbased
查看ssh 服務登錄驗證
4)數據傳輸階段
該階段通過session key提供的對稱加密演算法,進行數據加密,保證傳輸數據的安全性。
SSH協議的實現工具
openssh 是ssh協議的開源實現,linux各發行版都預設現象。
opensshd 相關包:
openssh
openssh-clients
openssh-server
ssh 客戶端
1)客戶端組件:
1》ssh (ssh client)
配置文件:/etc/ssh/ssh_config
2》scp
3》sftp
4》Windows 客戶端:
xshell, putty, securecrt, sshsecureshellclient
2)允許實現對遠程系統經驗證地加密安全訪問
3)當用戶遠程連接ssh伺服器時,會複製ssh伺服器/etc/ssh/ssh_host*key.pub (CentOS7 預設是ssh_host_ecdsa_key.pub )文件中的公鑰到客戶機的~./.ssh/know_hosts中,下次連接時,會自動匹配相應私鑰,不能匹配,將拒絕連接。
ssh 伺服器
1)伺服器端:
sshd (ssh daemon)
配置文件: /etc/ssh/sshd_config
2)常用參數:
Port 指定sshd監聽的埠,預設為22(建議修改為非標準埠從而提高安全性)
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes
StrictModes yes
MaxAuthTries 6
MaxSessions 10 ,一個連接最大會話
PubkeyAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication yes
GatewayPorts no
ClientAliveInterval ( 單位: 秒)
ClientAliveCountMax ( 預設3)
UseDNS yes(提高ssh速度改為no)
MaxStartups 未認證連接最大值,預設值10
Banner /path/file
GSSAPIAuthentication yes (提高速度可改為no)
3)限制可登錄用戶的辦法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups
ssh 服務的最佳實踐
要使用預設埠
禁止使用protocol version 1
限制可登錄用戶
設定空閑會話超時時長
利用防火牆設置ssh 訪問策略
僅監聽特定的IP 地址
基於口令認證時,使用強密碼策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
使用基於密鑰的認證
禁止使用空密碼
禁止root 用戶直接登錄
限制ssh 的訪問頻度和併發線上數
做好日誌,經常分析