
Questo ruolo Ansible fornisce numerose configurazioni SSH relative alla sicurezza, offrendo una protezione di base a tutto tondo.
Attenzione: Questo ruolo è stato migrato nella nostra hardening-collection:
Si prega di aprire eventuali issue e pull request lì!
network_ipv6_enable
ssh_listen_to deve essere impostato anche per ascoltare su indirizzi IPv6 (ad esempio [::]).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 o yes per abilitare il login di rootssh_allow_tcp_forwarding
'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'. 'yes' e 'no' devono essere passati con le virgolette.ssh_gateway_ports
falsefalse 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
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 è impostato.ssh_authorized_principals_file
ssh_trusted_user_ca_keys_file è impostato.ssh_authorized_principals
default_custom.yml per tutte le opzioni. Utilizzato solo se ssh_authorized_principals_file è impostato.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 per consentire l'autenticazione basata su password con il client sshssh_server_password_login
true per consentire l'autenticazione basata su password con il server sshssh_banner
falsetrue per stampare un banner al loginssh_banner_path
ssh_client_hardening
truefalse per interrompere l'hardening del 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 per stampare il banner specifico di debianssh_server_enabled
truefalse per disabilitare il server opensshdssh_server_hardening
truefalse per interrompere l'hardening del serverssh_server_match_address
ssh_server_match_group
ssh_server_match_user
ssh_server_match_local_port
ssh_server_permit_environment_vars
noyes 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
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 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:
- hosts: localhost
roles:
- dev-sec.ssh-hardening
vars:
ssh_custom_options:
- "Include /etc/ssh/ssh_config.d/*"
sshd_custom_options:
- "AcceptEnv LANG"
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.
- hosts: localhost
roles:
- dev-sec.ssh-hardening
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:
# Installa le dipendenze
gem install bundler
bundle install
# 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 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
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:
sudo grep myuser /etc/shadow
Se l'hash include un !, il tuo account è bloccato:
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:
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"
Unable to restart service ssh: Failed to restart ssh.service: Access denied
oppure
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.
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
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.