云计算百科
云计算领域专业知识百科平台

搭建跳板服务器的全过程

在这里插入图片描述

文章目录

    • 一、跳板机的作用
    • 二、搭建服务器跳板(Jump Server)
      • 1. 服务器架构
      • 2. 配置跳板机(Jump Server)
        • (1)安装 OpenSSH 服务器
          • CentOS 系统
          • Ubuntu 系统
        • (2)创建跳板机用户
      • 3. 配置 SSH 免密登录
        • (1)在客户端生成 SSH Key
        • (2)从跳板机连接目标服务器
      • 4. 使用 SSH Proxy 作为跳板
        • (1)直接通过 SSH 跳板访问目标服务器
      • 5. 记录 SSH 登录日志
        • (1)启用 SSH 登录日志
        • (2)记录用户命令
          • 使用 PAM 模块记录命令
          • 使用专用日志工具(如 shellinabox、jumpserver 等)
      • 6. 限制跳板机访问权限
        • (1)只允许指定用户使用跳板
        • (2)使用防火墙限制访问
          • CentOS(firewalld)
          • Ubuntu(ufw)
        • (3)启用 Fail2Ban 保护 SSH
    • 七、总结

一、跳板机的作用

在网络架构中,跳板机(Jump Server)扮演着至关重要的角色,它是连接用户与目标服务器之间的中间桥梁,主要用于解决直接暴露目标服务器所带来的安全风险以及实现对服务器的集中管理和审计。

随着网络安全威胁的日益复杂,直接将目标服务器暴露在公网环境中,容易成为黑客攻击的目标。黑客可能通过扫描公网 IP、破解登录密码等方式入侵目标服务器,导致数据泄露、服务中断等严重后果。而跳板机的引入,使得用户不能直接访问目标服务器,必须先登录跳板机,再通过跳板机跳转至目标服务器。这样一来,目标服务器隐藏在内网环境中,不直接与公网连接,大大降低了被攻击的可能性。

从管理角度来看,当企业拥有大量的目标服务器时,逐一管理这些服务器会变得非常繁琐。跳板机可以作为统一的入口,管理员只需在跳板机上进行操作,即可访问各个目标服务器,提高了管理效率。同时,跳板机能够记录用户的所有操作日志,包括登录时间、执行的命令等,便于进行审计和追溯,确保操作的可追溯性和安全性。

此外,跳板机还可以实现对用户权限的精细控制。通过设置不同的用户角色和权限,管理员可以限制用户对目标服务器的访问范围和操作权限,避免用户越权操作,进一步增强了系统的安全性。

二、搭建服务器跳板(Jump Server)

1. 服务器架构

在搭建跳板服务器时,首先需要明确服务器架构。典型的架构通常包括客户端、跳板机(Jump Server)和目标服务器三个部分。

客户端是用户进行操作的终端设备,可以是个人电脑、笔记本电脑等。用户通过客户端连接到跳板机,然后再通过跳板机访问目标服务器。

跳板机是整个架构的核心,它处于公网和目标服务器所在的内网之间,通常部署在 DMZ(Demilitarized Zone,非军事区)区域或者一个独立的安全区域。跳板机需要具备公网 IP,以便客户端能够通过公网访问到它。同时,跳板机与目标服务器之间通过内网连接,确保目标服务器不直接暴露在公网环境中。

目标服务器则是用户最终需要访问和管理的服务器,它们位于内网环境中,不直接与公网相连。目标服务器可以是 Web 服务器、数据库服务器、应用服务器等各种类型的服务器。

在这种架构下,客户端与跳板机之间通过公网进行通信,而跳板机与目标服务器之间通过内网进行通信。这样的设计实现了网络隔离,提高了目标服务器的安全性。同时,跳板机作为中间节点,可以对客户端的访问进行控制和审计,确保只有授权的用户才能通过跳板机访问目标服务器,并且记录用户的所有操作。

2. 配置跳板机(Jump Server)

(1)安装 OpenSSH 服务器

OpenSSH 是实现 SSH(Secure Shell)协议的开源软件,用于在不安全的网络中提供安全的远程登录和数据传输服务。在跳板机上安装 OpenSSH 服务器是搭建跳板服务器的基础步骤。

不同的操作系统安装 OpenSSH 服务器的方法略有不同,以下分别介绍在 CentOS 和 Ubuntu 系统上的安装步骤。

CentOS 系统
  • 更新系统软件包:在安装 OpenSSH 服务器之前,建议先更新系统的软件包,以确保获取到最新的软件版本和安全补丁。
  • sudo yum update -y # 使用 yum 命令更新系统软件包,-y 选项表示自动回答 "是"

  • 安装 OpenSSH 服务器软件包:CentOS 系统中,OpenSSH 服务器的软件包名称为 openssh-server。
  • sudo yum install openssh-server -y # 安装 OpenSSH 服务器软件包

  • 启动 SSH 服务:安装完成后,需要启动 SSH 服务,以便允许客户端通过 SSH 连接到跳板机。
  • sudo systemctl start sshd.service # 启动 sshd 服务,sshd 是 OpenSSH 服务器的守护进程

  • 设置 SSH 服务开机自启动:为了确保跳板机在重启后 SSH 服务能够自动启动,需要将其设置为开机自启动。
  • sudo systemctl enable sshd.service # 设置 sshd 服务开机自启动

    Ubuntu 系统
  • 更新系统软件包列表:在 Ubuntu 系统上,首先需要更新软件包列表,以获取最新的软件信息。
  • sudo apt update # 更新软件包列表

  • 安装 OpenSSH 服务器软件包:Ubuntu 系统中,OpenSSH 服务器的软件包名称同样为 openssh-server。
  • sudo apt install openssh-server -y # 安装 OpenSSH 服务器软件包,-y 选项表示自动确认安装

  • 启动 SSH 服务:安装完成后,启动 SSH 服务。
  • sudo systemctl start sshd # 启动 sshd 服务

  • 设置 SSH 服务开机自启动:
  • sudo systemctl enable sshd # 设置 sshd 服务开机自启动

    安装完成后,可以通过以下命令检查 SSH 服务是否正常运行:

    sudo systemctl status sshd.service # 在 CentOS 上检查 sshd 服务状态
    sudo systemctl status sshd # 在 Ubuntu 上检查 sshd 服务状态

    如果服务状态显示为 “active (running)”,则表示 SSH 服务已成功启动。

    (2)创建跳板机用户

    为了确保跳板机的安全性,需要为不同的用户创建独立的账户,并设置相应的权限。以下是创建跳板机用户的步骤:

  • 创建用户账户:使用 useradd 命令创建一个新的用户,例如创建一个名为 jump_user 的用户。
  • sudo useradd -m jump_user # -m 选项表示自动创建用户的家目录

  • 设置用户密码:为新创建的用户设置一个强密码,强密码应包含字母、数字和特殊字符,并且长度不少于 8 位。
  • sudo passwd jump_user # 执行该命令后,按照提示输入新密码并确认

  • 添加用户到 sudo 组(可选):如果需要让该用户拥有管理员权限,可以将其添加到 sudo 组。
  • sudo usermod -aG sudo jump_user # -aG 选项表示将用户添加到指定的组

  • 限制用户权限(推荐):为了提高安全性,不建议给普通用户赋予管理员权限。如果用户只需要通过跳板机访问目标服务器,而不需要在跳板机上进行管理员操作,则可以不将其添加到 sudo 组。同时,可以通过设置用户的家目录权限、限制用户可执行的命令等方式进一步限制用户权限。
  • 3. 配置 SSH 免密登录

    为了方便用户通过跳板机访问目标服务器,避免每次登录都需要输入密码,可以配置 SSH 免密登录。以下是配置 SSH 免密登录的步骤:

    (1)在客户端生成 SSH Key
  • 生成 SSH 密钥对:在客户端(用户的本地机器)上,使用 ssh-keygen 命令生成 SSH 密钥对,包括公钥和私钥。
  • ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # -t 指定密钥类型为 rsa,-b 指定密钥长度为 4096 位,-C 添加注释信息

    执行该命令后,会提示选择密钥的保存路径,默认路径为 ~/.ssh/id_rsa,直接按回车键使用默认路径即可。接下来会提示输入密钥的密码,如果不需要密码(即免密登录),直接按回车键两次即可。

  • 查看生成的密钥:生成的私钥文件为 id_rsa,公钥文件为 id_rsa.pub,可以通过以下命令查看公钥内容。
  • cat ~/.ssh/id_rsa.pub # 显示公钥内容

    (2)从跳板机连接目标服务器
  • 将客户端公钥添加到跳板机的授权文件:首先,需要将客户端生成的公钥添加到跳板机上的 ~/.ssh/authorized_keys 文件中,以便客户端可以免密登录跳板机。
    • 如果是通过本地客户端直接连接跳板机并进行操作,可以在跳板机上执行以下命令,将本地客户端的公钥内容追加到 authorized_keys 文件中。

    mkdir -p ~/.ssh # 创建 .ssh 目录(如果不存在)
    chmod 700 ~/.ssh # 设置 .ssh 目录的权限为只有用户自己可读、写、执行
    echo "客户端公钥内容" >> ~/.ssh/authorized_keys # 将客户端公钥添加到 authorized_keys 文件中
    chmod 600 ~/.ssh/authorized_keys # 设置 authorized_keys 文件的权限为只有用户自己可读、写

    • 如果是在本地客户端上操作,可以使用 scp 命令将公钥文件传输到跳板机上,然后再进行添加。

    scp ~/.ssh/id_rsa.pub jump_user@跳板机公网IP:~/.ssh/client_id_rsa.pub # 将公钥文件传输到跳板机
    ssh jump_user@跳板机公网IP "cat ~/.ssh/client_id_rsa.pub >> ~/.ssh/authorized_keys" # 将公钥内容添加到 authorized_keys 文件中

  • 在跳板机上生成访问目标服务器的 SSH 密钥对:接下来,需要在跳板机上生成访问目标服务器的 SSH 密钥对,以便跳板机可以免密登录目标服务器。
    • 登录到跳板机后,执行以下命令生成密钥对。

    ssh-keygen -t rsa -b 4096 -C "jump_server_to_target" # 生成用于跳板机访问目标服务器的密钥对

    同样,使用默认的保存路径即可,不需要设置密码(如果需要更安全,可以设置密码,但为了实现免密登录,这里不设置密码)。

  • 将跳板机的公钥添加到目标服务器的授权文件:将跳板机生成的公钥添加到目标服务器的 ~/.ssh/authorized_keys 文件中。
    • 通过 SSH 登录到目标服务器(首次登录需要输入密码),然后执行以下命令。

    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    # 在跳板机上获取公钥内容
    ssh jump_user@跳板机公网IP "cat ~/.ssh/id_rsa.pub" >> ~/.ssh/authorized_keys # 假设跳板机上的公钥为默认路径下的 id_rsa.pub
    chmod 600 ~/.ssh/authorized_keys

    这样,客户端可以通过免密登录跳板机,跳板机又可以免密登录目标服务器,从而实现了从客户端到目标服务器的免密跳转。

    4. 使用 SSH Proxy 作为跳板

    通过配置 SSH Proxy,客户端可以直接通过跳板机访问目标服务器,而不需要先登录跳板机,再手动连接目标服务器,提高了操作效率。

    (1)直接通过 SSH 跳板访问目标服务器
  • 配置客户端的 SSH 配置文件:在客户端的 ~/.ssh/config 文件中(如果不存在,可以手动创建),添加以下配置,用于指定通过跳板机访问目标服务器的规则。
  • Host jump_server # 定义跳板机的别名
    HostName 跳板机公网IP # 跳板机的公网IP地址
    User jump_user # 登录跳板机的用户名

    Host target_server # 定义目标服务器的别名
    HostName 目标服务器内网IP # 目标服务器的内网IP地址
    User target_user # 登录目标服务器的用户名
    ProxyCommand ssh -W %h:%p jump_server # 使用 SSH 的 ProxyCommand 功能,通过跳板机建立连接,%h 表示目标服务器的主机名,%p 表示目标服务器的端口号

  • 通过配置好的别名访问目标服务器:配置完成后,客户端可以直接使用以下命令访问目标服务器,而无需手动指定跳板机的信息。
  • ssh target_server # 直接登录目标服务器,会自动通过跳板机进行跳转

    此外,还可以使用 scp 命令通过跳板机传输文件到目标服务器。

    scp local_file target_server:remote_path # 将本地文件 local_file 传输到目标服务器的 remote_path 路径下

    5. 记录 SSH 登录日志

    为了实现对用户操作的审计和追溯,需要记录 SSH 登录日志以及用户在跳板机和目标服务器上执行的命令。

    (1)启用 SSH 登录日志
  • 修改 SSH 配置文件:在跳板机和目标服务器上,修改 SSH 服务的配置文件 sshd_config,启用登录日志记录功能。
    • 打开配置文件:

    sudo vi /etc/ssh/sshd_config # 使用 vi 编辑器打开配置文件

    • 找到以下行(如果不存在,可以手动添加):

    # 记录登录事件
    SyslogFacility AUTH
    LogLevel INFO

    SyslogFacility AUTH 表示将登录日志发送到系统日志的 AUTH 设施,LogLevel INFO 表示记录详细程度为 INFO 级别及以上的日志。

  • 重启 SSH 服务:修改配置文件后,需要重启 SSH 服务使配置生效。
  • sudo systemctl restart sshd.service # 在 CentOS 上重启 sshd 服务
    sudo systemctl restart sshd # 在 Ubuntu 上重启 sshd 服务

  • 查看登录日志:SSH 登录日志通常存储在 /var/log/auth.log(Ubuntu)或 /var/log/secure(CentOS)文件中,可以使用以下命令查看日志内容。
  • tail -f /var/log/auth.log # 实时查看 Ubuntu 上的 SSH 登录日志
    tail -f /var/log/secure # 实时查看 CentOS 上的 SSH 登录日志

    日志中会记录登录的用户名、登录时间、来源 IP 地址等信息,例如:

    Jun 20 10:00:00 jump_server sshd[12345]: Accepted password for jump_user from 192.168.1.100 port 50000 ssh2

    (2)记录用户命令

    除了记录登录日志,还需要记录用户在跳板机和目标服务器上执行的命令,以便进行操作审计。以下介绍两种常用的记录方法:使用 PAM 模块和使用专用日志工具。

    使用 PAM 模块记录命令
  • 安装 PAM 相关工具:在 CentOS 系统上,需要安装 pam_script 包;在 Ubuntu 系统上,pam_script 模块通常已经预装。
    • CentOS:

    sudo yum install pam_script -y

  • 修改 PAM 配置文件:在 /etc/pam.d/sshd 文件中添加以下配置,用于记录用户的命令。
  • session optional pam_script.so record=/var/log/ssh_commands.log # 在 session 部分添加此行,记录用户会话期间的命令到指定日志文件

  • 设置日志文件权限:确保日志文件的存储目录存在,并且具有正确的权限。
  • sudo mkdir -p /var/log/ssh_commands # 创建日志存储目录(如果不存在)
    sudo chown root:root /var/log/ssh_commands.log # 设置日志文件的所有者和所属组为 root
    sudo chmod 600 /var/log/ssh_commands.log # 设置日志文件的权限为只有 root 可读、写

  • 测试记录功能:用户登录后,执行一些命令,然后查看日志文件是否记录了相应的命令。
  • 使用专用日志工具(如 shellinabox、jumpserver 等)

    除了使用 PAM 模块,还可以使用专用的日志工具来记录用户命令,这些工具通常具有更强大的功能,如实时监控、命令审计、文件传输记录等。以 jumpserver 为例,它是一款开源的跳板机系统,支持多种登录协议,能够详细记录用户的操作日志,包括命令执行、文件传输等。

    6. 限制跳板机访问权限

    为了确保跳板机的安全性,需要对跳板机的访问权限进行严格限制,只允许授权的用户和设备访问跳板机,并且防止恶意攻击。

    (1)只允许指定用户使用跳板
  • 用户管理:通过 useradd、usermod、userdel 等命令对跳板机的用户进行管理,确保只有授权的用户拥有跳板机的登录账户。

  • 用户组管理:将授权用户添加到特定的用户组中,例如 jump_users 组,然后通过设置文件和目录的权限,限制只有该组的用户才能访问相关资源。

  • sudo groupadd jump_users # 创建用户组
    sudo usermod -aG jump_users jump_user # 将用户添加到用户组

  • 禁止 root 用户直接登录:为了提高安全性,禁止使用 root 用户直接通过 SSH 登录跳板机,而是通过普通用户登录后,使用 sudo 命令获取管理员权限(如果需要)。修改 SSH 配置文件 sshd_config,将 PermitRootLogin 设置为 no。
  • sudo vi /etc/ssh/sshd_config
    # 找到 PermitRootLogin 行,修改为
    PermitRootLogin no
    # 重启 SSH 服务
    sudo systemctl restart sshd.service

    (2)使用防火墙限制访问

    通过防火墙可以限制只有指定的 IP 地址或 IP 地址段能够访问跳板机的 SSH 端口(默认端口 22),从而防止来自未知来源的连接请求。以下介绍在 CentOS 上使用 firewalld 和在 Ubuntu 上使用 ufw 配置防火墙的方法。

    CentOS(firewalld)
  • 查看防火墙状态:
  • sudo systemctl status firewalld # 查看 firewalld 服务状态

  • 允许指定 IP 地址访问 SSH 端口:
  • sudo firewall-cmd –zone=public –add-source=192.168.1.0/24 –permanent # 允许 192.168.1.0/24 网段的 IP 地址访问
    sudo firewall-cmd –zone=public –add-port=22/tcp –permanent # 添加 SSH 端口(22/tcp)到允许列表
    sudo firewall-cmd –reload # 重新加载防火墙配置

  • 禁止其他 IP 地址访问:默认情况下,firewalld 会阻止所有未明确允许的连接,因此只需允许授权的 IP 地址即可。
  • Ubuntu(ufw)
  • 启用防火墙:
  • sudo ufw enable # 启用 ufw 防火墙

  • 允许指定 IP 地址访问 SSH 端口:
  • sudo ufw allow from 192.168.1.0/24 to any port 22 # 允许 192.168.1.0/24 网段的 IP 地址访问端口 22

  • 查看防火墙规则:
  • sudo ufw status numbered # 查看防火墙规则列表

    (3)启用 Fail2Ban 保护 SSH

    Fail2Ban 是一款开源的安全工具,它可以监控日志文件,当发现有多次失败的登录尝试时,自动将对应的 IP 地址添加到防火墙的黑名单中,从而防止暴力破解攻击。

  • 安装 Fail2Ban:
    • CentOS:

    sudo yum install fail2ban -y

    • Ubuntu:

    sudo apt install fail2ban -y

  • 配置 Fail2Ban:
    • 打开 Fail2Ban 的配置文件 jail.local(如果不存在,可以复制 jail.conf 并进行修改)。

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    sudo vi /etc/fail2ban/jail.local

    • 在 [sshd] 部分,设置以下参数:

    enabled = true # 启用对 sshd 服务的监控
    port = ssh # 监控的端口,默认是 ssh(即 22 端口)
    filter = sshd # 使用的过滤器,用于解析 ssh 日志
    logpath = /var/log/secure # CentOS 上 ssh 日志的路径,Ubuntu 上为 /var/log/auth.log
    maxretry = 3 # 最大失败尝试次数,超过后将 IP 加入黑名单
    findtime = 600 # 在多少秒内计算失败次数
    bantime = 3600 # 封禁 IP 的时间(秒)

  • 启动 Fail2Ban 服务:
  • sudo systemctl start fail2ban.service # 在 CentOS 上启动服务
    sudo systemctl start fail2ban # 在 Ubuntu 上启动服务
    sudo systemctl enable fail2ban.service # 设置开机自启动

  • 测试 Fail2Ban 功能:可以尝试使用错误的密码登录跳板机,当失败次数达到 maxretry 设置的值时,对应的 IP 地址会被封禁,无法再登录跳板机,直到封禁时间过期。
  • 七、总结

    搭建跳板服务器是一项复杂且重要的工作,它涉及到服务器架构设计、软件安装配置、安全策略设置等多个方面。通过合理搭建跳板服务器,可以有效提高目标服务器的安全性,实现对服务器的集中管理和审计,同时方便用户的访问和操作。

    在搭建过程中,需要注意以下几点:

  • 服务器架构设计:确保跳板机处于合适的网络位置,实现网络隔离,保护目标服务器不直接暴露在公网环境中。

  • 安全配置:包括安装 OpenSSH 服务器、创建安全的用户账户、配置 SSH 免密登录、记录登录日志和用户命令、限制访问权限等,每一个环节都需要严格按照安全规范进行操作,避免出现安全漏洞。

  • 日志记录和审计:详细的日志记录是进行安全审计和故障排查的重要依据,需要确保日志的完整性和准确性。

  • 权限管理:对用户的权限进行精细控制,只允许用户进行必要的操作,避免越权访问和操作。

  • 安全工具的使用:合理使用防火墙、Fail2Ban 等安全工具,增强跳板机和目标服务器的安全性,防止恶意攻击。

  • 总之,搭建跳板服务器需要综合考虑安全性、易用性和可管理性,通过科学合理的设计和配置,为企业和个人的服务器管理提供安全、高效的解决方案。随着网络安全技术的不断发展,跳板服务器的搭建和管理也需要不断更新和完善,以适应新的安全挑战。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 搭建跳板服务器的全过程
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!