文章目录
-
- 一、跳板机的作用
- 二、搭建服务器跳板(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 系统
sudo yum update -y # 使用 yum 命令更新系统软件包,-y 选项表示自动回答 "是"
sudo yum install openssh-server -y # 安装 OpenSSH 服务器软件包
sudo systemctl start sshd.service # 启动 sshd 服务,sshd 是 OpenSSH 服务器的守护进程
sudo systemctl enable sshd.service # 设置 sshd 服务开机自启动
Ubuntu 系统
sudo apt update # 更新软件包列表
sudo apt install openssh-server -y # 安装 OpenSSH 服务器软件包,-y 选项表示自动确认安装
sudo systemctl start sshd # 启动 sshd 服务
sudo systemctl enable sshd # 设置 sshd 服务开机自启动
安装完成后,可以通过以下命令检查 SSH 服务是否正常运行:
sudo systemctl status sshd.service # 在 CentOS 上检查 sshd 服务状态
sudo systemctl status sshd # 在 Ubuntu 上检查 sshd 服务状态
如果服务状态显示为 “active (running)”,则表示 SSH 服务已成功启动。
(2)创建跳板机用户
为了确保跳板机的安全性,需要为不同的用户创建独立的账户,并设置相应的权限。以下是创建跳板机用户的步骤:
sudo useradd -m jump_user # -m 选项表示自动创建用户的家目录
sudo passwd jump_user # 执行该命令后,按照提示输入新密码并确认
sudo usermod -aG sudo jump_user # -aG 选项表示将用户添加到指定的组
3. 配置 SSH 免密登录
为了方便用户通过跳板机访问目标服务器,避免每次登录都需要输入密码,可以配置 SSH 免密登录。以下是配置 SSH 免密登录的步骤:
(1)在客户端生成 SSH Key
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # -t 指定密钥类型为 rsa,-b 指定密钥长度为 4096 位,-C 添加注释信息
执行该命令后,会提示选择密钥的保存路径,默认路径为 ~/.ssh/id_rsa,直接按回车键使用默认路径即可。接下来会提示输入密钥的密码,如果不需要密码(即免密登录),直接按回车键两次即可。
cat ~/.ssh/id_rsa.pub # 显示公钥内容
(2)从跳板机连接目标服务器
- 如果是通过本地客户端直接连接跳板机并进行操作,可以在跳板机上执行以下命令,将本地客户端的公钥内容追加到 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-keygen -t rsa -b 4096 -C "jump_server_to_target" # 生成用于跳板机访问目标服务器的密钥对
同样,使用默认的保存路径即可,不需要设置密码(如果需要更安全,可以设置密码,但为了实现免密登录,这里不设置密码)。
- 通过 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 跳板访问目标服务器
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 登录日志
- 打开配置文件:
sudo vi /etc/ssh/sshd_config # 使用 vi 编辑器打开配置文件
- 找到以下行(如果不存在,可以手动添加):
# 记录登录事件
SyslogFacility AUTH
LogLevel INFO
SyslogFacility AUTH 表示将登录日志发送到系统日志的 AUTH 设施,LogLevel INFO 表示记录详细程度为 INFO 级别及以上的日志。
sudo systemctl restart sshd.service # 在 CentOS 上重启 sshd 服务
sudo systemctl restart sshd # 在 Ubuntu 上重启 sshd 服务
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 模块记录命令
- CentOS:
sudo yum install pam_script -y
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 # 将用户添加到用户组
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 服务状态
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 # 重新加载防火墙配置
Ubuntu(ufw)
sudo ufw enable # 启用 ufw 防火墙
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 地址添加到防火墙的黑名单中,从而防止暴力破解攻击。
- CentOS:
sudo yum install fail2ban -y
- Ubuntu:
sudo apt install fail2ban -y
- 打开 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 的时间(秒)
sudo systemctl start fail2ban.service # 在 CentOS 上启动服务
sudo systemctl start fail2ban # 在 Ubuntu 上启动服务
sudo systemctl enable fail2ban.service # 设置开机自启动
七、总结
搭建跳板服务器是一项复杂且重要的工作,它涉及到服务器架构设计、软件安装配置、安全策略设置等多个方面。通过合理搭建跳板服务器,可以有效提高目标服务器的安全性,实现对服务器的集中管理和审计,同时方便用户的访问和操作。
在搭建过程中,需要注意以下几点:
服务器架构设计:确保跳板机处于合适的网络位置,实现网络隔离,保护目标服务器不直接暴露在公网环境中。
安全配置:包括安装 OpenSSH 服务器、创建安全的用户账户、配置 SSH 免密登录、记录登录日志和用户命令、限制访问权限等,每一个环节都需要严格按照安全规范进行操作,避免出现安全漏洞。
日志记录和审计:详细的日志记录是进行安全审计和故障排查的重要依据,需要确保日志的完整性和准确性。
权限管理:对用户的权限进行精细控制,只允许用户进行必要的操作,避免越权访问和操作。
安全工具的使用:合理使用防火墙、Fail2Ban 等安全工具,增强跳板机和目标服务器的安全性,防止恶意攻击。
总之,搭建跳板服务器需要综合考虑安全性、易用性和可管理性,通过科学合理的设计和配置,为企业和个人的服务器管理提供安全、高效的解决方案。随着网络安全技术的不断发展,跳板服务器的搭建和管理也需要不断更新和完善,以适应新的安全挑战。
评论前必须登录!
注册