Nachdem Sie ein virtuelles Laufwerk manuell in Compute Engine importiert haben, müssen Sie diese Images optimieren, damit sie die spezifischen Funktionen der Compute Engine-Umgebung verwenden können.
Inhalt
Compute Engine-Gastumgebung installieren
Sie müssen die Gastumgebung installieren, um die wichtigsten Features von Compute Engine verwenden zu können. Informationen dazu, wann Sie die Gastumgebung manuell installieren müssen, finden Sie unter Zeitpunkt zur manuellen Installation oder Aktualisierung der Gastumgebung.
Installieren Sie die Gastumgebung auf der ausgeführten VM-Instanz, die Sie nach dem manuellen Import Ihres vorhandenen Images erstellt haben. Greifen Sie zum Durchführen der Installation mit einem Nutzerkonto, das Sie vor dem Import erstellt haben, über SSH oder durch Interaktion mit der seriellen Konsole auf die VM-Instanz zu.
Importierte Images für Compute Engine konfigurieren
Sie können das Bootlaufwerk-Image zwar ohne zusätzliche Änderungen in Compute Engine ausführen, aber das Image lässt sich auch weiter optimieren, damit es optimal auf Compute Engine läuft und Zugriff auf alle Compute Engine-Features hat.
Bearbeiten Sie die Datei
ntp.conf
so, dass sie nur den Google NTP-Server-Eintragserver metadata.google.internal iburst
enthält.Legen Sie als Zeitzone UTC fest:
sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
Damit Sie eine leistungsstarke Netzwerkkapazität gewährleisten können, verwenden Sie die folgenden empfohlenen Netzwerkkonfigurationen:
- Verwenden Sie den ISC DHCP-Client.
- Legen Sie als DHCP-MTU die Netzwerk-MTU fest. Der Compute Engine DHCP-Server gibt diesen Parameter als die Option
interface-mtu
aus, die die meisten Clients berücksichtigen. Weitere Informationen zu Netzwerk-MTUs finden Sie unter Maximale Übertragungseinheit – Übersicht. - Wenn Sie keine IPv6-Adressen konfigurieren möchten, deaktivieren Sie IPv6.
Entfernen Sie persistierende Netzwerkregeln, um zu verhindern, dass die Instanz MAC-Adressen speichert. Beispiel:
rm -f /etc/udev/rules.d/70-persistent-net.rules
Deaktivieren Sie die Firewall des Betriebssystems, es sei denn, Sie haben spezielle Anforderungen, die von Compute Engine-Firewallregeln nicht unterstützt werden. Compute Engine bietet eine Firewall für ein- und ausgehenden Traffic. Weitere Informationen zu Firewalls finden Sie unter Übersicht über Firewallregeln.
Deaktivieren oder entfernen Sie den Daemon
irqbalance
, um für eine leistungsstarke Netzwerk- und Laufwerkskapazität zu sorgen. Dieser Daemon kann die IRQ-Anfragen für die Gastbetriebssysteme auf Instanzen virtueller Maschinen nicht richtig ausbalancieren. Verwenden Sie stattdessen die Skripts, die Teil der Gastumgebung sind, um die IRQ-Einstellungen für virtuelle CPUs richtig auszubalancieren.Konfigurieren Sie den SSH-Zugriff auf das Basis-Image:
- Entfernen Sie den SSH-Root-Login.
- Deaktivieren Sie die Passwortauthentifizierung.
- Deaktivieren Sie die Host-basierte Authentifizierung.
- Aktivieren Sie die strenge Host-Schlüsselprüfung.
- Verwenden Sie
ServerAliveInterval
, um Verbindungen offen zu halten. Entfernen Sie SSH-Schlüssel aus dem Image, damit niemand auf die öffentlichen oder privaten Schlüssel in Ihrem Image zugreifen kann. Verwenden Sie stattdessen Compute Engine, um den Zugriff auf Instanzen zu verwalten.
Bearbeiten Sie die Datei
/etc/ssh/ssh_config
so, dass sie die folgende Konfiguration verwendet: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
Bearbeiten Sie die Datei
/etc/ssh/sshd_config
so, dass sie die folgende Konfiguration verwendet:# 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
Nachdem Sie Ihr Bootlaufwerk auf Compute Engine konfiguriert und optimiert haben, erstellen Sie ein Image von diesem Bootlaufwerk, damit Sie Instanzen von einer vollständig optimierten Version des Images erzeugen können, statt jede Instanz beim Erstellen neu konfigurieren zu müssen.
Bewährte Sicherheitsmethoden konfigurieren
Sie sollten immer eine sichere Betriebssystemumgebung zur Verfügung stellen. Es kann jedoch schwierig sein, ein optimales Gleichgewicht zwischen einer sicheren und einer zugänglichen Umgebung zu wahren. Virtuelle Maschinen, die anfällig für Angriffe sind, können teure Ressourcen belegen. Google empfiehlt dringend, dass Sie bei Ihren Images die folgenden bewährten Sicherheitsmethoden beachten:
- Begrenzen Sie die standardmäßig installierte Software auf ein Mindestmaß (führen Sie beispielsweise eine minimale Installation des Betriebssystems aus).
- Aktivieren Sie automatische Updates.
- Standardmäßig werden alle Netzwerkdienste mit Ausnahme von SSH, DHCP und NTPD deaktiviert. Sie können den Betrieb eines Mail-Servers wie Postfix zulassen, wenn dieser nur Verbindungen vom localhost akzeptiert.
- Lassen Sie das Abhören von Schnittstellen von außen nur über SSHD zu.
- Installieren Sie das Paket denyhosts, um SSH-Brute-Force-Anmeldeversuche zu unterbinden.
- Entfernen Sie alle überflüssigen Nicht-Nutzerkonten aus der Standardinstallation.
- Legen Sie in
/etc/passwd
die Shell für alle Nicht-Nutzerkonten auf/sbin/nologin
oder/usr/sbin/nologin
fest (je nachdem, wo Ihr Betriebssystem nologin installiert hat). - Konfigurieren Sie Ihr Betriebssystem so, dass es SHA512 mit Salt für Passwörter in
/etc/shadow
verwendet. - Richten Sie pam_cracklib ein und konfigurieren Sie es für starke Passwörter.
- Richten Sie pam_tally ein und konfigurieren Sie es, um Konten nach 3 fehlgeschlagenen Anmeldeversuchen für 5 Minuten zu sperren.
Konfigurieren Sie das Root-Konto in
/etc/shadow
so, dass es standardmäßig gesperrt ist. Führen Sie den folgenden Befehl aus, um das Root-Konto zu sperren:usermod -L root
Verweigern Sie den Root-Zugriff in
/etc/ssh/sshd_config
durch Einfügen der folgenden Zeile:PermitRootLogin no
Erstellen Sie AppArmor- oder SELinux-Profile für alle standardmäßig ausgeführten netzwerkseitigen Dienste.
Verwenden Sie nach Möglichkeit Dateisystemfunktionen, damit auf das S*ID-Bit verzichtet werden kann und eine ausführlichere Kontrolle möglich ist.
Aktivieren Sie beim Kompilieren netzwerkseitiger Software Schutzmaßnahmen gegen Compiler- und Laufzeit-Exploits. Es folgen einige der Schutzmaßnahmen, die in der GNU Compiler Collection (GCC) enthalten sind, und die Schritte zu ihrer Aktivierung:
- Stack-Smashing-Schutz: Verwenden Sie
-fstack-protector
zum Aktivieren. Standardmäßig schützt diese Option Funktionen mit einem Stack-basierten Puffer, der länger als acht Byte ist. Fügen Sie--param=ssp-buffer-size=4
hinzu, um den Schutz durch Einbeziehen von Funktionen mit Puffern von mindestens vier Byte zu verbessern. - Address Space Layout Randomization (ASLR): Zum Aktivieren dieser Maßnahme müssen Sie mit
-fPIC -pie
eine positionsunabhängige ausführbare Datei erstellen. - Glibc-Schutz: Aktivieren Sie diesen Schutz mit
-D_FORTIFY_SOURCE=2
. - GOT-Schutz (Global Offset Table): Aktivieren Sie dieses Laufzeitladefeature mit
-Wl,-z,relro,-z,now
. - Kompilierungszeitfehler aufgrund fehlender Formatstrings:
-Wformat -Wformat-security -Werror=format-security
.
- Stack-Smashing-Schutz: Verwenden Sie
Deaktivieren Sie
CAP_SYS_MODULE
, damit Kernelmodule geladen und entladen werden. Wenn Sie dieses Feature deaktivieren möchten, bearbeiten Sie die Datei/etc/sysctl.conf
und fügen Sie die folgende Einstellung hinzu:kernel.modules_disabled = 1
Entfernen Sie die Kernelsymboltabelle:
sudo rm /boot/System.map
Weitere Informationen
- Sobald das Image für die Produktion bereit ist, erstellen Sie eine endgültige Version dieses benutzerdefinierten Images. Fügen Sie das Image dann in eine Image-Familie ein, damit aktualisierte Versionen des benutzerdefinierten Images leicht verwaltet werden können.
- VM-Instanz erstellen und starten