Configurazione manuale di dischi importati


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
  • 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