Teleport - 安全访问 Linux 系统和 Kubernetes |
在这种互连系统的分配中,至关重要的是,每一项资产、每一份文件和每一项信息都应尽可能远离窥探和耳朵。更糟糕的是,这些令人讨厌的眼睛和耳朵的数量不断增加,每天醒来,让它们远离你的系统变得越来越困难和棘手。那么该怎么办?我们这个世界的优秀人才的创新已经提出了解决方案,这些解决方案至少可以阻止他们并让他们的努力变得更加困难。传送是这些解决方案之一,我们将在本简短指南中详细讨论它。
Gravitational Teleport 是一个网关,用于通过 SSH 或 Kubernetes API 管理对 Linux 服务器集群的访问。它旨在替代传统的 OpenSSH,供需要以下内容的组织使用: 来源:Teleport 文档
- 保护其基础设施并遵守安全最佳实践和监管要求。
- 全面了解其基础设施中发生的活动。
- 减少传统和云原生基础设施中特权访问管理的运营开销。
瞬移的综合功能
Teleport 提供了传统管理员和开发人员将会喜欢的令人印象深刻的新功能。它们包括:
- 适用于整个组织的单一 SSH/Kubernetes 访问网关。
- 基于 SSH 证书的身份验证而不是静态密钥。
- 通过使用由集群证书颁发机构 (CA) 签名的自动过期密钥,避免首次使用时出现密钥分发和信任问题。
- 强制执行第二因素身份验证。
- 连接到位于防火墙后面的集群,无需通过 SSH 堡垒直接访问 Internet。
- 通过会话共享协作解决问题。
- 使用动态节点标签发现集群中的在线服务器和 Docker 容器。
- 用于管理 SSH 和 Kubernetes 的 RBAC 的单一工具(“管理平台”)。
- 带有会话记录/重播的审核日志。
- Kubernetes 审计日志,包括通过 kubectl 执行的交互命令的记录。
- 能够在“无代理”模式下运行,即大多数 Teleport 功能在具有预先存在的 SSH 守护进程(通常是 sshd)的集群上可用。
改编自 Teleport 官方网站,Teleport 分为三个二进制文件:teleport 守护进程、tsh客户端和tctl管理工具。它们无依赖性,以编译语言编写,并在任何 UNIX 兼容操作系统上运行,例如 Linux、FreeBSD 或 macOS。 Teleport 在 Apache 2 许可证下是开源的,源代码可在 Github 上获取。
Teleport 易于部署。它是一个类似于 sshd 的传统 Linux 守护进程,通常作为 systemd 服务运行。
安装传送工具
Teleport 核心服务 teleport 和管理工具 tctl 被设计为在 Linux 和 Mac 操作系统上运行。 Teleport 用户客户端 tsh 和 UI 可用于 Linux、Mac 和 Windows 操作系统。
在 Linux 上安装 Teleport
以下示例安装 64 位版本的 Teleport 二进制文件,但也可以使用 32 位 (i386) 和 ARM 二进制文件。
运行以下命令在 Linux 上安装 Teleport:
curl https://goteleport.com/static/install.sh | bash -s 13.3.2
检查最新版本页面以获取最新版本,并将 13.3.2 替换为版本号。
安装成功输出:
....
Teleport v13.3.2 git:api/v13.3.2-0-gfc60440 go1.20.7 installed successfully!
The following commands are now available:
teleport - The daemon that runs the Auth Service, Proxy Service, and other Teleport services.
tsh - A tool that lets end users interact with Teleport.
tctl - An administrative tool that can configure the Teleport Auth Service.
tbot - Teleport Machine ID client.
配置 teleport SystemD 服务
然后重新加载守护进程,启动并启用服务
sudo systemctl daemon-reload
sudo systemctl start teleport
sudo systemctl enable teleport
您可以检查其状态以确认一切都已顺利启动
$ systemctl status teleport.service
● teleport.service - Teleport Service
Loaded: loaded (/lib/systemd/system/teleport.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-08-09 08:23:41 UTC; 10s ago
Main PID: 1494 (teleport)
Tasks: 8 (limit: 4523)
Memory: 66.5M
CPU: 11.674s
CGroup: /system.slice/teleport.service
└─1494 /usr/local/bin/teleport start --pid-file=/run/teleport.pid
Aug 09 08:23:44 jammy teleport[1494]: INFO [UPLOAD:1] starting upload completer service pid:1494.1 service/service.go:2722
Aug 09 08:23:44 jammy teleport[1494]: INFO [UPLOAD:1] Creating directory /var/lib/teleport/log. pid:1494.1 service/service.go:2738
Aug 09 08:23:44 jammy teleport[1494]: INFO [UPLOAD:1] Creating directory /var/lib/teleport/log/upload. pid:1494.1 service/service.go:2738
Aug 09 08:23:44 jammy teleport[1494]: INFO [UPLOAD:1] Creating directory /var/lib/teleport/log/upload/streaming. pid:1494.1 service/service.go:2738
Aug 09 08:23:44 jammy teleport[1494]: INFO [UPLOAD:1] Creating directory /var/lib/teleport/log/upload/streaming/default. pid:1494.1 service/service.go:2738
Aug 09 08:23:44 jammy teleport[1494]: INFO [UPLOAD:1] Creating directory /var/lib/teleport/log. pid:1494.1 service/service.go:2738
Aug 09 08:23:44 jammy teleport[1494]: INFO [UPLOAD:1] Creating directory /var/lib/teleport/log/upload. pid:1494.1 service/service.go:2738
Aug 09 08:23:44 jammy teleport[1494]: INFO [UPLOAD:1] Creating directory /var/lib/teleport/log/upload/corrupted. pid:1494.1 service/service.go:2738
Aug 09 08:23:44 jammy teleport[1494]: INFO [UPLOAD:1] Creating directory /var/lib/teleport/log/upload/corrupted/default. pid:1494.1 service/service.go:2738
Aug 09 08:23:44 jammy teleport[1494]: INFO [PROC:1] The new service has started successfully. Starting syncing rotation status with period 10m0s. pid:1494.1 service/connect.go:811
从 RPM 存储库安装在基于 RHEL 的系统上
如果您使用的是 CentOS,如果您不喜欢 tarball 安装方法,也可以使用以下方法
sudo yum-config-manager --add-repo https://rpm.releases.teleport.dev/teleport.repo
sudo yum install teleport -y
在 macOS 上安装 Teleport
借助 Homebrew,telport 可以在 macOS 上轻松安装,如下所示:
brew install teleport
如何配置传送
在设置 Teleport 时,其开发团队建议使用 Teleport 的 YAML 配置文件运行它,如下所示:
$ sudo vim /etc/teleport.yaml
teleport:
data_dir: /var/lib/teleport
auth_service:
enabled: true
cluster_name: "teleport-quickstart"
listen_addr: 0.0.0.0:3025
tokens:
- proxy,node,app:f7adb7ccdf04037bcd2b52ec6010fd6f0caec94ba190b765
public_addr: 0.0.0.0:3025
ssh_service:
enabled: true
labels:
env: staging
app_service:
enabled: true
debug_app: true
proxy_service:
enabled: true
listen_addr: 0.0.0.0:3023
web_listen_addr: 0.0.0.0:3080
tunnel_listen_addr: 0.0.0.0:3024
public_addr: 0.0.0.0:3080
从上面的配置中,您会注意到目录传送数据将被保留(/var/lib/teleport)。为了使一切正常工作,我们必须授予该目录必要的权限,以便 teleport 和 tctl 能够读取和写入。为此,请运行以下命令
sudo chmod 755 -R /var/lib/teleport/
更新配置文件后,我们需要打开文件中定义的必需端口,如下所示
##On RHEL based systems
sudo firewall-cmd --permanent --add-port={3023,3080,3024,3025}/tcp
sudo firewall-cmd --reload
##Debian based systems
sudo ufw allow 3023,3080,3024,3025/tcp
使用自签名证书配置安全 https
Teleport 使用安全 https。如果您有证书,可以将它们添加到 teleport 配置文件的末尾。对于此示例,我们将设置一个自签名证书供我们使用。继续像这样创建它:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/teleport2.key -out /etc/pki/tls/certs/teleport2.crt
这将继续问您一些问题,如下所示。输入适合您的环境的选项。如果您没有 DNS,您可以在服务器中的 /etc/hosts 下添加您的域名
-----
Country Name (2 letter code) [XX]:KE
State or Province Name (full name) []:Nairobi
Locality Name (eg, city) [Default City]:Nairobi
Organization Name (eg, company) [Default Company Ltd]:computingforgeeks
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:teleport.computingforgeeks.com
Email Address []:[email
之后,使用证书更新您的配置文件,如下所示
teleport:
data_dir: /var/lib/teleport
auth_service:
enabled: true
cluster_name: "teleport-quickstart"
listen_addr: 0.0.0.0:3025
tokens:
- proxy,node,app:f7adb7ccdf04037bcd2b52ec6010fd6f0caec94ba190b765
public_addr: 0.0.0.0:3025
ssh_service:
enabled: true
labels:
env: staging
app_service:
enabled: true
debug_app: true
proxy_service:
enabled: true
listen_addr: 0.0.0.0:3023
web_listen_addr: 0.0.0.0:3080
tunnel_listen_addr: 0.0.0.0:3024
##Updated/added part of this configuration
public_addr: 0.0.0.0:3080
https_keypairs:
- key_file: /etc/pki/tls/private/teleport2.key
cert_file: /etc/pki/tls/certs/teleport2.crt
然后重新启动传送
sudo systemctl restart teleport
在此阶段,您可以通过以下地址访问 Teleport Web UI:“https://IP-or-Domain-Name:3080”。只需打开您最喜欢的浏览器并将其指向您的服务器的指定端口 (3080)。你应该看到:
但您会注意到,我们没有任何用户能够登录该应用程序。因此,我们下一步将解决这个问题。
创建传送用户
就像任何其他身份验证服务一样,传送需要用户及其凭据才能登录并使用受其保护的服务器。需要注意的是,默认情况下 Teleport 将始终强制使用 2 因素身份验证。它支持一次性密码 (OTP) 和硬件令牌 (U2F)。此快速入门将使用 OTP - 您需要一个可以扫描 QR 码的 OTP 兼容应用程序。
运行以下命令创建可以访问 Teleport Web UI 的用户:
sudo tctl users add admin --roles=editor,access --logins=root,ubuntu,ec2-user
您指定的用户(例如我们示例中的 root)必须存在!这意味着,geeks-admin 将能够以 root 身份登录 Teleport 集群服务器中的服务器。
命令运行后,您将在 shell 上看到它显示的消息。复制它提供的网址并继续设置新用户:“https://teleport.computingforgeeks.com:3080/web/invite/2ef0091feea7fea0a210f53a1d8751d3”。将 0.0.0.0 替换为您的服务器 IP 地址。
在浏览器上访问该网址后,您将看到一个带有二维码的新登录页面,如上所示。为了让您设置新用户,我们建议您使用 Play 商店中的 Google Authenticator 应用程序。下载它并从 Play 商店安装,如下面的屏幕截图所示。
下载并安装后,打开它,然后选择“扫描二维码”。
这将打开你的相机。放置相机来读取二维码,您将在手机上看到一个代码。这是 Teleport 登录页面上的“双因素令牌”。输入用户的新密码,然后在“双因素令牌”下输入手机上的代码,然后点击“创建帐户“。
如果一切顺利,新用户将被引入仪表板,如下所示:
令人惊奇的东西对吧!
添加节点到 teleport 集群
当您之前设置 Teleport 时,我们在 teleport.yaml 文件中为节点和应用程序配置了强静态令牌。添加节点成为集群的一部分现在相当容易。我们将在此步骤中使用此令牌。首先,在目标节点上安装 Teleport,然后使用如下所示的命令启动它。
$ sudo teleport start --roles=node \
--token=f7adb7ccdf04037bcd2b52ec6010fd6f0caec94ba190b765 \
--auth-server=teleport.computingforgeeks.com:3025
[NODE] Service 5.0.0:v5.0.0-0-gac4971801 is starting on 0.0.0.0:3022.
在运行此命令之前检查并更新 auth-server、app-name 和 app-uri。
如果出现以下错误,请删除您尝试添加到集群的节点上的 /var/lib/teleport 文件夹,然后再次重新运行上面的命令。
Node failed to establish connection to cluster: Get "https://172.20.192.38:3025/v1/webapi/find": x509: certificate signed by unknown authority. time/sleep.go:148
当您重新登录 Teleport Web-UI 时,您应该能够看到服务器列表上的第二个节点,如下所示
通过 Teleport Web-UI 登录服务器
您可以在 Web 界面上轻松访问服务器的终端。您只需单击“连接”按钮,然后选择将连接到服务器的正确用户。这将允许您通过 SSH 连接到服务器并以您选择的用户身份访问终端。由于我们在本例中只添加了 root 用户,因此我们将单击它
浏览器将打开一个新选项卡并引导我们进入。
结束语
如果你能走到这一步,那你就太了不起了。 Teleport 是一个很有前景的项目,它结合了您一直羡慕的环境中拥有的所有安全功能。它不仅为服务器提供服务,还管理 Kubernetes 集群等等。请在 Teleport Page 上查看并享受。
否则,今天是节日前夕,尽管我们仍然被新冠病毒的乌云笼罩,但我们祝愿您在与亲人一起庆祝时安全健康。您可以继续阅读下面分享的更多内容
在 CentOS 8 上安装和使用 Guacamole 远程桌面