Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
ansible-ssh-hardening — Este role do Ansible fornece inúmeras configurações de ssh relacionadas à segurança, oferecendo proteção base abrangente. | Kitploit
Ferramentas/GitHubGitHub/dev-sec/ansible-ssh-hardening
Segurança de Infraestrutura em NuvemAuditoria de ConfiguraçãoSegurança de RedeDevSecOpsAutenticaçãoArchived
GitHubdev-sec/ansible-ssh-hardening

ansible-ssh-hardening

Este role do Ansible fornece inúmeras configurações de ssh relacionadas à segurança, oferecendo proteção base abrangente.

Ver Repositório
7851909há 5 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Site
Compartilhar

ssh-hardening (Ansible Role)

Atenção: Este role foi migrado para a nossa hardening-collection:

  • https://github.com/dev-sec/ansible-os-hardening/
  • https://galaxy.ansible.com/devsec/hardening

Por favor, abra quaisquer issues e pull requests lá!

Requisitos

  • Ansible > 2.5

Variáveis do Role

  • network_ipv6_enable
    • Padrão: false
    • Descrição: true se IPv6 for necessário. ssh_listen_to também deve ser definido para escutar em endereços IPv6 (por exemplo [::]).
  • ssh_server_ports
    • Padrão: ['22']
    • Descrição: portas nas quais o ssh-server deve escutar
  • ssh_client_port
  • Padrão: '22'
  • Descrição: porta à qual o ssh-client deve se conectar
  • ssh_listen_to
    • Padrão: ['0.0.0.0']
    • Descrição: um ou mais endereços IP, nos quais o ssh-server deve escutar. O padrão são todos os endereços IPv4, mas deve ser configurado para endereços específicos por razões de segurança!
  • ssh_host_key_files
    • Padrão: []
    • Descrição: Chaves de host para sshd. Se vazio, ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key', '/etc/ssh/ssh_host_ed25519_key'] serão usados, desde que suportados pela versão instalada do sshd
  • ssh_host_key_algorithms
    • Padrão: []
    • Descrição: Algoritmos de chave de host que o servidor oferece. Se vazio, a lista padrão será usada; caso contrário, substitui a configuração com a lista especificada de algoritmos
  • ssh_client_alive_interval
    • Padrão: 600
    • Descrição: especifica um intervalo para envio de mensagens keepalive
  • ssh_client_alive_count
    • Padrão: 3
    • Descrição: define quantas vezes as mensagens keep-alive são enviadas
  • ssh_permit_tunnel
    • Padrão: false
    • Descrição: true se o SSH Port Tunneling for necessário
  • ssh_remote_hosts
    • Padrão: []
    • Descrição: um ou mais hosts e suas opções personalizadas para o ssh-client. O padrão é vazio. Veja exemplos em defaults/main.yml.
  • ssh_permit_root_login
    • Padrão: no
    • Descrição: Desabilita o root-login. Defina como without-password ou yes para habilitar o root-login
  • ssh_allow_tcp_forwarding
    • Padrão: no
    • Descrição: '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'.
      Nota: os valores passados para esta variável devem ser strings, portanto os valores 'yes' e 'no' devem ser passados com aspas.
  • ssh_gateway_ports
    • Padrão: false
    • Descrição: false 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
    • Padrão: false
    • Descrição: false para desabilitar o Agent Forwarding. Defina como true para permitir o Agent Forwarding.
  • ssh_x11_forwarding
    • Padrão: false
    • Descrição: false para desabilitar o X11 Forwarding. Defina como true para permitir o X11 Forwarding.
  • ssh_pam_support
    • Padrão: true
    • Descrição: true se o SSH tiver suporte a PAM.
  • ssh_use_pam
    • Padrão: true
    • Descrição: false para desabilitar a autenticação pam.
  • ssh_gssapi_support
    • Padrão: false
    • Descrição: true se o SSH tiver suporte a GSSAPI.
  • ssh_kerberos_support
    • Padrão: true
    • Descrição: true se o SSH tiver suporte a Kerberos.
  • ssh_deny_users
    • Padrão: ''
    • Descrição: se especificado, o login é desabilitado para nomes de usuário que correspondam a um dos padrões.
  • ssh_allow_users
    • Padrão: ''
    • Descrição: se especificado, o login é permitido apenas para nomes de usuário que correspondam a um dos padrões.
  • ssh_deny_groups
    • Padrão: ''
    • Descrição: se especificado, o login é desabilitado para usuários cujo grupo primário ou lista de grupos suplementares corresponda a um dos padrões.
  • ssh_allow_groups
    • Padrão: ''
    • Descrição: se especificado, o login é permitido apenas para usuários cujo grupo primário ou lista de grupos suplementares corresponda a um dos padrões.
  • ssh_authorized_keys_file
    • Padrão: ''
    • Descrição: altera o arquivo padrão que contém as chaves públicas que podem ser usadas para autenticação de usuário.
  • ssh_trusted_user_ca_keys_file
    • Padrão: ''
    • Descrição: especifica o arquivo que contém as chaves públicas das autoridades certificadoras confiáveis usadas para assinar certificados de usuário.
  • ssh_trusted_user_ca_keys
    • Padrão: []
    • Descrição: define as chaves públicas das autoridades certificadoras confiáveis usadas para assinar certificados de usuário. Usado apenas se ssh_trusted_user_ca_keys_file estiver definido.
  • ssh_authorized_principals_file
    • Padrão: ''
    • Descrição: especifica o arquivo que contém os principals permitidos. Usado apenas se ssh_trusted_user_ca_keys_file estiver definido.
  • ssh_authorized_principals
    • Padrão: []
    • Descrição: lista de hashes contendo caminhos de arquivo e principals autorizados, veja default_custom.yml para todas as opções. Usado apenas se ssh_authorized_principals_file estiver definido.
  • ssh_print_motd
    • Padrão: false
    • Descrição: false para desabilitar a impressão do MOTD
  • ssh_print_pam_motd
    • Padrão: false
    • Descrição: false para desabilitar a impressão do MOTD via pam (Debian e Ubuntu)
  • ssh_print_last_log
    • Padrão: false
    • Descrição: false para desabilitar a exibição das informações do último login
  • sftp_enabled
    • Padrão: false
    • Descrição: true para habilitar a configuração do sftp
  • sftp_umask
    • Padrão: '0027'
    • Descrição: Especifica o umask para o sftp
  • sftp_chroot
    • Padrão: true
    • Descrição: false para desabilitar o chroot para o sftp
  • sftp_chroot_dir
    • Padrão: /home/%u
    • Descrição: altera o local padrão do chroot do sftp
  • ssh_client_roaming
    • Padrão: false
    • Descrição: habilita o client roaming experimental
  • sshd_moduli_file
    • Padrão: '/etc/ssh/moduli'
    • Descrição: caminho para o arquivo de moduli do SSH
  • sshd_moduli_minimum
    • Padrão: 2048
    • Descrição: remove parâmetros Diffie-Hellman menores que o tamanho definido para mitigar o logjam
  • ssh_challengeresponseauthentication
    • Padrão: false
    • Descrição: Especifica se a autenticação challenge-response é permitida (por exemplo, via PAM)
  • ssh_client_password_login
    • Padrão: false
    • Descrição: true para permitir autenticação baseada em senha com o ssh client
  • ssh_server_password_login
    • Padrão: false
    • Descrição: true para permitir autenticação baseada em senha com o ssh server
  • ssh_banner
    • Padrão: false
    • Descrição: true para imprimir um banner no login
  • ssh_banner_path
    • Padrão: '/etc/sshd/banner.txt'
    • Descrição: caminho para o arquivo de banner do SSH
  • ssh_client_hardening
    • Padrão: true
    • Descrição: false para parar de endurecer o client
  • ssh_client_port
    • Padrão: '22'
    • Descrição: Especifica o número da porta para conectar no host remoto.
  • ssh_client_compression
    • Padrão: false
    • Descrição: Especifica se o client solicita compressão.
  • ssh_compression
    • Padrão: false
    • Descrição: Especifica se a compressão no lado do servidor é habilitada após o usuário autenticar com sucesso.
  • ssh_login_grace_time
    • Padrão: 30s
    • Descrição: especifica o tempo permitido para autenticação bem-sucedida no servidor SSH
  • ssh_max_auth_retries
    • Padrão: 2
    • Descrição: Especifica o número máximo de tentativas de autenticação permitidas por conexão.
  • ssh_max_sessions
    • Padrão: 10
    • Descrição: Especifica o número máximo de sessões abertas permitidas a partir de uma determinada conexão.
  • ssh_print_debian_banner
    • Padrão: false
    • Descrição: true para imprimir o banner específico do debian
  • ssh_server_enabled
    • Padrão: true
    • Descrição: false para desabilitar o servidor opensshd
  • ssh_server_hardening
    • Padrão: true
    • Descrição: false para parar de endurecer o servidor
  • ssh_server_match_address
    • Padrão: ''
    • Descrição: Introduz um bloco condicional. Se todos os critérios na linha Match forem satisfeitos, as palavras-chave nas linhas seguintes substituem aquelas definidas na seção global do arquivo de configuração, até outra linha Match ou o final do arquivo.
  • ssh_server_match_group
    • Padrão: ''
    • Descrição: Introduz um bloco condicional. Se todos os critérios na linha Match forem satisfeitos, as palavras-chave nas linhas seguintes substituem aquelas definidas na seção global do arquivo de configuração, até outra linha Match ou o final do arquivo.
  • ssh_server_match_user
    • Padrão: ''
    • Descrição: Introduz um bloco condicional. Se todos os critérios na linha Match forem satisfeitos, as palavras-chave nas linhas seguintes substituem aquelas definidas na seção global do arquivo de configuração, até outra linha Match ou o final do arquivo.
  • ssh_server_match_local_port
    • Padrão: ''
    • Descrição: Introduz um bloco condicional. Se todos os critérios na linha Match forem satisfeitos, as palavras-chave nas linhas seguintes substituem aquelas definidas na seção global do arquivo de configuração, até outra linha Match ou o final do arquivo.
  • ssh_server_permit_environment_vars
    • Padrão: no
    • Descrição: yes 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
    • Padrão: ''
    • Descrição: Especifica quais variáveis de ambiente enviadas pelo client serão copiadas para o ambiente da sessão; múltiplas variáveis de ambiente podem ser separadas por espaços em branco
  • ssh_use_dns
    • Padrão: false
    • Descrição: Especifica se o sshd deve consultar o nome do host remoto e verificar se o nome de host resolvido para o endereço IP remoto mapeia de volta para exatamente o mesmo endereço IP.
  • ssh_server_revoked_keys
    • Padrão: []
    • Descrição: uma lista de chaves públicas revogadas que o servidor SSH sempre rejeitará, útil para revogar chaves conhecidas como fracas ou comprometidas.
  • ssh_max_startups
    • Padrão: '10:30:100'
    • Descrição: Especifica o número máximo de conexões não autenticadas simultâneas ao daemon SSH.
  • ssh_macs
    • Padrão: []
    • Descrição: Altere esta lista para sobrescrever os macs. Padrões encontrados em defaults/main.yml
  • ssh_kex
    • Padrão: []
    • Descrição: Altere esta lista para sobrescrever os kexs. Padrões encontrados em defaults/main.yml
  • ssh_ciphers
    • Padrão: []
    • Descrição: Altere esta lista para sobrescrever os ciphers. Padrões encontrados em defaults/main.yml
  • ssh_custom_options
    • Padrão: []
    • Descrição: Linhas personalizadas para a configuração do cliente SSH
  • sshd_custom_options
    • Padrão: []
    • Descrição: Linhas personalizadas para a configuração do daemon SSH
  • sshd_syslog_facility
    • Padrão: 'AUTH'
    • Descrição: O código de facility usado ao registrar mensagens do sshd
  • sshd_log_level
    • Padrão: 'VERBOSE'
    • Descrição: o nível de verbosidade usado ao registrar mensagens do sshd
  • sshd_strict_modes
    • Padrão: true
    • Descrição: Verifica os modos de arquivo e a propriedade dos arquivos do usuário e do diretório home antes de aceitar o login
  • sshd_authenticationmethods
    • Padrão: publickey
    • Descrição: Especifica os métodos de autenticação que devem ser concluídos com sucesso para que um usuário receba acesso. Certifique-se de definir todas as variáveis necessárias para o seu método de autenticação selecionado. Padrões encontrados em defaults/main.yml
  • Configurando configurações não listadas nas variáveis do role

    Se 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:

    root@kitploit:~
    - hosts: localhost
      roles:
        - dev-sec.ssh-hardening
      vars:
        ssh_custom_options:
          - "Include /etc/ssh/ssh_config.d/*"
        sshd_custom_options:
          - "AcceptEnv LANG"
    

    Alterando a porta padrão e idempotência

    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.

    Exemplo de Playbook

    root@kitploit:~
    - hosts: localhost
      roles:
        - dev-sec.ssh-hardening
    

    Testes Locais

    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:

    root@kitploit:~
    # Instalar dependências
    gem install bundler
    bundle install
    

    Testando com Docker

    root@kitploit:~
    # 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
    

    Testando com Virtualbox

    root@kitploit:~
    # 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

    FAQ / Armadilhas

    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:

    root@kitploit:~
    sudo grep myuser /etc/shadow
    

    Se o hash incluir um !, sua conta está bloqueada:

    root@kitploit:~
    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:

    root@kitploit:~
    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"

    root@kitploit:~
    Unable to restart service ssh: Failed to restart ssh.service: Access denied
    

    ou

    root@kitploit:~
    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.

    Este é um bug do Ansible: veja aqui e aqui para mais informações.

    Contribuindo

    Veja diretrizes do contribuidor.

    Licença e Autor

    • Autor:: Sebastian Gumprich
    • Autor:: Christoph Hartmann [email protected]

    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

    root@kitploit:~
    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.

    Baixar ferramenta