Projekt: Linux-basierender Firewall-Router — Eigene Kernel Module für die Endian Firewall / Teil 4

Nachdem wir im Rahmen des Router-Projekts uns bereits über den Rahmen der Hardware klar sind fehlt nun noch die passende Software. Mit der Endian Firewall Firewall existiert eine auf Linux basierende äußerst leistungsfähige Software, welche eine Menge Einsatzgebiete abdeckt und für die meisten kleineren und mittleren Büros ausreichend sein sollte.

Bei vielen Systemen, welche insbesonders auf der stromsparenden Atom-Plattform basieren, wird allerdings die Installation deutlich schwieriger. Die bei der relativ neuen Plattform verwendeten Netzwerkchipsätzen werden zum Teil noch nicht von dem bei der Endian Firewall mitgelieferten Linux-Kernel unterstützt. Wobei dies nicht nur für die Endian Firewall gilt, sondern für fast alle Ablieger der IPCop Router-Distribution.

Mit diesem Howto soll einmal grundlegend erklärt werden mit welchen Schritten ein Kernel Modul für die Endian Firwall kompiliert werden kann. Mit den Kernelmodulen für Realtek RTL8111/8168B und Intel e1000e-basierenden PCIe Gigabit-Netzwerkkarten werden für die Anleitung zwei weit verbreitete Netzwerkchipsätze verwendet.

Wie immer für meine Howtos gilt, dass sie für Personen gedacht sind denen die Linux-Konsole nicht fremd ist. Die Nutzung des Howtos und der Kernelmodule erfolgt — wie üblich — auf eigene Gefahr. Eine weitere Vorraussetzung ist diesmal ein installiertes Vmware oder Virtualbox (siehe Schritt 1). Wer Fragen oder Probleme im Zusammenhang mit diesem Howto hat, den möchte ich bitten primär die Kommentarfunktion im Blog zu verwenden.

Schritt 1: Basis-System einrichten:

Als Vorbereitung sollte Vmware oder Virtualbox installiert werden um das Endian Development System als virtuelles Betriebssystem zu betreiben. Hierbei ist nur wichtig, dass für das Gast-System zwei virtuelle Netzwerkkarten vorhanden sein müssen, die als Netzwerkbrücke (Bridge-Mode) konfiguriert sein müssen. Auch wenn dies nicht zwingend benötigt wird, vereinfacht es den Installationsvorgang. Desweiteren wird ein SSH Client wie zum Beispiel Putty benötigt.

Noch ein genereller Hinweis. Die Anleitung selber verlangt sowohl gewisse Kentnisse unter Linux als auch mit der Endian Firewall selber. Durch ein Bug kann es im übrigen vorkommen, dass die bei der Installation angegebenen Zugangsdaten für die Anmeldung bei der Weboberfläche und für den SSH Zugang nicht funktionieren. In diesem Fall sollten noch die Standard Zugangsdaten aktiv sein. Für die Weboberfläche wäre dies Benutzername „admin” und als Passwort „endian”. Für den SSH Zugang lautet der Benutzername „root” und das Passwort, wie bei der Weboberfläche, „endian”. Die Groß- und Kleinschreibung muss unbedingt beachtet werden.

Nach dem anlegen des virtuellen Systems muss als erstes ein normale Installation der Endian Firewall durchgeführt werden. Wer die Endian Firewall bereits kennt, sollte hierbei kein größeres Problem haben. Als grünes und rotes
Interface wählt man jeweils eine der beiden verfügbaren Netzwerkkarten aus. Ein „blue” Interface wird nicht benötigt. Als Zugangsart wählt man für das rote Interface entweder DHCP oder Static IP. DHCP wird natürlich nur funktionieren, wenn zum Beispiel im Router der DHCP Server aktiviert ist. Wählt man Static IP, sollte man eine freie IP Adresse aus dem eigenen Netz angeben und für Gateway und DNS Server die gleichen Daten, wie beim Host-System (meistens die IP Adresse des Routers).

Schritt 2: Build Umgebung installieren:

Um die Installation etwas zu vereinfachen aktiviert man am besten über die Weboberfläche der eben installierten Firewall den SSH Zugang über den Menüpunkt „System / SSH Zugang”. Im Anschluss sollte man sich bereits mit dem SSH Client als „root” einloggen können. Über die Shell muss man nachfolgenden Kommandos ausführen. Mit diesen Kommandos werden für den kompilierungsvorgang essentielle Programme installiert, die zum Teil von einer anderen Distribution, aber auch direkt von Endian selber in binärer Form bereitgestellt werden.

[cc lang=„bash” escaped=„true”]root@ipgate:~ # cd ~; mkdir ~/dev
root@ipgate:~/dev # cd ~/dev
root@ipgate:~/dev # rpm ‑Uvh http://archives.fedoraproject.org/pub/archive/fedora/linux/\
> core/3/i386/os/Fedora/RPMS/info‑4.7–5.i386.rpm
root@ipgate:~/dev # rpm ‑Uvh http://archives.fedoraproject.org/pub/archive/fedora/linux/\
> core/3/i386/os/Fedora/RPMS/wget‑1.9.1–17.i386.rpm
root@ipgate:~/dev # wget http://kent.dl.sourceforge.net/project/efw/Development/\
> Endian%20Firewall%202.2%20RC3/EFW-COMMUNITY‑2.2‑rc3-devel-rpms.tar.gz
root@ipgate:~/dev # tar zxvf EFW-COMMUNITY‑2.2‑rc3-devel-rpms.tar.gz
root@ipgate:~/dev # cd ~/dev/RPMS/devel
root@ipgate:~/dev/RPMS/devel # rpm ‑Uvh binutils‑2.15.92.0.2–24.endian1.i586.rpm
root@ipgate:~/dev/RPMS/devel # rpm ‑Uvh kernel-devel‑2.6.22.19–72.endian15.i586.rpm
root@ipgate:~/dev/RPMS/devel # rpm ‑Uvh glibc-kernheaders‑2.4–9.1.100.EL.endian1.i386.rpm
root@ipgate:~/dev/RPMS/devel # rpm ‑Uvh patch‑2.5.4–20.endian0.i386.rpm
root@ipgate:~/dev/RPMS/devel # rpm ‑Uvh –nodeps glibc-headers‑2.3.4–2.39.endian6.i386.rpm
root@ipgate:~/dev/RPMS/devel # rpm ‑Uvh –nodeps glibc-devel‑2.3.4–2.39.endian6.i386.rpm
root@ipgate:~/dev/RPMS/devel # rpm ‑Uvh libgomp‑4.1.2–14.endian1.i586.rpm
root@ipgate:~/dev/RPMS/devel # rpm ‑Uvh make‑3.81–3.endian0.i586.rpm
root@ipgate:~/dev/RPMS/devel # rpm ‑Uvh cpp‑3.4.6–9.endian7.i586.rpm
root@ipgate:~/dev/RPMS/devel # rpm ‑Uvh gcc4‑4.1.2–14.endian1.i586.rpm[/cc]

Im Anschluss müssen nur noch zwei Symlink erzeugt werden, damit beim kompilieren die im vorherigen Schritt installierten Kernel Header sowie der Compiler auch tatsächlich gefunden werden. Dazu ist auf der Konsole nur folgendes notwendig:

[cc lang=„bash” escaped=„true”]root@ipgate:~ # rm /lib/modules/2.6.22.19–72.e18/build
root@ipgate:~ # ln ‑s /usr/src/kernels/2.6.22.19–72.endian15-i586/lib/modules/2.6.22.19–72.e18/build
root@ipgate:~ # ln ‑s /usr/bin/gcc4 /usr/bin/gcc[/cc]

Schritt 3a: Unterstützung für die Intel PCIe Netzwerkkarten basierend auf dem e1000e Kernelmodul:

Für viele der aktuellen Intel PCIe Gigabit Netzwerkkarten bietet die Endian Firewall in der aktuellen 2.3er Version der Community-Edition zur Zeit keine Unterstützung, da das hierfür benötigte e1000e Kernelmodul nicht mit in den fertigen Kernel genommen wurde. Da Endian das nachladen von Kernel Modulen zulässt, benötigt man keinen komplett neuen Kernel, sondern nur das einzelne Kernel Modul. Das Kernel Modul kann direkt
von der Intel Homepage herunterladen kann und sollte im Anschluss per scp in den Ordner /root des virtuellen Systems kopiert werden. Um das Modul im Anschluss zu kompilieren, sind folgende Schritte notwendig:

[cc lang=„bash” escaped=„true”]root@ipgate:~ # mkdir ~/drivers; cd ~/drivers
root@ipgate:~/drivers # tar zxvf e1000e‑1.1.2.tar.gz
root@ipgate:~/drivers # cd ~/drivers/e1000e‑1.1.2/src
root@ipgate:~/drivers/e1000e‑1.1.2/src # make
root@ipgate:~/drivers/e1000e‑1.1.2/src # cp e1000e.ko ../
root@ipgate:~/drivers/e1000e‑1.1.2/src # cd ..
root@ipgate:~/drivers/e1000e‑1.1.2 # strip –strip-debug e1000e.ko
root@ipgate:~/drivers/e1000e‑1.1.2 # gzip e1000e.ko[/cc]

Sofern alles fehlerfrei ablief, sollte man nun das fertige Kernelmodul in gepackter Form (e1000e.ko.gz) vorliegen haben. Diese Datei kann man nun zum Beispiel via scp vom virtuellen System auf den Hosterrechner kopiert werden. Wie genau nun das Kernel-Modul in das eigentliche System eingebunden wird, kann man im folgenden vierten Schritt nachlesen.

Schritt 3b: Unterstützung für die Realtek RTL8111/8168B PCIe Gigabit-Netzwerkkarten:

Ähnlich wie bei der erwähnten Intel PCIe Netzwerkkarten funktioniert der RTL8111/8168B Chipsatz unter der Endian Firewall nicht ohne das installieren eines Kernel Moduls. Der Auslöser ist hier allerdings nicht ein fehlendes Kernel Modul, sondern ein Fehler im Linux-Kernel. Dieser Fehler sorgt dafür, dass die Karten zwar erkannt werden, aber von einem falschen Kernel Modul angesprochen werden und damit keine Netzwerkverbindung aufgebaut werden kann. Die Lösung ist hier ähnlich zu der bei den Intel Netzwerkkarten. Auf der Realtek Homepage sollte man das aktuelle Kernel Modul für „LINUX driver for kernel 2.6.x and 2.4.x (Support x86 and x64)” herunterladen und im Anschluss per scp in den Ordner /root des virtuellen Systems kopiert werden. Um das Modul im Anschluss zu kompilieren, sind folgende Schritte notwendig:

[cc lang=„bash” escaped=„true”]root@ipgate:~ # mkdir ~/drivers; cd ~/drivers
root@ipgate:~/drivers # tar tar xfvj r8168‑8.015.00.tar.bz2
root@ipgate:~/drivers # cd r8168‑8.015.00
root@ipgate:~/drivers/r8168‑8.015.00 # make
root@ipgate:~/drivers/r8168‑8.015.00 # cp src/r8168.ko .
root@ipgate:~/drivers/r8168‑8.015.00 # strip –strip-debug r8168.ko
root@ipgate:~/drivers/r8168‑8.015.00 # gzip r8168.ko[/cc]

Auch hier gilt, wie im Fall des e1000e Kernel Moduls, dass man das fertige Kernelmodul in gepackter Form (r8168.ko.gz) vorliegen haben sollte. Um das Modul auf das eigentliche Endian System kopieren zu können, ist auch hier notwendig die Datei zum Beispiel per scp vom virtuellen System auf den Hostrechner zu kopieren.

Schritt 4: Integration des Kernel Moduls in das fertige Endian Firewall System

Für den letzten Schritt ist es notwendig, dass das Installationsprogramm der Endian Firewall auf dem geplanten Router komplett durchlaufen wurde und nun vor der Erstkonfiguration steht. Das benötigte Kernelmodul,
welches im dritten Schritt kompiliert wurde, sollte im Hauptverzeichnis eines mittels FAT16/32 formatierten USB Stick vorliegen, wobei der Stick erst nach dem durchlaufen des Installationsprogramms und dem abschließenden Reboot angeschlossen werden darf. Um die Unterstützung der Intel oder Realtek Netzwerkkarte hinzufügen, müssen über die Shell nun die folgenden Kommandos ausgeführt werden. Die Shell selber kann am Router über die Taste 0 im Bootmenü gestartet werden. Die Zugangsdaten für die Shell lauten „root” / „endian”.

Schritt 4b: Integration des Realtek Treibers

[cc lang=„bash” escaped=„true”]root@ipgate:~ # cp /mnt/usbstick/r8168.ko.gz /lib/modules/2.6.22.19–72.e18/kernel/drivers/net
In /etc/modprobe.conf die „alias eth …” Zeile in „alias eth r8168” ändern.
root@ipgate:~ # echo „blacklist r8169” » /etc/modprobe.d/blacklist
root@ipgate:~ # depmod ‑a
root@ipgate:~ # reboot[/cc]

Schritt 4a: Integration des Intel Treibers

[cc lang=„bash” escaped=„true”]root@ipgate:~ # cp /mnt/usbstick/e1000e.ko.gz /lib/modules/2.6.22.19–72.e18/kernel/drivers/net
In /etc/modprobe.conf die „alias eth …” Zeile in „alias eth e1000e” ändern.
root@ipgate:~ # depmod ‑a
root@ipgate:~ # reboot[/cc]

Noch ein paar Hinweise …

Um zu kontrollieren ob die Integration erfolgreich war, sollte man sich nach dem Reboot nochmals in die Shell einloggen. Per lsmod prüfen ob das „r8169” Kernelmodul erfolgreich geladen wurde. Über ifconfig sollte man noch kontrollieren, ob für die Netzwerkkarte ein ethx-Device existiert. Mittels ethtool ethx kann man prüfen, ob ein angeschlossenes Netzwerkkabel erkannt wird.

Wurden alle Netzwerkanschlüsse sauber erkannt, dann ist die größte Herausforderung festzustellen, welche Netzwerkkarte für die LAN Verbindung verwendet wird. In der Regel ist dies erst einmal die zu „eth0” zugeordnete Netzwerkkarte. Wer die MAC Adressen seiner Netzwerkkarten kennt, der kann über ifconfig sich die MAC Adresse von „eth0” anzeigen lassen. Ansonsten bleibt einem noch ein einfaches try and error. Einfach also die im Startmenü angezeigte IP von einem Rechner im Netz anpingen und nacheinander einfach einmal jede Netzwerkkarte mit dem Switch verbinden. Bei einer Netzwerkkarte sollte das anpingen eigentlich erfolgreich sein. Ist dies nicht der Fall, so sollte man einmal prüfen ob wirklich alle Netzwerkkarten erkannt wurden, ob die richtigen Netzwerkmodule geladen wurden (wichtig bei dem Realtek-Treiber) und ob ein angeschlossenes Netzwerkkabel erkannt wird. Ein Standard-Vorgehen bei dieser Situation gibt es leider nicht, sodass weitergehende Tipps im Rahmen des Howtos nicht möglich sind.

Sollte alles funktioniert haben, so kann man nun beginnen wie im offiziellen Endian Handbuch beschrieben die Erstkonfiguration über den Internetbrowser durchführen. Bei der Wahl der Netzwerkanschlüsse für die verschiedenen Netzwerksegmente (Rot, Grün, Blau etc.) sollten nun auch alle Netzwerkanschlüsse zur Verfügung stehen.

Bei Fragen zu der Konfiguration der Endian Firewall oder bei irgendwelchen Problemen, so kann ich nur efw-forum.de (deutsch) und efwsupport.com (englisch) empfehlen.