Dopo aver importato manualmente un disco virtuale in Compute Engine, devi ottimizzare queste immagini in modo che possano utilizzare le funzionalità specifiche dell'ambiente Compute Engine.
Sommario
Installa l'ambiente guest Compute Engine
Devi installare l'ambiente guest prima di poter utilizzare le funzionalità chiave di Compute Engine. Per scoprire quando devi installare manualmente l'ambiente guest, consulta Quando installare o aggiornare manualmente l'ambiente guest.
Installa l'ambiente guest nell'istanza VM in esecuzione che hai creato dopo aver importato manualmente l'immagine esistente. Per eseguire l'installazione, accedi all'istanza VM tramite SSH con un account utente creato prima dell'importazione 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 modifiche aggiuntive, ma puoi anche ottimizzarla ulteriormente in modo che funzioni in modo ottimale in 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 su UTC:
sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
Per garantire una rete ad alte prestazioni, utilizza le seguenti configurazioni di rete consigliate:
- Utilizza il client DHCP ISC.
- Imposta l'MTU DHCP sull'MTU della rete. Il server DHCP di Compute Engine fornisce questo parametro come opzione
interface-mtu
, rispettata dalla maggior parte dei client. Per ulteriori informazioni sulle MTU di rete, consulta la panoramica delle unità massime di trasmissione. - Se non prevedi di configurare indirizzi IPv6, disattiva IPv6.
Rimuovi le regole di rete permanenti per impedire all'istanza di ricordare gli indirizzi MAC. Ad esempio:
rm -f /etc/udev/rules.d/70-persistent-net.rules
Disattiva 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 Panoramica delle regole firewall.
Per garantire una funzionalità di rete e disco ad alte prestazioni, disattiva o rimuovi il daemon
irqbalance
. Questo demone 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:
- Disattiva l'accesso SSH root.
- Disattiva l'autenticazione tramite password.
- Disattiva l'autenticazione basata sull'host.
- Attiva il controllo rigoroso delle chiavi 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 al suo interno. Utilizza invece 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 da quel 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.
Configurare le best practice per la sicurezza
Devi sempre fornire un ambiente del sistema operativo sicuro, ma può essere difficile trovare un equilibrio tra un ambiente sicuro e uno accessibile. Le macchine virtuali vulnerabili agli attacchi possono consumare risorse costose. Google consiglia vivamente di rispettare le seguenti best practice per la sicurezza delle immagini:
- 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, vengono disattivati tutti i servizi di rete, ad eccezione di 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 sshd.
- Installa il pacchetto denyhosts per contribuire a impedire i tentativi di accesso forzato SSH.
- Rimuovi dall'installazione predefinita tutti gli account non utente non necessari.
- In
/etc/passwd
, imposta la shell di tutti gli account non utente su/sbin/nologin
o/usr/sbin/nologin
(a seconda di dove il sistema operativo ha installato nologin). - Configura il sistema operativo in modo che utilizzi SHA512 con il sale per le password in
/etc/shadow
. - Configura pam_cracklib per le password complesse.
- Configura pam_tally in modo da bloccare gli account per 5 minuti dopo 3 tentativi non riusciti.
In
/etc/shadow
, configura l'account root in modo che sia bloccato per impostazione predefinita. Esegui il seguente comando per bloccare l'account root:usermod -L root
Nega il permesso di accesso come utente root 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à del file system per eliminare la necessità del bit S*ID e per fornire un controllo più granulare.
Attiva le mitigazioni degli exploit del compilatore e del runtime durante la compilazione del software rivolto alla rete. Ad esempio, ecco alcune delle mitigazioni offerte dalla GNU Compiler Collection (GCC) e come attivarle:
- Protezione da urti per la serie: attiva questa opzione con
-fstack-protector
. Per impostazione predefinita, questa opzione protegge le funzioni con un buffer allocato nello 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
. - Casualizzazione dello spazio degli indirizzi (ASLR):
attiva questa opzione creando un file eseguibile indipendente dalla posizione con
-fPIC -pie
. - Protezioni Glibc: attiva queste protezioni con
-D_FORTIFY_SOURCE=2
. - Protezione della tabella di offset globale (GOT): attiva questa funzionalità del caricatore di runtime con
-Wl,-z,relro,-z,now
. - Errori di compilazione per stringhe di formato mancanti:
-Wformat -Wformat-security -Werror=format-security
- Protezione da urti per la serie: attiva questa opzione con
Disattiva
CAP_SYS_MODULE
, che consente il caricamento e lo scollegamento 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
- Una volta che 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.