Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
ansible-ssh-hardening — Questo ruolo Ansible fornisce numerose configurazioni SSH relative alla sicurezza, offrendo una protezione di base a tutto tondo. | Kitploit
Strumenti/GitHubGitHub/dev-sec/ansible-ssh-hardening
Sicurezza dell'Infrastruttura CloudAudit di ConfigurazioneSicurezza di ReteDevSecOpsAutenticazioneArchived
GitHubdev-sec/ansible-ssh-hardening

ansible-ssh-hardening

Questo ruolo Ansible fornisce numerose configurazioni SSH relative alla sicurezza, offrendo una protezione di base a tutto tondo.

Vedi Repository
7861905 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Sito web
Condividi

ssh-hardening (Ruolo Ansible)

Attenzione: Questo ruolo è stato migrato nella nostra hardening-collection:

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

Si prega di aprire eventuali issue e pull request lì!

Requisiti

  • Ansible > 2.5

Variabili del Ruolo

  • network_ipv6_enable
    • Default: false
    • Descrizione: true se è necessario IPv6. ssh_listen_to deve essere impostato anche per ascoltare su indirizzi IPv6 (ad esempio [::]).
  • ssh_server_ports
    • Default: ['22']
    • Descrizione: porte su cui il server ssh dovrebbe ascoltare
  • ssh_client_port
  • Default: '22'
  • Descrizione: porta a cui il client ssh dovrebbe connettersi
  • ssh_listen_to
    • Default: ['0.0.0.0']
    • Descrizione: uno o più indirizzi IP, a cui il server ssh dovrebbe ascoltare. Il default è tutti gli indirizzi IPv4, ma per motivi di sicurezza dovrebbe essere configurato su indirizzi specifici!
  • ssh_host_key_files
    • Default: []
    • Descrizione: chiavi host per sshd. Se vuoto, verranno usati ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key', '/etc/ssh/ssh_host_ed25519_key'], per quanto supportati dalla versione di sshd installata
  • ssh_host_key_algorithms
    • Default: []
    • Descrizione: algoritmi delle chiavi host che il server offre. Se vuoto, verrà usata la lista di default, altrimenti sovrascrive l'impostazione con la lista di algoritmi specificata
  • ssh_client_alive_interval
    • Default: 600
    • Descrizione: specifica un intervallo per l'invio di messaggi keepalive
  • ssh_client_alive_count
    • Default: 3
    • Descrizione: definisce quante volte vengono inviati i messaggi keep-alive
  • ssh_permit_tunnel
    • Default: false
    • Descrizione: true se è richiesto il tunneling delle porte SSH
  • ssh_remote_hosts
    • Default: []
    • Descrizione: uno o più host e le loro opzioni personalizzate per il client ssh. Il default è vuoto. Vedi gli esempi in defaults/main.yml.
  • ssh_permit_root_login
    • Default: no
    • Descrizione: disabilita il login di root. Impostare a without-password o yes per abilitare il login di root
  • ssh_allow_tcp_forwarding
    • Default: no
    • Descrizione: 'no' per disabilitare il TCP Forwarding. Impostare a 'yes' per consentire il TCP Forwarding. Se si utilizza OpenSSH >= 6.2, è possibile specificare 'yes', 'no', 'all' o 'local'.
      Nota: i valori passati a questa variabile devono essere stringhe, quindi i valori 'yes' e 'no' devono essere passati con le virgolette.
  • ssh_gateway_ports
    • Default: false
    • Descrizione: false per disabilitare il binding delle porte inoltrate a indirizzi non loopback. Impostare a true per forzare il binding sull'indirizzo wildcard. Impostare a clientspecified per consentire al client di specificare a quale indirizzo fare il binding.
  • ssh_allow_agent_forwarding
    • Default: false
    • Descrizione: false per disabilitare l'Agent Forwarding. Impostare a true per consentire l'Agent Forwarding.
  • ssh_x11_forwarding
    • Default: false
    • Descrizione: false per disabilitare l'X11 Forwarding. Impostare a true per consentire l'X11 Forwarding.
  • ssh_pam_support
    • Default: true
    • Descrizione: true se SSH ha il supporto PAM.
  • ssh_use_pam
    • Default: true
    • Descrizione: false per disabilitare l'autenticazione pam.
  • ssh_gssapi_support
    • Default: false
    • Descrizione: true se SSH ha il supporto GSSAPI.
  • ssh_kerberos_support
    • Default: true
    • Descrizione: true se SSH ha il supporto Kerberos.
  • ssh_deny_users
    • Default: ''
    • Descrizione: se specificato, il login è disabilitato per i nomi utente che corrispondono a uno dei pattern.
  • ssh_allow_users
    • Default: ''
    • Descrizione: se specificato, il login è consentito solo per i nomi utente che corrispondono a uno dei pattern.
  • ssh_deny_groups
    • Default: ''
    • Descrizione: se specificato, il login è disabilitato per gli utenti il cui gruppo primario o elenco di gruppi supplementari corrisponde a uno dei pattern.
  • ssh_allow_groups
    • Default: ''
    • Descrizione: se specificato, il login è consentito solo per gli utenti il cui gruppo primario o elenco di gruppi supplementari corrisponde a uno dei pattern.
  • ssh_authorized_keys_file
    • Default: ''
    • Descrizione: modifica il file predefinito che contiene le chiavi pubbliche che possono essere utilizzate per l'autenticazione dell'utente.
  • ssh_trusted_user_ca_keys_file
    • Default: ''
    • Descrizione: specifica il file contenente le chiavi pubbliche delle autorità di certificazione attendibili utilizzate per firmare i certificati utente.
  • ssh_trusted_user_ca_keys
    • Default: []
    • Descrizione: imposta le chiavi pubbliche delle autorità di certificazione attendibili utilizzate per firmare i certificati utente. Utilizzato solo se ssh_trusted_user_ca_keys_file è impostato.
  • ssh_authorized_principals_file
    • Default: ''
    • Descrizione: specifica il file contenente i principal consentiti. Utilizzato solo se ssh_trusted_user_ca_keys_file è impostato.
  • ssh_authorized_principals
    • Default: []
    • Descrizione: elenco di hash contenenti percorsi di file e principal autorizzati, vedi default_custom.yml per tutte le opzioni. Utilizzato solo se ssh_authorized_principals_file è impostato.
  • ssh_print_motd
    • Default: false
    • Descrizione: false per disabilitare la stampa del MOTD
  • ssh_print_pam_motd
    • Default: false
    • Descrizione: false per disabilitare la stampa del MOTD tramite pam (Debian e Ubuntu)
  • ssh_print_last_log
    • Default: false
    • Descrizione: false per disabilitare la visualizzazione delle informazioni sull'ultimo login
  • sftp_enabled
    • Default: false
    • Descrizione: true per abilitare la configurazione sftp
  • sftp_umask
    • Default: '0027'
    • Descrizione: specifica l'umask per sftp
  • sftp_chroot
    • Default: true
    • Descrizione: false per disabilitare il chroot per sftp
  • sftp_chroot_dir
    • Default: /home/%u
    • Descrizione: modifica la posizione predefinita del chroot sftp
  • ssh_client_roaming
    • Default: false
    • Descrizione: abilita il roaming sperimentale del client
  • sshd_moduli_file
    • Default: '/etc/ssh/moduli'
    • Descrizione: percorso del file moduli SSH
  • sshd_moduli_minimum
    • Default: 2048
    • Descrizione: rimuove i parametri Diffie-Hellman più piccoli della dimensione definita per mitigare logjam
  • ssh_challengeresponseauthentication
    • Default: false
    • Descrizione: specifica se è consentita l'autenticazione challenge-response (ad es. tramite PAM)
  • ssh_client_password_login
    • Default: false
    • Descrizione: true per consentire l'autenticazione basata su password con il client ssh
  • ssh_server_password_login
    • Default: false
    • Descrizione: true per consentire l'autenticazione basata su password con il server ssh
  • ssh_banner
    • Default: false
    • Descrizione: true per stampare un banner al login
  • ssh_banner_path
    • Default: '/etc/sshd/banner.txt'
    • Descrizione: percorso del file banner SSH
  • ssh_client_hardening
    • Default: true
    • Descrizione: false per interrompere l'hardening del client
  • ssh_client_port
    • Default: '22'
    • Descrizione: specifica il numero di porta su cui connettersi all'host remoto.
  • ssh_client_compression
    • Default: false
    • Descrizione: specifica se il client richiede la compressione.
  • ssh_compression
    • Default: false
    • Descrizione: specifica se la compressione lato server è abilitata dopo che l'utente si è autenticato con successo.
  • ssh_login_grace_time
    • Default: 30s
    • Descrizione: specifica il tempo consentito per l'autenticazione riuscita al server SSH
  • ssh_max_auth_retries
    • Default: 2
    • Descrizione: specifica il numero massimo di tentativi di autenticazione consentiti per connessione.
  • ssh_max_sessions
    • Default: 10
    • Descrizione: specifica il numero massimo di sessioni aperte consentite da una data connessione.
  • ssh_print_debian_banner
    • Default: false
    • Descrizione: true per stampare il banner specifico di debian
  • ssh_server_enabled
    • Default: true
    • Descrizione: false per disabilitare il server opensshd
  • ssh_server_hardening
    • Default: true
    • Descrizione: false per interrompere l'hardening del server
  • ssh_server_match_address
    • Default: ''
    • Descrizione: introduce un blocco condizionale. Se tutti i criteri sulla riga Match sono soddisfatti, le parole chiave sulle righe successive sovrascrivono quelle impostate nella sezione globale del file di configurazione, fino a un'altra riga Match o alla fine del file.
  • ssh_server_match_group
    • Default: ''
    • Descrizione: introduce un blocco condizionale. Se tutti i criteri sulla riga Match sono soddisfatti, le parole chiave sulle righe successive sovrascrivono quelle impostate nella sezione globale del file di configurazione, fino a un'altra riga Match o alla fine del file.
  • ssh_server_match_user
    • Default: ''
    • Descrizione: introduce un blocco condizionale. Se tutti i criteri sulla riga Match sono soddisfatti, le parole chiave sulle righe successive sovrascrivono quelle impostate nella sezione globale del file di configurazione, fino a un'altra riga Match o alla fine del file.
  • ssh_server_match_local_port
    • Default: ''
    • Descrizione: introduce un blocco condizionale. Se tutti i criteri sulla riga Match sono soddisfatti, le parole chiave sulle righe successive sovrascrivono quelle impostate nella sezione globale del file di configurazione, fino a un'altra riga Match o alla fine del file.
  • ssh_server_permit_environment_vars
    • Default: no
    • Descrizione: yes per specificare che ~/.ssh/environment e le opzioni environment= in ~/.ssh/authorized_keys vengono elaborate da sshd. Con la versione 7.8 di openssh è possibile specificare una whitelist di nomi di variabili d'ambiente oltre alle impostazioni globali "yes" o "no"
  • ssh_server_accept_env_vars
    • Default: ''
    • Descrizione: specifica quali variabili d'ambiente inviate dal client verranno copiate nell'ambiente della sessione; più variabili d'ambiente possono essere separate da spazi bianchi
  • ssh_use_dns
    • Default: false
    • Descrizione: specifica se sshd deve cercare il nome host remoto e verificare che il nome host risolto per l'indirizzo IP remoto corrisponda allo stesso indirizzo IP.
  • ssh_server_revoked_keys
    • Default: []
    • Descrizione: un elenco di chiavi pubbliche revocate che il server ssh rifiuterà sempre, utile per revocare chiavi note deboli o compromesse.
  • ssh_max_startups
    • Default: '10:30:100'
    • Descrizione: specifica il numero massimo di connessioni non autenticate simultanee al demone SSH.
  • ssh_macs
    • Default: []
    • Descrizione: modifica questo elenco per sovrascrivere i mac. I default si trovano in defaults/main.yml
  • ssh_kex
    • Default: []
    • Descrizione: modifica questo elenco per sovrascrivere i kex. I default si trovano in defaults/main.yml
  • ssh_ciphers
    • Default: []
    • Descrizione: modifica questo elenco per sovrascrivere i cipher. I default si trovano in defaults/main.yml
  • ssh_custom_options
    • Default: []
    • Descrizione: righe personalizzate per la configurazione del client SSH
  • sshd_custom_options
    • Default: []
    • Descrizione: righe personalizzate per la configurazione del demone SSH
  • sshd_syslog_facility
    • Default: 'AUTH'
    • Descrizione: il codice facility utilizzato per registrare i messaggi da sshd
  • sshd_log_level
    • Default: 'VERBOSE'
    • Descrizione: il livello di verbosità utilizzato per registrare i messaggi da sshd
  • sshd_strict_modes
    • Default: true
    • Descrizione: controlla i modi dei file e la proprietà dei file dell'utente e della directory home prima di accettare il login
  • sshd_authenticationmethods
    • Default: publickey
    • Descrizione: specifica i metodi di autenticazione che devono essere completati con successo affinché a un utente venga concesso l'accesso. Assicurati di impostare tutte le variabili richieste per il metodo di autenticazione selezionato. I default si trovano in defaults/main.yml
  • Configurazione di impostazioni non elencate nelle variabili del ruolo

    Se desideri configurare opzioni ssh non elencate sopra, puoi usare ssh_custom_options (per /etc/ssh/ssh_config) o sshd_custom_options (per /etc/ssh/sshd_config) per impostarle. Queste opzioni verranno impostate all'inizio del file, così potrai sovrascrivere le opzioni più avanti nel file.

    Esempio di 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"
    

    Modifica della porta predefinita e idempotenza

    Questo ruolo usa la porta predefinita 22 o la porta configurata nell'inventory per connettersi al server. Se la porta ssh predefinita viene modificata tramite ssh_server_ports, una volta riavviato il server ssh, proverà comunque a connettersi usando la porta precedente. Per eseguire nuovamente questo ruolo sullo stesso server, l'inventory dovrà essere aggiornato per usare la nuova porta ssh.

    Se l'idempotenza è importante, considera l'uso del ruolo ssh-hardening-fallback, che è un wrapper attorno a questo ruolo che ripiega sulla porta 22 se la porta configurata non è raggiungibile.

    Esempio di Playbook

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

    Test Locali

    Il modo preferito per testare localmente il ruolo è usare Docker. Dovrai installare Docker sul tuo sistema. Vedi Get started per un pacchetto Docker adatto al tuo sistema.

    Puoi anche usare vagrant e Virtualbox o VMWare per eseguire i test localmente. Dovrai installare Virtualbox e Vagrant sul tuo sistema. Vedi Vagrant Downloads per un pacchetto vagrant adatto al tuo sistema. Per tutti i nostri test usiamo test-kitchen. Se non hai familiarità con test-kitchen, dai un'occhiata alla loro guida.

    Successivamente installa test-kitchen:

    root@kitploit:~
    # Installa le dipendenze
    gem install bundler
    bundle install
    

    Test con Docker

    root@kitploit:~
    # test rapido su una macchina
    bundle exec kitchen test ssh-ubuntu1804-ansible-latest
    
    # test su tutte le macchine
    bundle exec kitchen test
    
    # per lo sviluppo
    bundle exec kitchen create ssh-ubuntu1804-ansible-latest
    bundle exec kitchen converge ssh-ubuntu1804-ansible-latest
    bundle exec kitchen verify ssh-ubuntu1804-ansible-latest
    
    # pulizia
    bundle exec kitchen destroy ssh-ubuntu1804-ansible-latest
    

    Test con Virtualbox

    root@kitploit:~
    # test rapido su una macchina
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test ssh-ubuntu-1804
    
    # test su tutte le macchine
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
    
    # per lo sviluppo
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create ssh-ubuntu-1804
    KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge ssh-ubuntu-1804
    

    Per maggiori informazioni vedi test-kitchen

    FAQ / Insidie

    Non riesco ad accedere al mio account. Ho registrato la chiave del client, ma non mi fa ancora entrare.

    Se hai esaurito tutti i problemi tipici (firewall, rete, chiave mancante, chiave sbagliata, account disabilitato, ecc.), potrebbe essere che il tuo account sia bloccato. Il modo più rapido per scoprirlo è guardare l'hash della password per il tuo utente:

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

    Se l'hash include un !, il tuo account è bloccato:

    root@kitploit:~
    myuser:!:16280:7:60:7:::
    

    Il modo corretto per risolvere è sbloccare l'account (passwd -u myuser). Se l'utente non ha una password, puoi sbloccarlo tramite:

    root@kitploit:~
    usermod -p "*" myuser
    

    In alternativa, se intendi usare PAM, lo hai abilitato tramite ssh_use_pam: true. PAM consentirà agli utenti bloccati di entrare con le chiavi.

    Perché la mia applicazione non si connette più tramite SSH?

    Guarda sempre prima i file di log e, se possibile, la negoziazione tra client e server che viene completata durante la connessione.

    Abbiamo visto alcuni problemi in applicazioni (basate su python e ruby) dovuti all'uso di un set crittografico obsoleto. Questo collide con questo modulo di hardening, che ha ridotto l'elenco di cipher, codici di autenticazione dei messaggi (MAC) e algoritmi di scambio chiavi (KEX) a una selezione più sicura.

    Dopo l'uso del ruolo, il modulo template/copy/file di Ansible non funziona più!

    Questo ruolo disattiva per impostazione predefinita SFTP. Ansible usa per impostazione predefinita SFTP per trasferire i file agli host remoti. Devi impostare scp_if_ssh = True nel tuo ansible.cfg. In questo modo Ansible usa SCP per copiare i file. In alternativa puoi riabilitare SFTP impostando sftp_enabled a true.

    Impossibile riavviare il servizio sshd per mancanza di privilegi

    Se ottieni il seguente errore durante l'esecuzione dell'handler "restart sshd"

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

    oppure

    root@kitploit:~
    failure 1 running systemctl show for 'ssh': Failed to connect to bus: No such file or directory
    

    esegui il playbook come root (senza become: yes a livello di playbook), oppure aggiungi become: yes all'handler.

    Questo è un bug di Ansible: vedi qui e qui per maggiori informazioni.

    Contribuire

    Vedi linee guida per i contributori.

    Licenza e Autore

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

    Concesso in licenza sotto la Apache License, Versione 2.0 (la "Licenza"); non puoi usare questo file se non in conformità con la Licenza. Puoi ottenere una copia della Licenza all'indirizzo

    root@kitploit:~
    http://www.apache.org/licenses/LICENSE-2.0
    

    Salvo quanto richiesto dalla legge applicabile o concordato per iscritto, il software distribuito sotto la Licenza è distribuito su base "COSÌ COM'È", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o implicite. Vedi la Licenza per il linguaggio specifico che regola i permessi e le limitazioni previste dalla Licenza.

    Scarica lo strumento