一、背景知識
以ubuntu為例,查看ssh服務是否安全并配置,執行
ssh -V
ssh的配置文件路徑:/etc/ssh/sshd_config
二、SSH服務配置文件
1.端口和監聽設置
-
Port?22??
-
含義:指定SSH服務監聽的端口號(默認是22)。 ?
-
解釋:從安全角度,默認端口22容易成為攻擊目標,建議改為非標準端口以減少掃描風險。從功能角度,如果啟用(如Port 2222),則會改變連接端口。
-
-
AddressFamily any??
-
含義:控制SSH服務支持的網絡地址族(如IPv4或IPv6)。any表示同時支持IPv4和IPv6。 ?
-
解釋:從兼容性角度,啟用該配置可以確保服務在現代網絡中正常工作。從安全角度,如果只使用IPv4,可以設為inet以減少潛在攻擊面。
-
-
ListenAddress 0.0.0.0 ?
-
含義:指定SSH服務監聽的IPv4地址(0.0.0.0表示所有可用IPv4接口)。 ?
-
解釋:從安全角度,綁定到特定IP(如192.168.1.100)可以減少暴露面。從功能角度,默認設置方便多網卡環境。
-
-
ListenAddress?: :
-
含義:指定SSH服務監聽的IPv6地址(::表示所有可用IPv6接口)。 ?
-
解釋:類似IPv4設置,默認啟用所有接口便于訪問,但從安全角度,建議根據網絡需求定制。
-
2.主機密鑰設置
-
HostKey /etc/ssh/ssh_host_rsa_key ?
-
含義:指定RSA算法的主機密鑰文件路徑,用于服務器身份驗證。 ?
-
解釋:從安全角度,RSA密鑰提供強加密,是現代SSH的推薦設置。默認路徑確保密鑰存儲可靠。
-
-
HostKey /etc/ssh/ssh_host_dsa_key ?
-
含義:指定DSA算法的主機密鑰文件路徑。 ?
-
解釋:從安全角度,DSA已過時且易受攻擊,不建議啟用。功能角度,兼容舊系統,但默認禁用是好的做法。
-
-
HostKey /etc/ssh/ssh_host_ecdsa_key ?
-
含義:指定ECDSA算法的主機密鑰文件路徑,提供更強的安全性和效率。 ? ?
-
解釋:從性能角度,ECDSA比RSA更快速;從安全角度,它基于橢圓曲線密碼學,推薦用于現代系統。
-
-
HostKey /etc/ssh/ssh_host_ed25519_key ?
-
含義:指定Ed25519算法的主機密鑰文件路徑,這是一種高性能且安全的密鑰類型。 ?
-
解釋:從安全角度,Ed25519提供頂級保護;從功能角度,它適合高安全環境,如云服務器。
-
3.加密和密鑰設置(Ciphers and Keying)
-
RekeyLimit default none ?
-
含義:定義會話密鑰重新生成的限制(如數據量或時間),default表示使用系統默認值,none表示不限制。 ?
-
解釋:從安全角度,定期重新密鑰可防止長期攻擊;從性能角度,限制過多可能影響連接速度。默認值通常在安全性和效率間平衡。
-
4.日志設置
-
SyslogFacility AUTH ?
-
含義:指定日志消息的Syslog工具(facility),AUTH用于認證相關消息。 ? ?
-
解釋:從審計角度,啟用此配置可幫助記錄認證事件,但默認未設置,需結合其他配置。
-
-
SyslogFacility AUTHPRIV??
-
含義:指定日志消息的Syslog工具為AUTHPRIV(私有認證消息),提供更安全的日志記錄。 ? ?
-
解釋:從安全角度,AUTHPRIV比AUTH更安全,因為它限制日志訪問權限;從功能角度,便于管理員審計SSH事件。
-
-
LogLevel INFO??
-
含義:設置日志詳細級別,INFO顯示常規信息(如連接和認證)。 ??
-
解釋:從監控角度,INFO級足夠日常使用;從性能角度,更高級別(如DEBUG)可能產生大量日志,影響磁盤空間。
-
5.認證設置(Authentication)
-
LoginGraceTime 2m??
-
含義:定義用戶登錄嘗試的超時時間(默認2分鐘),超時后連接關閉。 ?
-
解釋:從安全角度,短超時(如1分鐘)可防暴力攻擊;從可用性角度,默認值避免合法用戶因延遲被踢出。
-
-
PermitRootLogin yes ?
-
含義:控制是否允許root用戶直接登錄。yes表示允許。 ?
-
解釋:從安全角度,設為no或without-password(僅密鑰登錄)可大幅降低風險;從管理角度,默認可能允許root登錄,但不推薦。
-
-
StrictModes yes ?
-
含義:檢查用戶密鑰文件的權限(如.ssh目錄必須為700),防止未授權訪問。 ?
-
解釋:從安全角度,啟用此選項可防止密鑰泄露;功能角度,確保文件權限正確。
-
-
MaxAuthTries 6 ?
-
含義:設置每個連接允許的最大認證嘗試次數(默認6次)。 ?
-
解釋:從安全角度,減少此值(如3次)可防暴力破解;從誤操作角度,默認值避免合法用戶被鎖出。
-
-
MaxSessions 10??
-
含義:限制每個網絡連接允許的并發會話數(默認10)。 ?
-
解釋:從資源角度,控制會話數可防DoS攻擊;從功能性角度,默認值適合多數場景。
-
-
PubkeyAuthentication yes??
-
含義:啟用公鑰認證(基于密鑰對登錄)。 ?
-
解釋:從安全角度,公鑰認證比密碼更安全;功能角度,它是SSH的主要登錄方式。
-
-
AuthorizedKeysFile .ssh/authorized_keys ?
-
含義:指定用戶公鑰存儲文件的位置(默認.ssh/authorized_keys)。 ?
-
解釋:從安全角度,固定路徑便于管理;功能角度,簡化密鑰部署。
-
-
AuthorizedPrincipalsFile none ?
-
含義:定義基于角色的認證文件(如用于多用戶管理),none表示禁用。 ?
-
解釋:從管理角度,此配置適用于復雜環境;安全角度,默認禁用減少攻擊面。
-
-
AuthorizedKeysCommand none ?
-
含義:指定外部命令來獲取授權密鑰,none表示禁用。 ? ?
-
解釋:功能角度,啟用此選項可實現動態密鑰管理;安全角度,外部命令可能引入風險。
-
-
AuthorizedKeysCommandUser nobody??
-
含義:設置運行AuthorizedKeysCommand的用戶(默認nobody)。 ?
-
解釋:從權限角度,指定低權限用戶可增強安全;默認未啟用,因為主命令未啟用。
-
-
HostbasedAuthentication no??
-
含義:控制基于主機的認證(信任其他主機),no表示禁用。 ?
-
解釋:從安全角度,此方法風險高(易受IP欺騙),不建議啟用;功能角度,僅用于特殊信任環境。
-
-
IgnoreUserKnownHosts no??
-
含義:是否忽略用戶的~/.ssh/known_hosts文件(用于主機驗證),no表示不忽略。 ?
-
解釋:從安全角度,啟用此選項(設為yes)可防某些攻擊,但會降低便利性;功能角度,默認保持主機驗證。
-
-
IgnoreRhosts yes ?
-
含義:是否忽略用戶的.rhosts和.shosts文件(舊式認證),yes表示忽略。 ? ?
-
解釋:從安全角度,這些文件易被濫用,默認忽略是好的;歷史兼容角度,僅在舊系統可能啟用。
-
-
PasswordAuthentication yes??
-
含義:啟用密碼認證(用戶輸入密碼登錄)。 ?
-
解釋:冗余行,實際設置由未注釋行控制。
-
-
PasswordAuthentication yes ?
-
含義:啟用密碼認證。 ?
-
解釋:從安全角度,密碼認證易受暴力破解,建議禁用(設為no)并改用密鑰;從可用性角度,啟用便于用戶初始登錄。
-
-
PermitEmptyPasswords no ?
-
含義:禁止空密碼登錄,no表示不允許。 ?
-
解釋:從安全角度,空密碼是嚴重漏洞,默認禁用是必須的。
-
-
ChallengeResponseAuthentication yes??
-
含義:啟用挑戰-響應認證(如一次性密碼)。 ?
-
解釋:冗余行,實際設置由未注釋行控制。
-
-
ChallengeResponseAuthentication no??
-
含義:禁用挑戰-響應認證。 ? ?
-
解釋:從安全角度,禁用此選項可簡化認證流程;功能角度,如果啟用,需額外配置(如PAM)。
-
-
GSSAPIAuthentication yes??
-
含義:啟用GSSAPI認證(基于Kerberos或類似協議)。 ??
-
解釋:從安全角度,GSSAPI提供強企業級認證;從集成角度,適用于Active Directory環境。
-
-
GSSAPICleanupCredentials no??
-
含義:控制是否在會話結束時清理GSSAPI憑據,no表示不清理。 ? ?
-
解釋:從安全角度,清理憑據可防泄露;功能角度,設為no可能提高便利性(如保持單點登錄)。
-
-
GSSAPIStrictAcceptorCheck yes??
-
含義:嚴格檢查GSSAPI服務名稱,yes表示啟用嚴格模式。 ?
-
解釋:從安全角度,啟用可防中間人攻擊;性能角度,嚴格檢查可能增加開銷。
-
-
GSSAPIKeyExchange no 和 GSSAPIEnablek5users no ?
-
含義:控制GSSAPI在密鑰交換或用戶映射中的使用,no表示禁用。 ? ?
-
解釋:功能角度,僅在需要Kerberos集成時啟用;安全角度,默認禁用避免復雜配置錯誤。
-
6.PAM設置
-
UsePAM yes ?
-
含義:啟用PAM認證框架,允許集成系統級認證策略。 ?
-
解釋:從安全角度,PAM支持多因子認證和賬戶鎖定;從功能性角度,它覆蓋密碼和挑戰響應認證(如文本中警告所述),并處理賬戶與會話管理。警告提到在Red Hat系統中禁用PAM可能導致問題,因此啟用是推薦的。
-
7.轉發和X11設置
-
AllowAgentForwarding yes ?
-
含義:允許SSH代理轉發(轉發本地密鑰到遠程主機)。 ?
-
解釋:從便利角度,轉發便于跳板機訪問;安全角度,可能被濫用,建議在受控環境啟用。
-
-
AllowTcpForwarding yes??
-
含義:允許TCP端口轉發(創建隧道)。 ?
-
解釋:功能角度,啟用便于VPN-like功能;安全角度,轉發可能被用于繞過防火墻。
-
-
GatewayPorts no??
-
含義:控制轉發端口是否綁定到所有接口(no表示僅本地)。 ?
-
解釋:從安全角度,設為no可防止外部訪問轉發端口;功能角度,設為yes允許遠程共享端口。
-
-
X11Forwarding yes??
-
含義:啟用X11圖形界面轉發(顯示遠程GUI應用)。 ?
-
解釋:從功能性角度,便于遠程桌面;安全角度,X11轉發有歷史漏洞,建議僅在需要時啟用。
-
-
X11DisplayOffset 10??
-
含義:設置X11顯示端口的偏移量(默認10)。 ?
-
解釋:功能角度,偏移防止端口沖突;性能角度,默認值通常足夠。
-
-
X11UseLocalhost yes??
-
含義:綁定X11轉發到localhost(僅本地訪問)。 ?
-
解釋:安全角度,綁定localhost可減少網絡暴露;默認啟用是好的。
-
-
PermitTTY yes??
-
含義:允許分配TTY(終端)
-
三、SSH服務安全配置
1.基礎安全配置
(1)修改默認端口
將默認 22 端口改為高位端口(如 1024 以上),降低掃描攻擊風險
Port 2222 ?# 在 /etc/ssh/sshd_config 中修改?
(2)強制使用 SSH-2 協議
禁用不安全的 SSH-1,僅保留最新協議版本:Protocol 2?
(3)限制監聽地址
僅綁定必要的內網或特定 IP,減少暴露面:
ListenAddress 192.168.1.100 ?# 非必要不監聽 0.0.0.0
2.認證機制強化
(1)禁用密碼認證
全面啟用密鑰認證,規避暴力破解風險
PasswordAuthentication no?
PubkeyAuthentication yes?
(2)雙因素認證(2FA)
結合 Google Authenticator 等工具實現動態驗證碼+密鑰的雙重驗證
安裝 libpam-google-authenticator 后配置
ChallengeResponseAuthentication yes?AuthenticationMethods publickey,keyboard-interactive?
(3)禁止 root 直接登錄
強制使用普通用戶登錄后提權:
PermitRootLogin no
3.訪問控制策略
(1)用戶/IP 白名單
僅允許指定用戶或 IP 段訪問,例如:
AllowUsers user1 user2@192.168.*.* ?# 支持通配符
(2)防火墻規則
使用云平臺安全組或?ufw/iptables?限制 SSH 端口的來源 IP:
sudo ufw allow from 192.168.1.0/24 to any port 2222
(3)登錄頻率限制
通過 Fail2ban 自動封禁異常 IP(如 30 秒內 3 次失敗嘗試)
4.高級安全參數
(1)會話超時控制
自動斷開無響應連接,防止閑置會話占用資源:
ClientAliveInterval 300 ?# 300 秒檢測一次?
ClientAliveCountMax 3
(2)權限分離與日志監控
UsePrivilegeSeparation yes ?# 隔離特權操作?
LogLevel VERBOSE ?# 記錄詳細日志
(3)禁用非必要功能
關閉圖形轉發和空密碼登錄:
X11Forwarding no?
PermitEmptyPasswords no
5.密鑰管理與維護
(1)密鑰生成規范
使用高強度算法生成密鑰對:
ssh-keygen -t ed25519 -a 100 ?# 或 RSA-4096
(2)密鑰定期輪換
建議每 6-12 個月更換一次密鑰,并清理廢棄公鑰。
(3)文件權限控制
chmod 600 ~/.ssh/authorized_keys ?# 用戶密鑰嚴格權限
(4)補充工具推薦
SSH 客戶端安全配置:在 ~/.ssh/config 中指定私鑰路徑和保活參數:
ServerAliveInterval 60 ?# 防止 NAT 超時
SELinux/AppArmor:啟用強制訪問控制框架限制 SSH 進程權限
---
參考文獻:
Linux系統中的SSH服務配置詳解與安全配置