Profi-Tipps für mehr Performance und Sicherheit virtueller Linux-Maschinen

Linux ist mittlerweile fester Bestandteil virtueller Umgebungen. Mit diesen Tipps lassen sich Sicherheit und Performance von Linux-VMs erhöhen.

Linux ist seit vielen Jahren ein fundamentaler Bestandteil des Data Centers, LAMP-Services, Webserver, Proxies,...

Firewalls und Load-Balancer sind da nur ein kleiner Teil der Anwendungsfälle, für die Linux das Betriebssystem stellt. Im gleichen Maße, indem Nutzererlebnis und Dokumentation von Linux besser wurden, haben auch die verschiedenen Linux-Distributionen an Verbreitung zugelegt.

Irgendwo auf diesem Weg hat schließlich auch die Virtualisierung von Servern im Rechenzentrum eingesetzt und neben Windows natürlich auch Linux als Gast- und Host-Betriebssystem eingeführt. Und genau hier gibt es einige Dinge zu beachten, wenn Linux innerhalb einer virtuellen Maschine ausgeführt wird.

Logical Volume Management

In vielen Linux-Distributionen ist eine Technik namens Logical Volume Management (LVM) integriert, mit der Administratoren unterschiedlichste Aufgaben beim Management von Partitionen und Laufwerken wahrnehmen können.

Die Vorteile von Stripped Volumes mögen in virtuellen Umgebungen nicht so sehr zum Tragen kommen, da hier Daten typischerweise auf dem gleichen SAN oder Speicherplatz abgelegt werden. LVM bietet darüber hinaus aber zahlreiche weitere Vorteile. Durch die Nutzung von LVM erhalten Administratoren die Möglichkeit, das Dateisystem im laufenden Betrieb zu erweitern und neue Partitionen zu erstellen, während die Nutzer weiter darauf zugreifen können. LVM ermöglicht auch die Anfertigung von laufwerksbasierten Snapshots für Backup- und Recovery-Szenarien, ohne dabei die in vSphere integrierten Funktionen zu beeinträchtigen.

Wer besondere Anforderungen an die Hochverfügbarkeit der Umgebung hat, der sollte LVM aktivieren und die Möglichkeiten der Partitionierung im laufenden Betrieb nutzen. Für wen die Verfügbarkeit dagegen weniger wichtig ist und wer keine separaten Partitionen seiner Linux-Installation benötigt, der sollte Logical Volume Management deaktivieren, da die Komplexität sonst die Vorteile schnell überwiegt.

Geeignete Partitionierung wählen

Eine Standardinstallation von Linux wird pro Nutzer stets eine Partition verwenden, auf der alle Dateien gespeichert werden. Für manche Instanzen wird dies ausreichen, wenn man die Möglichkeiten von Linux ausreizen und vor allem Sicherheit und Performance erhöhen will, dann wird man aber schnell auf die Vorteile separater Partitionen für /tmp, /var, /home und /usr stoßen – vor allem, wenn man jede Partition unterschiedliche mounten will.

Mount-Optionen werden über eine entsprechende Zeile über die /etc/fstab-Datei angegeben, wie im folgenden Beispiel:

UUID=0aef28b9-3d11-4ab4-a0d4-d53d7b4d3aa4 /tmp ext4     defaults,noexec 1 2

Wenn man sich einen Webserver ansieht, wohl einer der häufigsten Anwendungsfälle für Linux-VMs, dann erkennt man schnell, warum das Standard-Mounten zu schwerwiegenden Performance- und Sicherheitsproblemen führen kann.

Noatime/atime/relatime: Hierbei handelt es sich um Mount-Optionen zum Umgang mit dem Zeitstempel für Dateien, die auf der Partition gespeichert sind. Bei älteren Linux-Distributionen war atime die Standardeinstellung, womit das Betriebssystem jedes Mal einen Zeitstempel in den Metadaten erstellt hat, sobald die Datei gelesen wurde – ein simpler Leseprozess hat also schon zu einem Zeitstempel geführt!

Bei einem Webserver, der den ganzen Tag eine große Anzahl Dateien zur Verfügung stellt, kann man sich leicht vorstellen, was für einen Overhead dieser Prozess generieren würde. Wenn man dagegen den Parameter noatime angibt, erspart man dem Webserver diesen Overhead, indem die Zugriffszeit nicht mehr aktualisiert wird. In neueren Linux-Distributionen lautet die Standardeinstellung hierzu inzwischen relatime, wodurch die Zugriffszeit nur dann aktualisiert wird, wenn die Änderungszeit der Datei neuer ist.

Noexec/exec: Mit diesen Parametern lässt sich die Ausführung von Binärdateien auf einer Partition aktivieren oder deaktivieren. Im Beispiel unseres Webservers wäre es durchaus sinnvoll, eine /tmp-Partition mit dem Parameter noexec zu mounten. Viele Sicherheitsempfehlungen beinhalten diesen Tipp ebenfalls.

Administratoren sollten mit all diesen Parametern vorsichtig sein, manche Anwendungen wie zum Beispiel E-Mail-Server benötigen die atime-Mount-Option. Im Beispiel des Webservers sollte mit dem Parameter noatime gemountet werden. Da viele Installations-Tools Dateien im Verzeichnis /tmp entpacken und starten, sollte auch noexec mit Bedacht eingesetzt werden.

VMXNET3 und PVSCSI

Innerhalb einer virtuellen Maschine ist es schon lange eine Empfehlung, den VMXNET3-Netzwerkadapter zu verwenden. Mit einer Windows-VM kann man diese einfach spezifizieren und die Treiber werden automatisch über die VMware-Tools installiert. Mit Linux ist dies aber etwas komplizierter. Neuere Linux-Versionen haben oft ihre eigenen Treiber für den VMXNET3-Adapter und verwenden diese, selbst wenn die VMware-Tools installiert sind.

Ältere Linux-Versionen enthalten meist veraltete VMXNET-Treiber, mit denen sich dann oft nicht die volle Funktionalität erreichen lässt, die mit den VMware-Tools möglich ist. Von VMware ist ein Knowledge-Base-Artikel verfügbar (KB2020567), der die Aktivierung bestimmter Funktionen über den VMXNET-Treiber zeigt. Wenn der VMXNET3-Treiber über die VMware-Tools installiert werden soll, dann lässt sich dies während der Installation der Tools mit folgender Option angeben:

./vmware-install.pl –clobber-kernel-modules=vmxnet3

Meist wird der paravirtualisierte SCSI-Adapter (PVSCSI) empfohlen, um ein bisschen mehr Datendurchsatz bei geringerer CPU-Auslastung zu erreichen. Bevor dies konfiguriert wird, sollte aber unbedingt die Liste unterstützter Betriebssysteme in Augenschein genommen werden, um die Unterstützung des Kernels durch den paravirtualisierten SCSI-Adapter sicherzustellen.

Administratoren sollten möglichst immer VMXNET3 und PVSCSI verwenden. Wer eine ältere Kernel-Version nutzt, der sollte die VMXNET3-Version der VMware Tools installieren. Bei neueren Linux-Kernels kann der native Linux-Treiber zum Einsatz kommen.

Speicher-Management

Das Linux-Betriebssystem verlagert ständig Memory Pages vom physischen Speicher in die lokale Swap-Partition. Auch das ist eine Standardeinstellung, die tatsächlich auch VMware mit seinem Speicher-Management übernommen hat. Linux verhält sich allerdings etwas anders und verlagert Memory Pages selbst dann, wenn physischer Speicher – im Fall virtueller Maschinen sprechen wir dann natürlich eigentlich von virtuellem Speicher – vorhanden ist.

Um diese Swap-Aktivität virtueller Linux-Maschinen zu begrenzen, können aber Swap-Grenzwerte angegeben werden. Je größer der Wert, umso mehr Verlagerung findet statt, während ein geringerer Wert entsprechend zu weniger Verlagerung in den Swap-Speicher führt. Für diese Einstellung muss lediglich der Parameter  Vm.swappiness=## in der /etc/sysctl.conf angegeben und die Maschine neu gestartet werden. Anstelle der ## wird natürlich ein Wert ersetzt.

Der Standardwert wäre hier 60, es empfiehlt sich aber sogar ein noch niedrigerer Wert. Es gibt schließlich keinen Grund, warum sowohl das Betriebssystem als auch vSphere Memory-Swaps regeln sollten. Der tatsächliche Wert hängt natürlich von der jeweiligen Anwendung ab, normalerweise sollte aber auch ein Wert zwischen 15 und 20 ausreichen.

I/O Scheduler

Genauso wie ESXi einen guten Job beim Thema Memory-Management macht, genauso kümmert sich VMwares Virtualisierungs-Plattform auch um I/O-Scheduling und Schreibzugriffe. Auch hier bietet Linux oft die gleiche Funktion. Bis zur Kernelversion 2.6 haben die meisten Linux-Distributionen auf Completely Fair Queuing als Standard-I/O-Scheduler zurückgegriffen. Mögliche Alternativen wären NOOP, Anticipatory and Deadline.

VMware erklärt hierzu lediglich, wie man dies ändert und warum man dies sollte, immerhin ist es wenig sinnvoll, I/O-Scheduling doppelt vorzunehmen. Kurz gesagt kann der I/O-Scheduler über einen Schalter der Kernel-Einträge geändert werden.

Es gibt keinen Grund für ein I/O-Scheduling im Betriebssystem und später nochmals im Hypervisor. Eine häufige Empfehlung lautet hier, in der Linux-VM NOOP I/O-Scheduling zu wählen und dann vSphere die gesamte Verwaltung zu überlassen.

Ungenutzte Hardware entfernen

Wie oft nutzt man das standardmäßig installierte virtuelle Floppy-Laufwerk einer virtuellen Maschine wirklich? Oder die internen Lautsprecher? Wenn man diese Geräte nicht verwendet, dann sollte man sie auch von Anfang an nicht in den Linux-Kernel laden. Die Befehle zum Entfernen des Floppy-Laufwerks wären:

 

echo "blacklist floppy" | tee /etc/modprobe.d/blacklist-floppy.conf

 

rmmod floppy

 

update-initramfs -u

 

Dabei muss man nicht bei ungenutzter virtueller Hardware Halt machen. Wenn man schon dabei ist, dann kann man auch gleich virtuelle Konsolen deaktivieren, die man höchstwahrscheinlich genauso wenig nutzen wird. Dies kann über das Auskommentieren von tty-Zeilen innerhalb der /etc/inittab erfolgen:

 

1:2345:respawn:/sbin/getty 38400 tty1

2:23:respawn:/sbin/getty 38400 tty2

#3:23:respawn:/sbin/getty 38400 tty3

#4:23:respawn:/sbin/getty 38400 tty4

#5:23:respawn:/sbin/getty 38400 tty5

#6:23:respawn:/sbin/getty 38400 tty6

 

Die Floppy-Disks sollte man wenn möglich immer loswerden. Dabei gilt es darauf zu achten, die Hardware auch aus der VM-Konfiguration zu entfernen und im VM-Bios zu deaktivieren. Weitere Services, die sich meist problemlos deaktivieren lassen, wären die Überwachung der RAID-Konfiguration (mptctl), pcspker, snd_pcm, snd_page_alloc, snd_timer, snd, snd_soundcore (die alle mit der Sound-Wiedergabe zusammenhängen), coretemp (Temperaturüberwachung der CPUs), parport und parport_pc (parallele Ports).

Natürlich sollte man sich vorher sicher sein, diese Dienste auch wirklich nicht zu benötigen. Es empfiehlt sich auch durchaus, ein paar virtuelle Konsolen aktiviert zu lassen, man kann ja nie wissen, wann man sie braucht. Sechs sind aber doch ein bisschen zu viel des Guten.

Die hier aufgeführten Beispiele sind natürlich nur ein paar Aspekte, die bei der Virtualisierung von Linux in virtuellen Maschinen einen Performance-Vorteil bringen können. Wie so oft gilt aber auch hier, dass der konkrete Nutzen immer von der spezifischen Umgebung abhängt. Manche der Tipps mögen also mehr Vorteile bringen als andere.

Auf jeden Fall sollten die Änderungen vorab sorgfältig in einer Testumgebung getestet werden, bevor sie im Produktivsystem implementiert werden. Technologie verändert sich ständig, daher auch Best-Practice-Empfehlungen.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+ und Facebook!

Artikel wurde zuletzt im November 2015 aktualisiert

Pro+

Premium-Inhalte

Weitere Pro+ Premium-Inhalte und andere Mitglieder-Angebote, finden Sie hier.

Erfahren Sie mehr über VM-Performance-Management

0 Kommentare

Älteste Beiträge 

Passwort vergessen?

Kein Problem! Tragen Sie Ihre E-Mail-Adresse unten ein. Wir werden Ihnen eine E-Mail mit Ihrem Passwort schicken.

Ihr Passwort wurde an die folgende E-Mail-Adresse gesendet::

- GOOGLE-ANZEIGEN

SearchSecurity.de

SearchStorage.de

SearchNetworking.de

SearchEnterpriseSoftware.de

Close