Configurazione manuale di dischi importati

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