
Este role do Ansible fornece inúmeras configurações de ssh relacionadas à segurança, oferecendo proteção base abrangente.
Atenção: Este role foi migrado para a nossa hardening-collection:
Por favor, abra quaisquer issues e pull requests lá!
network_ipv6_enable
ssh_listen_to também deve ser definido para escutar em endereços IPv6 (por exemplo [::]).ssh_server_ports
ssh_client_port
ssh_listen_to
ssh_host_key_files
ssh_host_key_algorithms
ssh_client_alive_interval
ssh_client_alive_count
ssh_permit_tunnel
ssh_remote_hosts
defaults/main.yml.ssh_permit_root_login
without-password ou yes para habilitar o root-loginssh_allow_tcp_forwarding
'no' para desabilitar o TCP Forwarding. Defina como 'yes' para permitir o TCP Forwarding. Se você estiver usando OpenSSH >= versão 6.2, você pode especificar 'yes', 'no', 'all' ou 'local'. 'yes' e 'no' devem ser passados com aspas.ssh_gateway_ports
falsefalse para desabilitar a vinculação de portas encaminhadas a endereços não-loopback. Defina como true para forçar a vinculação no endereço curinga. Defina como clientspecified para permitir que o cliente especifique a qual endereço vincular.ssh_allow_agent_forwarding
ssh_x11_forwarding
ssh_pam_support
ssh_use_pam
ssh_gssapi_support
ssh_kerberos_support
ssh_deny_users
ssh_allow_users
ssh_deny_groups
ssh_allow_groups
ssh_authorized_keys_file
ssh_trusted_user_ca_keys_file
ssh_trusted_user_ca_keys
ssh_trusted_user_ca_keys_file estiver definido.ssh_authorized_principals_file
ssh_trusted_user_ca_keys_file estiver definido.ssh_authorized_principals
default_custom.yml para todas as opções. Usado apenas se ssh_authorized_principals_file estiver definido.ssh_print_motd
ssh_print_pam_motd
ssh_print_last_log
sftp_enabled
sftp_umask
sftp_chroot
sftp_chroot_dir
ssh_client_roaming
sshd_moduli_file
sshd_moduli_minimum
ssh_challengeresponseauthentication
ssh_client_password_login
true para permitir autenticação baseada em senha com o ssh clientssh_server_password_login
true para permitir autenticação baseada em senha com o ssh serverssh_banner
falsetrue para imprimir um banner no loginssh_banner_path
ssh_client_hardening
truefalse para parar de endurecer o clientssh_client_port
'22'ssh_client_compression
falsessh_compression
falsessh_login_grace_time
30sssh_max_auth_retries
2ssh_max_sessions
10ssh_print_debian_banner
falsetrue para imprimir o banner específico do debianssh_server_enabled
truefalse para desabilitar o servidor opensshdssh_server_hardening
truefalse para parar de endurecer o servidorssh_server_match_address
ssh_server_match_group
ssh_server_match_user
ssh_server_match_local_port
ssh_server_permit_environment_vars
noyes para especificar que ~/.ssh/environment e as opções environment= em ~/.ssh/authorized_keys são processadas pelo sshd. Com a versão 7.8 do openssh, é possível especificar uma lista de permissões de nomes de variáveis de ambiente além das configurações globais "yes" ou "no"ssh_server_accept_env_vars
ssh_use_dns
falsessh_server_revoked_keys
ssh_max_startups
ssh_macs
defaults/main.ymlssh_kex
defaults/main.ymlssh_ciphers
defaults/main.ymlssh_custom_options
sshd_custom_options
sshd_syslog_facility
sshd_log_level
sshd_strict_modes
sshd_authenticationmethods
publickeydefaults/main.ymlSe você quiser configurar opções de ssh que não estão listadas acima, você pode usar ssh_custom_options (para /etc/ssh/ssh_config) ou sshd_custom_options (para /etc/ssh/sshd_config) para defini-las. Essas opções serão definidas no início do arquivo, para que você possa sobrescrever opções mais abaixo no arquivo.
Exemplo de playbook:
- hosts: localhost
roles:
- dev-sec.ssh-hardening
vars:
ssh_custom_options:
- "Include /etc/ssh/ssh_config.d/*"
sshd_custom_options:
- "AcceptEnv LANG"
Este role usa a porta padrão 22 ou a porta configurada no inventário para conectar ao servidor. Se a porta ssh padrão for alterada via ssh_server_ports, uma vez que o servidor ssh seja reiniciado, ele ainda tentará conectar usando a porta anterior. Para executar este role novamente no mesmo servidor, o inventário terá que ser atualizado para usar a nova porta ssh.
Se a idempotência for importante, considere usar o role ssh-hardening-fallback, que é um wrapper em torno deste role e que recorre à porta 22 se a porta configurada estiver inacessível.
- hosts: localhost
roles:
- dev-sec.ssh-hardening
A forma preferida de testar o role localmente é usar o Docker. Você terá que instalar o Docker no seu sistema. Veja Get started para um pacote Docker adequado ao seu sistema.
Você também pode usar vagrant e Virtualbox ou VMWare para executar testes localmente. Você terá que instalar o Virtualbox e o Vagrant no seu sistema. Veja Vagrant Downloads para um pacote vagrant adequado ao seu sistema. Para todos os nossos testes usamos test-kitchen. Se você não está familiarizado com test-kitchen, dê uma olhada no guia deles.
Em seguida, instale o test-kitchen:
# Instalar dependências
gem install bundler
bundle install
# teste rápido em uma máquina
bundle exec kitchen test ssh-ubuntu1804-ansible-latest
# teste em todas as máquinas
bundle exec kitchen test
# para desenvolvimento
bundle exec kitchen create ssh-ubuntu1804-ansible-latest
bundle exec kitchen converge ssh-ubuntu1804-ansible-latest
bundle exec kitchen verify ssh-ubuntu1804-ansible-latest
# limpeza
bundle exec kitchen destroy ssh-ubuntu1804-ansible-latest
# teste rápido em uma máquina
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test ssh-ubuntu-1804
# teste em todas as máquinas
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
# para desenvolvimento
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create ssh-ubuntu-1804
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge ssh-ubuntu-1804
Para mais informações, veja test-kitchen
Não consigo entrar na minha conta. Registrei a chave do client, mas ainda assim não me deixa entrar.
Se você esgotou todos os problemas típicos (firewall, rede, chave ausente, chave errada, conta desabilitada etc.), pode ser que sua conta esteja bloqueada. A maneira mais rápida de descobrir é olhar o hash da senha do seu usuário:
sudo grep myuser /etc/shadow
Se o hash incluir um !, sua conta está bloqueada:
myuser:!:16280:7:60:7:::
A maneira correta de resolver isso é desbloquear a conta (passwd -u myuser). Se o usuário não tiver senha, você pode desbloqueá-la via:
usermod -p "*" myuser
Alternativamente, se você pretende usar PAM, você o habilitou via ssh_use_pam: true. O PAM permitirá que usuários bloqueados entrem com chaves.
Por que minha aplicação não conecta mais via SSH?
Sempre olhe primeiro os arquivos de log e, se possível, a negociação entre client e servidor que é concluída ao conectar.
Vimos alguns problemas em aplicações (baseadas em python e ruby) que se devem ao uso de um conjunto de criptografia desatualizado. Isso colide com este módulo de hardening, que reduziu a lista de ciphers, códigos de autenticação de mensagem (MACs) e algoritmos de troca de chaves (KEX) para uma seleção mais segura.
Após usar o role, o módulo template/copy/file do Ansible não funciona mais!
Este role desativa o SFTP por padrão. O Ansible usa por padrão o SFTP para transferir arquivos para os hosts remotos. Você tem que definir scp_if_ssh = True no seu ansible.cfg. Dessa forma, o Ansible usa SCP para copiar arquivos. Alternativamente, você pode habilitar o SFTP novamente definindo sftp_enabled como true.
Não é possível reiniciar o serviço sshd devido à falta de privilégios
Se você obtiver o seguinte erro ao executar o handler "restart sshd"
Unable to restart service ssh: Failed to restart ssh.service: Access denied
ou
failure 1 running systemctl show for 'ssh': Failed to connect to bus: No such file or directory
execute o playbook como root (sem become: yes no nível do playbook) ou adicione become: yes ao handler.
Licenciado sob a Apache License, 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
Salvo disposição em contrário da lei aplicável ou acordo 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. Consulte a Licença para os termos específicos que regem as permissões e limitações sob a Licença.