Absicherung von Apache Webservern durch virtuelle Maschinen

Transcription

Absicherung von Apache Webservern durch virtuelle Maschinen
Absicherung von Apache Webservern
durch virtuelle Maschinen
unter Debian GNU/Linux
Dokumentation der betrieblichen Projektarbeit
zur Erlangung des Abschlusses
Fachinformatiker/Systemintegration
Robin Schröder
Institut für Theoretische Physik IV
Ruhr-Universität Bochum
18. November 2005
Absicherung von Webservern durch Virtualisierung
18. November 2005
Inhaltsverzeichnis
1 Projektüberblick
1.1 Projektthema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Projektbeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Projektumfeld und Rahmenbedingungen . . . . . . . . . . . . . . . . . . . . . . .
3
3
3
3
2 Problemanalyse
2.1 Ist-Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Soll-Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Kosten-Nutzen-Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
4
5
3 Auswahl des Lösungswegs
3.1 Alternativen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Auswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
7
7
4 Planung der Durchführung
4.1 Zeitplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
5 Durchführung
5.1 Konfiguration der Hard- und Software . . . . . . . . . .
5.1.1 Installation der Test-Maschine . . . . . . . . . .
5.1.2 Konfiguration der VMs auf der Test-Maschine . .
5.1.3 Tests auf der Test-Maschine . . . . . . . . . . . .
5.1.4 Installation der Produktiv-Maschine . . . . . . .
5.1.5 Übertragen der VMs auf die Produktiv-Maschine
5.2 Abschließende Arbeiten und Tests . . . . . . . . . . . .
5.3 Probleme . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4 Abweichung vom Projektantrag . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
9
9
9
10
10
11
11
11
12
12
6 Evaluation der Projektergebnisse
6.1 Vergleich mit dem Soll-Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
13
13
7 Anhang
7.1 Skript create xm“ zum Erzeugen einer VM (auszugsweise)
”
7.2 Dokumentation für Administratoren . . . . . . . . . . . . .
7.2.1 Installation der Xen-Kernel und Xen-Tools . . . . .
7.2.2 Erzeugen virtueller Maschinen . . . . . . . . . . . .
7.2.3 Grundkonfiguration virtueller Maschinen . . . . . . .
7.2.4 Bedienung von Xen mit dem Befehl xm . . . . . . . .
7.2.5 Antworten auf verschiedene Fragen . . . . . . . . . .
14
14
16
16
17
18
19
21
Robin Schröder
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Absicherung von Webservern durch Virtualisierung
18. November 2005
1 Projektüberblick
1.1 Projektthema
Thema dieses Projekts ist die Installation und Konfiguration der Virtualisierungslösung Xen
auf einem Server der Fakultät für Physik und Astronomie der Ruhr-Universität Bochum zum
sicheren Betrieb von Webservern auf virtuellen Maschinen. Als Betriebssystem wird Debian
GNU/Linux 3.1 (im Folgenden Debian Sarge genannt) auf der amd64 -Architektur verwendet.
1.2 Projektbeschreibung
Zur Erhöhung der Sicherheit und zur Vereinfachung der Wartung vieler Apache2 Webserver
soll in der Fakultät für Physik und Astronomie der Ruhr-Universität Bochum ein auf virtuellen Maschinen basierendes System geschaffen werden. Virtuelle Maschinen (im Folgenden VM
genannt) sind komplette Betriebssysteme, die parallel auf derselben Hardware laufen und sich
die Systemressourcen effizient teilen. Die Virtualisierungs-Technologie Xen stellt dafür KernelKomponenten und Userspace-Tools zur Verfügung, die an Debian Sarge anzupassen sind.
Die zahlreichen Webseiten der Fakultät für Physik und Astronomie, die derzeit auf einem einzigen Apache2 Webserver laufen, sollen in verschiedene VMs auf einer neuen Maschine ausgelagert
werden. Dazu muss auf einer neuen, jedoch bereits vorhandenen Maschine Debian Sarge installiert werden. Im Anschluss daran muss ein neuer Kernel modifiziert, konfiguriert und kompiliert
werden. Pro VM ist ein virtuelles Dateisystem mit den wichtigsten Datei- und Verzeichnisstrukturen sowie einem Apache2 Webserver mit entsprechenden Tools zu erstellen. Die Konfiguration
für VMs sowie nötige Vorarbeiten werde ich zunächst an einem Testsystem durchführen und für
den Produktivbetrieb vorbereiten. Dies umfasst das Kompilieren der Kernel sowie der UserspaceTools und das Erstellen der VMs. Im Anschluss daran werde ich die vorbereiteten Arbeiten auf
die Produktiv-Maschine übertragen.
1.3 Projektumfeld und Rahmenbedingungen
Das Institut für Theoretische Physik IV (Weltraum- und Astrophysik) betreibt für sich selbst
sowie für die gesamte Fakultät für Physik und Astronomie Mail-, Web- und Datenbank-Server
sowie einige weitere Dienste und greift dabei auf die IT-Infrastruktur des Rechenzentrums der
Ruhr-Universität Bochum zurück.
Die komplette Bearbeitung des Projekts wird in den Räumen des Instituts für Theoretische
Physik IV durchgeführt werden. Dort wird das Testsystem installiert und konfiguriert sowie das
neue Produktivsystem getestet und in Betrieb genommen. Nach der Durchführung des Projekts
wird der Auftraggeber eine Unterweisung erhalten.
Auftraggeber des Projekts ist Herr Bernd Neubacher als Bevollmächtigter des Instituts für
Theoretische Physik IV der Ruhr-Universität Bochum. Durch Herrn Neubacher erfolgt auch die
Abnahme des Projekts inklusive der Dokumentation für Administratoren.
Robin Schröder
3
Absicherung von Webservern durch Virtualisierung
18. November 2005
2 Problemanalyse
2.1 Ist-Analyse
Die Fakultät für Physik und Astronomie sowie das Institut für Theoretische Physik IV der
Ruhr-Universität Bochum verfügen derzeit über jeweils eine Maschine, die mit Apache2 unter
Debian Sarge betrieben wird und als Mail- und Webserver sowie als zentraler MultifunktionsServer (NIS, DHCP, DNS, SMTP, IMAP) dient. Das Hosting verschiedener Websites wird zur Zeit
über Apache2 VirtualHosts geregelt. Lediglich ein Apache2 Daemon pro Maschine bedient bis
zu 20 verschiedene Domains, teilweise im Produktiv-, teilweise im Testbetrieb.
Aufgrund vermehrter Angriffe auf diese Webserver in letzter Zeit stieg der Administrationsaufwand enorm. Angreifern ist es zurzeit möglich einen kompletten Server zu kompromittieren,
wenn eine Möglichkeit zum Einbruch durch nur eine der gehosteten Websites gefunden wird.
NIS, NFS, DNS
HTTP, HTTPS
Clients
DHCP, SMTP, IMAP
Server
Abbildung 2.1: Zugriff von Clients auf denselben Server über verschiedene Netzwerk-Interfaces
2.2 Soll-Konzept
Ziel dieses Projekts ist es, die auf Apache2 basierenden Webserver des Instituts für Theoretische
Physik IV und der Fakultät für Physik und Astronomie der Ruhr-Universität Bochum mit Xen
zu virtualisieren.
Das Hosting der vorhandenen Websites soll von den Maschinen des Instituts für Theoretische Physik IV und der Fakultät für Physik und Astronomie in VMs auf eine neue Maschine
ausgelagert werden. Ziel ist es, dadurch eine flexible, einfach zu wartende, den Ansprüchen von
Backups genügende und einfach zu ersetzende, sichere Lösung zu schaffen. Es soll weiterhin eine
minimale Ausfallzeit nach einer Kompromittierung erreicht werden. Virtuelle Maschinen sollen
zum einen aus Kostengründen, zum anderen aus Gründen der einfacheren Wartung verwendet
werden.
Robin Schröder
4
Absicherung von Webservern durch Virtualisierung
Xen Server
18. November 2005
Clients
HTTP
VMs
HTTPS
NIS, NFS, DNS, DHCP
SMTP, IMAP
Abbildung 2.2: Zugriff von Clients auf virtuelle Maschinen im Xen Server
Aus der Auslagerung der Websites resultieren folgende Vorteile bzw. Verbesserungen gegenüber der bisherigen Lösung:
Vorteil
höhere Flexibilität
einfachere Wartung
höhere Sicherheit
Hardware-Kosten
Begründung
VMs können schnell und einfach ausgetauscht und konfiguriert werden. Sie können auf Testsystemen vorbereitet und problemlos auf das
Produktivsystem übertragen werden.
Die Wartung von VMs kann einzeln erfolgen, dabei wird nicht das komplette Produktivsystem beeinträchtigt.
Durch Abschottung voneinander und durch schreibgeschütztes Mounten einzelner Daten in VMs ist eine erheblich höhere Sicherheit gegenüber Angriffen gegeben.
Es wird nur einmal Hardware benötigt. Bei ausreichender Dimensionierung können viele VMs darauf betrieben werden.
Tabelle 2.1: Vorteile der Verwendung virtueller Maschinen
2.3 Kosten-Nutzen-Analyse
Bei der Ist-Lösung entstehen im Fall einer Kompromittierung der Produktiv-Maschine durch
eine der Websites erfahrungsgemäß in etwa folgende Kosten für die Wiederherstellung eines
sicheren Zustands der kompromittierten Maschine:
Im Institut für Theoretische Physik IV der Ruhr-Universität Bochum arbeiten ca. 20 Physiker
8 Stunden pro Tag zu einem Stundenlohn von je 25 e. Durch einen Kollateralschaden wie die
Kompromittierung einer der vorhandenen zentralen Maschinen, die momentan die Websites
hosten, entstehen aufgrund des Produktionsausfalls folgende Kosten:
Kosten der Physiker: 25 e · 8 Std. · 20 Physiker = 4.000 e
Hinzu kommen die Kosten für eine Fachkraft, die ca. 8 Stunden zu einem Stundenlohn von etwa
25 e arbeitet, um die kompromittierte Maschine wieder in einen produktionsfähigen Zustand
zu versetzen:
Robin Schröder
5
Absicherung von Webservern durch Virtualisierung
18. November 2005
Kosten für eine Fachkraft: 25 e · 8 Std. = 200 e
Gesamtkosten Ist-Lösung: 4.000 e + 200 e = 4.200 e
Die Soll-Lösung verursacht bei gleichem Szenario wesentlich geringere Kosten, da der Kollateralschaden ausbleibt. Die ca. 20 Physiker können lediglich unter Umständen ihre Webseite
zeitweise nicht aufrufen. Die Kosten für diesen Ausfall sind allerdings nicht zu beziffern, da die
Anzahl der potenziellen Webseitenaufrufe während des Ausfalls der VM nicht bekannt ist. Es
bleiben also nur die Kosten für eine Fachkraft, die zudem wesentlich weniger Zeit für die Rekonstruktion eines produktionsfähigen Zustands benötigt, da lediglich ein Webserver im ungünstigsten Fall neu installiert werden muss, keine weiteren unter Umständen betroffenen Services
(in unserem Fall NIS, NFS, DNS, DHCP, SMTP oder IMAP):
Kosten für eine Fachkraft: 25 e · 2 Std. = 50 e
Die Ausfallzeit eines kompromittierten Webservers verringert sich durch die Soll-Lösung auf
ca. ein Achtel der Ausfallzeit der Ist-Lösung. Um die Kosten der Soll-Lösung zu ermitteln bedarf
es jedoch zusätzlich einer Berücksichtigung der für dieses Projekt einmalig entstehenden Kosten.
Diese setzen sich wie folgt zusammen:
4,26 e
35 Std.
4, 26 e · 35 Std. = 149, 10 e
885,99 e
Stundenlohn Auszubildender:
Arbeitszeit:
Kosten für Arbeitsleistungen:
Kosten für neue Maschine:
Die Projektgesamtkosten belaufen sich also auf 149, 10 e + 885, 99 e = 1.035, 09 e.
Das Projekt rentiert sich bereits bei der ersten Kompromittierung, was folgende Rechnung
verdeutlicht:
Nach etwa n Kompromittierungen rentiert sich das Projekt, wobei
n · (Gesamtkosten Ist-Lösung) = n · (Kosten Fachkraft Soll-Lösung) + Projektgesamtkosten
also
Projektgesamtkosten
=n
(Gesamtkosten Ist-Lösung) − (Kosten Fachkraft Soll-Lösung)
Das Projekt rentiert sich also nach
1.035,09 e
= 0,25
(4.200 e) − (50 e)
Kompromittierungen. Da n < 1 ist, rentiert sich das Projekt schon bei der ersten Kompromittierung.
Robin Schröder
6
Absicherung von Webservern durch Virtualisierung
18. November 2005
3 Auswahl des Lösungswegs
3.1 Alternativen
Auf dem Markt befindet sich eine Vielzahl von Produkten, die Virtualisierungstechnik bieten.
Die bekanntesten und am weitesten verbreiteten Produkte für den Bereich Unix/Linux wurden
für dieses Projekt in Betracht gezogen. Es gibt trotz der im Kern gleichen Funktionalität große
Unterschiede zwischen den Produkten in folgenden Bereichen:
• Anschaffungskosten
• Hardware-Ausnutzung
• Flexibilität
• Stabilität
• Performance
• vorhandene Erfahrung meinerseits
3.2 Auswahl
Nach meiner Erfahrung und nach Recherchen auf den Webseiten der Hersteller und in diversen
Foren im Internet stellte ich folgende Produkte und Informationen zur Entscheidungsfindung
zusammen:
Kriterium
Anschaffungskosten
Hardware-Ausnutzung
Flexibilität
Stabilität
Performance
Erfahrung vorhanden
VMware1
hoch
gut
gut
sehr gut
gut
ja
Xen2
gering
gut
sehr gut
sehr gut
sehr gut
ja
UserModeLinux3
gering
eher schlecht
gut
schlecht
eher schlecht
ja
VServer4
gering
gut
sehr gut
gut
sehr gut
nein
Tabelle 3.1: Entscheidungskriterien für den gewählten Lösungsweg
VMware scheidet von vornherein aufgrund seiner hohen Anschaffungskosten in den in Frage
kommenden Varianten GSX Server und ESX Server aus. Xen bietet klare Vorteile gegenüber
UserModeLinux und VServer aufgrund seiner Stabilität und Performance.
Nach Abwägung der Vor- und Nachteile sowie nach Rücksprache mit dem Auftraggeber entschied ich mich für den Einsatz von Xen als Virtualisierungstechnologie. Eigene Erfahrung ist
bereits aus vorangegangenen Projekten vorhanden und Xen ist kostenlos zu beschaffen, da es
Open Source ist und unter der GNU General Public License 5 (GPL) steht.
1
http://www.vmware.com/
http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
3
http://user-mode-linux.sourceforge.net/
4
http://linux-vserver.org/
5
http://www.gnu.org/licenses/gpl.html
2
Robin Schröder
7
Absicherung von Webservern durch Virtualisierung
18. November 2005
4 Planung der Durchführung
4.1 Zeitplan
Vorbereitung
Planung der Serverkonzeption
3,5 Std.
• Beschaffung einer geeigneten Maschine
• Erfassung der zu migrierenden Websites
• Klärung der Netz-Anbindung der neuen Maschine mit
dem Auftraggeber
Durchführung
Installation der Test-Maschine
23 Std.
• Installation von Debian Sarge und entspr. Software
• Installation und Konfiguration von Xen
Konfiguration der Test-Maschine
• Anpassen des Skripts zur Erzeugung einer virtuellen
Maschine
• Erzeugen der virtuellen Maschinen
• Erzeugen von Konfigurationen für den Produktivbetrieb
Produktiv-Maschine
• Installation von Debian Sarge und entspr. Software
• Installation und Konfiguration von Xen
• Kopieren der VM-Konfigurationen des Testsystems
Dokumentation
Projektdokumentation
7,5 Std.
• Erstellen der Projektdokumentation nach den Vorgaben
der IHK Bochum
Dokumentation für Administratoren
• Erstellen einer Dokumentation für Administratoren
Übergabe
Abnahme des Projekts durch Herrn Neubacher
1 Std.
Insgesamt: 35 Std.
Tabelle 4.1: Installation der Virtualisierungslösung Xen auf einem Webserver
Robin Schröder
8
Absicherung von Webservern durch Virtualisierung
18. November 2005
5 Durchführung
5.1 Konfiguration der Hard- und Software
Zur Durchführung des Projekts verwendete ich eine Test-Maschine mit folgender Ausstattung:
CPU:
Mainboard:
RAM:
HDD:
CD-ROM:
Netzteil:
Gehäuse:
AMD Athlon64 3000+
MSI K8N Neo2 Platinum
512 MB DDR-RAM CL3 (Kingston, non-ECC)
80 GB IDE, Maxtor
40-fach
Enermax EG365AX-VE(G) 353 Watt
Standard-ATX-Tower
Als Produktiv-System beschaffte ich eine Maschine mit folgender Ausstattung:
CPU:
Mainboard:
RAM:
HDDs:
Netzteil:
Gehäuse:
AMD Athlon64 3200+
TYAN Tomcat K8E (S2865)
2x 512 MB DDR-RAM CL3 (Kingston, non-ECC)
80 GB SATA, Maxtor (System u. VMs)
2x 250 GB SATA Hitachi (Daten)
Enermax EG365AX-VE(G) 353 Watt
19” 2HE Chenbro (CB-223)
5.1.1 Installation der Test-Maschine
Zunächst nahm ich auf der Test-Maschine eine Grundinstallation von Debian Sarge vor. Im Anschluss installierte ich weitere Programmpakete, die für den Kompiliervorgang von Xen nötig
sind. Dies sind Compiler und benötigte Bibliotheken zur Erzeugung der Xen-Kernel, Werkzeuge zur Konfiguration der Netzwerk-Schnittstellen, LATEX-Tools zum Erzeugen der Xen Dokumentation und Werkzeuge zum Erzeugen neuer Instanzen von Debian GNU/Linux. Weiterhin
installierte ich noch einen NFS-Server, mit dessen Hilfe später Daten für die VMs freigegeben
werden. Als Bootmanager verwendete ich GRUB, den Standard Bootmanager von Debian Sarge,
um eine reibungslose Zusammenarbeit mit Xen zu ermöglichen.
Nach dem Download des Xen Quellcodes kompilierte ich diesen zunächst mit den Standardeinstellungen auf der Test-Maschine. Danach passte ich den Dom0 -Kernel (Kernel für das HostSystem Domain 0“) sowie den DomU -Kernel (Kernel für VMs) an die vorhandene Hardware
”
und an den gewünschten Funktionsumfang an. Die Vorgehensweise ist im Wesentlichen dieselbe
wie bei Standard-Kernels. Den Dom0 - und DomU -Kernel kompilierte ich danach erneut und
installierte sie anschließend. Weiterhin passte ich die GRUB Konfiguration so an, dass der XenKernel beim Booten automatisch gestartet wird. Dieser lädt dann den Dom0 -Kernel nach und
bootet die Domain 0. Aus Domain 0 heraus werden später mit dem Xen Userspace Tool xm
weitere Domains (DomU ) gestartet.
Vor dem Booten des Xen-Kernels erstellte ich unter /dev noch weitere 56 Loop-devices, da
standardmäßig nur 8 zur Verfügung stehen. Man benötigt für jede in einer VM gemounteten
Robin Schröder
9
Absicherung von Webservern durch Virtualisierung
18. November 2005
Festplattenpartition ein Loop-device, d.h. 3 pro VM. Die Anzahl der Loop-Devices muss dem
Dom0 -Kernel beim Booten übergeben werden (Kernel-Parameter max loop=64).
5.1.2 Konfiguration der VMs auf der Test-Maschine
Das Erzeugen und die weitgehende Konfiguration einer VM ist ein immer wiederkehrender Vorgang, den ich bereits im Vorfeld dieses Projekts in einem einfachen Shell-Skript zusammengefasst
habe. Das Skript wurde von mir für dieses Projekt lediglich modifiziert. Der Quellcode der modifizierten Version befindet sich auszugsweise im Anhang dieses Dokuments. Ich gehe in diesem
Abschnitt auf die Arbeitsschritte ein, die das Script automatisiert in ca. 3–4 Minuten durchführt.
Zu Beginn des Skripts wird ein Verzeichnis für die neue VM erstellt. Darin werden drei Dateien erzeugt. In zwei der Dateien (jeweils 512 MB) wird anschließend ein EXT3 -Dateisystem
angelegt, in einer (128 MB) ein SWAP -Dateisystem für SWAP -Speicher in der VM. In einem
Unterverzeichnis (loop/) werden die zwei mit EXT3 formatierten Dateien gemountet (nach
loop/ und loop/var/).
Mit Hilfe des Programms debootstrap wird nun in den gemounteten Dateien ein DebianSarge-Grundsystem installiert. Dieses wird im Anschluss konfiguriert, d.h. Position der Dateisysteme, Hostname der VM, Zeitzone und Netzwerkeinstellungen und weitere Optionen werden
in Dateien unterhalb loop/etc/ eingetragen. Weiterhin werden noch die lokalen Debian-Mirror
in loop/etc/apt/sources.list eingetragen, damit automatisch Updates auf der VM gefahren
werden können und die restliche Software installiert werden kann.
Nach dem Durchlauf von debootstrap ist nur ein Minimalsystem installiert, das noch durch
weitere Software (ssh, apache2, ...) ergänzt werden muss. Auch diese Software wird durch Modifikation mehrerer Dateien unterhalb loop/etc/ konfiguriert. Es wird eine Standard Apache2Konfiguration erstellt und ein Verzeichnis für NFS eingerichtet, wenn am Anfang des Scripts
entsprechende Eingaben gemacht wurden.
Zum Abschluss fragt das Skript noch ein root Passwort für die neue VM ab und es erscheinen
Hinweise zum Start der neu erstellten VM. Nach dem Unmounten der Dateisysteme ist der
Durchlauf des Skripts abgeschlossen. Es existiert eine fertige VM.
Manuelle Anpassungen in jeder automatisiert erzeugten VM müssen nur im Bereich der
Webserver-Konfiguration vorgenommen werden, da mein Skript lediglich eine Standardkonfiguration erzeugt.
Es wurden von mir insgesamt folgende sieben VMs auf der Test-Maschine erzeugt, die später
unverändert auf die Produktiv-Maschine übertragen wurden:
schulforschung.physik.ruhr-uni-bochum.de
iau.physik.ruhr-uni-bochum.de
suedpol.physik.ruhr-uni-bochum.de
debian.physik.ruhr-uni-bochum.de
fechten.physik.ruhr-uni-bochum.de
sfb591.physik.ruhr-uni-bochum.de
dp.physik.ruhr-uni-bochum.de
www-rest.physik.ruhr-uni-bochum.de
5.1.3 Tests auf der Test-Maschine
Ich testete den Zugriff auf jede VM per HTTP, auf der Maschine suedpol auch per HTTPS. Dabei
trat lediglich das Problem auf, dass sich nach erfolgter Eintragung der neuen VMs ins DNS noch
Robin Schröder
10
Absicherung von Webservern durch Virtualisierung
18. November 2005
veraltete Einträge im DNS-Cache unseres Instituts befanden, die eine erfolgreiche Verbindung zu
der VM debian zunächst verhinderten. Ein Leeren des DNS-Cache löste das Problem.
5.1.4 Installation der Produktiv-Maschine
Die Installation der Produktiv-Maschine führte ich zunächst genau so durch wie die Installation
der Test-Maschine. Das Konfigurieren und Kompilieren des Xen Quellcodes habe ich jedoch nicht
noch einmal im Ganzen durchgeführt. Ich kopierte den fertig konfigurierten Verzeichnisbaum
von der Test-Maschine auf die Produktiv-Maschine und konnte ihn reibungslos dort installieren.
Lediglich Dom0 - und DomU -Kernel mussten vor der Installation auf der Produktiv-Maschine
an die andere Hardware angepasst und erneut kompiliert werden.
Vor einem Reboot passte ich noch, wie auf der Test-Maschine, den GRUB Bootmanager an
und kopierte rekursiv den Inhalt des Verzeichnisses /etc/xen von der Test-Maschine auf die
Produktiv-Maschine. Unterhalb von /etc/xen befinden sich die zum Start der VMs nötigen
Skripte und Definitions-Dateien.
5.1.5 Übertragen der VMs auf die Produktiv-Maschine
Im Anschluss an die Installation von Xen auf der Produktiv-Maschine und einem Reboot kopierte
ich die auf der Test-Maschine mit Hilfe meines Skripts vorbereiteten VMs in das Verzeichnis
/opt/xen-machines/ der Produktiv-Maschine. Ich konnte die VMs nach manuellem Ändern
der Netzwerk-Konfiguration einzeln probeweise starten. Dabei traten keine Fehler auf.
Vor der Migration der Webseiten in die erzeugten VMs war es nötig, sich Gedanken über die
MySQL-Anbindung einzelner Webseiten zu machen. Der MySQL-Server ist nach der Migration
nicht mehr localhost“, sondern er bleibt weiterhin auf dem derzeitigen Server-System. Sämt”
liche Verbindungs-Initialisierungen in den betroffenen Webseiten müssen umgeschrieben sowie
auf dem SQL-Server die Zugriffsberechtigungen angepasst werden.
Das Anpassen der Berechtigungen auf dem MySQL-Server erledigte ich mit wenigen SQLBefehlen. Die Anpassung der betroffenen Webseiten delegierte ich an die zuständigen Personen.
Diese hatten im Allgemeinen nicht viel zu ändern, da die Verbindung meist zentral in einer
PHP-Datei aufgebaut wird.
5.2 Abschließende Arbeiten und Tests
Um das interne Netz zu entlasten, beschloss ich in Absprache mit dem Auftraggeber, die Webseiten lokal auf der Produktiv-Maschine abzulegen und von dort aus für die VMs zu exportieren.
Der Umfang der Webseiten überschreitet inklusive Debian-Mirror 300 GB, so dass ich das Kopieren der Daten über Nacht per rsync durchführte, nachdem ich den Schreibzugriff auf dem
alten System unterbunden hatte.
In einem ersten Schritt migrierte ich den Debian-Mirror debian.physik.ruhr-uni-bochum.de
zur VM debian. Einen Tag später folgte der Umzug der restlichen Websites in die vorbereiteten
VMs. Um IP-Konflikte zu vermeiden, musste ich darauf achten, zuerst den VirtualHost und
das entsprechende Netzwerk-Interface auf dem alten Webserver zu deaktivieren, dann erst die
VM zu booten. Es entstand dabei pro VM eine Ausfallzeit der Webseiten von weniger als fünf
Minuten.
Jede neu gebootete VM testete ich durch Zugriffe von verschiedenen Clients aus, bevor ich
mich an die nächste VM begab.
Robin Schröder
11
Absicherung von Webservern durch Virtualisierung
18. November 2005
5.3 Probleme
Beim Testen einer VM trat ein Problem mit der MySQL-Konfiguration auf. Es handelte sich
um einen Tippfehler, der aufgrund des im Web-Browser angezeigten MySQL-Error schnell zu
finden und zu beheben war. Der zuständige Webmaster wurde von mir im Nachhinein über die
durchgeführte Korrektur in Kenntnis gesetzt.
Einen Tag nach Migration der VM debian trat ein weiteres Problem auf: Die VM debian
hat einen im Vergleich zu den anderen VMs extrem hohen Traffic auf dem virtuellen NetzwerkInterface, da sie unser Debian-Mirror ist. Dies verursachte in unregelmäßigen Abständen unter
hoher Last einen Absturz der VM durch Kernel Panic. Das Nachforschen auf der Mailingliste
xen-devel1 ergab schnell, dass der Kernel Panic in der beschriebenen Situation ein bekanntes
Problem des Netzwerk-Treibers für VMs unter Xen ist, an dessen Behebung gearbeitet wird.
Abhilfe schaffte vorerst das Erhöhen des der VM zugewiesenen Arbeitsspeichers von 128 MB
auf 256 MB. Sobald ein Patch zum Beheben des Problems verfügbar ist, sollte dieser eingespielt
werden.
5.4 Abweichung vom Projektantrag
In der Zeit zwischen Projektantrag und Beginn des Durchführungszeitraums hat sich auf den
beiden Server-Systemen, die ursprünglich mit Xen ausgestattet werden sollten, einiges verändert.
Sie sind für den täglichen Ablauf unabdingbar, so dass ein längerer Ausfall der Systeme einen
weitgehenden Ausfall der Infrastruktur des Netzwerks der Physik mit sich bringen würde.
Aus diesem Grund weiche ich in der Durchführung geringfügig vom Projektantrag ab: Ich
habe Xen nicht auf den zwei ursprünglich vorgesehenen, sich bereits im produktiven Einsatz
befindenden Maschinen installiert, sondern auf einer neuen Maschine, die nach Abschluss des
Projekts sämtliche Webseiten der Fakultät für Physik und Astronomie zur Verfügung stellt. Die
Maschine ist von mir zu Beginn des Projekts beschafft und mit einer Grundinstallation von
Debian Sarge installiert worden.
1
http://lists.xensource.com/xen-devel
Robin Schröder
12
Absicherung von Webservern durch Virtualisierung
18. November 2005
6 Evaluation der Projektergebnisse
6.1 Vergleich mit dem Soll-Konzept
Das Projekt konnte unter Einhaltung der vorgesehenen 35 Stunden durchgeführt werden. Der
Rückgriff auf die angesetzte Pufferzeit ergab sich zu 0,5 Stunden im Bereich der Vorbereitung,
zu 1 Stunde im Bereich der Durchführung und zu 1,5 Stunden im Bereich der Dokumentation.
Die vorgegebenen Ziele
• Erhöhung der Sicherheit
• Erhöhung der Flexibilität
• Erhöhung der Stabilität
• hohe Performance
• optimale Hardware-Ausnutzung
• einfache Wartung
• niedrige Anschaffungskosten
wurden erreicht.
6.2 Ausblick
Das Projekt ist erfolgreich durchgeführt und abgeschlossen worden. Die verfolgten Ziele wurden
trotz kleinerer Probleme unter Nutzung von Pufferzeit erreicht.
Die in diesem Projekt aufgesetzte Maschine wird in der Fakultät für Physik und Astronomie der Ruhr-Universität Bochum seit Abschluss des Projekts produktiv eingesetzt. Durch die
erhöhte Sicherheit des Systems ist mit wesentlich weniger Ausfallzeiten nach einer Kompromittierung zu rechnen. Daher soll das durchgeführte Projekt in naher Zukunft unter anderem um
folgende Punkte erweitert werden:
• Anbindung an das vorhandene Backup-System
• automatisierte Wartungsroutinen durch Skript-Lösung (Eigenentwicklung)
• Mailserver (MTAs) in virtuellen Maschinen
• Logging der VMs auf einem zentralen Log-Server
• verschlüsselte MySQL-Anbindung der Websites in den VMs durch SSH-Tunnel
Aufgrund guter erster Erfahrungen mit Xen als Grundlage für Webserver sollen eventuell
weitere Dienste mit Hilfe zusätzlicher Host-Maschinen mit Xen virtualisiert werden.
Robin Schröder
13
Absicherung von Webservern durch Virtualisierung
18. November 2005
7 Anhang
7.1 Skript create xm“ zum Erzeugen einer VM (auszugsweise)
”
#!/bin/sh
#################################################################
# Script zur Erzeugung einer neuen virtuellen Maschine fuer Xen #
#################################################################
# Variablen definieren
MACHINES ROOT="/opt/xen-machines"
# Verzeichnis, in dem alle Maschinen liegen
KERNEL="/boot/vmlinuz-2.6-xenU"
# Kernel der virtuellen Maschine
MEMSIZE=128
# Arbeitsspeicher der virtuellen Maschine
DEBIAN MIRROR="http://debian.physik.ruhr-uni-bochum.de/debian-amd64/debian-pure64"
DIST="sarge"
# Version (z.Zt. nur ’sarge’ getestet)
# Debian Mirror
# Parameter fuer ’debootstrap’
DEBOOTSTRAP ARGS="--arch amd64 --exclude=pcmcia-cs,ppp,pppconfig,pppoe,pppoeconf,exim4,exim4-base,\
exim4-config,exim4-daemon-light,mailx,at,fdutils,info,modconf,libident"
# Zusaetzlich zu installierende Pakete
INSTALL PACKAGES="dnsutils bzip2 lynx less apache2 libapache2-mod-php4 php4-mysql mysql-client"
LOCALE="Europe/Berlin"
# Locale relativ zu /usr/share/zoneinfo/
LOGPATH="/tmp"
# Pfad der Log-Datei
LOGFILE="create xm.$$.log"
# Name der Log-Datei
LOG="${LOGPATH}/${LOGFILE}"
# Name der Maschine vom Benutzer abfragen (unbedingt noetig)
echo ""
echo -n "Name der Maschine: "
read THIS MACHINE
# MAC Adresse der Maschine vom Benutzer abfragen (unbedingt noetig)
echo ""
echo -n "MAC Adresse der Maschine (XX:XX:XX:XX:XX:XX): "
read MAC
# Abfrage, ob die virtuelle Maschine beim Booten
# des Host Systems mit gebootet werden soll
echo ""
echo -n "Soll die virtuelle Maschine beim Booten des Host Systems automatisch mit gebootet werden (j/N)? "
read AUTOBOOT
# Umgebungsvariablen setzen, um Fehlermeldungen zu vermeiden
export LANGUAGE=C
export LC ALL=C
export LANG=C
# Verzeichnis erstellen und rein wechseln
echo -n "Erstelle Verzeichnis "
mkdir ${MACHINES ROOT}/${THIS MACHINE}
cd ${MACHINES ROOT}/${THIS MACHINE}
# Disk-Images erzeugen und formatieren
echo -n "Erzeuge und formatiere Disk Images "
dd if=/dev/zero of=${THIS MACHINE}-root bs=1M seek=512 count=1 >> ${LOG} 2>&1
mke2fs -F -j ${THIS MACHINE}-root >> ${LOG} 2>&1
tune2fs -c0 -i0 ${THIS MACHINE}-root >> ${LOG} 2>&1
dd if=/dev/zero of=${THIS MACHINE}-var bs=1M seek=512 count=1 >> ${LOG} 2>&1
mke2fs -F -j ${THIS MACHINE}-var >> ${LOG} 2>&1
tune2fs -c0 -i0 ${THIS MACHINE}-var >> ${LOG} 2>&1
dd if=/dev/zero of=${THIS MACHINE}-swap bs=1M seek=128 count=1 >> ${LOG} 2>&1
mkswap ${THIS MACHINE}-swap >> ${LOG} 2>&1
# Root-Image mounten und Debian Sarge rein installieren
echo -n "Mounte Root Image "
mkdir ${MACHINES ROOT}/${THIS MACHINE}/loop
mount -t ext3 -o loop ${THIS MACHINE}-root ${MACHINES ROOT}/${THIS MACHINE}/loop >> ${LOG} 2>&1
mkdir ${MACHINES ROOT}/${THIS MACHINE}/loop/var
mount -t ext3 -o loop ${THIS MACHINE}-var ${MACHINES ROOT}/${THIS MACHINE}/loop/var >> ${LOG} 2>&1
echo -n "Erzeuge Basis-System (Ausgabe in ${LOG}) "
debootstrap ${DEBOOTSTRAP ARGS} ${DIST} ${MACHINES ROOT}/${THIS MACHINE}/loop ${DEBIAN MIRROR} >> ${LOG} 2>&1
# Wichtige Dateien im Root-Image modifizieren
echo -n "Konfiguriere virtuelle Maschine "
Robin Schröder
14
Absicherung von Webservern durch Virtualisierung
echo "# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda1 / ext3 defaults,errors=remount-ro 0 1
/dev/hda2 /var ext3 defaults 0 2
/dev/hda3 none swap sw 0 0"> ${MACHINES ROOT}/${THIS MACHINE}/loop/etc/fstab
echo ${THIS MACHINE} > ${MACHINES ROOT}/${THIS MACHINE}/loop/etc/hostname
echo "127.0.0.1 localhost"> ${MACHINES ROOT}/${THIS MACHINE}/loop/etc/hosts
ln -sf /usr/share/zoneinfo/${LOCALE} ${MACHINES ROOT}/${THIS MACHINE}/loop/etc/localtime
echo "auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp"> ${MACHINES ROOT}/${THIS MACHINE}/loop/etc/network/interfaces
echo "deb http://debian.physik.ruhr-uni-bochum.de/debian-amd64/debian-pure64 sarge main contrib non-free
deb http://debian.physik.ruhr-uni-bochum.de/debian-security sarge/updates main contrib non-free"\
> ${MACHINES ROOT}/${THIS MACHINE}/loop/etc/apt/sources.list
# PROC Dateisystem ins Root-Image mounten
echo -n "Mounte PROC Dateisystem ins Root-Image "
mount -t proc none ${MACHINES ROOT}/${THIS MACHINE}/loop/proc >> ${LOG} 2>&1
# Pakete (INSTALL PACKAGES) im Root-Image installieren
chroot ${MACHINES ROOT}/${THIS MACHINE}/loop/ apt-get clean >> ${LOG} 2>&1
chroot ${MACHINES ROOT}/${THIS MACHINE}/loop/ apt-get --assume-yes update >> ${LOG} 2>&1
chroot ${MACHINES ROOT}/${THIS MACHINE}/loop/ apt-get --assume-yes upgrade
chroot ${MACHINES ROOT}/${THIS MACHINE}/loop/ apt-get --assume-yes install ${INSTALL PACKAGES}
chroot ${MACHINES ROOT}/${THIS MACHINE}/loop/ apt-get clean >> ${LOG} 2>&1
# Konfiguration der installierten Pakete
echo ""
echo -n "Konfiguriere installierte Pakete "
# Apache2 aktivieren
sed -ie ’s/NO START=1/NO START=0/’ ${MACHINES ROOT}/${THIS MACHINE}/loop/etc/default/apache2
# Root-Passwort setzen (wartet auf Benutzer-Eingabe)
echo "Bitte geben Sie ein Root Passwort fuer die neue Maschine ein:"
chroot ${MACHINES ROOT}/${THIS MACHINE}/loop/ passwd root
# Image unmounten
umount ${MACHINES ROOT}/${THIS MACHINE}/loop/proc/ >> ${LOG}
umount ${MACHINES ROOT}/${THIS MACHINE}/loop/var/ >> ${LOG} 2>&1 \
|| umount -l ${MACHINES ROOT}/${THIS MACHINE}/loop/var/ >> ${LOG} 2>&1
umount ${MACHINES ROOT}/${THIS MACHINE}/loop/ >> ${LOG} 2>&1 \
|| umount -l ${MACHINES ROOT}/${THIS MACHINE}/loop/ >> ${LOG} 2>&1
# Xen-Konfiguration fuer virtuelle Maschine erzeugen
echo -n "Erzeuge Xen Konfigurationsdatei "
echo "# -*- mode: python; -*kernel = ’${KERNEL}’
memory = ${MEMSIZE}
name = ’${THIS MACHINE}’
nics=1
vif = [ ’mac=${MAC}, bridge=xenbr0’ ]
disk = [ ’file:${MACHINES ROOT}/${THIS MACHINE}/${THIS MACHINE}-root,hda1,w’,
’file:${MACHINES ROOT}/${THIS MACHINE}/${THIS MACHINE}-var,hda2,w’,
’file:${MACHINES ROOT}/${THIS MACHINE}/${THIS MACHINE}-swap,hda3,w’ ]
root = ’/dev/hda1 ro noapic’
on poweroff = ’destroy’
on reboot = ’restart’
on crash = ’restart"’ > /etc/xen/${THIS MACHINE}
if [ ${AUTOBOOT} = "j"]
then
ln -sf /etc/xen/${THIS MACHINE} /etc/xen/auto/${THIS MACHINE} 2>&1
fi
# Log-Datei im Verzeichnis der virtuellen Maschine speichern
echo -n "Log-Datei in ${MACHINES ROOT}/${THIS MACHINE}/${LOGFILE} speichern "
mv ${LOG} ${MACHINES ROOT}/${THIS MACHINE}/${LOGFILE}
# Anschliessende Nachricht an User
echo ""
echo "FERTIG."
echo ""
echo "Starten Sie die neue virtuelle Maschine mit"
echo "# xm create -c ${THIS MACHINE}"
echo ""
if [ ${AUTOBOOT} = "j"]
then
echo "Nach einem Reboot des Host Systems wird die virtuelle"
echo "Maschine automatisch mit gestartet."
echo ""
fi
Robin Schröder
15
18. November 2005
Absicherung von Webservern durch Virtualisierung
18. November 2005
7.2 Dokumentation für Administratoren
7.2.1 Installation der Xen-Kernel und Xen-Tools
Nach der Grund-Installation von Debian Sarge werden mit dem Befehl apt-get install folgende für Xen benötigte Pakete installiert:
make gcc libc6-dev libncurses5-dev zlib1g-dev python python-dev
python-twisted bridge-utils iproute libcurl3 libcurl3-dev bzip2
module-init-tools latex transfig tgif debootstrap lsb-base
nfs-kernel-server
Als Bootmanager sollte bei der Grundinstallation GRUB gewählt werden, da
diese Anleitung lediglich die Konfiguration von GRUB berücksichtigt. Wurde LILO
ausgewählt, dann ist es jetzt Zeit, ihn durch GRUB zu ersetzen und das System neu zu booten.
Im Anschluss an die Installation der Pakete werden die Xen-Quellen von der University of
Cambridge heruntergeladen. Sie sind in der aktuellen Version 3.0 (unstable) unter
http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/
zu finden. Die für die Durchführung des Projekts benutzte Datei heißt xen-unstable-src.tgz
und stammt vom 27.10.2005. Das ist wichtig, da vom Unstable-Zweig jede Nacht eine neue
Version erzeugt wird und nicht garantiert werden kann, dass jede Version lauffähig ist. Leider
werden von den Entwicklern von Xen keine fertigen Debian-Pakete zur Verfügung gestellt. Die
eigene Erstellung von Debian-Paketen schlug aufgrund der umfangreichen Veränderungen am
Kernel-Tree fehl, so dass ich auf Debian-Pakete verzichten musste.
Nach dem Download und Speicherung des Archivs unter /opt/xen-src/ wird die Datei dort
entpackt. Es wird automatisch das Verzeichnis /opt/xen-src/xen-unstable erzeugt. Nach dem
Wechsel in das Verzeichnis wird dort make world ausgeführt. Der Befehl lädt zunächst die
Kernel-Quellen in der Version 2.6.12.6 von http://www.kernel.org/ herunter, patcht sie mit
den Xen-spezifischen Erweiterungen (d.h. es wird eine Architektur namens xen hinzugefügt)
und kompiliert sie anschließend. Im Anschluss daran kompiliert der Befehl die Xen Userspace
Tools (xm, xend etc.). Xen-Kernel und Xen-Tools muss man anschließend mit make install
installieren.
Die installierten Kernel sind jedoch Standard-Kernel, die zwar umfangreiche Hardware Unterstützung enthalten, jedoch nicht speziell an unsere Gegebenheiten angepasst sind. Deshalb
ist es nach erfolgreicher Installation erforderlich, angepasste Kernel zu erstellen. Dies geschieht
für den Host-Kernel (Dom0 -Kernel) im Verzeichnis linux-2.6.12-xen0/, für den VM-Kernel
(DomU -Kernel) im Verzeichnis linux-2.6.12-xenU/. Dort muss jeweils
make ARCH=xen menuconfig
aufgerufen und die entsprechende Konfiguration erzeugt werden.
Es ist darauf zu achten, dass beim Aufruf von make IMMER mit ARCH=xen die
Xen-Architektur angegeben wird, da der Kernel ansonsten für die Architektur des
Host-Systems konfiguriert bzw. kompiliert würde!
Nach der Konfiguration der Kernel werden diese im Verzeichnis /opt/xen-src/xen-unstable
mit dem Befehl make kernels && make install-kernels erneut kompiliert und installiert.
Danach wird die Datei /boot/grub/menu.lst angepasst, indem folgende Zeilen vor die automatisch erzeugten Zeilen geschrieben werden (ca. in Zeile 43):
Robin Schröder
16
Absicherung von Webservern durch Virtualisierung
18. November 2005
title Xen 3.0 / XenLinux 2.6
kernel /boot/xen-3.0.gz dom0 mem=196608 console=vga
module /boot/vmlinuz-2.6-xen0 root=/dev/sda1 ro console=tty0 max loop=64 noacpi
Die Zeilen legen einen neuen Starteintrag für den GRUB Bootmanager an. Der Parameter
dom0 mem=196608 für den Xen-Kernel legt fest, dass 192 MB Arbeitsspeicher für die Domain 0
zur Verfügung stehen. Der Parameter max loop=64 für den Kernel der Domain 0 legt fest, dass
64 Loop-Devices (/dev/loop0 - /dev/loop63) zur Verfügung stehen. Für den Dom0 -Kernel ist
der Parameter noacpi erforderlich, da er ansonsten wegen einer fehlerhaften Implementation
des Advanced Configuration and Power Interface (ACPI ) nicht bootet.
Nun müssen noch 56 der 64 Loop-Devices angelegt werden, da standardmäßig nur 8 zur
Verfügung stehen (/dev/loop0 - /dev/loop7). Dies geschieht mit folgender kleiner Schleife, die
die Loop-Devices 8-63 mit entsprechenden Berechtigungen anlegt und der Gruppe disk zuweist:
for i in ‘seq 8 63‘
do
mknod -m 0660 /dev/loop${i} b 7 ${i}
chgrp disk /dev/loop${i}
done
Vor einem ersten Reboot mit dem neuen Kernel müssen noch ein paar weitere Modifikationen
am System vorgenommen werden. Dies geschieht mit folgenden Befehlen:
update-rc.d xend start 98 2 3 4 5 . stop 02 0 1 6 .
update-rc.d xendomains start 99 2 3 4 5 . stop 01 0 1 6 .
mkdir /var/lock/subsys
Hier werden die beiden Startskripte für Xen und dessen VMs in den Bootvorgang eingebunden
sowie ein Verzeichnis angelegt, was von den Xen-Startskripten benötigt wird.
Nach Durchführung der Modifikationen kann der neue Kernel gebootet werden. Nach einem
Reboot sollte der GRUB Bootmanager als ersten Eintrag
Xen 3.0 / XenLinux 2.6
anzeigen. Dieser Eintrag muss zum booten ausgewählt werden, damit der Xen-Kernel bootet
und den Dom0 -Kernel nachlädt. Das System sollte dann ordnungsgemäß booten.
7.2.2 Erzeugen virtueller Maschinen
Das Erzeugen einer VM ist ein immer wiederkehrender Vorgang, den ich in einem einfachen
Skript zusammengefasst habe. Es befindet sich in /opt/xen-tools/create xm. Ein Aufruf des
Skripts erstellt eine neue VM mit Standard-Konfiguration des Netzwerk-Interfaces über DHCP.
Folgende Schritte führt das Skript durch:
Das Erzeugen einer VM beginnt mit der Abfrage des Hostnamens und der MAC-Adresse der
zu erzeugenden Maschine. Bei der Vergabe der MAC-Adressen ist darauf zu achten, dass der
herstellerspezifische Teil immer "aa:00:00" ist. Weiterhin wird ein zu mountendes NFS-Share
und dessen Mountpoint abgefragt. Es folgt die Abfrage, ob die VM beim Booten des HostSystems automatisch mit gebootet werden soll, oder ob dies nur manuell geschehen soll.
Seine eigentliche Arbeit beginnt das Skript mit dem Erzeugen eines Unterverzeichnisses für die
neue VM in /opt/xen-machines, das den Namen der neuen VM trägt, z.B. debian (für unseren
Robin Schröder
17
Absicherung von Webservern durch Virtualisierung
18. November 2005
lokalen Debian Mirror). In diesem Verzeichnis werden nun die Dateien debian-root (512 MB
groß) und debian-var (512 MB groß) für das Dateisystem sowie debian-swap (128 MB groß)
als SWAP Speicher und das Verzeichnis loop/ zum mounten des Dateisystems erzeugt. In den
Dateien debian-root und debian-var wird anschließend ein EXT3 -Dateisystem erzeugt, in der
Datei debian-swap ein SWAP-Dateisystem.
Nach dem Mounten der Dateien debian-root nach loop/ und debian-var nach loop/var/
(Verzeichnis wird vorher angelegt) wird mit Hilfe des Programms debootstrap unter loop/ ein
neues Debian-Sarge-System erzeugt, d.h. es werden die nötigen Debian-Pakete herunter geladen
und unterhalb von loop/ installiert.
7.2.3 Grundkonfiguration virtueller Maschinen
Da debootstrap das neu erzeugte System nur installiert, aber nicht konfiguriert, sind noch ein
paar weitere Schritte nötig, um ein lauffähiges System zu bekommen.
Zunächst wird die Datei loop/etc/fstab angepasst und der Hostname in loop/etc/hostname
gesetzt. In die Datei loop/etc/hosts wird eine Zeile für localhost“ eingefügt. Es muss nun
”
noch ein root Passwort für die neue VM gesetzt werden. Damit sind alle wesentlichen Konfigurationsschritte getan, so dass nach dem Unmounten von loop/ die Maschine prinzipiell
ordnungsgemäß gebootet werden kann. Sie hat jedoch noch keine Xen-Konfigurationsdatei und
keinen konfigurierten Webserver. Die Xen-Konfigurationsdatei wird unter /etc/xen (auf dem
Host System) erzeugt und heißt wie die VM. In ihr werden Kernel, Parameter und das NetzwerkInterface definiert. Die Konfiguration des Webservers Apache2 wird vom Script nur partiell erledigt, da dies für jede VM individuell geschehen muss. Einzig das DocumentRoot wird in einer
Standard-Konfiguration festgelegt und ist immer /var/www.
Weiterhin erledigt das Script bei Bedarf das Mounten eines NFS-Shares in die VM. Dazu werden
am Anfang des Scripts vor der Durchführung aller Aufgaben entsprechende Fragen gestellt.
Nach dem Erzeugen einer VM mit Hilfe des Scripts befindet sich eine Logdatei namens
create xm.$$.log im Verzeichnis der VM. $$ ist ein Zufallswert. Sie enthält ein Protokoll
der Installation.
Konfiguration der VMs nach dem ersten Booten
Nach erfolgreichem Bootvorgang einer VM muss in ihr die Apache2 -Konfiguration erzeugt werden. Es wird lediglich eine Standardkonfiguration automatisch per Skript erzeugt, da alles Weitere zu individuell ist. Sie befindet sich in
/etc/apache2/sites-available/default
und ist den Gegebenheiten anzupassen. Im Fall dieses Projekts heißt das, dass die alte Konfigurationsdatei des Apache2 VirtualHost, der jetzt in der VM laufen soll, in die VM an o.g.
Stelle kopiert wurde, so dass die Standardkonfiguration überschrieben wurde. Es wurden dann
am Anfang der Datei die Zeilen
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@[Web-Adresse]
eingefügt bzw. sinngemäß angepasst. [Web-Adresse] ist z.B. physik.ruhr-uni-bochum.de.
Da ich beim Erzeugen der VMs mit Hilfe meines Scripts bei den Angaben zum NFS-Share darauf geachtet habe, dass das Verzeichnis in der VM immer nach /httpdata/[altes Verzeichnis]
Robin Schröder
18
Absicherung von Webservern durch Virtualisierung
18. November 2005
gemountet wird, sind in der Apache2-Konfiguration keine weiteren Anpassungen nötig. Lediglich
in den Webseiten selbst sind bei Bedarf die Angaben zum MySQL-Server von localhost“ auf
”
mysql“ zu ändern, da nicht jede VM einen eigenen MySQL-Server bekommt.
”
Damit der Apache2 ordnungsgemäß startet, muss noch das in den Zeilen ErrorLog und
CustomLog angegebene Log-Verzeichnis erstellt werden. Dies geschieht ganz normal mit dem
Befehl mkdir -p [Log-Verzeichnis]. Der Befehl
/etc/init.d/apache2 restart
startet den Apache2 -Server neu. Ab jetzt sollte er korrekte Daten liefern.
7.2.4 Bedienung von Xen mit dem Befehl xm
Der zentrale Befehl zur Bedienung von Xen ist xm. Die Eingabe von xm help (Abbildung 7.1)
gibt eine Übersicht über verfügbare Kommandos aus.
Mit xm help [Kommando] ist eine detailliertere Hilfe des jeweiligen xm Kommandos abrufbar.
Eine Liste der momentan aktiven VMs, im Xen-Jargon Domains genannt, erhält man mit dem
Befehl xm list (Abbildung 7.2), wobei immer auch Domain 0, das Host-System, auftaucht. In
Abbildung 7.2 ist zu sehen, dass nur die VM debian läuft.
Abbildung 7.1: Übersicht über verfügbare Kommandos
In den meisten Fällen werden die Befehle xm create [domain] zum Starten einer ungestarteten VM, xm reboot [domain] zum neustarten einer VM, xm shutdown [domain] zum Herunterfahren und xm destroy [domain] zum Zerstören“, also zum harten“ Abschalten einer
”
”
VM ohne sie herunterzufahren, verwendet. Dem Befehl xm create [domain] kann zusätzlich
der Parameter -c übergeben werden (also xm create -c [domain]), um direkt in eine Konsole
der bootenden VM verbunden zu werden.
Robin Schröder
19
Absicherung von Webservern durch Virtualisierung
18. November 2005
Abbildung 7.2: Liste momentan aktiver Domains
Der Befehl xm console [domain] startet eine Verbindung zur Konsole der VM. Man befindet
sich danach auf der VM, nicht mehr auf dem Host-System. Um aus der VM wieder heraus auf
das Host-System zu kommen, drückt man die Tastenkombination Strg+] bzw. Strg+AltGr+9
oder Strg+5. Eventuell ist es notwendig, diese Tastenkombination mehrfach zu drücken. Ist man
unter Windows mit dem SSH-Client PuTTY 1 zum Host-System verbunden, so funktioniert nur
Strg+5.
Neu in Xen 3.0 ist der Befehl xm top (Abbildung 7.4), der, ähnlich wie das Unix-Programm
top, Daten über die VMs zeigt. Er ist nicht so umfangreich wie sein Unix-Vorbild, zeigt aber
dennoch übersichliche und aktuelle Informationen:
Abbildung 7.3: Xen-Kernel Messages (auszugsweise)
Als nützlicher Befehl erweist sich auch oft xm dmesg (Abbildung 7.3), der wie dmesg Kernel Messages ausgibt. Allerdings nicht wie dmesg vom Kernel des Host-Systems, sondern vom
Xen-Kernel. Die Ausgabe sieht auf der für dieses Projekt verwendeten Produktiv-Maschine folgendermaßen aus:
Weitergehende Informationen zur Bedienung von Xen findet man auf der Xen-Website2 . Dort
1
2
http://www.putty.nl/
http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html
Robin Schröder
20
Absicherung von Webservern durch Virtualisierung
18. November 2005
Abbildung 7.4: Übersicht mit xm top
sind umfangreiche Informationen und FAQs zu finden. Im nachfolgenden Kapitel gehe ich auch
noch kurz auf die wichtigsten Fragen ein, die in der Produktionsphase des Projekts aufkommen
könnten.
7.2.5 Antworten auf verschiedene Fragen
Welche Dateien müssen für eine VM gesichert werden?
Eine VM besteht aus den drei großen Dateien in ihrem Verzeichnis unter /opt/xen-machines/
sowie aus der Datei mit dem Namen der Maschine unter /etc/xen/ und gegebenenfalls einem
Link unter /etc/xen/auto/. Diese Dateien sollten gesichert werden.
Was muss sonst noch gesichert werden?
Alle Daten befinden sich unter /export/httpdata/. Eine Ausnahme bildet der Debian Mirror.
Er befindet sich unter /export/mirror/. Teile davon (der amd64 -Tree) befinden sich noch
unter /export/httpdata/mirror/. Dieses Verzeichnis sowie /export/mirror/ können von der
Datensicherung ausgenommen werden, da der Debian Mirror bei Bedarf vollständig vom Master
Server bei Debian zu rekonstruieren ist. Alles Weitere unter /export/httpdata/ sollte gesichert
werden.
Wann wird eine VM beim Booten des Host-Systems automatisch gebootet, wann nicht?
Existiert unter /etc/xen/auto/ ein Link auf die Maschinen-Definitionsdatei unter /etc/xen/,
so wird die VM beim Booten des Host-Systems automatisch mit gebootet. Existiert der Link
nicht, so muss die VM manuell mit xm create [domain] gebootet werden.
Vor dem Herunterfahren des Host-Systems werden immer automatisch alle VMs heruntergefahren, unabhängig davon, ob sie nach dem Booten des Host-Systems auch automatisch gebootet werden. Das automatische Booten und herunterfahren der VMs wird von dem Skript
/etc/init.d/xendomains erledigt.
Robin Schröder
21

Documents pareils