Bastillion é um console SSH baseado na web que gerencia centralmente o acesso administrativo aos sistemas. A administração baseada na Web é combinada com o gerenciamento e distribuição de chaves SSH públicas do usuário. O gerenciamento e a administração de chaves são baseados em perfis atribuídos a usuários definidos.
Os administradores podem fazer login usando autenticação de dois fatores com Authy ou Google Authenticator. A partir daí, eles podem gerenciar suas chaves SSH públicas ou conectar-se aos seus sistemas através de um web-shell. Os comandos podem ser compartilhados entre shells para facilitar a aplicação de patches e eliminar a execução redundante de comandos.
Bastillion coloca TLS/SSL sobre SSH e atua como um bastião host para administração. Os protocolos são empilhados (TLS/SSL + SSH) para que a infraestrutura não possa ser exposta por meio de tunelamento/encaminhamento de porta. Mais detalhes podem ser encontrados no seguinte whitepaper: Implementando um sistema confiável de terceiros para Secure Shell. Além disso, o gerenciamento de chaves SSH é habilitado por padrão para evitar chaves públicas não gerenciadas e impor práticas recomendadas.
Bastillion está disponível para uso gratuito sob a Licença Pública de Prosperidade
https://github.com/bastillion-io/Bastillion/releases
ou compre no mercado AWS
https://aws.amazon.com/marketplace/pp/Loophole-LLC-Bastillion/B076PNFPCL
Além disso, o Bastillion pode ser instalado no FreeBSD através do sistema de ports do FreeBSD. Para instalar através do pacote binário, basta executar:
pkg install security/bastillion
Open-JDK / Oracle-JDK - 1.9 ou superior
apt-get instalar openjdk-9-jdk
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Instale Authy ou Google Authenticator para ativar a autenticação de dois fatores com Android ou iOS
Aplicativo | Android | iOS |
---|---|---|
Authy | Google Play | iTunes |
Autenticador Google | Google Play | iTunes |
Baixar bastillion-jetty-vXX.XX.tar.gz
https://github.com/bastillion-io/Bastillion/releases
Exportar variáveis de ambiente
para Linux/Unix/OSX
export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH
para Windows
set JAVA_HOME=C:pathtojdk
set PATH=%JAVA_HOME%bin;%PATH%
Iniciar Bastilhão
para Linux/Unix/OSX
./startBastillion.sh
para Windows
startBastillion.bat
Mais documentação em: https://www.bastillion.io/docs/index.html
Instale o Maven 3 ou superior
apt-get install maven
http://maven.apache.org
Exportar variáveis de ambiente
export JAVA_HOME=/path/to/jdk
export M2_HOME=/path/to/maven
export PATH=$JAVA_HOME/bin:$M2_HOME/bin:$PATH
No diretório que contém o pom.xml execute
mvn package jetty:run
Nota: Fazer uma limpeza mvn excluirá o banco de dados H2 e apagará todos os dados.
Abra o navegador em https://<qualquer ip>:8443
Faça login com
username:admin
password:changeme
Observação: ao usar a instância da AMI, a senha é padronizada como <Instance ID>. Além disso, a AMI usa a porta 443 como em https://<Instance IP>:443
Por padrão, o Bastillion substituirá todos os valores no arquivo autorizado_keys especificado para um sistema. Você pode desativar o gerenciamento de chaves editando o arquivo BastillionConfig.properties e usar o Bastillion apenas como um host bastião. Este arquivo está localizado no diretório jetty/bastillion/WEB-INF/classes. (ou o diretório src/main/resources se estiver construindo a partir do código-fonte)
#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
Além disso, o arquivoauthorized_keys é atualizado periodicamente com base nos relacionamentos definidos no aplicativo. Se o gerenciamento de chaves estiver ativado, o intervalo de atualização poderá ser especificado no arquivo BastillionConfig.properties.
#authorized_keys refresh interval in minutes (no refresh for <=0)
authKeysRefreshInterval=120
Por padrão, o Bastillion irá gerar e distribuir as chaves SSH gerenciadas pelos administradores enquanto eles baixam o privado gerado. Isso força os administradores a usar senhas fortes para chaves definidas nos sistemas. A chave privada só está disponível para download uma vez e não é armazenada no aplicativo. Para desabilitar e permitir que os administradores definam qualquer chave pública, edite BastillionConfig.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
Bastillion gera sua própria chave SSH pública/privada na inicialização para uso ao registrar sistemas. É possível especificar um par de chaves SSH customizado no arquivo BastillionConfig.properties.
Por exemplo:
#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
Após a inicialização e depois que a chave for registrada, ela poderá ser removida do sistema. A senha e os caminhos das chaves serão removidos do arquivo de configuração.
As configurações do banco de dados podem ser ajustadas nas propriedades de configuração.
#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;
Por padrão, o armazenamento de dados é definido como incorporado, mas um banco de dados H2 remoto pode ser suportado ajustando o URL de conexão.
#Connection URL to the DB
dbConnectionURL=jdbc:h2:tcp://<host>:<port>/~/bastillion;CIPHER=AES;
A autenticação externa pode ser habilitada por meio de BastillionConfig.properties.
Por exemplo:
#specify a external authentication module (ex: ldap-ol, ldap-ad). Edit the jaas.conf to set connection details
jaasModule=ldap-ol
Os detalhes da conexão precisam ser definidos no arquivo 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;
};
Os administradores serão adicionados à medida que forem autenticados e os perfis dos sistemas poderão ser atribuídos por usuários com privilégios completos.
As funções LDAP do usuário podem ser mapeadas para perfis definidos no Bastillion por meio do uso do org.eclipse.jetty.jaas.spi.LdapLoginModule.
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";
};
Os usuários serão adicionados/removidos dos perfis definidos quando fizerem login e quando o nome da função corresponder ao nome do perfil.
A auditoria está desabilitada por padrão. Os logs de auditoria podem ser habilitados por meio do log4j2.xml removendo o comentário de io.bastillion.manage.util.SystemAudit e das definições do audit-appender .
https://github.com/bastillion-io/Bastillion/blob/master/src/main/resources/log4j2.xml#L19-L22
A auditoria por meio do aplicativo é apenas uma prova de conceito. Ele pode ser habilitado em BastillionConfig.properties.
#enable audit --set to true to enable
enableInternalAudit=true
Agradecimentos especiais vão para esses projetos incríveis que tornam este (e outros grandes projetos) possíveis.
Dependências de terceiros são mencionadas em 3rdPartyLicenses.md
Bastillion está disponível para uso sob a Licença Pública de Prosperidade
Brecha, LLC - Sean Kavanagh