Einrichten eines Netzwerklabors
Willemers Informatik-Ecke
Für die Einrichtung eines Netzwerk-Labors können natürlich mehrere Computer, Kabel und Geräte aufgestellt werden. Allerdings ist der Aufwand recht erheblich. Diese Seite beschreibt einen Ansatz, mit virtuellen Computern ein lokales Netzwerk innerhalb eines Computers aufzubauen und so praktische Erfahrungen mit Computer-Netzwerken zu sammeln.

Konzept

Um die Experimente am Netzwerk durchführen zu können, werden folgende Dinge benötigt:

VirtualBox

Ein komplettes Netzwerk aus Computern, Kabeln, Routern und Switches aufzubauen, ist zwar faszinierend, hat aber nicht nur finanzielle Nachteile. Einfacher wird das Leben durch den Einsatz von virtuellen Maschinen. Dann wird das Netzwerk innerhalb eines Computers verlegt und wenn mal etwas kaputt geht, ist alles schnell wieder gangbar gemacht.

Die Wahl fällt auf VirtualBox, da die Software Open Source ist und auf diese Weise Überraschungen wie die plötzliche Kommerzialisierung und Einschränkung der Nutzbarkeit ausgeschlossen ist.

Auf der Seite www.virtualbox.org befindet sich ein Link für den Download der VirtualBox-Software.

Als Basis-System empfielt sich Linux, das VirtualBox sogar aus den Repositories installieren kann. Unter Windows verliert das Basissystem bereits Leistung an den Virenscanner und es gibt Probleme mit dem Betrieb von Virtualisierungs-Software.

Ressourcen

Für das Labor werden mindestens drei Computer benötigt: Ein Router, ein Server und ein Client. Für Angriffe wird noch einmal ein speziell ausgestatteter Client benötigt.

Klonen

Ein großer Vorteil der virtuellen Maschinen ist die Möglichkeit, Maschinen zu klonen. Man kann auf einem Klon beliebige Veränderungen vornehmen und jederzeit auf den Ausgangszustand zurückkehren.

Mit der Option verknüpfter Klon wird nur eine Differenz zwischen dem Original dem dem Klon gespeichert. Das spart natürlich Speicherplatz. Ein Klon ist dann in Sekunden erstellt.

Virtuelle Maschine: router

Der Router muss immer als erster hochgefahren werden, da der DHCP-Server später die IP-Adressen an die Hosts des Netzwerks verteilt.

Als Basis für den Router kann ein Debian ohne GUI oder ein Ubuntu-Server verwendet werden. Der Router benötigt keine GUI und in der beschriebenen Konfiguration weder einen SSH-Zugang noch eine Web-Oberfläche, da er einfach über die Konsole bedient werden kann.

In dieser Beschreibung wird ein Debian verwendet. Das benötigte Installations-Image ist unter der URL www.debian.org/distrib zu finden. Für die Virtualisierung muss man auf die Hardware-Architektur amd64 achten. Es läuft auch auf Intel-Prozessoren. Die Bezeichnung hat historische Gründe, weil AMD die erste 64-Bit-Variante am Markt hatte.

VirtualBox-Konfiguration

Neue virtuelle Maschine

Für die Erstellung einer virtuallen Maschine: Nun ist die VM angelegt und kann für die Installation vorbereitet werden.

Änderungen

Es sind Änderungen an der Netzwerk-Umgebung erforderlich, weil der Router ja zwei Netzwerk-Schnittstellen benötigt. Für die Installation muss das Debian-Image als CD-Laufwerk angemeldet werden.

Installations-Start ausführen

Der Klick auf den Button Starten startet die virtuelle Maschine. Da auf der virtuellen Platte kein Betriebssystem ist, wird automatisch die CD mit dem Debian-Image gestartet und dessen Installation beginnt.

Installation von Debian ohne GUI

Die Installation von Debian läuft wie üblich ab. Hier sind bei den entsprechenden Anfragen folgende Eingaben erforderlung. Die virtuelle Maschine kann über das Fenstermenü über Maschine|Ausschalten per ACPI oder als root über den folgenden Befehl heruntergefahren werden.
shutdown -h now

Bildschirmschoner ausschalten

Leider schaltet der bei Debian standardmäßig eingerichtete Bildschirmschoner den Fensterinhalt nach 10 Minuten auf dunkel. Das wird abgeschaltet:
# cat /sys/module/kernel/parameters/consoleblank
600
# setterm -blank 0
# cat /sys/module/kernel/parameters/consoleblank
0

Netzwerk-Werkzeugkasten installieren

Debian ist sehr sparsam installiert. Auf jeden Fall sollte man die Basis-Werkzeuge für Netzwerke nachinstallieren, damit beispielsweise ifconfig und route an Bord sind. Dazu gibt man als root folgenden Befehl:

apt install net-tools

IP-Adresse einrichten

Der Router gibt die IP-Adresse des lokalen Netzwerks vor, da er der einzige ist, der später nicht durch DHCP eingerichtet wird, da der DHCP-Server aus dem Router laufen wird.

Der folgende Befehl zeigt die IP-Adresse für alle Netzwerkschnittstellen des Computers.

ip address show
Dabei wird man feststellen, dass es drei Schnittstellen gibt. Die Konfiguration der IP-Adresse erfolgt in der Datei /etc/network/interfaces. Der Interface-Anschluss enp0s3 wird über das DHCP des Providers bestückt. Der lokale Anschluss enp0s8 wird statisch auf 192.168.0.1 festgelegt.
auto lo
iface lo inet loopback

allow-hotplug enp0s3
iface enp0s3 inet dhcp

allow-hotplug enp0s8
iface enp0s8 inet static
        address 192.168.0.1
        netmask 255.255.255.0
Die Einstellung greift nach einem Reboot der virtuellen Maschine.

Domain Name Server (DNS)

Der DNS-Server muss mit dem Paket bind9 nachinstalliert werden.
apt install bind9
Ohne weitere Konfiguration reicht er bereits Anfragen an das DNS weiter und dient so dem lokalen Netzwerk als Cache. Vorerst reicht dies, um eine Weiterleitung an den DNS-Server des Providers zu erreichen.

Später können die Namen für lokale Hosts eingetragen werden, so dass Router und Server über Namen statt IP-Adressen angesprochen werden können. Insbesondere für Experimente mit dem DNS ist das wichtig.

Nameserver für das lokale Netzwerk

Die Konfiguration des DNS befindet sich im Verzeichnis /etc/bind.

In der Datei named.conf.default-zones wurde zwischen der Zone . und der Zone localhost der folgende Eintrag platziert:

zone "nwk.lab" {
    type master;
    file "/etc/bind/db.nwk.lab";
};

zone "0.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.0.168.192";
};
Der erste Eintrag bezieht sich auf die Domäne nwk.lab und verweist auf die Datei db.nwk.lab, die den lokalen Namen mit dem folgenden Inhalt ihre IP-Adressen zuweist:

$TTL 2D
@    IN SOA    router.nwk.lab. mail.nwk.lab. (
            2019071101
            8H
            2H
            4W
            3H )
@           IN   NS   router.nwk.lab.
            IN   MX   10 mail.nwk.lab.
            IN   A    192.168.0.1

router      IN   A    192.168.0.1
localhost   IN   A    127.0.0.1
dhcp        IN   A    192.168.0.1
ns          IN   A    192.168.0.1
server      IN   A    192.168.0.50
www         IN   A    192.168.0.50
ftp         IN   A    192.168.0.50
mail        IN   A    192.168.0.50
Die zweite Datei db.0.168.192 weist den Nummern ihre Namen zu:

$TTL 2D
@    IN SOA    router.nwk.lab. mail.nwk.lab. (
            2019071101
            8H
            2H
            4W
            3H )
@           IN   NS   router.nwk.lab.

1           IN   PTR  router.nwk.lab.
1           IN   PTR  dhcp.nwk.lab.
1           IN   PTR  dns.nwk.lab.
50          IN   PTR  server.nwk.lab.
50          IN   PTR  mail.nwk.lab.
50          IN   PTR  www.nwk.lab.
50          IN   PTR  ftp.nwk.lab.

DHCP-Server

Für die Verteilung der IP-Adressen im lokalen Netzwerk wird auf dem Router ein DHCP-Server eingerichtet, der in dem Paket isc-dhcp-server zu finden ist. Installiert wird es über den folgenden Befehl:

apt install isc-dhcp-server

Unter Debian wird in der Datei /etc/default/isc-dhcp-server eingestellt, welche Netzwerkschnittstellen vom DHCP-Server bedient werden sollen. Dazu müssen die letzten beiden Einträge bearbeitet werden.

INTERFACESv4=""
INTERFACESv6=""
Das interne Interface ist enp0s8. Also wird dies für IPv4 eingetragen.
INTERFACESv4="enp0s8"
#INTERFACESv6="enp0s8"
In der Datei /etc/dhcp/dhcpd.conf folgende Einträge ändern:
option domain-name "nwk.lab";
option doman-name-servers 192.168.0.1;

default-lease-time 600;
max-lease-time 7200;

authoritative:
log-facility local7:

subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.100 192.168.0.200;
    option routers router.nwk.lab;
}

host server {
    hardware ethernet 08:00:27:87:e2:60;
    fixed-address 192.168.0.50;
    option routers 192.168.0.1;
}
Die Hardware-Adresse ist die MAC der Server-VM. Sie soll durch den Router immer dieselbe IP-Adresse bekommen.

Einstellung IP-Forwarding

In der Datei /etc/sysctl.conf den Eintrag für net.ipv4.ip_forward=1 entkommentieren (# am Anfang entfernen)

NAT-Einstellungen per iptables

Der Router soll alle Anfragen des lokalen Netzwerks an das Internet übernehmen, ausführen und zurückgeben. Dazu gibt es eine relativ übersichtliche iptables-Regel. Die kann man eingeben, aber letztlich soll diese auch nach einem Reboot erhalten bleiben. Dazu verwenden wir das Paket iptables-persistent, das noch installiert werden muss.
apt install iptables-persistent
Die Regel wird in der Datei /etc/iptables/rules.v4 hinterlegt. Der Inhalt sollte so aussehen:
*nat
-A POSTROUTING -o enp0s3 -j MASQUERADE
COMMIT

Virtuelle Maschine server

Auch der Server benötigt keine grafische Oberfläche. Wie schon beim Router wird ein Debian ohne GUI installiert. Das erfolgt wie oben beschrieben beim Router. Allerdings wird die Netzwerkschnittstelle nicht geändert, sondern bleibt für den Zeitraum der Installation auf NAT.

Nach der Installation wird die einzige Schnittstelle als Internes Netzwerk auf dem Netzwerk intnet definiert. Danach kann die virtuelle Maschine für den Server nur noch vernünftig starten, wenn der Router zuvor gestartet wurde.

Zusätzlicher Benutzer bob

Für verschiedene Experimente wird ein zweiter Benutzer benötigt. Soll der Benutzer bob angelegt werden, wird der folgende Befehl eingegeben:
# adduser bob
Im Abschluss muss zwei Mal das Passwort für bob eingegeben werden.

Integration in das Netzwerk

Nach der Installation wird geprüft, ob der Router dem Server die korrekte IP-Adresse 192.168.0.50 gegeben hat. Ansonsten ist die DHCP-Installation des Routers vermutlich nicht korrekt.

Ist auf dem Router DNS, iptables und IP-Forwarding korrekt installiert, dann sollte auch ein Ping auf eine Internetadresse funktionieren. Sollte der Ping blockieren, ohne eine IP-Adresse anzuzeigen, die ansprechen möchte, dann funktioniert das DNS nicht.

ping www.willemer.de
Schafft er die Auflösung des Namens, aber bringt keine Meldungen über Pakete zurück, könnte die iptables-Regel kaputt sein oder das IP-Forwarding nicht funktionieren. Etwas Geduld sollte man haben, manchmal dauert es ein wenig, bis die Antworten kommen.
ping www.willemer.de
PING www.willemer.de (217.160.231.176) 56(84) bytes of data.
Wenn alles klappt, erscheinen die Ping-Meldungen.
ping www.willemer.de
PING www.willemer.de (217.160.231.176) 56(84) bytes of data.
64 bytes from clienthosting.eu (217.160.231.176): icmp_seq=1 ttl=55 time=25.5 ms
64 bytes from clienthosting.eu (217.160.231.176): icmp_seq=2 ttl=55 time=25.8 ms
Durch [Strg]+[C] wird der Ping abgebrochen.

Webserver Apache

Um HTTP zu testen, muss ein Web-Server zur Verfügung stehen. Dieser wird mit dem folgenden Befehl installiert.
apt install apache2

Basic- und Digest-Authentifizierung

Durch die Verwendung einer Datei namens .htaccess kann ein Verzeichnis gegen unberechtigten Zugriff durch ein Passwort geschützt werden. Diese Konfiguration ermöglicht es, den Unterschied zwischen einer Basic- und einer Digest-Authentifizierung auszutesten und mit Wireshark zu beobachten.

Damit die Authentifizierung über .htaccess funktioniert, muss zuvor in der Datei /etc/apache2/apache2.conf die Option AllowOverride für das Webseitenverzeichnis auf AuthConfig gesetzt werden.

<Directory /var/www/>
     Options Indexes FollowSymLinks
     AllowOverride AuthConfig
     Require all granted
</Directory>
Das Passwort des Basic-Verfahrens, das lediglich Base64-Codierung verwendet, wird beim Abhören durch Wireshark durch einen einfachen Klick decodiert. Das andere Verfahren verwendet ein Digest, das typischerweise per MD5 verschlüsselt wird.

Für die Basic-Authentifizierung wird unter /var/www/html ein Verzeichnis basic angelegt. Darin wird eine Datei .htaccess mit folgendem Inhalt erzeugt:

AuthName "basic"
AuthType Basic
AuthUserFile /etc/apache2/.passwd_basic
Require valid-user
Die Passwortdatei wird mit dem Befehl htbasic erzeugt.
cd /etc/apache2
htbasic -c .passwd_digest alice
htbasic .passwd_digest bob
Die Authentifizierung mit Digest muss bei Apache in den aktuellen Versionen erst freigeschaltet werden. Die Begründung ist, dass die Passwörter mit MD5 nur unzureichend auf dem Server gesichert sind, darum wird Basic mit TLS empfohlen.
a2enmod auth_digest
systemctl restart apache2

Für die Digest-Authentifizierung wird unter /var/www/html ein Verzeichnis digest angelegt. Darin wird eine Datei .htaccess mit folgendem Inhalt erzeugt:

AuthName "NetzlaborDigest"
AuthType Digest
AuthDigestDomain /
AuthDigestProvider file
AuthUserFile /etc/apache2/.passwd_digest
Require valid-user
Die passende Passwortdatei wird mit dem Befehl htdigest erzeugt.
cd /etc/apache2
htdigest -c .passwd_digest NetzlaborDigest alice
htdigest .passwd_digest NetzlaborDigest bob
Die passenden Webseiten sind schnell gebaut. Sie müssen unterhalb des Verzeichnisses /var/www/html liegen. Dort gibt es bereits eine Datei index.html, die man auf folgenden Inhalt ändern kann:
<html>
<body>
<h1>Auswahl der Authentifizierung</h1>
<h3><a href="basic/basic.htm">Basic</a></h3>
<h3><a href="digest/digest.htm">Digest</a></h3>
</body>
</html>
Nun werden die Unterverzeichnisse basic und digest angelegt und darin die Seiten basic.htm und digest.htm erstellt, die lediglich eine Meldung enthalten müssen, dass die Authentifizierung geklappt hat.

Mailserver Postfix

apt install postfix
Postfix deinstalliert Exim4, den Standard-Mailserver von Debian und ersetzt ihn durch Postfix.

/etc/postfix/main.cf

Der Eintrag mynetworks muss um die IP des eigenen Netzwerks ergänzt werden. Damit werden Zusendungen aus dem eigenen Netzwerk erlaubt.
nynetworks = 127.0.0.0/8 .... 192.168.0.0/24
Nun ist es möglich, dass vom Client per telnet eine Mail im Telnet per SMTP eingetippt wird.

FTP-Server vsftpd

Der FTP-Server kann ohne große Konfiguration arbeiten, da er die Benutzerverwaltung von Linux benutzt. Mit dem Paket vsftpd wird der Server installiert und ist sofort einsatzbereit.
apt install vsftpd
Der Zugriff kann sowohl über den Konsolen-FTP-Client ftp erfolgen als auch über Filezilla.

Soll darüber hinaus auch anonymous FTP aktiviert werden, muss dies in der Datei /etc/vsftpd.conf eingerichtet werden. Dazu werden die folgenden Zeilen eingestellt:

anonymous_enable=YES
anon_upload_enable=YES

SSH-Server

Jede Linux-Distribution hat einen SSH-Client an Bord. Für Windows kann man das Programm Putty nachinstallieren. Einen SSH-Server muss man auch bei Linux explizit nachinstallieren.
apt install openssh-server
Der OpenSSH-Server ermöglicht auch SFTP. Dazu müssen ein paar Änderungen an der Konfiguration vorgenommen werden.

HTOP

Der Befehl htop erlaubt eine etwas einfachere Art der Betrachtung der Last. Dieses Programm ist hilfreich, wenn man einen Denial Of Service-Angriff auf den Server ausführen möchte.
apt install htop

Virtuelle Maschine client

Als Client könnte man natürlich auch ein Windows installieren. Das ergibt allerdings einerseits lizenzrechtliche Probleme. Außerdem dürfte der Client dann auch mehr Ressourcen benötigen. Außerdem ist auf einem Linux-Rechner wesentlich mehr Netzwerk-Software vorhanden.

Für den normalen Windows-Nutzer ist ein Client mit Linux Mint MATE recht handlich und er verbraucht nur wenig Ressourcen. Der Download dafür ist unter der URL https://linuxmint.com/download.php zu finden. Achten Sie darauf, dass die Oberfläche MATE ist und eine 64-Bit-Architektur vorliegt.

Die Installation erfolgt wie bei der virtuellen Maschine server, nur dass nicht Debian, sondern Linux Mint MATE verwendet wird.

Firefox

Firefox ist bei einer Linux-Distribution immer mit an Bord. Damit Firefox nicht automatisch beim Start Kontakt mit dem Internet aufbaut, sollte die Startseite auf leere Seite umgestellt werden.

Thunderbird

Thunderbird ist bei einer Linux-Distribution immer mit an Bord.

Damit Thunderbird mit dem Mail-Server der VM server zusammenspielt, wird noch ein IMAP-Server benötigt.

Filezilla und der Konsolen-FTP-Client

Wer FTP-Experimente machen will und dazu eine grafische Oberfläche einsetzen will, kann dazu Filezilla verwenden. Der FTP-Client auf der Konsole ist bei einer Linux-Distribution automatisch mit an Bord und muss nicht installiert werden.
apt install filezilla

Wireshark

Wireshark ist ein Programm zur Betrachtung von Netzwerkpaketen. Damit ist es möglich, den Protokollen auf die Pakete zu schauen. Das Programm steht in den Repositories von Linux zur Verfügung. Der folgende Befehl führt die Installation durch.
apt install wireshark
Eine ausführliche Dokumentation befindet sich unter der URL wiki.wireshark.org.

Ein Angreifer: kali

Die wichtigsten Angreifer-Tools (und damit Test-Tools für sichere Netzwerke) stellt die Distribution Kali zur Verfügung.

Kali wird mit verschiedenen GUIs ausgeliefert. Man kann konsequenterweise bei MATE bleiben, wenn der Client bereits MATE verwendet. MATE hat den Vorteil ungeheuer schlank zu sein, was bei mehreren parallel laufenden virtuellen Maschinen natürlich ins Gewicht fällt.

Die Installation erfolgt ähnlich wie bei der VM Client. Die für die Angriffe benötigten Tools sind bereits installiert.

Alternative: Router durch OpenWrt

Die virtuelle Maschine kann theoretisch auch durch ein OpenWrt-Image für VirtualBox realisiert werden. Allerdings habe ich damit bisher keine Erfahrungen gemacht.

Die OpenWrt-Daonload-Seite bietet eine Version für 64-Bit-Intel-kompatible PCs mit ext4-Dateisystem an. Diese heißt openwrt-x86-64-combined-ext4.img.gz.

Nach dem Herunterladen wird sie entpackt:

gzip -d openwrt-x86-64-combined-ext4.img.gz
Konvertieren zu einem VDI-Image.
VBoxManage convertfromraw --format VDI openwrt-x86-64-combined-ext4.img \
openwrt-x86-64-combined-ext4.vdi
(Der Backslash dient nur der besseren Lesbarkeit, da der Befehl in einer Zeile sehr breit ist.)

VirtualBox-Netzwerkeinstellungen

Die Netzwerkeinstellungen werden in der VirtualBox vorgenommen:

OpenWrt-VM anwählen. Dann Menüpunkt: Rechtsklick - Ändern - Netzwerk

Ersteinrichtung von OpenWrt

Die virtuelle Maschine starten

Nach dem Starten einmal Return drücken und man hat eine root-Shell. Allerdings hat diese eine US-Belegung.

Weitere Konfigurationen befinden sich im Verzeichnis /etc/config.

Installationen erfolgen über das opkg-System. Beispielsweise wird die Weboberfläche über folgende Befehle installiert und dann gestartet.

opkg update
opkg install luci
/etc/init.d/uhttpd enable
/etc/init.d/uhttpd start