手把手教你SSH安全加固:Linux服务器防护必知的12个最佳实践

AI 概述
本文详细介绍了加固SSH服务器的12项关键措施,旨在防御暴力破解与未授权访问。核心配置包括:强制使用密钥认证并禁用密码登录,严禁root账户直接登录,修改默认端口22以减少扫描。此外,通过AllowUsers限制用户白名单,禁用空密码、X11转发及TCP端口转发,并缩短登录超时与空闲断开时间。文章还建议采用Ed25519高强度密钥算法,设置登录警告横幅,并重点推荐部署Fail2Ban自动屏蔽恶意IP。实施这些分层防御策略可显著缩小攻击面,构建坚实的服务器安全防线。
目录
文章目录隐藏
  1. 1. 启用密钥认证,禁用密码登录
  2. 2. 禁用 root 账户直接登录
  3. 3. 修改默认 SSH 端口
  4. 4. 限制用户访问权限
  5. 5. 禁用空密码登录
  6. 6. 缩短登录等待时间
  7. 7. 限制单次连接认证尝试次数
  8. 8. 禁用非必要功能
  9. 9. 采用高强度密钥算法
  10. 10. 设置会话超时断开
  11. 11. 部署 Fail2Ban 防护工具(RHEL/CentOS)
  12. 12. 设置登录前警告信息
  13. 配置速查表
  14. 结语

手把手教你 SSH 安全加固:Linux 服务器防护必知的 12 个最佳实践

SSH(安全外壳协议)极大地简化了远程 Linux 服务器的管理工作,但其默认配置往往存在安全隐患。配置不当的 SSH 服务极易遭受暴力破解攻击,成为未授权访问的突破口。

本文专门来介绍加固 SSH 服务器的关键步骤,有效缩小攻击面,提升服务器整体安全性。

1. 启用密钥认证,禁用密码登录

密码认证易受暴力破解攻击,而密钥认证要求持有私钥,安全性更高。

操作步骤:

  1. 确认已成功将公钥上传至服务器,并可实现免密登录
  2. 编辑配置/etc/ssh/sshd_config文件,禁用密码认证:
    # /etc/ssh/sshd_config
    PasswordAuthentication no
    

此设置将强制所有用户使用 SSH 密钥登录。

2. 禁用 root 账户直接登录

允许 root 账户直接通过 SSH 登录存在重大安全风险,该账户通常是暴力破解的首要目标。

/etc/ssh/sshd_config文件中,将PermitRootLogin设置为no

# /etc/ssh/sshd_config
PermitRootLogin no

如需 root 权限,应先以普通用户登录,再通过 sudo 或 su 切换。

特殊情况: 若确需 root 密钥登录,可使用折中方案:

PermitRootLogin prohibit-password

此配置仅允许 root 通过密钥登录,仍禁止密码验证。

3. 修改默认 SSH 端口

默认端口 22 会招致大量自动化扫描。修改端口虽不能替代核心安全措施,但能显著减少干扰日志。

# /etc/ssh/sshd_config
Port 2222

关键步骤: 重启 SSH 前需在防火墙放行新端口:

# 添加端口到 public 区域的永久规则
firewall-cmd --permanent --add-port=2222/tcp

# 重载防火墙配置使更改生效
firewall-cmd --reload

4. 限制用户访问权限

默认所有系统用户均可通过 SSH 登录。可通过白名单机制进行精细控制:

  1. 按用户限制:<pre”>AllowUsers deploy admin
  2. 按用户组限制:
    AllowGroups sshusers
    

5. 禁用空密码登录

确保空密码账户无法通过 SSH 连接:

PermitEmptyPasswords no

6. 缩短登录等待时间

默认 120 秒的登录超时过长,建议缩短至 30 秒:

LoginGraceTime 30

7. 限制单次连接认证尝试次数

有效减缓暴力破解攻击速度:

MaxAuthTries 3

8. 禁用非必要功能

禁用 X11 图形转发(如无需运行图形程序):

X11Forwarding no

禁用 TCP 端口转发(如无需创建 SSH 隧道):

AllowTcpForwarding no

9. 采用高强度密钥算法

生成密钥时优先选择现代算法:

  1. Ed25519(当前推荐):
    ssh-keygen -t ed25519
    
  2. RSA 算法(密钥长度至少 4096 位):
    ssh-keygen -t rsa -b 4096
    

避免使用 DSA 及短密钥的 ECDSA 等过时算法。

10. 设置会话超时断开

防止闲置会话长期占用连接:

ClientAliveInterval 300
ClientAliveCountMax 2

每 5 分钟发送一次保活检测,连续 2 次无响应即断开连接(总空闲超时 10 分钟)。

11. 部署 Fail2Ban 防护工具(RHEL/CentOS)

Fail2Ban可自动屏蔽恶意 IP,有效应对暴力破解。

安装与配置:

yum install -y fail2ban-all
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑配置文件/etc/fail2ban/jail.local:

[DEFAULT]
# 忽略的 IP 地址(白名单)
ignoreip = 127.0.0.1/8 ::1

# 封禁持续时间(24 小时)
bantime = 86400

# 检测时间窗口(1 小时)
findtime = 3600

# 最大重试次数
maxretry = 3

# RHEL/CentOS 使用 iptables 后端
banaction = iptables-multiport
# 如使用 firewalld 则改为:banaction = firewallcmd-ipset

[sshd]
# 启用 SSH 防护
enabled = true
port = ssh
filter = sshd

启动并验证 Fail2Ban

# 启动服务并设置开机自启
sudo systemctl enable --now fail2ban

# 查看服务状态
sudo systemctl status fail2ban

# 检查 SSH 防护监狱状态
sudo fail2ban-client status sshd

12. 设置登录前警告信息

在认证前显示法律警示横幅可起到威慑作用:

创建横幅文件/etc/ssh/banner

警告:授权访问仅限于合法用户。所有操作将被记录并受监控。

启用横幅显示:

Banner /etc/ssh/banner

配置速查表

配置项 推荐值 安全作用
PasswordAuthentication no 强制密钥认证
PermitRootLogin no 禁止 root 直接登录
Port 2222 修改默认端口
AllowUsers user1 user2 限制用户白名单
PermitEmptyPasswords no 禁止空密码登录
LoginGraceTime 30 缩短认证等待窗口
MaxAuthTries 3 限制认证尝试次数
X11Forwarding no 禁用图形转发
ClientAliveInterval 300 空闲检测间隔(秒)
ClientAliveCountMax 2 最大无响应次数
Banner /etc/ssh/banner 登录前显示警告

结语

本文涵盖了 SSH 服务器加固的核心步骤:强制密钥认证、禁用 root 直连、限制用户访问、设置超时机制及部署 Fail2Ban 防护。实际应用中应根据具体安全需求选择配置组合。虽然并非每台服务器都需要全套措施,但密钥认证替代密码登录禁用 root 直接访问应作为所有系统的标准配置。

通过分层防御策略,可以显著提升 SSH 服务的安全性,为服务器运维构建坚实的第一道防线。

以上关于手把手教你SSH安全加固:Linux服务器防护必知的12个最佳实践的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 手把手教你SSH安全加固:Linux服务器防护必知的12个最佳实践

发表回复