乐闻世界logo
搜索文章和话题

如何进行 SSH 安全加固?有哪些最佳实践和安全配置建议?

3月6日 23:38

SSH 安全加固是保护服务器免受未授权访问的重要措施。通过合理配置和最佳实践,可以显著提高 SSH 服务器的安全性。

基础安全配置

1. 修改默认端口

bash
# /etc/ssh/sshd_config Port 2222

修改默认端口可以减少自动化扫描和暴力破解攻击。

2. 禁用密码认证

bash
# /etc/ssh/sshd_config PasswordAuthentication no PubkeyAuthentication yes

仅允许密钥认证,大大提高安全性。

3. 禁止 root 登录

bash
# /etc/ssh/sshd_config PermitRootLogin no

禁止 root 用户直接登录,需要先登录普通用户再提权。

4. 限制登录用户

bash
# /etc/ssh/sshd_config AllowUsers admin deploy DenyUsers test guest AllowGroups ssh-users

只允许特定用户或组登录。

高级安全配置

1. 限制认证尝试次数

bash
# /etc/ssh/sshd_config MaxAuthTries 3 MaxStartups 10:30:100 LoginGraceTime 60

限制认证尝试次数,防止暴力破解。

2. 配置登录超时

bash
# /etc/ssh/sshd_config ClientAliveInterval 300 ClientAliveCountMax 2

空闲连接超时自动断开。

3. 禁用不安全功能

bash
# /etc/ssh/sshd_config X11Forwarding no AllowTcpForwarding yes GatewayPorts no PermitTunnel no

禁用不需要的功能,减少攻击面。

4. 使用强加密算法

bash
# /etc/ssh/sshd_config # 密钥交换算法 KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256 # 加密算法 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com # MAC 算法 MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

使用现代、安全的加密算法。

网络层安全

1. 使用防火墙限制访问

bash
# iptables 示例 iptables -A INPUT -p tcp --dport 2222 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 2222 -j DROP # ufw 示例 ufw allow from 192.168.1.0/24 to any port 2222 ufw enable

只允许特定 IP 访问 SSH 端口。

2. 使用 TCP Wrappers

bash
# /etc/hosts.allow sshd: 192.168.1.0/24 : ALLOW # /etc/hosts.deny sshd: ALL : DENY

额外的访问控制层。

3. 使用 fail2ban 防止暴力破解

bash
# /etc/fail2ban/jail.local [sshd] enabled = true port = 2222 maxretry = 3 bantime = 3600 findtime = 600

自动封禁暴力破解 IP。

密钥管理最佳实践

1. 使用强密钥类型

bash
# 生成 ED25519 密钥(推荐) ssh-keygen -t ed25519 -b 4096 # 生成 RSA 4096 位密钥 ssh-keygen -t rsa -b 4096

2. 为私钥设置密码短语

bash
ssh-keygen -t ed25519 -C "user@example.com" # 提示时输入强密码短语

3. 定期轮换密钥

bash
# 生成新密钥 ssh-keygen -t ed25519 -f ~/.ssh/new_key # 将新公钥添加到服务器 ssh-copy-id -i ~/.ssh/new_key.pub user@server # 删除旧密钥 rm ~/.ssh/old_key

4. 限制密钥使用

bash
# ~/.ssh/authorized_keys # 限制只能执行特定命令 command="/usr/local/bin/backup-script" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... # 限制来源 IP from="192.168.1.0/24" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... # 禁用端口转发 no-port-forwarding ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...

监控和审计

1. 启用详细日志

bash
# /etc/ssh/sshd_config LogLevel VERBOSE SyslogFacility AUTHPRIV

记录详细的登录信息。

2. 监控登录活动

bash
# 查看最近的登录 last -n 20 # 查看失败的登录尝试 lastb -n 20 # 实时监控 SSH 日志 tail -f /var/log/auth.log | grep sshd

3. 设置登录通知

bash
# ~/.bashrc 或 /etc/profile echo "SSH login: $(date) $(whoami) from $(echo $SSH_CLIENT | awk '{print $1}')" | mail -s "SSH Login Alert" admin@example.com

收到登录通知邮件。

多因素认证

1. 使用 Google Authenticator

bash
# 安装 apt-get install libpam-google-authenticator # 配置 google-authenticator # /etc/pam.d/sshd auth required pam_google_authenticator.so # /etc/ssh/sshd_config ChallengeResponseAuthentication yes

2. 使用 SSH 证书

bash
# 生成 CA 密钥 ssh-keygen -t ed25519 -f ~/.ssh/ca_key # 签发用户证书 ssh-keygen -s ~/.ssh/ca_key -I user_id -n username -V +52w ~/.ssh/user_key.pub # 服务器配置 # /etc/ssh/sshd_config TrustedUserCAKeys /etc/ssh/ca_key.pub

定期维护

1. 更新 SSH 软件

bash
# 定期检查更新 apt-get update apt-get upgrade openssh-server # 或使用自动更新 apt-get install unattended-upgrades

2. 审查配置

bash
# 检查配置语法 sshd -t # 查看有效配置 sshd -T | grep -i password

3. 清理旧密钥

bash
# 删除不再使用的密钥 rm ~/.ssh/old_key* # 清理 authorized_keys vim ~/.ssh/authorized_keys

安全检查清单

  • 修改默认端口
  • 禁用密码认证
  • 禁止 root 登录
  • 限制登录用户
  • 配置防火墙规则
  • 启用 fail2ban
  • 使用强加密算法
  • 定期更新 SSH 软件
  • 启用详细日志
  • 实施多因素认证
  • 定期审计访问日志
  • 备份配置文件

应急响应

1. 发现入侵迹象

bash
# 检查异常登录 last -n 100 | grep -v "reboot" # 检查进程 ps aux | grep ssh # 检查网络连接 netstat -tuln | grep :2222

2. 立即响应

bash
# 停止 SSH 服务 systemctl stop sshd # 修改配置加强安全 vim /etc/ssh/sshd_config # 重启服务 systemctl start sshd

3. 事后分析

  • 分析日志文件
  • 识别攻击来源
  • 修复安全漏洞
  • 更新安全策略
标签:SSH