Netfilter Conntrackd für OpenSuSE 10.2 umwandeln und installieren
Mit vielen Fenstern lässt sich besser arbeiten... Beryl machts möglich |  |
Allgemeines
Ziel war eine hochverfügbare Firewall mit Sessionübernahme. D.h. eine Verbindung über die redundante Firewall bricht bei Ausfall einer dieser Firewalls nicht ab, der Benutzer bekommt von dem Ausfall nichts mit, da seine Session transparent von der anderen Firewall übernommen wird.
Zum Test und zur Umwandlung der benötigten Komponenten habe ich mehrere Vmware Maschinen benutzt:
- Entwicklungsmaschine: OpenSuSE 10.2 mit alles was das Entwicklerherz begehrt, u.a. gcc, automake, autoconf, openssl-dvel,libcrypt-devel, popt-devel etc.
- Firewall 1: OpenSuSE 10.2 minimal mit Textoberfläche
- Firewall 2: OpenSuSE 10.2 minimal mit Textoberfläche (Kopie von Firewall 1)
Benötigt werden folgende Pakete:
- Linux-Kernel > 2.6.18
- libnfnetlink 0.0.30 (Aus SVN von netfilter.org s.u.)
- libnetfilter_conntrack 0.0.50
- conntrackd 0.9.2
Vom OpenSuSE 10.2 Installationsmedium
- openssl/openssl-devel
- libcrypt/libcrypt-devel
- popt/popt-devel (für keepalived)
Wer jetzt schon keine Lust mehr hat....am Ende der Seite gibts meine fertigen RPM's zur Installation unter OpenSuSE 10.2.
Kernel
Für die Installation habe ich mich entschlossen den zur Zeit neuesten Linux Kernel 2.6.20.7 zu benutzen. conntrackd braucht einen Kernel > 2.6.18, was aber auch mit dem Standardkernel von OpenSuSE 10.2 funktionieren sollte. Da aber der Kernel sowieso übersetzt werden muss, kann man auch direkt den neuesten nehmen.
Erhältlich ist der Kernel auf Linux Kernel 2.6.20.7.
Nach dem Download des Kernel Images wird folgendes gemacht:
- Kopieren nach /usr/src:
cp linux-2.6.20.7.tar.bz2 /usr/src
- cd /usr/src
- Entpacken:
tar -xjf linux-2.6.20.7.tar.bz2
- cd linux-2.6.20.7
- Kernel konfigurieren
make menuconfig
Im Menü müssen folgende Punkte aktiviert werden:
Networking - Networking Options - Network packet filtering framework (Netfilter) - Core Netfilter Configuration
(M) Netfilter connection tracking support
(M) Connection tracking netlink interface
[*] "conntrack" connection tracking match suppport
[*] Connection tracking flow accounting
- Umwandeln des Kernels:
make
- Umwandeln der Kernelmodule:
make modules
- Installieren des Kernels:
make bzImage install
- Installieren:
make modules_install
- Editieren der Konfigurationsdatei des Bootloaders grub:
vi /boot/grub/menu.lst
Den Eintrag fuer den Kernel 2.6.18.2 kopieren und die Versionsnummern beim Kernel und der initrd anpassen.
title openSUSE 10.2-2.6.20.7
root (hd0,0)
kernel /boot/vmlinuz-2.6.20.7-default root=/dev/sda1 vga=0x317 resume=/dev/sda2 splash=silent showopts
initrd /boot/initrd-2.6.20.7-default
Der Eintrag root= und resume= können natürlich differieren, je nach Installation.
- Archiv für die Minimalmaschinen erstellen:
tar -czf kernel-2.6.20.7-1-os102.tar.gz /boot/initrd-2.6.20.7-default /lib/modules-2.6.20.7-default /boot/vmlinuz-2.6.20.7-default /boot/System.map-2.6.20.7-default
- Rechner neu starten:
shutdown -r now
Der Rechnerneustart ist nicht unbedingt erforderlich aber ratsam um zu prüfen ob der neue Krnel funktioniert.
Beryl macht einfach nur Spass... |  |
libnfnetlink
Diese Library ist eine reine API für Netfilter Entwicklungen.
Also, los gehts...
- Library holen:
Entweder per svn (Subversion) mit :svn co https://svn.netfilter.org/netfilter/trunk/libnfnetlink
oder, falls keine Lust besteht Subversion zu installieren habe ich die Version vom 21.04.2007 geholt und gepackt: libnfnetlink svn 20070421
- Entpacken der Library:
tar -xzf libnfnetlink-0.0.30-svn.tar.gz
Falls die Version vom svn Archiv geholt wurde entfällt dieser Schritt
- Umwandeln und installieren mit:
./configure --prefix=/usr
make
make install
- RPM Paket (für die Minimalmaschinen) erstellen:
checkinstall -R
in der folgenden Maske eine Beschreibung eingeben. Mit einer leeren Zeilen beendet man die Eingabe.
Wahlweise im Menü die Punkte 4 und 7 ändern:
Architecture: i586
Source: www.netfilter.org
Burning down the house... Fenster schliessen auf Beryl Art |  |
libnetfilter_conntrack
Diese Library ist die Library für conntrackd und basiert auf libnfnetlink.
- Library holen:
Die Library kann auf der Webseite von Pablo Neira Ayuso,Autor von conntrackd, runtergeladen werden.
- Entpacken der Library:
tar -xzf libnetfilter_conntrack-0.0.50.tar.gz
- Umwandeln und installieren mit:
./configure --prefix=/usr
make
make install
- RPM Paket (für die Minimalmaschinen) erstellen:
checkinstall -R
in der folgenden Maske eine Beschreibung eingeben. Mit einer leeren Zeilen beendet man die Eingabe.
Wahlweise im Menü die Punkte 4 und 7 ändern:
Architecture: i586
Source: www.netfilter.org
Ohne VMware wäre alles viel umständlicher... |  |
conntrackd
Dies ist der eigentliche Daemon der das Session Tracking und die Session Übernahme zur Verfügung stellt.
- Daemon holen:
Der Daemon kann auf der Webseite von Pablo Neira Ayuso,Autor von conntrackd, runtergeladen werden.
- Entpacken des Pakets:
tar -xzf conntrackd-0.99.tar.gz
- Umwandeln und installieren mit:
./configure --prefix=/usr --sysconfdir=/etc
make
make install
- Erstellen eines Startskripts für conntrackd:
Kopieren eines bestehenden Startskripts aus /etc/init.d und anpassen desselben
oder von hier runterladen.
-
Erstellen der Konfigurationsdateien:
mkdir /etc/conntrackd
cp -r examples/* /etc/conntrackd
Anschliessend alle Makefile* Dateien aus /etc/conntrackd und Unterverzeichnisssen löschen.
- Include Datei für checkinstall erstellen: (Um auch das Startskript und die Konfigurationsdateien ins RPM zu ü.bernehmen)
vi checkinstall.include
folgende Zeilen einfügen:
/etc/init.d/conntrackd (anpassen falls das Skript anders benannt wurde)
/etc/conntrackd
- RPM Paket (für die Minimalmaschinen) erstellen:
checkinstall -R --include=checkinstall.include
in der folgenden Maske eine Beschreibung eingeben. Mit einer leeren Zeilen beendet man die Eingabe.
Wahlweise im Menü die Punkte 4 und 7 ändern:
Architecture: i586
Source: www.netfilter.org
keepalived
keepalived stellt ein einfaches Clustering für z.B. IP-Adressen zur Verfügung und ergä daher conntrackd recht gut. Ausserdem erwähnt Pablo es als Beispiel :-)
- Daemon holen:
Der Daemon kann auf der Webseite Keeepalived Homepage runtergeladen werden.
- Entpacken des Pakets:
tar -xzf keepalived-1.1.13.tar.gz
- Umwandeln und installieren mit:
./configure --prefix=/usr --sysconfdir=/etc
make (Beim Auftreten von Fehlern siehe unten)
make install
- Das erstellen eines Startskripts für keepalived entfällt, durch das make install" wurde es schon nach /etc/init.d kopiert.
-
Unter /etc/keeplived befinden sich nach make installauch die Konfigurationsdateien mit vielen Beispielkonfigurationen.
- Erstellen des RPM Pakets für die Minimal Maschinen:
Include Datei für checkinstall erstellen: (Um auch das Startskript und die Konfigurationsdateien ins RPM zu ü.bernehmen)
vi checkinstall.include
folgende Zeilen einfügen:
/etc/init.d/keepalived
/etc/keepalived
checkinstall -R --include=checkinstall.include
in der folgenden Maske eine Beschreibung eingeben. Mit einer leeren Zeilen beendet man die Eingabe.
Wahlweise im Menü die Punkte 4 und 7 ändern:
Architecture: i586
Source: www.keepalived.org
Webradio und Hörspiele lassen die Zeit wie im Flug vergehen... |  |
RPMS
Und wieder für alle die durchgehalten haben meine RPM's für OpenSuSE 10.2:
Compile Fehler beim Umwandeln von keelived 1.1.13 mit Linux Kernel > 2.6.20
Sollten beim Umwandeln von keepailed Fehler mit bereits definierten Typen auftreten, bei mir wars:
In file included from /usr/include/net/ethernet.h:26,
from ../include/vrrp_arp.h:29,
from vrrp_arp.c:29:
/usr/include/sys/types.h:62: error: conflicting types for ‘dev_t’
/usr/src/linux/include/linux/types.h:22: error: previous declaration of ‘dev_t’ was here
/usr/include/sys/types.h:67: error: conflicting types for ‘gid_t’
/usr/src/linux/include/linux/types.h:54: error: previous declaration of ‘gid_t’ was here
undo so weiter, und so weiter....
dann kann man sich mit folgendem Trick behelfen:
Wechseln in das Verzeichnis mit dem keepalive Sourcecode und dann die Datei: keepalived/vrrp/vrrp_arp.c editieren
Dort steht:
/* system includes */
#include "linux/if_packet.h"
/* local includes */
#include "vrrp_arp.h">
#include "memory.h">
#include "utils.h">
jetzt die beiden Blöcke einfach vertauschen so das local includes zuerst steht:
/* local includes */
#include "vrrp_arp.h">
#include "memory.h">
#include "utils.h">
/* system includes */
#include "linux/if_packet.h"
Das sollte helfen.