SSH服务的配置文件通常为/etc/ssh/sshd_config
文件,下文中的配置均是指针对该配置文件的安全配置。
仅使用SSHv2协议
SSHv1存在比较多的漏洞,建议使用v2。编辑配置文件,确保如下配置存在并是生效状态:
Protocol 2
启用SSH的StrictModes
开启将检查用户是否将其目录设置为全局可写,防止用户数据泄露。
StrictModes yes
设置SSH认证方式
建议使用密钥对认证,以保护用户认证数据。需要包含:
IgnoreRhosts yes
RhostsRSAAuthentication no
PasswordAuthentication no
UsePAM yes
注意:如果UsePAM和PasswordAuthentication同时设置为no,必须通过公私钥认证的方式才能登录系统,其他方式将失败。
禁止root远程SSH连接
如果允许root直接远程登录服务器,存在攻击者通过穷举root密码获取系统root权限的风险。
PermitRootLogin no
禁止空密码登录
如果没有密码保护,则任何人都可以使用此账号登录。
PermitEmptyPasswords no
忽略用户已知主机
基于主机的认证方式,具有其他人假冒地址从而成功登录系统的风险。
IgnoreUserKnownHosts yes
设置SSH加密算法
SSH应当使用强加密算法,防止信息在传输过程中泄露。
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
设置SSH散列
应当使用高强度散列算法。
MACs hmac-sha1,hmac-sha2-256,hmac-sha2-512
禁止X11转发
启用X11转发后将会在客户端进行用户身份认证,系统面临身份认证欺骗攻击风险。
X11Forwarding no
禁止SSH代理转发
开启SSH代理转发时,虽然攻击者无法从SSH代理中获取密钥,但攻击者可以利用代理中的密钥通过服务器认证。
ForwardAgent no
AllowAgentForwarding no
禁止TCP转发
通过SSH TCP转发可以为客户端到服务器或服务器到客户端提供安全的通道。这样可能会破坏防火墙的保护措施,暴露客户端或服务器的网络结构。
AllowTcpForwarding no
显示上次登录信息
PrintLastLog yes
禁用主机方式认证
HostbasedAuthentication no
禁用SSH的通道设备转发
PermitTunnel no
SSH日志配置
记录SSH日志便于事后审计,管理员可以评审这些日志,确定可能存在的安全风险。
SyslogFacility AUTH
LogLevel INFO
设置SSH连接心跳响应时间
这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。
TCPKeepAlive yes
ClientAliveInterval 300
ClientAliveCountMax 0
设置最大并行未认证连接数
MaxStartups 5
开启子进程权限分离
防止通过有缺陷的子进程提升权限,从而使系统更加安全。
UsePrivilegeSeparation yes
禁用端口转发
GatewayPorts no
禁用SSH环境变量配置文件
PermitUserEnvironment no
设置单次连接最大认证次数
MaxAuthTries 4
设置SSH监听地址
ListenAddress <服务器IP>
设置登录认证时间
LoginGraceTime 60
设置HostKey
HostKey用作服务端指纹,在SSH通信前期进行密钥协商时会使用HostKey进行签名。
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
关闭SSH的GSSAPI认证
服务器端启用了GSSAPI认证,登录的时候客户端需要对服务器端的IP地址进行反解析,如果服务器的IP地址没有配置PTR记录,那么就容易在这里卡住。可能造成通过SSH登录服务器时会有时很慢。
GSSAPIAuthentication no
其他显式配置
Port
KeyRegenerationInterval
RSAAuthentication
PubkeyAuthentication
AuthorizedKeysFile
X11DisplayOffset
X11UseLocalhost
Banner
UseLogin