
Autenticação, autorização, rastreabilidade e auditabilidade para acessos SSH.

Bastions são um cluster de máquinas usadas como ponto de entrada único por equipes operacionais (como administradores de sistema, desenvolvedores, administradores de banco de dados, ...) para conectar-se de forma segura a dispositivos (servidores, máquinas virtuais, instâncias em nuvem, equipamentos de rede, ...), normalmente usando ssh.
O Bastion fornece mecanismos para autenticação, autorização, rastreabilidade e auditabilidade para toda a sua infraestrutura.
Estando entre seus usuários e sua infraestrutura, o Bastion adiciona uma camada de abstração, para que sua infraestrutura não precise conhecer cada membro da equipe operacional individualmente.
Cada membro da sua equipe tem uma conta individual no Bastion e pode ser membro de um ou vários grupos do bastion que podem dar acesso a uma ou mais infraestruturas. Os dispositivos da infraestrutura precisam apenas conhecer e confiar no(s) grupo(s) do bastion do(s) qual(is) podem fazer parte.
O RBAC granular do Bastion torna possível delegar algumas responsabilidades para qualquer conta, com escopo de grupo ou em todo o bastion, incluindo para contas que podem ser usadas por sua automação para, por exemplo, gerenciar o ciclo de vida das contas (vinculado ao seu sistema de gestão de recursos humanos, LDAP ou AD), garantir que a ACL de um grupo esteja atualizada (vinculada ao seu CMDB), etc. Processos automatizados são fáceis de implementar por meio da JSON API over SSH.
Quer saber mais enquanto aprecia alguns desenhos interessantes? Aqui está uma série de posts de blog que aprofundam as funcionalidades e princípios principais do The Bastion:
Outros recursos que podem ser de interesse:
Nada sofisticado é necessário, nem no lado de entrada nem no lado de saída do Bastion para funcionar. Apenas seu bom e velho cliente ssh é necessário para se conectar através dele, e do outro lado, qualquer servidor sshd padrão serve. Isso inclui, por exemplo, dispositivos de rede nos quais você pode não ter a possibilidade de instalar qualquer software personalizado. Dispositivos antigos que suportam apenas algoritmos de criptografia de baixa segurança ou telnet podem ser ocultados da Internet por meio de firewall, permitindo apenas o Bastion, evitando assim uma troca de baixa segurança, permitindo apenas conexões de alto nível de segurança no lado de entrada do bastion.
Por favor, consulte a documentação online ou a versão baseada em texto correspondente encontrada na pasta doc/.
Esta é uma boa maneira de testar o Bastion em segundos, mas leia as FAQ se você estiver falando sério sobre usar conteinerização em produção.
A imagem sandbox está disponível para as seguintes arquiteturas: linux/386, linux/amd64, linux/arm/v6, linux/arm/v7, linux/arm64, linux/ppc64le, linux/s390x.
Vamos executar a imagem docker:
docker run -d -p 22 --name bastiontest ovhcom/the-bastion:sandbox
Tenha sua chave SSH pública em mãos e configure a primeira conta de administrador:
docker exec -it bastiontest /opt/bastion/bin/admin/setup-first-admin-account.sh poweruser auto
Estamos prontos com a configuração padrão! Vamos configurar um alias útil para o bastion e testar o comando info:
PORT=$(docker port bastiontest | cut -d: -f2)
alias bastion="ssh [email protected] -tp $PORT -- "
bastion --osh info
Ele deve cumprimentá-lo como um administrador do bastion, o que significa que você tem acesso a todos os comandos. Vamos entrar no modo interativo:
bastion -i
Isso é útil para chamar vários plugins --osh em sequência. Agora podemos pedir ajuda para ver todos os plugins:
$> help
Se você tem uma máquina remota para a qual deseja tentar se conectar através do bastion, busque sua chave de saída:
$> selfListEgressKeys
Copie esta chave pública para o arquivo authorized_keys da máquina remota na pasta .ssh/ da conta à qual deseja se conectar, então:
$> selfAddPersonalAccess --host <remote_host> --user <remote_account_name> --port-any
$> ssh <remote_account_name>@<remote_host>
Observe que você pode se conectar diretamente sem usar o modo interativo, com:
bastion <remote_account_name>@<remote_machine_host_or_ip>
É isso! Claro, há muito mais; a documentação está disponível na pasta doc/ e online. Certifique-se de verificar a ajuda do bastion (bastion --help) e a ajuda de cada plugin osh (bastion --osh comando --help). Também não se esqueça de personalizar seu arquivo bastion.conf, que pode ser encontrado em /etc/bastion/bastion.conf (para Linux).
As distribuições Linux abaixo são testadas em cada versão, mas como este é um produto de segurança, você é fortemente aconselhado a executá-lo na versão estável mais recente do seu sistema operacional favorito:
Qualquer outra versão Linux dita "moderna" não é testada em cada versão, mas deve funcionar com ajustes nulos ou menores.
Os seguintes sistemas operacionais também são testados em cada versão:
O FreeBSD tem suporte parcial a MFA, devido ao seu conjunto reduzido de plugins pam disponíveis. Pode ser configurado suporte para um fator adicional de senha ou TOTP, mas não ambos ao mesmo tempo.
perltidyperlcriticMesmo com o processo de codificação mais conservador, cauteloso e paranóico, o código tem bugs, portanto não deve ser confiado cegamente. Por isso, o bastion não confia em seu próprio código. Ele aproveita as primitivas de segurança do sistema operacional para obter segurança adicional, como visto abaixo.
Usa o conhecido e confiável Controle de Acesso Discricionário UNIX:
O script principal do bastion é declarado como o shell do sistema do usuário bastion:
bash) no sistemaO código é modular
ssh a outras máquinasTodo o código que precisa de privilégios estendidos do sistema é separado do código principal, em módulos chamados helpers
sudosudoers é vinculada a um grupo do sistema específico do comando, que é concedido a contas com base na necessidadesyslog, que também deve ser enviado para um servidor syslog remoto para garantir que nem mesmo os administradores do bastion possam adulterar seus rastros, e/ousqlite3 para busca fácilttyrec, scripts auxiliares são fornecidos para criptografar e enviar esses registros para um servidor de custódia remotoUma lista não exaustiva de ferramentas relacionadas mantidas pela comunidade:
Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar este arquivo exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido por lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Veja a Licença para as permissões específicas e limitações sob a Licença.
sudoers-T) é usado para todo código executado sob sudo, impedindo que qualquer entrada do usuário interfira na lógica, interrompendo a execução imediatamentesudo não confia em seu chamador e re-verifica cada entradaUma quebra de protocolo é operada entre os lados de entrada e saída, tornando a maioria das vulnerabilidades baseadas em protocolo ineficazes