
Questa ricetta chef fornisce configurazioni sicure per ssh-client e ssh-server.
Questa ricetta fornisce configurazioni sicure per ssh-client e ssh-server. Questa ricetta non fornisce funzionalità per la gestione di utenti e/o chiavi ssh; per questo si prega di utilizzare altre ricette.
Di seguito puoi trovare la documentazione degli attributi e i loro valori predefiniti.
Nota: alcuni valori predefiniti degli attributi di questa ricetta sono impostati nelle ricette. Per sovrascrivere tali attributi dovresti utilizzare un livello di precedenza degli attributi più alto. Tali attributi sono contrassegnati con #override attribute# nell'elenco seguente. Esempio per sovrascrivere un tale attributo:
override['ssh-hardening']['ssh']['server']['listen_to'] = node['ipaddress']
['ssh-hardening']['network']['ipv6']['enable'] - false. Impostare su true se è necessario IPv6['ssh-hardening']['ssh']['ports'] - 22. Porte su cui ssh-server deve rimanere in ascolto e a cui ssh-client deve connettersi['ssh-hardening']['ssh'][{'client', 'server'}]['kex'] - nil per calcolare il miglior scambio di chiavi (KEX) in base alla versione del server, altrimenti specificare una stringa di valori Kex['ssh-hardening']['ssh'][{'client', 'server'}]['mac'] - nil per calcolare i migliori codici di autenticazione del messaggio (MAC) in base alla versione del server, altrimenti specificare una stringa di valori Mac['ssh-hardening']['ssh'][{'client', 'server'}]['cipher'] - nil per calcolare i migliori cifrari in base alla versione del server, altrimenti specificare una stringa di valori Cipher['ssh-hardening']['ssh'][{'client', 'server'}]['cbc_required'] - false. Impostare su true se è richiesto CBC per i cifrari. Questo di solito è necessario solo se meccanismi M2M più vecchi 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.['ssh-hardening']['ssh'][{'client', 'server'}]['weak_hmac'] - false. Impostare su true se sono richiesti meccanismi HMAC più deboli. Questo di solito è necessario solo se meccanismi M2M più vecchi devono comunicare con SSH e non hanno abilitato nessuno degli HMAC sicuri configurati.['ssh-hardening']['ssh'][{'client', 'server'}]['weak_kex'] - false. Impostare su true se sono richiesti meccanismi di scambio di chiavi (KEX) più deboli. Questo di solito è necessario solo se meccanismi M2M più vecchi devono comunicare con SSH e non hanno abilitato nessuno dei KEX sicuri configurati.['ssh-hardening']['ssh']['client']['remote_hosts'] - [] - uno o più host a cui ssh-client può connettersi.['ssh-hardening']['ssh']['client']['password_authentication'] - false. Impostare su true se l'autenticazione tramite password deve essere abilitata.['ssh-hardening']['ssh']['client']['roaming'] - false. Impostare su true se deve essere abilitato il roaming sperimentale del client. È noto che ciò può causare potenziali problemi con la divulgazione di segreti a server dannosi e per impostazione predefinita è disabilitato.['ssh-hardening']['ssh']['client']['extras'] - {}. Aggiungi opzioni di configurazione extra, vedi sotto per i dettagli['ssh-hardening']['ssh']['server']['host_key_files'] - nil per calcolare la migliore configurazione delle host key in base alla versione del server, altrimenti specificare un array con i percorsi dei file (es. /etc/ssh/ssh_host_rsa_key)['ssh-hardening']['ssh']['server']['dh_min_prime_size'] - 2048 - Lunghezza minima accettabile del primo in bit in /etc/ssh/moduli. I primi al di sotto di questo numero verranno rimossi. (Vedi questo per maggiori informazioni e contesto)['ssh-hardening']['ssh']['server']['dh_build_primes'] - false - Se devono essere generati primi propri. Questa rigenerazione avviene solo una volta e richiede molto tempo (~ 1,5 - 2 ore su hardware moderno per una lunghezza di 4096).['ssh-hardening']['ssh']['server']['dh_build_primes_size'] - 4096 - Lunghezza del primo che deve essere generata. Questa opzione è valida solo se dh_build_primes è abilitato.['ssh-hardening']['ssh']['server']['listen_to'] #override attribute# - uno o più indirizzi IP a cui ssh-server deve rimanere in ascolto. Il valore predefinito è l'ascolto su tutte le interfacce. Dovrebbe essere configurato per motivi di sicurezza!['ssh-hardening']['ssh']['server']['allow_root_with_key'] - false per disabilitare del tutto l'accesso di root. Impostare su true per consentire a root di accedere tramite meccanismo basato su chiave['ssh-hardening']['ssh']['server']['allow_tcp_forwarding'] - false. Impostare su true per consentire l'inoltro TCP['ssh-hardening']['ssh']['server']['allow_agent_forwarding'] - false. Impostare su true per consentire l'inoltro dell'agente['ssh-hardening']['ssh']['server']['allow_x11_forwarding'] - false. Impostare su true per consentire l'inoltro X11['ssh-hardening']['ssh']['server']['permit_tunnel'] - false per disabilitare l'inoltro dei dispositivi tun. Impostare su true per consentire l'inoltro dei dispositivi tun. Altri valori accettati: 'yes', 'no', 'point-to-point', 'ethernet'. Vedere man sshd_config per i comportamenti esatti. Nota: dovrai anche abilitare allow_tcp_forwarding.['ssh-hardening']['ssh']['server']['use_pam'] - true. Impostare su false per disabilitare l'autenticazione pam di sshd['ssh-hardening']['ssh']['server']['challenge_response_authentication'] - false. Impostare su true per abilitare l'autenticazione a risposta di sfida.['ssh-hardening']['ssh']['server']['deny_users'] - [] per configurare DenyUsers; se specificato, l'accesso è negato per i nomi utente che corrispondono a uno dei modelli.['ssh-hardening']['ssh']['server']['allow_users'] - [] per configurare AllowUsers; se specificato, l'accesso è consentito solo per i nomi utente che corrispondono a uno dei modelli.['ssh-hardening']['ssh']['server']['deny_groups'] - [] per configurare DenyGroups; se specificato, l'accesso è negato per gli utenti il cui gruppo primario o elenco di gruppi supplementari corrisponde a uno dei modelli.['ssh-hardening']['ssh']['server']['allow_groups'] - [] per configurare AllowGroups; se specificato, l'accesso è consentito solo per gli utenti il cui gruppo primario o elenco di gruppi supplementari corrisponde a uno dei modelli.['ssh-hardening']['ssh']['server']['print_motd'] - false. Impostare su true per abilitare la stampa del MOTD['ssh-hardening']['ssh']['server']['print_last_log'] - false. Impostare su true per abilitare la stampa delle informazioni sull'ultimo accesso['ssh-hardening']['ssh']['server']['banner'] - nil. Impostare un percorso come '/etc/issue.net' per abilitare il banner['ssh-hardening']['ssh']['server']['os_banner'] - false per disabilitare le informazioni sulla versione durante l'handshake del protocollo (solo famiglia debian). Impostare su true per abilitarlo['ssh-hardening']['ssh']['server']['use_dns'] - nil per utilizzare il valore predefinito di openssh. Impostare su true o false per abilitare/disabilitare la ricerca DNS e il controllo dell'host remoto['ssh-hardening']['ssh']['server']['use_privilege_separation'] - nil per calcolare il valore migliore in base alla versione del server, altrimenti impostare true o false['ssh-hardening']['ssh']['server']['login_grace_time'] - 30s. Tempo entro il quale l'accesso deve essere completato con successo, altrimenti l'utente viene disconnesso.['ssh-hardening']['ssh']['server']['max_auth_tries'] - 2. Il numero di tentativi di autenticazione per connessione['ssh-hardening']['ssh']['server']['max_sessions'] - 10 Il numero di sessioni per connessione['ssh-hardening']['ssh']['server']['password_authentication'] - false. Impostare su true se l'autenticazione tramite password deve essere abilitata['ssh-hardening']['ssh']['server']['log_level'] - verbose. Il livello di log di sshd. Vedere LogLevel in man 5 sshd_config per i valori possibili.['ssh-hardening']['ssh']['server']['sftp']['enable'] - false. Impostare su true per abilitare la funzionalità SFTP del demone OpenSSH['ssh-hardening']['ssh']['server']['sftp']['group'] - sftponly. Imposta l'opzione Match Group di SFTP per consentire SFTP solo a utenti dedicati['ssh-hardening']['ssh']['server']['sftp']['chroot'] - /home/%u. Imposta la directory in cui l'utente SFTP deve essere confinato (chroot)['ssh-hardening']['ssh']['server']['sftp']['authorized_keys_path'] - nil. Se non nil, percorso completo di uno o più file authorized keys separati da spazi che verrà impostato all'interno del Match Group per l'accesso solo-SFTP['ssh-hardening']['ssh']['server']['sftp']['password_authentication'] - false. Impostare su true se l'autenticazione tramite password deve essere abilitata['ssh-hardening']['ssh']['server']['authorized_keys_path'] - nil. Se non nil, è previsto il percorso completo di uno o più file authorized keys separati da spazi.['ssh-hardening']['ssh']['server']['extras'] - {}. Aggiungi opzioni di configurazione extra, vedi sotto per i dettagli['ssh-hardening']['ssh']['server']['match_blocks'] - {}. Blocco di configurazione Match, vedi sotto per i dettagliAggiungi le ricette alla run_list:
"recipe[ssh-hardening]"
Questo installerà ssh-server e ssh-client. In alternativa puoi sceglierne solo uno tramite:
"recipe[ssh-hardening::server]"
"recipe[ssh-hardening::client]"
Configura gli attributi:
"ssh-hardening": {
"ssh" : {
"server" : {
"listen_to" : "10.2.3.4"
}
}
}
Il valore predefinito per listen_to è 0.0.0.0. È altamente raccomandato modificare il valore.
Per abilitare la configurazione SFTP aggiungi una delle seguenti ricette alla run_list:
"recipe[ssh-hardening]"
oppure
"recipe[ssh-hardening::server]"
Configura gli attributi:
"ssh-hardening": {
"ssh" : {
"server": {
"sftp" : {
"enable" : true,
"chroot" : "/home/sftp/%u",
"group" : "sftusers"
}
}
}
}
Questo abiliterà il server SFTP e confinerà (chroot) ogni utente nel gruppo sftpusers alla directory /home/sftp/%u.
Le opzioni di configurazione extra possono essere aggiunte ai file di configurazione del client o del server. Questo può essere utilizzato per sovrascrivere valori impostati staticamente o per aggiungere opzioni di configurazione non altrimenti disponibili tramite gli attributi.
La sintassi è la seguente:
# => Configurazione Extra del Server
default['ssh-hardening']['ssh']['server']['extras'].tap do |extra|
extra['#Some Comment'] = 'Heres the Comment'
extra['AuthenticationMethods'] = 'publickey,keyboard-interactive'
end
# => Configurazione Extra del Client
default['ssh-hardening']['ssh']['client']['extras'].tap do |extra|
extra['PermitLocalCommand'] = 'no'
extra['Tunnel'] = 'no'
end
I blocchi Match devono essere posizionati alla fine di sshd_config. Questo può essere ottenuto utilizzando l'albero degli attributi match_blocks:
default['ssh-hardening']['ssh']['server']['match_blocks'].tap do |match|
match['User root'] = <<~ROOT
AuthorizedKeysFile .ssh/authorized_keys
ROOT
match['User git'] = <<~GIT
Banner none
AuthorizedKeysCommand /bin/false
AuthorizedKeysFile .ssh/authorized_keys
GSSAPIAuthentication no
PasswordAuthentication no
GIT
end
Installa chef-dk, VirtualBox o VMware Workstation e Vagrant.
Il linting è verificato con rubocop e foodcritic:
$ chef exec rake lint
.....
I test unitari/spec vengono eseguiti con chefspec:
$ chef exec rake spec
.....
I test di integrazione vengono eseguiti con test-kitchen e inspec:
$ chef exec rake kitchen
.....
# oppure puoi usare kitchen direttamente
$ kitchen test
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 questo problema è sbloccare l'account (passwd -u myuser). Se l'utente non ha una password, puoi sbloccarlo tramite:
usermod -p "*" myuser
In alternativa, se intendi utilizzare PAM, lo hai abilitato tramite ['ssh-hardening']['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, osserva la negoziazione tra client e server che viene completata durante la connessione.
Abbiamo visto alcuni problemi nelle applicazioni (basate su python e ruby) dovuti al loro utilizzo 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 di chiavi (KEX) a una selezione più sicura.
Se scopri che questo non è sufficiente, sentiti libero di attivare gli attributi cbc_requires per i cifrari, weak_hmac per i MAC e weak_kex per i KEX nei namespace ['ssh-hardening']['ssh']['client'] o ['ssh-hardening']['ssh']['server'] a seconda di dove vuoi supportarli.
Perché non riesco ad accedere al server SFTP dopo aver aggiunto un utente al mio gruppo SFTP?
Questo è un problema di proprietà di ChrootDirectory. sshd rifiuterà le connessioni SFTP agli account che sono impostati per essere confinati (chroot) in qualsiasi directory che abbia proprietà/autorizzazioni che sshd considera non sicure. I severi requisiti di proprietà/autorizzazioni di sshd stabiliscono che ogni directory nel percorso chroot deve essere di proprietà di root e scrivibile solo dal proprietario. Quindi, ad esempio, se l'ambiente chroot è /home, deve essere di proprietà di root.
Questa ricetta si basa principalmente sulle guide di:
Grazie a tutti voi!!
Concesso in licenza sotto la Apache License, Versione 2.0 (la "Licenza"); non puoi utilizzare 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 una base "COSÌ COM'È", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o implicite. Vedi la Licenza per il linguaggio specifico che regola le autorizzazioni e le limitazioni previste dalla Licenza.