在 RedHat 系統上實施 SSH 安全設定
在 RedHat 或類似的 Linux 系統上,配置 SSH 伺服器 (sshd) 的安全設定是一個重要的管理任務。適當的設定可以幫助防止未經授權的訪問和潛在的安全威脅。
檢查當前 SSH 加密模式
首先檢查當前配置的 SSH 加密模式,確保使用的是安全的加密套件。
# 查看當前 SSH 伺服器的加密和 MACs 配置
sudo sshd -T | grep "\(ciphers\|macs\)"
確保使用如下的安全加密模式:
- Ciphers: aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com, chacha20-poly1305@openssh.com
- MACs: hmac-sha2-512, hmac-sha2-256
更新 SSH 配置
如果當前配置不符合安全標準,可以修改 /etc/ssh/sshd_config
文件以更新設定。
步驟:
使用文本編輯器開啟 SSHD 配置文件:
sudo vi /etc/ssh/sshd_config
確保添加或更新以下行以反映安全的加密和 MACs 設定:
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com MACs hmac-sha2-512,hmac-sha2-256
保存並退出編輯器。
為了使配置更改生效,重新啟動 SSH 服務:
sudo systemctl restart sshd
確保 SSH 安全性的其他提示
- 禁止 root 登錄:
PermitRootLogin no
- 禁用密碼認證:
PasswordAuthentication no
- 啟用公鑰認證:
PubkeyAuthentication yes
- 設置合理的登錄嘗試次數限制:
MaxAuthTries 3
- 使用非標準端口(非預設的 22 端口):
Port 2222
- 監控並記錄所有 SSH 活動
在配置 SSH 伺服器時,始終要注意平衡安全性和可用性。適當的配置和定期審計可以顯著提高系統的安全性。
完整/etc/ssh/sshd_config範例參考
# Ansible managed: Do NOT edit this file manually!
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
# SSH 伺服器監聽的端口
Port 22
#AddressFamily any
# 這表示 SSH 伺服器會監聽所有的 IPv4 和 IPv6 地址
ListenAddress 0.0.0.0
ListenAddress ::
# 啟用協定版本2
Protocol 2
# HOST金鑰的位置
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# 選擇密碼套件
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
# 選擇密鑰交換算法
KexAlgorithms ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
# 選擇訊息驗證碼算法
MACs hmac-sha2-512,hmac-sha2-256
# Logging
# SyslogFacility AUTHPRIV 是用於記錄所有與安全和權限相關的資訊。
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
# Authentication:
# 登入的超時時間(2分鐘)
#LoginGraceTime 2m
# 此選項禁止 root 使用者透過密碼認證登入,但允許公鑰認證。
PermitRootLogin prohibit-password
#StrictModes yes
# 登入嘗試的最大次數
#MaxAuthTries 6
# 允許的最大連接數量
#MaxSessions 10
# 允許公鑰認證
#PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# 允許使用密碼認證來登入 SSH 伺服器 To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
# 此選項禁止空密碼認證
PermitEmptyPasswords no
# 禁止使用鍵盤互動認證 Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
KbdInteractiveAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
# 開啟 PAM(插入式認證模組)認證
UsePAM yes
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
# 啟用 X11 轉發,允許客戶端將 X11 圖形介面轉發至遠端主機。
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
# 每次用戶登入時顯示訊息
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
# 客戶端存活訊息間隔(秒)
#ClientAliveInterval 0
#ClientAliveCountMax 3
# SSH 伺服器不會嘗試解析遠端主機的 DNS 名稱,這可以避免某些 DNS 解析問題導致的連接延遲。
UseDNS no
#PidFile /run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# Allow client to pass locale environment variables
# 允許客戶端傳遞 LANG 和 LC_* 這些環境變數,這些變數通常用於設定語言和地區設定。
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
相關CVE弱點
- CVE-2008-5161 是指與 Red Hat Enterprise Linux 中h的 OpenSSL 套件相關的一個安全問題。該問題源於 OpenSSL 中的一個漏洞,該漏洞在處理某些類型的私鑰時可能會導致 OpenSSL 當機。
- CVE-2016-2183 是指與 Red Hat Enterprise Linux 中的 OpenSSL 套件相關的一個安全問題。該問題源於 OpenSSL 中對於 BLOCK-CIPHERS(如3DES)的處理方式,這可能會使攻擊者進行甜蜜32攻擊(Sweet32 attack)。
- CVE-2013-2566 是指與 Red Hat Enterprise Linux 中的 OpenSSL 套件相關的一個安全問題。該問題源於 OpenSSL 中對於 BLOCK-CIPHERS(如 RC4)的處理方式,這可能會使攻擊者進行選擇明文攻擊。
- CVE-2015-2808 是指與 Red Hat Enterprise Linux 中的 OpenSSL 套件相關的一個安全問題。該問題源於 OpenSSL 中對於 BLOCK-CIPHERS(如 RC4)的處理方式,這可能會使攻擊者進行巴拉迪和波格丹諾夫(Bar-Mitzvah)攻擊。