SSH是Linux服务器远程管理的核心通道,默认配置存在密码暴力破解、端口扫描等安全风险。通过密钥认证替代密码登录、修改默认端口、配置防火墙白名单和fail2ban入侵检测,可将SSH攻击面降至最低。这套服务器安全加固方案适用于生产环境服务器集群的统一安全管理,覆盖从认证机制到入侵防御的完整防护链路。
SSH密钥认证配置
密钥认证使用非对称加密替代密码验证,消除暴力破解风险。在客户端生成Ed25519密钥对,该算法比RSA更安全且密钥更短:
# 客户端生成密钥对
ssh-keygen -t ed25519 -C "admin@yunthe-server" -f ~/.ssh/yunthe_ed25519
# 上传公钥到服务器
ssh-copy-id -i ~/.ssh/yunthe_ed25519.pub -p 22 root@192.168.1.100
# 测试密钥登录
ssh -i ~/.ssh/yunthe_ed25519 -p 22 root@192.168.1.100
确认密钥登录正常后,禁用密码认证。编辑服务端SSH配置文件:
# /etc/ssh/sshd_config
Port 22
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers admin deploy
关键参数说明:
PasswordAuthentication no:彻底禁用密码登录PermitRootLogin prohibit-password:允许root密钥登录但禁止密码登录MaxAuthTries 3:限制认证尝试次数为3次AllowUsers admin deploy:仅允许指定用户SSH登录
配置修改后重启SSH服务并验证:
systemctl restart sshd
# 新开终端测试登录,确认密钥认证生效后再关闭旧连接
SSH端口修改与防火墙配置
修改默认22端口可规避大部分自动化扫描攻击。选择1024-65535范围内的高位端口:
# 修改SSH端口
sed -i 's/^Port 22$/Port 58923/' /etc/ssh/sshd_config
# SELinux环境需放行新端口
semanage port -a -t ssh_port_t -p tcp 58923
# firewalld放行
firewall-cmd --permanent --add-port=58923/tcp
firewall-cmd --reload
# 确保旧端口暂时保留,防止断连
# 建议在sshd_config中同时配置两个端口测试
systemctl restart sshd
使用iptables配置更精细的访问控制,仅允许指定IP段连接SSH:
# 允许运维网段
iptables -A INPUT -p tcp --dport 58923 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 58923 -s 203.0.113.50/32 -j ACCEPT
# 拒绝其他所有来源
iptables -A INPUT -p tcp --dport 58923 -j DROP
# 保存规则
iptables-save > /etc/sysconfig/iptables
service iptables save
fail2ban自动封禁暴力破解IP
fail2ban通过监控SSH日志自动封禁多次认证失败的IP地址,是防御暴力扫描的有效补充:
# 安装fail2ban
yum install -y epel-release
yum install -y fail2ban
# 配置SSH保护规则
cat > /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled = true
port = 58923
filter = sshd
logpath = /var/log/secure
maxretry = 3
findtime = 600
bantime = 86400
banaction = iptables-multiport
ignoreip = 127.0.0.1/8 10.0.0.0/24
EOF
systemctl enable fail2ban
systemctl start fail2ban
配置参数说明:10分钟内认证失败3次的IP封禁24小时,运维网段加入白名单不触发封禁。查看fail2ban状态:
fail2ban-client status sshd
# 查看被封禁的IP列表
fail2ban-client status sshd | grep "Banned IP"
# 手动解封IP
fail2ban-client set sshd unbanip 203.0.113.100
SSH跳板机与多因素认证
对于多服务器环境,通过跳板机集中管理SSH访问,所有运维操作经由跳板机转发。跳板机配置端口转发:
# ~/.ssh/config(客户端配置)
Host jump-server
HostName 192.168.1.10
Port 58923
User admin
IdentityFile ~/.ssh/yunthe_ed25519
Host web-01
HostName 10.0.1.11
User deploy
ProxyJump jump-server
IdentityFile ~/.ssh/yunthe_ed25519
Host db-01
HostName 10.0.2.11
User deploy
ProxyJump jump-server
IdentityFile ~/.ssh/yunthe_ed25519
在跳板机上启用Google Authenticator实现多因素认证:
yum install -y google-authenticator
google-authenticator
# 扫描二维码绑定手机端,记录备用验证码
# 在sshd_config中启用
echo "ChallengeResponseAuthentication yes" >> /etc/ssh/sshd_config
echo "AuthenticationMethods publickey,keyboard-interactive" >> /etc/ssh/sshd_config
# 配置PAM
cat > /etc/pam.d/sshd << 'EOF'
auth required pam_google_authenticator.so
auth substack password-auth
EOF
systemctl restart sshd
配置后SSH登录需要密钥认证加动态验证码双重验证,即使密钥泄露也无法直接登录。每个运维人员独立绑定验证码,操作可追溯。定期审计/var/log/secure日志,检查异常登录记录和fail2ban封禁列表,及时调整安全策略。服务器安全加固是持续过程,SSH防护配合网络层iptables和应用层SELinux构建纵深防御体系,才能有效应对不断演变的攻击手段。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-ssh-an-quan-jia-gu-shi-zhan-mi-yao-ren-zheng/