一. 介绍

  1. Teleport是一款简单易用的开源堡垒机系统,具有小巧、易用的特点,支持 RDP/SSH/SFTP/Telnet 协议的远程连接和审计管理。
  2. Teleport由两大部分构成:
    • 跳板核心服务
    • WEB操作界面
  3. Teleport非常小巧且极易安装部署:仅需一分钟,就可以安装部署一套您自己的堡垒机系统!!
  4. 因为Teleport内建了所需的脚本引擎、WEB服务等模块,因此不需要额外安装其他的库或者模块,整个系统的安装与部署非常方便。

二. 特点

极易部署

     简洁设计,小巧灵活,无额外依赖,确保您可以在5分钟内完成安装部署,开始使用。

安全增强

     配置远程主机为仅被您的teleport服务器连接,可有效降低嗅探、扫描、暴力破解等攻击风险。

单点登录

     只需登录您的teleport服务器,即可一键连接您的任意远程主机,无需记忆每台远程主机的密码了。

按需授权

     可以随时授权指定运维人员访问指定的远程主机,也可随时回收授权。仅仅需要几次点击!

运维审计

     对远程主机的操作均有详细记录,支持操作记录录像、回放,审计工作无负担。

三. 官网

  1. 官网地址:https://tp4a.com/
  2. 官网文档地址:https://doc-v3.tp4a.com/

四. 运行环境

     Teleport支持下列Linux平台的部署

  • Ubuntu 14.04 64位 及以上版本
  • CentOS 7.0 64位 及以上版本
  • Debian 6.0 64位 及以上版本
  • Redhat 6.2 64位 及以上版本

五. Teleport堡垒机的下载

  1. 服务端
     服务端安装包下载
  2. 客户端(支持windows系统和苹果系统)
     window系统客户端安装包下载
     苹果系统客户端安装包下载

六. Teleport堡垒机的安装

  1. 安装时需要指定安装路径,您可以使用默认的安装路径/usr/local/teleport(直接回车即可),也可以指定别的路径,请注意路径中不要含有中文字符或空格,以避免出现不可预知的错误。默认的录像回放文件位于/usr/local/teleport/data/replay目录下,会占用/usr的空间,因此建议安装完成后配置录像回放文件的存储路径。
  2. 初始化设置时,需要确定使用的数据库类型。Teleport默认使用内建的sqlite3数据库,因此无需额外安装数据库服务即可开始使用堡垒机的各项功能。如果您希望使用MySQL数据库,请在初始化之前进行MySQL数据库配置(web.ini配置文件中将[database]配置下的type-sqlite改为mysql即可)。
1
2
3
tar -zxvf teleport-server-linux-x64-3.6.4-b3.tar.gz
cd teleport-linux-3.0.2.9
sudo ./setup.sh
  1. 初次安装完成后,可以访问 http://你的teleport服务器IP:7190/ 进行初始化设置。
  2. 您需要在这里设置系统管理员的账号和密码,此账号具有系统的最高权限,请务必牢记密码。设置完成后,点击“开始配置”按钮即可完成初始配置工作了:
初始化配置 开始配置
  1. 初始化配置完成后,刷新页面即可进入teleport的登录界面。
登录
  1. 客户端安装包放置位置
    客户端需要放到指定服务器目录中,这样前端在检测到电脑未安装客户端时跳出安装页面后,即可点击页面进行下载
1
2
3
[root@shanxiaoyi ~]#  mkdir /usr/local/teleport/data/assist -p
[root@shanxiaoyi assist]# ls
teleport-assist-macos-3.6.3.dmg teleport-assist-windows-3.6.3.exe
客户端下载页面

七. 配置文件

1. 服务端配置文件说明

  1. 本文中 %INSTDIR%指 teleport 服务端安装目录,默认位于 /usr/local/teleport/
  2. teleport 配置文件位于 %INSTDIR%/data/etc 目录下。服务端包含两个配置文件: core.iniweb.ini,其中,core.ini用于核心服务,web.ini用于WEB服务。

注意:修改完配置文件后,需要重启 teleport 服务方可生效,重启方式详见 这里

2. 核心服务配置文件 core.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
; codec: utf-8

[common]
; 'log-file' 定义核心服务日志文件。如果没有设置,默认为 %INSTDIR%/data/log/tpcore.log
;log-file=/var/log/teleport/tpcore.log

; log-level 指定日志等级,可以为 0 到 4 之间的数值,如果没有设置,默认为 2.
; LOG_LEVEL_DEBUG 0 log every-thing.
; LOG_LEVEL_VERBOSE 1 log every-thing but without debug message.
; LOG_LEVEL_INFO 2 log infomation/warning/error message.
; LOG_LEVEL_WARN 3 log warning and error message.
; LOG_LEVEL_ERROR 4 log error message only.
;log-level=2

; 'debug-mode' 指定是否运行为调试模式,可以是 0 或 1,默认为0,表示不运行为调试模式。
; 调试模式下,log-level 强制为 0,且发生错误时会记录函数调用栈。
debug-mode=0

; 'replay-path' 定义录像文件的存放目录,如果没有设置,默认为 %INSTDIR%/data/replay
;replay-path=/var/lib/teleport/replay

; 'web-server-rpc' 定义WEB服务的rpc接口地址,如果没有设置,默认为 http://127.0.0.1:7190/rpc
; 注意:如果你修改了web.ini中的端口,必须同步修改本设置项。
web-server-rpc=http://127.0.0.1:7190/rpc

[rpc]
; 核心服务的rpc接口监听的IP地址和端口号。
; 注意:如果你修改了本设置,请同步修改web.ini中的 'core-server-rpc' 设置项。
bind-ip=127.0.0.1
bind-port=52080

[protocol-ssh]
enabled=true
lib=tpssh
bind-ip=0.0.0.0
bind-port=52189

[protocol-rdp]
enabled=true
lib=tprdp
bind-ip=0.0.0.0
bind-port=52089

[protocol-telnet]
enabled=true
lib=tptelnet
bind-ip=0.0.0.0
bind-port=52389
  1. 录像文件存放路径 replay-path
    因为在teleport服务工作过程中,占用磁盘空间较大的是录像回放文件,容易导致 /usr 空间不足,因此可以根据需要将录像文件存放到别的挂载的磁盘上。可以通过修改 replay-path 来进行设定。
  2. 禁用某个协议
    如果您并不打算远程连接teleport支持的所有协议,可以将其禁用。例如,在您的工作环境中不需要使用Windows远程桌面(即,RDP协议),那么可以将 [protocol-rdp] 小节中的 eanbled 设为 false

3. WEB服务配置文件 web.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
; codec: utf-8

[common]
; ip=0.0.0.0

; WEB服务监听端口,默认为 7190.
; 注意:如果你修改了本设置项,请同步修改core.ini中的 web-server-rpc 配置项。
; port=7190
port=7190

; 'log-file' 定义核心服务日志文件。如果没有设置,默认为 %INSTDIR%/data/log/tpweb.log
;log-file=/var/log/teleport/tpweb.log

; log-level 指定日志等级,可以为 0 到 4 之间的数值,如果没有设置,默认为 2.
; LOG_LEVEL_DEBUG 0 log every-thing.
; LOG_LEVEL_VERBOSE 1 log every-thing but without debug message.
; LOG_LEVEL_INFO 2 log infomation/warning/error message.
; LOG_LEVEL_WARN 3 log warning and error message.
; LOG_LEVEL_ERROR 4 log error message only.
;log-level=2

; 'debug-mode' 指定是否运行为调试模式,可以是 0 或 1,默认为0,表示不运行为调试模式。
; 调试模式下,log-level 强制为 0,且发生错误时会记录函数调用栈。
debug-mode=0

; 'core-server-rpc' 定义核心服务的rpc接口地址,如果没有设置,默认为 http://127.0.0.1:52080/rpc
; 注意:如果你修改了core.ini中的端口,必须同步修改本设置项。
core-server-rpc=http://127.0.0.1:52080/rpc

[database]
; 数据库类型,可以是 sqlite 或 mysql, 默认为 sqlite.
; type=sqlite

; 当数据库设置为使用 sqlite 时,指定sqlite数据库文件的路径,如果未指定,默认为 %INSTDIR%/data/db/ts_db.db
; sqlite-file=/var/lib/teleport/data/ts_db.db

; 当数据库设置为使用 mysql 时,指定mysql数据库的访问地址和用户账号信息。
; 注意:如需使用mysql数据库,需要先创建对应的数据库和用户,并为用户授权访问指定的数据库。
; mysql-host=127.0.0.1
; mysql-port=3306
; mysql-db=teleport
; mysql-prefix=tp_
; mysql-user=teleport
; mysql-password=password
  1. 使用 MySql 或 MariaDB
    Teleport支持MySQL数据库(当然也支持MariaDB)。这里以MySQL为例进行说明。要使用MySQL数据库,需要先为teleport创建库并授权。以MySQL数据库的管理员身份在命令行工具中执行:

注意:数据库的字符集必须是 utf-8 ,否则会出现乱码,或者初始化表数据时会失败。

1
2
3
4
5
6
7
8
9
10
11
12
13
-- 对于MySQL5.x:
CREATE DATABASE teleport DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON teleport.* TO teleport @127.0.0.1 IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

-- 对于MySQL8:
-- 注意:认证方式选择 mysql_native_password 还是 caching_sha2_password,要根据实际配置进行,不设置的话就使用MySQL的默认值。
CREATE DATABASE teleport DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER `teleport`@`localhost` IDENTIFIED BY 'password';
-- CREATE USER `teleport`@`localhost` IDENTIFIED WITH mysql_native_password BY 'password';
-- CREATE USER `teleport`@`localhost` IDENTIFIED WITH caching_sha2_password BY 'password';
GRANT ALL PRIVILEGES ON teleport.* TO `teleport`@`localhost`;
FLUSH PRIVILEGES;

请注意表名、用户名与密码等要与 web.ini 中的设置一致。修改 web.ini,去掉 ; type=sqlite 前面的注释符号,并改为 type=mysql

八. Nginx配置

  1. 普通配置
    从TP v3.x开始,部分页面使用了websocket 进行实时通讯,因此,Nginx的配置文件需要做一些额外调整,下面是一个示例(以Nginx服务与TP服务在同一台主机上为例):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ...其他内容...

server {
listen 80;
server_name www.your-teleport-domain.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:7190;

# 以下三行是websocket需要的
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

# ...其他内容...

如果Nginx与TP服务不在同一台主机上,那么还要记得在Nginx服务所在主机上为TP服务器开启相应的端口转发,默认的需要52089/52189/52389三个端口,具体的端口值,请检查你的TP服务核心配置文件 core.ini

  1. 配置为HTTPS
    为提升安全性,可以将 nginx 配置为 https 方式访问。要这样做,需要将 nginx 的配置文件做如下修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# ...其他内容...

server {
listen 443;
server_name www.your-teleport-domain.com;

ssl on;
ssl_certificate_key path/to/your/server-private-key.pem
ssl_certificate path/to/your/server-cert.pem

location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:7190;

# 以下三行是websocket需要的
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

# ...其他内容...

其中,ssl_certificate_keyssl_certificate 是你的服务端证书的私钥和服务端证书。如果你不知道如何获取一份服务端证书,那么去了解一下 Let’s Encrypt 将会是一个不错的开端。

⚠️ 注意
在 CentOS 7 中,如果使用系统自带的 firewall 防火墙,需要做以下两件事:

  1. 开放 80 端口
1
firewall-cmd --zone=public --add-port=80/tcp --permanent
  1. 如果系统开启了 SELinux 安全策略,需要允许 http 接入:
1
setsebool -P http_can_network_connect on

九. 防火墙配置

默认安装的情况下,Teleport服务端在四个端口上监听外部接入:

  • 7190 Teleport的WEB后台
  • 52089 RDP远程桌面协议端口
  • 52189 SSH协议端口
  • 52389 Telnet协议端口

注:这些端口可以在核心配置文件core.ini中更改设置,也可以根据需要禁用无需支持的协议端口。

为保证客户端能够接入,需要在teleport服务器主机防火墙放开以上端口。

以CentOS 7为例,需要以管理员身份执行:

1
2
3
4
5
firewall-cmd --zone=public --add-port=7190/tcp --permanent
firewall-cmd --zone=public --add-port=52089/tcp --permanent
firewall-cmd --zone=public --add-port=52189/tcp --permanent
firewall-cmd --zone=public --add-port=52389/tcp --permanent
firewall-cmd --reload

十. 服务控制(运维)

  1. Teleport 有两个服务:核心服务 core 和网页服务 web。两个服务可以同时启动、停止、重启,也可单独操作其中的一个。

     操作完整的 teleport 服务:

  • 启动: /etc/init.d/teleport start
  • 停止: /etc/init.d/teleport stop
  • 重启: /etc/init.d/teleport restart
  • 查看运行状态: /etc/init.d/teleport status

     仅操作核心服务 core:

  • 启动: /etc/init.d/teleport start core
  • 停止: /etc/init.d/teleport stop core
  • 重启: /etc/init.d/teleport restart core

     仅操作网页服务 web:

  • 启动: /etc/init.d/teleport start web
  • 停止: /etc/init.d/teleport stop web
  • 重启: /etc/init.d/teleport restart web

十一. 疑难杂症故障处理

1. 存在core服务崩溃BUG

     解决方案:可以通过定时任务启动

  • 打开定时任务配置文件,若首次执行,会提示选择编辑器(推荐选 vim 或 nano)
  • 在打开的 crontab 编辑页面末尾,粘贴以下内容(直接复制你的定时任务行)
  • 格式说明:*/10 * * * * 表示「每 10 分钟执行一次」,后面是要执行的命令。
  • 若用 vim 编辑器:按 Esc → 输入 :wq → 回车(保存并退出);
  • 若用 nano 编辑器:按 Ctrl+O 保存 → 按 Enter 确认 → 按 Ctrl+X 退出。
1
2
sudo crontab -e 
*/10 * * * * /etc/init.d/teleport start

2. win11远程黑屏

     黑屏原因: 由于win11更新RDP客户端程序不兼容,导致TP堡垒机远程黑屏
     解决方案:从win10 LTSC系统中提取RDP客户端程序给win11使用

  1. RDP客户端的默认路径为 C:\Windows\System32\mstsc.exe
默认文件位置
  1. 从win10 LTSC系统中提取RDP客户端程序给win11使用
    RDP程序所需文件:wbem目录zh-CH目录mstsc.exemstscax.dll
    可以自己在win10的 C:\Windows\System32\mstsc.exe 此路径中找到这4个文件然后统一复制到mstsc文件夹(自己创建)中,然后将mstsc文件夹放到win11电脑的D盘或任意其他盘目录下。当然也可以 点击我 下载我已经打包好的压缩包。

       如下图可见,我的这四个文件放置在D盘mstsc目录下

文件夹
  1. 在堡垒机助手配置中指定文件
指定文件
  1. 解决完成
    上诉步骤操作完成后,再次进行远程连接,即可恢复正常。

3. 远程连接报错

远程连接失败
  1. 解决办法1
    关闭仅允许运行使用网络级别身份验证的远程桌面的计算机连接需要计算机使用网络级别身份验证进行连接(建议)
    右键此电脑–>属性–>远程桌面–>高级设置–>取消勾选
关闭网络身份验证
  1. 解决办法2
    在目标服务器上 开始菜单-组策略-计算机配置-管理模板-windows组件-远程桌面服务-远程桌面会话主机-安全-远程(RDP)连接要求使用指定的安全层
本地策略

4. Ubuntu22.04系统部署堡垒机 7190端口起不来

  1. 安装 libffi6_3.2.1-8_amd64.deb,安装完后重试就可以了
1
sudo dpkg -i libffi6_3.2.1-8_amd64.deb

5. 忘记管理员密码

如果你忘记了管理员密码,又没有配置邮件服务,无法使用“忘记密码”功能找回密码,目前暂时的做法是直接修改数据库,在teleport数据库的user表中,将id为1的账号的password字段设置为以下内容:
3:19c9214f9a81ccfc:482ea1ad2859076539ca45b2b97eff266ec0473bea3dcee36f19b87f759d1535