
Bastion 是一个由多台机器组成的集群,作为运维团队(如系统管理员、开发人员、数据库管理员等)连接设备(服务器、虚拟机、云实例、网络设备等)的唯一入口点,通常使用 ssh。
Bastion 为您的整个基础设施提供认证、授权、可追溯性和可审计性机制。
Bastion 部署在用户与基础设施之间,增加了一层抽象,使得您的基础设施无需单独了解运维团队的每个成员。
每位团队成员在 Bastion 上拥有一个独立账户,可以属于一个或多个 Bastion 组,这些组可能赋予他们访问一个或多个基础设施的权限。基础设施设备只需知道并信任它们所属的 Bastion 组。
Bastion 的细粒度 RBAC 使得可以将某些职责委托给任何账户(基于组或 Bastion 全局),包括可能被自动化工具使用的账户(例如,用于管理账户生命周期,与人力资源管理系统、LDAP 或 AD 关联;确保组 ACL 与 CMDB 同步等)。自动流程可以通过 基于 SSH 的 JSON API 轻松实现。
想了解更多并查看一些漂亮的示意图?这里有一系列深入介绍 Bastion 核心功能和原理的博客文章:
其他可能有用的资源:
无需对 Bastion 的入口或出口侧进行任何特殊配置即可使其运行。
只需使用您熟悉的 ssh 客户端即可连接通过 Bastion,而在另一端,任何标准 sshd 服务端都可以正常工作。例如,这包括那些无法安装自定义软件的网络设备。
对于仅支持低安全性加密算法或 telnet 的旧设备,可以通过防火墙将其隐藏,仅允许 Bastion 访问,从而避免低安全性的折衷——在 Bastion 入口侧仅允许高安全级别的连接。
请参阅 在线文档,或 doc/ 文件夹中的相应文本版本。
这是几秒钟内测试 Bastion 的好方法,但如果您认真考虑在生产中使用容器化,请阅读 FAQ。
沙箱镜像适用于以下架构:linux/386、linux/amd64、linux/arm/v6、linux/arm/v7、linux/arm64、linux/ppc64le、linux/s390x。
运行 Docker 镜像:
docker run -d -p 22 --name bastiontest ovhcom/the-bastion:sandbox
准备好您的 SSH 公钥,然后配置第一个管理员账户:
docker exec -it bastiontest /opt/bastion/bin/admin/setup-first-admin-account.sh poweruser auto
现在我们已经启动并运行默认配置!让我们设置一个方便的 bastion 别名,并测试 info 命令:
PORT=$(docker port bastiontest | cut -d: -f2)
alias bastion="ssh [email protected] -tp $PORT -- "
bastion --osh info
它应该会提示您是 bastion 管理员,这意味着您有权访问所有命令。让我们进入交互模式:
bastion -i
这在需要连续调用多个 --osh 插件时很有用。现在我们可以请求帮助以查看所有插件:
$> help
如果您有远程机器想通过 bastion 连接,请获取您的出口密钥:
$> selfListEgressKeys
将此公钥复制到远程机器的 authorized_keys 文件中,放在您要连接账户的 .ssh/ 文件夹下,然后:
$> selfAddPersonalAccess --host <remote_host> --user <remote_account_name> --port-any
$> ssh <remote_account_name>@<remote_host>
请注意,您无需使用交互模式即可直接连接,例如:
bastion <remote_account_name>@<remote_machine_host_or_ip>
就这样!当然,还有更多内容,文档位于 doc/ 文件夹和在线文档中。
请务必查看 bastion 的帮助(bastion --help)以及每个 osh 插件的帮助(bastion --osh command --help)。
另外,不要忘记自定义您的 bastion.conf 文件,该文件位于 /etc/bastion/bastion.conf(对于 Linux)。
以下 Linux 发行版在每个版本发布时都经过测试,但鉴于这是一个安全产品,我们强烈建议您运行最新、稳定的操作系统版本:
其他所谓“现代”的 Linux 版本未在每个版本发布时测试,但应该可以在少量或无需调整的情况下工作。
以下操作系统也在每个版本发布时进行测试:
FreeBSD 仅部分支持 MFA,因为其可用的 pam 插件集有限。可以配置额外的密码或 TOTP 因素之一,但不能同时配置两者。
perltidy 处理perlcritic 检查即使采用最保守、最谨慎、甚至偏执的编码流程,代码仍然存在缺陷,因此不应盲目信任。因此,bastion 不信任自身代码。它利用操作系统的安全原语来获得额外的安全保障,如下所示。
使用众所周知且值得信赖的 UNIX 自主访问控制(DAC):
Bastion 主脚本被声明为 bastion 用户的系统 shell:
bash 的)shell 访问权限代码是模块化的:
ssh 访问所有需要扩展系统权限的代码与主代码分离,存放在称为 helpers 的模块中:
sudo 运行sudoers 配置附加到命令特定的系统组,该组根据需要授予账户sudoers 配置中sudo 运行的代码使用 Perl 污染模式(-T),防止用户输入干扰逻辑,立即终止执行sudo 运行的代码不信任其调用者,并重新检查每个输入在入口和出口之间实现协议中断,使大多数基于协议的攻击失效
syslog,也应发送到远程 syslog 服务器,以确保即使 bastion 管理员也无法篡改记录,以及/或者sqlite3 数据库,便于搜索ttyrec 录制,提供了辅助脚本用于加密并将这些记录推送到远程托管文件服务器由社区维护的相关工具的非详尽列表:
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.