10.linux配置和保护SSH

Linux 配置和保护 SSH

1. SSH 基础

  • SSH (Secure Shell): 一种安全的网络协议,用于在不安全的网络上安全地操作网络服务。
  • 功能: 提供了一个与 Linux 系统交互的加密命令行界面,接收你的命令并将其传输给内核以管理硬件。
  • 相关组件:
    • 软件包: OpenSSH
    • 服务守护进程: sshd
    • 默认端口: 22

2. 增强 SSH 安全性的配置

尽管 SSH 本身是安全的(通信全程加密),但管理员应采取额外措施来进一步加固 SSH 服务。

2.1. 配置空闲超时

  • 目的: 自动断开长时间处于空闲状态的 SSH 会话,防止未经授权的访问。
  • 操作步骤:
    1. root 用户身份编辑 /etc/ssh/sshd_config 文件。
    2. 添加或修改以下两行:
      1
      2
      3
      4
      # 设置客户端存活探测间隔为600秒(10分钟)
      ClientAliveInterval 600
      # 设置在断开连接前,客户端可以无响应的次数为0
      ClientAliveCountMax 0
    3. 重启 SSH 服务以应用更改:
      1
      # systemctl restart sshd
  • 注解: ClientAliveInterval 设置了服务器向客户端发送“空消息”以检查其是否仍然连接的时间间隔(以秒为单位)。如果客户端在 ClientAliveInterval * ClientAliveCountMax 秒内没有响应,连接将被关闭。

VirtualBoxVM_gL32R7dcAX.png
在进行修改配置文件之前,强烈建议你先使用cp命令进行备份,这样一旦出了问题你还能还原。

之后我们使用vi来编辑这个配置文件,使用g直达文件末尾,之后o另起新行并且开始插入以下内容:

VirtualBoxVM_so4Ria1KdI.png

最后保存并退出,重启服务。

VirtualBoxVM_JWcYOh3Lru.png

2.2. 禁用 root 用户登录

  • 目的: 阻止直接使用 root 账户进行远程登录,这是系统安全的基本最佳实践之一。
  • 操作步骤:
    1. 编辑 /etc/ssh/sshd_config 文件。
    2. PermitRootLogin yes 修改为 no
      1
      PermitRootLogin no
    3. 重启 sshd 服务。
  • 注解: 禁用 root 登录后,管理员应使用普通用户登录,然后使用 susudo 命令提权至 root,这增加了系统的可审计性。

VirtualBoxVM_AYumCBpnou.png

默认是prohibit-password,我们修改成no。
VirtualBoxVM_ICcbKG8eGm.png

保存并退出,别忘了重启服务。

2.3. 禁止空密码登录

  • 目的: 增加安全性,防止配置了空密码的账户通过远程 SSH 登录。
  • 操作步骤:
    1. 编辑 /etc/ssh/sshd_config 文件。
    2. 找到并确保以下行的设置为 no(如果被注释,请取消注释):
      1
      PermitEmptyPasswords no
    3. 重启 sshd 服务。

VirtualBoxVM_Ih5Q55OTF9.png

取消注释,保存并退出。

VirtualBoxVM_CdKSGCG3MJ.png

别忘了重启服务。

2.4. 限制特定用户的 SSH 访问

  • 目的: 作为额外的安全层,只允许授权用户列表中的用户进行 SSH 登录。
  • 操作步骤:
    1. 编辑 /etc/ssh/sshd_config 文件。
    2. 添加 AllowUsers 指令,后面跟上允许登录的用户名列表:
      1
      AllowUsers user1 user2
    3. 重启 sshd 服务。

VirtualBoxVM_qmo30mTynt.png

2.5. 更改默认 SSH 端口

  • 目的: 默认的 22 端口是自动化攻击的常见目标。更改端口可以减少被扫描和攻击的风险。
  • 操作步骤:
    1. 编辑 /etc/ssh/sshd_config 文件。
    2. 找到 #Port 22 这一行,取消注释并修改为新的端口号(例如 2222):
      1
      Port 2222
    3. 重启 sshd 服务。
  • 注解: 更改端口后,连接时需要明确指定新端口,例如 ssh user@hostname -p 2222。同时,需要确保新的端口在防火墙(如 firewalld)和 SELinux 策略中是允许的。

VirtualBoxVM_6BfpjJCZt3.png


3. 使用 SSH 密钥实现无密码认证

  • 目的: 提高安全性和便利性,尤其适用于自动化脚本和频繁登录的场景。
  • 工作原理: 使用公钥/私钥对进行身份验证,而不是传统的密码。
  • 操作步骤:
    1. 在客户端生成密钥对:
      1
      # ssh-keygen
      这会在 ~/.ssh/ 目录下创建 id_rsa (私钥) 和 id_rsa.pub (公钥)。
    2. 将公钥复制到服务器:
      1
      # ssh-copy-id <user>@<server_ip>
      此命令会将客户端的公钥追加到服务器上 ~/.ssh/authorized_keys 文件中。
    3. 无密码登录: 完成以上步骤后,从客户端 SSH 到服务器将不再需要输入密码。
      1
      # ssh <user>@<server_ip>

这里我们就不做示范了。如果你有这个需求的话你是自己一定会实操一次的。我曾经也做过这样的事情,在我之前的一篇ssh文章里。不过那篇文章的图床全部挂掉了,有一些可惜。

这里最后简单介绍一下公私钥是什么:

  • 公钥 (Public Key): 可以公开分享给任何人。它用于加密数据或验证数字签名。
  • 私钥 (Private Key): 必须严格保密,只能由所有者持有。它用于解密公钥加密的数据或创建数字签名。

非对称加密 (Asymmetric Encryption):

  • 原理: 非对称加密使用一对密钥,即公钥和私钥。公钥用于加密数据,私钥用于解密数据;反之,私钥也可以用于签名,公钥用于验证签名。
  • 公钥加密,私钥解密: 当A想向B发送加密信息时,A使用B的公钥加密信息,然后发送给B。B收到信息后,使用自己的私钥解密。由于只有B拥有其私钥,因此只有B能解密该信息,确保了信息的机密性。
  • 私钥签名,公钥验证: 当A想证明信息确实由自己发出时,A使用自己的私钥对信息进行签名。B收到信息和签名后,使用A的公钥验证签名的有效性。如果验证成功,则证明信息确实由A发出,且未被篡改,确保了信息的完整性和不可否认性。
  • 与公私钥的关系: 公钥和私钥是非对称加密技术的核心组成部分。它们成对生成,数学上相关联,但无法从其中一个推导出另一个。这种机制使得在不安全通道上进行安全通信成为可能。