Bastilion 是一个基于 Web 的 SSH 控制台,可集中管理对系统的管理访问。基于 Web 的管理与用户 SSH 公钥的管理和分发相结合。密钥管理和管理基于分配给定义用户的配置文件。
管理员可以使用 Authy 或 Google Authenticator 使用双因素身份验证登录。从那里他们可以管理他们的公共 SSH 密钥或通过 Web shell 连接到他们的系统。命令可以在 shell 之间共享,以便更轻松地修补并消除冗余命令执行。
Basstillion 将 TLS/SSL 置于 SSH 之上,并充当管理的堡垒主机。协议是堆叠的(TLS/SSL + SSH),因此基础设施无法通过隧道/端口转发暴露。更多详细信息可以在以下白皮书中找到:为 Secure Shell 实施可信第三方系统。此外,默认情况下启用 SSH 密钥管理,以防止不受管理的公钥并强制执行最佳实践。
Bastilion 可根据 Prosperity 公共许可证免费使用
https://github.com/bastillion-io/Bastillion/releases
或从 AWS 市场购买
https://aws.amazon.com/marketplace/pp/Loophole-LLC-Bastillion/B076PNFPCL
此外,Bastillion 还可以通过 FreeBSD ports 系统安装在 FreeBSD 上。要通过二进制包安装,只需运行:
pkg install security/bastillion
Open-JDK / Oracle-JDK - 1.9 或更高版本
apt-get 安装 openjdk-9-jdk
http://www.oracle.com/technetwork/java/javase/downloads/index.html
安装 Authy 或 Google Authenticator以启用 Android 或 iOS 的双因素身份验证
应用 | 安卓 | iOS系统 |
---|---|---|
奥蒂 | 谷歌游戏 | iTunes |
谷歌身份验证器 | 谷歌游戏 | iTunes |
下载 bastilion-jetty-vXX.XX.tar.gz
https://github.com/bastillion-io/Bastillion/releases
导出环境变量
适用于 Linux/Unix/OSX
export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH
对于Windows
set JAVA_HOME=C:pathtojdk
set PATH=%JAVA_HOME%bin;%PATH%
启动巴士底狱
适用于 Linux/Unix/OSX
./startBastillion.sh
对于Windows
startBastillion.bat
更多文档位于:https://www.bastillion.io/docs/index.html
安装 Maven 3 或更高版本
apt-get 安装 maven
http://maven.apache.org
导出环境变量
export JAVA_HOME=/path/to/jdk
export M2_HOME=/path/to/maven
export PATH=$JAVA_HOME/bin:$M2_HOME/bin:$PATH
在包含 pom.xml 的目录中运行
mvn package jetty:run
注意:执行 mvn clean 将删除 H2 DB 并清除所有数据。
打开浏览器 https://<任意 ip>:8443
登录方式
username:admin
password:changeme
注意:使用 AMI 实例时,密码默认为 <实例 ID>。此外,AMI 使用端口 443,如 https://<Instance IP>:443
默认情况下,Bastillion 将覆盖系统指定的authorized_keys 文件中的所有值。您可以通过编辑BastillionConfig.properties 文件来禁用密钥管理,并仅将Bastillion 用作堡垒主机。该文件位于 jetty/bastillion/WEB-INF/classes 目录中。 (如果从源代码构建,则为 src/main/resources 目录)
#set to false to disable key management. If false, the Bastillion public key will be appended to the authorized_keys file (instead of it being overwritten completely).
keyManagementEnabled=false
此外,authorized_keys 文件会根据应用程序中定义的关系定期更新/刷新。如果启用密钥管理,则可以在 BasstillionConfig.properties 文件中指定刷新间隔。
#authorized_keys refresh interval in minutes (no refresh for <=0)
authKeysRefreshInterval=120
默认情况下,Bastillion 将生成并分发由管理员管理的 SSH 密钥,同时让他们下载生成的私有密钥。这迫使管理员对系统上设置的密钥使用强密码。私钥只能下载一次,不存储在应用端。要禁用并允许管理员设置任何公钥,请编辑 BasstillionConfig.properties。
#set to true to generate keys when added/managed by users and enforce strong passphrases set to false to allow users to set their own public key
forceUserKeyGeneration=false
Bastilion 在初始启动时生成自己的公共/私有 SSH 密钥,以便在注册系统时使用。您可以在 BasstillionConfig.properties 文件中指定自定义 SSH 密钥对。
例如:
#set to true to regenerate and import SSH keys --set to true
resetApplicationSSHKey=true
#SSH Key Type 'dsa' or 'rsa'
sshKeyType=rsa
#private key --set pvt key
privateKey=/Users/kavanagh/.ssh/id_rsa
#public key --set pub key
publicKey=/Users/kavanagh/.ssh/id_rsa.pub
#default passphrase --leave blank if passphrase is empty
defaultSSHPassphrase=myPa$$w0rd
启动后,一旦密钥被注册,就可以将其从系统中删除。密码和密钥路径将从配置文件中删除。
可以在配置属性中调整数据库设置。
#Database user
dbUser=bastillion
#Database password
dbPassword=p@$$w0rd!!
#Database JDBC driver
dbDriver=org.h2.Driver
#Connection URL to the DB
dbConnectionURL=jdbc:h2:keydb/bastillion;CIPHER=AES;
默认情况下,数据存储设置为嵌入式,但可以通过调整连接 URL 支持远程 H2 数据库。
#Connection URL to the DB
dbConnectionURL=jdbc:h2:tcp://<host>:<port>/~/bastillion;CIPHER=AES;
可以通过 BasstillionConfig.properties 启用外部身份验证。
例如:
#specify a external authentication module (ex: ldap-ol, ldap-ad). Edit the jaas.conf to set connection details
jaasModule=ldap-ol
连接详细信息需要在 jaas.conf 文件中设置
ldap-ol {
com.sun.security.auth.module.LdapLoginModule SUFFICIENT
userProvider="ldap://hostname:389/ou=example,dc=bastillion,dc=com"
userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"
authzIdentity="{cn}"
useSSL=false
debug=false;
};
管理员将在经过身份验证后添加,并且系统配置文件可以由完全特权的用户分配。
通过使用 org.eclipse.jetty.jaas.spi.LdapLoginModule,可以将用户 LDAP 角色映射到 Basstillion 中定义的配置文件。
ldap-ol-with-roles {
//openldap auth with roles that can map to profiles
org.eclipse.jetty.jaas.spi.LdapLoginModule required
debug="false"
useLdaps="false"
contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
hostname="<SERVER>"
port="389"
bindDn="<BIND-DN>"
bindPassword="<BIND-DN PASSWORD>"
authenticationMethod="simple"
forceBindingLogin="true"
userBaseDn="ou=users,dc=bastillion,dc=com"
userRdnAttribute="uid"
userIdAttribute="uid"
userPasswordAttribute="userPassword"
userObjectClass="inetOrgPerson"
roleBaseDn="ou=groups,dc=bastillion,dc=com"
roleNameAttribute="cn"
roleMemberAttribute="member"
roleObjectClass="groupOfNames";
};
当用户登录且角色名称与配置文件名称匹配时,将在定义的配置文件中添加/删除用户。
默认情况下禁用审核。可以通过log4j2.xml取消注释io.bastillion.manage.util.SystemAudit和审核附加程序定义来启用审核日志。
https://github.com/bastillion-io/Bastillion/blob/master/src/main/resources/log4j2.xml#L19-L22
通过应用程序进行审核只是概念验证。可以在 BasstillionConfig.properties 中启用它。
#enable audit --set to true to enable
enableInternalAudit=true
特别感谢这些令人惊叹的项目,使这个(和其他伟大的项目)成为可能。
3rdPartyLicenses.md中提到了第三方依赖项
Bastilion 可根据 Prosperity 公共许可证使用
漏洞有限责任公司 - 肖恩·卡瓦纳