SSH服务安全配置
-
核心概念
SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中提供安全的远程登录、命令执行、文件传输等服务。安全配置是指对SSH服务器软件(通常是sshd)的设置进行调整,以关闭不安全的功能、启用更强的保护机制,从而抵抗暴力破解、中间人攻击、信息泄露等威胁。 -
关键配置文件
SSH服务器的行为几乎完全由配置文件控制。主配置文件通常位于/etc/ssh/sshd_config。任何修改后,必须重启SSH服务(如执行systemctl restart sshd)或重新加载配置(如执行systemctl reload sshd)才能生效。在修改前,务必备份原文件。 -
基础加固措施(必做项)
- 修改默认端口:将
Port指令从默认的22改为一个大于1024的非常用端口(如Port 2345)。这能大幅减少自动化扫描和低水平暴力破解攻击。 - 禁止root用户直接登录:设置
PermitRootLogin no。管理员应先以普通用户登录,再通过su或sudo切换权限,这增加了攻击者获取最高权限的难度。 - 使用密钥认证,禁用密码认证:
- 生成公钥-私钥对(在客户端使用
ssh-keygen命令)。 - 将公钥(默认为
~/.ssh/id_rsa.pub)内容添加到服务器对应用户的~/.ssh/authorized_keys文件中。 - 在配置文件中设置
PasswordAuthentication no和PubkeyAuthentication yes。这是防止暴力破解密码最有效的手段。
- 生成公钥-私钥对(在客户端使用
- 限制用户和用户组:使用
AllowUsers(如AllowUsers alice bob)或AllowGroups(如AllowGroups sshusers)指令,明确指定允许通过SSH登录的用户或用户组,实现白名单控制。
- 修改默认端口:将
-
高级安全增强
- 使用更强的加密算法:禁用已被认为不安全或过时的算法。例如,可以添加以下配置:
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp521 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com - 限制访问频率和连接数:通过
MaxAuthTries(如设置为3)限制每个连接允许的最大认证次数。更精细的频率限制通常需要配合fail2ban或系统防火墙(如iptables、firewalld)实现,以自动封禁多次尝试失败的IP地址。 - 设置空闲会话超时:通过
ClientAliveInterval(客户端无响应多少秒后发送保活消息)和ClientAliveCountMax(发送多少次保活消息后断开连接)的组合来防止空闲会话长期占用连接。例如ClientAliveInterval 300和ClientAliveCountMax 0,表示300秒(5分钟)无活动则断开连接。 - 限制监听的网络接口:如果服务器有多个网卡,通过
ListenAddress指令指定SSH只监听在管理内网IP上,如ListenAddress 192.168.1.100,避免服务暴露在公网。
- 使用更强的加密算法:禁用已被认为不安全或过时的算法。例如,可以添加以下配置:
-
审计与监控
SSH的所有重要活动(成功、失败的登录,认证错误等)都会记录在系统日志中(通常是/var/log/auth.log或/var/log/secure)。应定期检查这些日志,或使用日志分析工具(如logwatch、auditd)或安全信息与事件管理(SIEM)系统进行集中监控和告警,以便及时发现异常访问行为。
SSH服务安全配置
-
核心概念
SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中提供安全的远程登录、命令执行、文件传输等服务。安全配置是指对SSH服务器软件(通常是sshd)的设置进行调整,以关闭不安全的功能、启用更强的保护机制,从而抵抗暴力破解、中间人攻击、信息泄露等威胁。 -
关键配置文件
SSH服务器的行为几乎完全由配置文件控制。主配置文件通常位于/etc/ssh/sshd_config。任何修改后,必须重启SSH服务(如执行systemctl restart sshd)或重新加载配置(如执行systemctl reload sshd)才能生效。在修改前,务必备份原文件。 -
基础加固措施(必做项)
- 修改默认端口:将
Port指令从默认的22改为一个大于1024的非常用端口(如Port 2345)。这能大幅减少自动化扫描和低水平暴力破解攻击。 - 禁止root用户直接登录:设置
PermitRootLogin no。管理员应先以普通用户登录,再通过su或sudo切换权限,这增加了攻击者获取最高权限的难度。 - 使用密钥认证,禁用密码认证:
- 生成公钥-私钥对(在客户端使用
ssh-keygen命令)。 - 将公钥(默认为
~/.ssh/id_rsa.pub)内容添加到服务器对应用户的~/.ssh/authorized_keys文件中。 - 在配置文件中设置
PasswordAuthentication no和PubkeyAuthentication yes。这是防止暴力破解密码最有效的手段。
- 生成公钥-私钥对(在客户端使用
- 限制用户和用户组:使用
AllowUsers(如AllowUsers alice bob)或AllowGroups(如AllowGroups sshusers)指令,明确指定允许通过SSH登录的用户或用户组,实现白名单控制。
- 修改默认端口:将
-
高级安全增强
- 使用更强的加密算法:禁用已被认为不安全或过时的算法。例如,可以添加以下配置:
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp521 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com - 限制访问频率和连接数:通过
MaxAuthTries(如设置为3)限制每个连接允许的最大认证次数。更精细的频率限制通常需要配合fail2ban或系统防火墙(如iptables、firewalld)实现,以自动封禁多次尝试失败的IP地址。 - 设置空闲会话超时:通过
ClientAliveInterval(客户端无响应多少秒后发送保活消息)和ClientAliveCountMax(发送多少次保活消息后断开连接)的组合来防止空闲会话长期占用连接。例如ClientAliveInterval 300和ClientAliveCountMax 0,表示300秒(5分钟)无活动则断开连接。 - 限制监听的网络接口:如果服务器有多个网卡,通过
ListenAddress指令指定SSH只监听在管理内网IP上,如ListenAddress 192.168.1.100,避免服务暴露在公网。
- 使用更强的加密算法:禁用已被认为不安全或过时的算法。例如,可以添加以下配置:
-
审计与监控
SSH的所有重要活动(成功、失败的登录,认证错误等)都会记录在系统日志中(通常是/var/log/auth.log或/var/log/secure)。应定期检查这些日志,或使用日志分析工具(如logwatch、auditd)或安全信息与事件管理(SIEM)系统进行集中监控和告警,以便及时发现异常访问行为。