Dopo aver importato manualmente un disco virtuale in Compute Engine, devi ottimizzare le immagini in modo che possano utilizzare funzionalità specifiche per l'ambiente Compute Engine.
Sommario
Installa l'ambiente guest Compute Engine
Devi installare l'ambiente ospite prima di poter utilizzare le funzionalità chiave di Compute Engine. Per sapere quando è necessario installare manualmente l'ambiente guest, vedi Quando installare o aggiornare manualmente l'ambiente guest.
Installa l'ambiente guest sull'istanza VM in esecuzione che hai creato dopo l'importazione manuale dell'immagine esistente. Per eseguire l'installazione, accedi all'istanza VM tramite SSH con un account utente creato prima di importarla o interagendo con la console seriale.
Configura l'immagine importata per Compute Engine
Puoi eseguire l'immagine del disco di avvio in Compute Engine senza ulteriori modifiche, ma puoi anche ottimizzare ulteriormente l'immagine in modo che venga eseguita in modo ottimale all'interno di Compute Engine e abbia accesso a tutte le funzionalità di Compute Engine.
Modifica il file
ntp.conf
in modo da includere solo la voce del server NTP di Googleserver metadata.google.internal iburst
.Imposta il fuso orario UTC:
sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
Per garantire funzionalità di rete ad alte prestazioni, utilizza le seguenti configurazioni di rete consigliate:
- Utilizza il client DHCP ISC.
- Imposta l'MTU DHCP sulla MTU di rete. Questo parametro viene utilizzato dal server DHCP di Compute Engine come opzione
interface-mtu
, rispettata dalla maggior parte dei client. Per ulteriori informazioni sulle MTU di rete, consulta la panoramica sulle unità di trasmissione massime. - Se non prevedi di configurare gli indirizzi IPv6, disabilita IPv6.
Rimuovi le regole di rete permanenti per impedire all'istanza di memorizzare gli indirizzi MAC. Ad esempio:
rm -f /etc/udev/rules.d/70-persistent-net.rules
Disabilita il firewall del sistema operativo a meno che tu non abbia requisiti specifici non supportati dalle regole firewall di Compute Engine. Compute Engine fornisce un firewall per il traffico in entrata e in uscita. Per ulteriori informazioni sui firewall, consulta la panoramica delle regole firewall.
Per garantire funzionalità di rete e disco ad alte prestazioni, disabilita o rimuovi il daemon
irqbalance
. Questo daemon non bilancia correttamente le richieste IRQ per i sistemi operativi guest sulle istanze di macchine virtuali (VM). Utilizza invece gli script che fanno parte dell'ambiente guest per bilanciare correttamente le impostazioni IRQ per le CPU virtuali.Configura l'accesso SSH all'immagine di base:
- Disabilita l'accesso SSH principale.
- Disattiva autenticazione password.
- Disattiva l'autenticazione basata su host.
- Attiva controllo rigoroso della chiave host.
- Usa
ServerAliveInterval
per mantenere aperte le connessioni. Rimuovi le chiavi SSH dall'immagine in modo che altri utenti non possano accedere alle chiavi pubbliche o private nella tua immagine. Utilizza Compute Engine per gestire l'accesso alle istanze.
Modifica il file
/etc/ssh/ssh_config
per utilizzare la seguente configurazione:Host * Protocol 2 ForwardAgent no ForwardX11 no HostbasedAuthentication no StrictHostKeyChecking no Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc Tunnel no # Compute Engine times out connections after 10 minutes of inactivity. # Keep alive ssh connections by sending a packet every 7 minutes. ServerAliveInterval 420
Modifica il file
/etc/ssh/sshd_config
per utilizzare la seguente configurazione:# Disable PasswordAuthentication because ssh keys are more secure. PasswordAuthentication no # Disable root login. Using sudo provides better auditing. PermitRootLogin no PermitTunnel no AllowTcpForwarding yes X11Forwarding no # Compute Engine times out connections after 10 minutes of inactivity. # Keep alive ssh connections by sending a packet every 7 minutes. ClientAliveInterval 420
Dopo aver configurato e ottimizzato il disco di avvio su Compute Engine, crea un'immagine dal disco di avvio in modo da poter creare istanze da una versione completamente ottimizzata dell'immagine, anziché dover configurare ogni istanza ogni volta che la crei.
Configura le best practice per la sicurezza
Dovresti sempre fornire un ambiente sicuro del sistema operativo, ma può essere difficile trovare un equilibrio tra ambiente sicuro e accessibile. Le macchine virtuali vulnerabili agli attacchi possono consumare risorse costose. Google consiglia vivamente che le immagini siano conformi alle seguenti best practice per la sicurezza:
- Riduci al minimo la quantità di software installato per impostazione predefinita (ad esempio, esegui un'installazione minima del sistema operativo).
- Attiva gli aggiornamenti automatici.
- Per impostazione predefinita, disattiva tutti i servizi di rete tranne SSH, DHCP e NTPD. Puoi consentire l'esecuzione di un server di posta, come Postfix, se accetta solo connessioni da localhost.
- Non consentire porte di ascolto esterne, ad eccezione di quelle SSH.
- Installa il pacchetto denyhosts per prevenire i tentativi di accesso di forza bruta tramite SSH.
- Rimuovi tutti gli account non utente non necessari dall'installazione predefinita.
- In
/etc/passwd
, imposta la shell di tutti gli account non utente su/sbin/nologin
o/usr/sbin/nologin
(a seconda di dove è stato installato nologin nel sistema operativo). - Configura il tuo sistema operativo per l'utilizzo dell'algoritmo SHA512 con salt per le password in
/etc/shadow
. - Imposta e configura pam_cracklib per password efficaci.
- Imposta e configura pam_tally per bloccare gli account per 5 minuti dopo 3 errori.
In
/etc/shadow
, configura l'account root in modo che sia bloccato per impostazione predefinita. Esegui questo comando per bloccare l'account root:usermod -L root
Nega la radice in
/etc/ssh/sshd_config
aggiungendo la seguente riga:PermitRootLogin no
Crea profili AppArmor o SELinux per tutti i servizi di rete in esecuzione predefiniti.
Se possibile, utilizza le funzionalità di file system per eliminare la necessità del bit S*ID e per fornire un controllo più granulare.
Abilita le mitigazioni degli exploit di compilazione e runtime durante la compilazione di software per la rete. Ad esempio, ecco alcune delle mitigazioni offerte dalla GNU Compiler Collection (GCC) e come attivarle:
- Protezione dallo stack contro gli attacchi: attiva questa opzione con
-fstack-protector
. Per impostazione predefinita, questa opzione protegge le funzioni con un buffer allo stack più lungo di otto byte. Per aumentare la protezione coprendo le funzioni con buffer di almeno quattro byte, aggiungi--param=ssp-buffer-size=4
. - Randomizzazione del layout dello spazio degli indirizzi (ASLR):
attiva questa opzione creando un eseguibile indipendente dalla posizione con
-fPIC -pie
. - Protezioni Glibc: attiva queste protezioni con
-D_FORTIFY_SOURCE=2
. - Protezione GOT (Global Offset Table): abilita questa funzionalità di caricamento di runtime con
-Wl,-z,relro,-z,now
. - Errori di compilazione per le stringhe di formato mancanti:
-Wformat -Wformat-security -Werror=format-security
- Protezione dallo stack contro gli attacchi: attiva questa opzione con
Disabilita
CAP_SYS_MODULE
, che consente il caricamento e l'unload dei moduli del kernel. Per disattivare questa funzionalità, modifica il file/etc/sysctl.conf
e includi la seguente impostazione:kernel.modules_disabled = 1
Rimuovi la tabella dei simboli del kernel:
sudo rm /boot/System.map
Passaggi successivi
- Quando l'immagine è pronta per la produzione, crea una versione finale dell'immagine personalizzata e includila in una famiglia di immagini in modo da poter gestire facilmente le versioni aggiornate dell'immagine personalizzata.
- Scopri come avviare un'istanza da un'immagine.