在 RedHat 系統上實施 SSH 安全設定

在 RedHat 或類似的 Linux 系統上,配置 SSH 伺服器 (sshd) 的安全設定是一個重要的管理任務。適當的設定可以幫助防止未經授權的訪問和潛在的安全威脅。

檢查當前 SSH 加密模式

首先檢查當前配置的 SSH 加密模式,確保使用的是安全的加密套件。

# 查看當前 SSH 伺服器的加密和 MACs 配置
sudo sshd -T | grep "\(ciphers\|macs\)"

確保使用如下的安全加密模式:

更新 SSH 配置

如果當前配置不符合安全標準,可以修改 /etc/ssh/sshd_config 文件以更新設定。

步驟:

  1. 使用文本編輯器開啟 SSHD 配置文件:

    sudo vi /etc/ssh/sshd_config
    
  2. 確保添加或更新以下行以反映安全的加密和 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
    
  3. 保存並退出編輯器。

  4. 為了使配置更改生效,重新啟動 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)攻擊。