
Questo modulo Puppet fornisce configurazioni sicure per ssh-client e ssh-server.
truecbc_required = false - true se CBC è richiesto per i cifrari. Di solito è necessario solo se vecchi meccanismi M2M devono comunicare con SSH e non hanno abilitato nessuno dei cifrari sicuri configurati. CBC è un'alternativa debole. Qualsiasi cosa più debole dovrebbe essere evitata e pertanto non è disponibile.weak_hmac = false - true se sono richiesti meccanismi HMAC più deboli. Di solito è necessario solo se vecchi meccanismi M2M devono comunicare con SSH e non hanno abilitato nessuno degli HMAC sicuri configurati.weak_kex = false - true se sono richiesti meccanismi di Key-Exchange (KEX) più deboli. Di solito è necessario solo se vecchi meccanismi M2M devono comunicare con SSH e non hanno abilitato nessuno dei KEX sicuri configurati.allow_root_with_key = false - false per disabilitare del tutto il login di root. Impostare a true per consentire a root di accedere tramite meccanismo basato su chiave.ports = [ 22 ] - porte su cui ssh-server deve rimanere in ascolto e a cui ssh-client deve connettersilisten_to = [ "0.0.0.0" ] - uno o più indirizzi IP a cui ssh-server deve rimanere in ascolto. Il valore predefinito è vuoto, ma dovrebbe essere configurato per motivi di sicurezza!remote_hosts - uno o più host a cui ssh-client può connettersi. Il valore predefinito è vuoto, ma dovrebbe essere configurato per motivi di sicurezza!allow_tcp_forwarding = false - impostare a true per consentire il forwarding TCPallow_agent_forwarding = false - impostare a true per consentire il forwarding dell'agenteuse_pam = false per disabilitare l'autenticazione PAMclient_options = {} - impostare valori nell'hash per sovrascrivere le impostazioni del moduloserver_options = {} - impostare valori nell'hash per sovrascrivere le impostazioni del moduloDopo aver aggiunto questo modulo, puoi usare la classe:
class { 'ssh_hardening': }
Questo installerà ssh-server e ssh-client. In alternativa puoi sceglierne solo uno tramite:
class { 'ssh_hardening::server': }
class { 'ssh_hardening::client': }
Dovresti configurare gli attributi principali:
class { 'ssh_hardening::server':
"listen_to" : ["10.2.3.4"]
}
Il valore predefinito per listen_to è 0.0.0.0. È fortemente consigliato modificare il valore.
Le opzioni predefinite verranno unite con le opzioni passate tramite i parametri client_options e server_options.
Se un'opzione è impostata sia come predefinita sia tramite il parametro delle opzioni, vincerà quest'ultima.
L'esempio seguente abiliterà X11Forwarding, che è disabilitato per impostazione predefinita:
class { 'ssh_hardening':
server_options => {
'X11Forwarding' => 'yes',
},
}
Per i test locali puoi usare vagrant e Virtualbox o VMWare per eseguire i test in locale. 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
# Recupera i test
bundle exec thor kitchen:fetch-remote-tests
# Esegui i controlli lint
bundle exec rake lint
# Esegui i controlli spec
bundle exec rake spec
# test rapido su una macchina
bundle exec kitchen test default-ubuntu-1204
# test su macchine basate su Debian
bundle exec kitchen test
# per lo sviluppo
bundle exec kitchen create default-ubuntu-1204
bundle exec kitchen converge default-ubuntu-1204
Per maggiori informazioni vedi test-kitchen
Non riesco ad accedere al mio account. Ho registrato la chiave del client, ma non mi fa comunque 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 use_pam = true. PAM consentirà agli utenti bloccati di accedere con le chiavi.
Perché la mia applicazione non si connette più tramite SSH?
Guarda sempre prima i file di log e, se possibile, osserva la negoziazione tra client e server che avviene durante la connessione.
Abbiamo visto alcuni problemi in applicazioni (basate su python e ruby) dovuti al loro uso di un set crittografico obsoleto. Questo collide con questo modulo di hardening, che ha ridotto l'elenco di cifrari, codici di autenticazione del messaggio (MAC) e algoritmi di scambio chiave (KEX) a una selezione più sicura.
Se scopri che questo non basta, sentiti libero di attivare cbc_required per i cifrari, weak_hmac per i MAC e weak_kex per i KEX.
Concesso in licenza secondo 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 secondo 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 previsti dalla Licenza.