• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Howto] Firewallcluster mit OpenBSD, pf und pf_sync

nbkr

Guru
Hallo,

ein kleines Howto wie man einen hochverfügbaren Firewallcluster mit OpenBSD (ja ich weiß, ist kein Linux - aber man darf ja mal über den Tellerrand schauen ;-) ), pf und pfsync aufsetzt. Das Originaldokument findet sich wieder unter:
http://www.benjaminfleckenstein.de/de/anl_pfcluster.html

Code:
# vim: set textwidth=80 syn=conf:
#
## Titel: 
# Firewallcluster mit OpenBSD, pf und pf_sync
#
## Autor:
# Benjamin Fleckenstein, http://www.benjaminfleckenstein.de/
#
## Version
# 1.0
#
## Datum
# 2007-01-07
#
## Vorüberlegungen: 
# Ziel ist es einen Firewallcluster auf Basis von OpenBSD, pf
# und pf_sync zu erstellen. Grund hierfür ist die Tatsache das eine solche
# Lösung vermutlich in der Lage ist mit kommerziellen Firewalls von Cisco und
# bezüglich der Basisfunktionalität auch mit anderen Firewalls zu konkurieren.
# Da alle Komponenten Open Source und kostenlos sind ist diese Lösung bezüglich
# Herstellerunabhängigkeit zu bevorzugen.
#
# Die Installation erfolgt über VMWare Workstation da diese einfacher zu
# Handhaben ist als echte Hardware herumschleppen zu müssen. Der Host ist Ubuntu
# 6.10
#
# Der Netzwerkaufbau ist in der Datei netzwerdesign.dia gespeichert. Alle
# dargestellten Maschinen sind virtuell und laufen auf dem gleichen Ubuntu 6.10
# Host. 
#
# Im ersten Schritt machen die Firewalls ein Masquerading. D.h. sie verbergen
# das dahinter liegende virtuelle Netzwerk. In einem zweiten Schritt lässt sich
# ein OSPF Daemon installieren, welcher sich im dem nächsten Router unterhält
# um das virtuelle Netzwerk allgemein bekannt zu machen.
#
## Voraussetzungen: 
# Funktionierendes VMware
# Grundwissen zum Thema Firewalling
#
## Quellen: 
# [1]     http://www.openbsd.org/faq/faq4.html
# [2]     http://www.openbsd.org/cgi-bin/man.cgi?query=disklabel&sektion=8
# [3]     http://www.openbsd.org/ftp.html
# [4]     http://www.openbsd.org/faq/faq6.html
# [5]     http://archives.neohapsis.com/archives/openbsd/2001-03/0410.html
# [6]     http://wiki.debianforum.de/QemuVirtuelleMaschine
# [7]     http://www.openbsd.org/cgi-bin/man.cgi?query=carp
# [8]     http://www.countersiege.com/doc/pfsync-carp/
# [9]     http://www.webservertalk.com/archive247-2005-3-957953.html
# [10]    http://www.openbsd.org/cgi-bin/man.cgi?query=hostname.if
# [11]    http://www.openbsd.org/faq/pf/carp.html#forcefail
# [12]    http://www.warp9.de/pub/pfcluster.pdf
# [13]    http://www.openbsd.org/faq/pf/de/carp.html#pfsyncconfig
#
## Weitere Dokumente:
# [w1] Netzplan http://www.benjaminfleckenstein.de/images/anleitungen/pfcluster/pfcluster.png
#
## Vereinbarungen: 
# $MEDIA = Speicherort der CD Images 
# $FIREWALL1 = Name der ersten Firewall im Cluster
# $FIREWALL2 = Name der zweiten Firewall im Cluster
# $DOMAIN    = Die lokale Domain falls vorhanden
# $DNS       = Die IP Adresse des DNS Servers
# $GATEWAY   = IP Adresse des Primärgateways im Netzwerk
# $PASS      = Rootpasswort der neuen Firewallmaschinen
#
## Lizenz dieser Anleitung:
# http://creativecommons.org/licenses/by/2.0/de/deed.de
#
## Anmerkung:
#
#####################################################################################


# Los gehts - zuerst das Bootimage von openbsd.org herunterladen: Von diesem
# Image kann man booten, allerdings enthält es nicht die eigentliche Software.
# Diese wird per FTP nachinstalliert. Alternativ kann man sich auch die OpenBSD
# Cds bestellen. Kostenpunkt 50 Euro - die dem OpenBSD Projekt zugute kommen.
cd $MEDIA
wget ftp://openbsd.ftp.fu-berlin.de/pub/OpenBSD/4.0/i386/cd40.iso

# Nun braucht man natürlich ein neues VMWare Image. Alternativ kann man
# natürlich auch mit echter Hardware arbeiten, aber dafür fehlt mir einfach der
# Platz im Haus ;-). Folgende Daten sollten für die VMWare als auch für die
# echte Hardware gelten.
#
# 2 GB Festplattenplatz
# CD Laufwerk (für das Installationsimage)
# 64 MB Arbeitsspeicher
# 3 Netzwerkkarten 
#
# Netzwerkkarte 0 wird stellt das Outsideinterface da und wird unter VMWare im
# Bridged Modus (vmnet0) betrieben. Es ist als per Netzwerkbrücke an das
# Netzwerkinterface des Hostsystems angeschlossen und verhält sich im Netz wie
# eine echte Maschine.
# 
# Das zweite Interface ist das Syncinterface. Über dieses Netz tauschen die
# Firewalls Verbindungsinformationen aus. Diese Netzwerkkarte ist rein virtuell,
# wird in VMware also als "Custom" Netzwerk eingerichtet (z.B. vmnet2).
#
# Das dritte Interface ist das Insideinterface. Es ist an das virtuelle
# Netzwerk angeschlossen.  Auch hierfür bracht man ein "Custom" Netzwerk 
# (z.B. vmnet3)
#
# Da OpenBSD die Netzwerkinterfaces in den Promiscuous Mode versetzt muss auch
# VMWare dies können. Hierfür müssen die Zugriffsrechte unter /dev/vmnet* auf
# 0666 gestellt sein, so dass auch VMWare darauf zugreifen kann.

# Sobald die Maschine gestartet ist liefert OpenBSD den Prompt
boot>                                       # Enter drücken
(I)nstall, (U)pgrade, (S)shell?             # i drücken
Terminal Type [vt220]                       # Enter drücken
kdb(8) mappling? ('L' for list)             # de eingeben, Enter drücken
Proceed with install [no]                   # yes eingeben, Enter drücken

# Jetzt kommt man zur Einteilung der Festplatte
Which one is the root disk? (or 'done') [wd0]           # Enter drücken
Do you want to use *all* of wd0 for OpenBSD? [no]       # yes eigengeben, Enter drücken

# Nun muss man die Platte wd0 in Slices unterteilen. Slices sind im Prinzip
# Partitionen in Partionen. D.h. man unterteilt eine Partition nochmals in
# einzelne Bereiche. Dafür kommt das Programm disklabel zu Einsatz. 
# Die Bedienungsanleitung von disklabel findet sich unter: [2]
#
# Wir wollen die einzelnen Bereich folgendermaßen aufteilen:
# wd0a: /       (root) - 150MB
# wd0b:         (swap) - 300MB
# wd0d: /tmp           - 120MB
# wd0e: /var           - 400MB
# wd0g: /usr           - 930MB
# wd0h: /home          - 100MB
#
# Diese Werte entsprechen einigermaßen den Vorgaben von [1] mit dem Unterschied,
# das für /home wesentlich weniger Platz und für /var wesentlich mehr Platz
# berücksichtigt wurde. Grund hierfür ist die Tatsache das es auf einer Firewall
# praktisch keine Benutzer gibt die Platz bräuchten, dafür aber durchaus einiges
# an Logdaten und /var anfallen kann.
#
# Nun muss man diese Vorgaben disklabel mitteilen
-> Eingeben: p <enter>. Das zeigt die Partitionstabelle an.
#
# Gegenwärtig gibt es nur a und c. c stellt die gesamte Platte dar und a eine
# automatisch angelegte root Partition. c lassen wir wie es ist aber a wollen
# wir löschen.
-> Eingeben: d a <enter>. Damit ist a gelöscht

# Nun werden neue Slices angelegt.
-> Eingeben: a a <enter>
offset [63]         # Enter drücken
size [4193217]      # 150m eingeben, Enter drücken
FS type: [4.2BSD]   # Enter drücken
mount point: [none] # / eingeben, Enter drücken

# Damit wäre / erstellt. Kommen wir zu den nächsten Slices
-> Eingeben: a b <enter>
offset [307440]     # Enter drücken
size [3885840]      # 300m eingeben, Enter drücken
FS type: [swap]     # Enter drücken

-> Eingeben: a d <enter>
offset [922320]     # Enter drücken
size [3270960]      # 120m eingeben, Enter drücken
FS type: [4.2BSD]   # Enter drücken
mount point: [none] # /tmp eingeben, Enter drücken

-> Eingeben: a e <enter>
offset [1168272]    # Enter drücken
size [3025008]      # 400m eingeben, Enter drücken
FS type: [4.2BSD]   # Enter drücken
mount point: [none] # /var eingeben, Enter drücken

-> Eingeben: a g <enter>
offset [1987776]    # Enter drücken
size [2205504]      # 930m eingeben, Enter drücken
FS type: [4.2BSD]   # Enter drücken
mount point: [none] # /usr eingeben, Enter drücken

-> Eingeben: a h <enter>
offset [3892896]    # Enter drücken
size [300384]       # 100m eingeben, Enter drücken
FS type: [4.2BSD]   # Enter drücken
mount point: [none] # /home eingeben, Enter drücken

# Damit wäre die Erstellung der Slices fertig. Jetzt muss das ganze noch
# gesichert werden.
-> Eingeben: q <enter>
Write new label?: [y]   # Enter drücken

# Anschließend muss man nochmal alle Mountpoints bestätigen.
Mount point for wd0d (size=122976k)? (or 'none' or 'done') [/tmp]   # Enter drücken
Mount point for wd0e (size=409752k)? (or 'none' or 'done') [/var]   # Enter drücken
Mount point for wd0g (size=952560k)? (or 'none' or 'done') [/usr]   # Enter drücken
Mount point for wd0h (size=102312k)? (or 'none' or 'done') [/home]  # Enter drücken
Mount point for wd0d (size=122976k)? (or 'none' or 'done') [/tmp]   # done eingeben, Enter drücken

# Jetzt folgt noch eine Sicherheitsabfrage
Are you really sure that you're ready to proceed? [no]  # yes eingeben, Enter drücken

# Nun kommt man zum Hostname in unserem Fall $FIREWALL1 (bei mir also "firewall1")
System hostname? (short form, e.g. 'foo')   # $FIREWALL1 eingeben, Enter drücken

# Der nächste Schritt ist die Konfiguration des Netzwerks
Configure the network? [yes]        # Enter drücken
Available interfaces are: pcn0 pcn1 pcn2.
Which one do you wish to initialize (or 'done') [pcn0]

# pcn0 ist das outside interface da dies das erste ist welches beim Aufruf von
# qemu angegeben wurde. Entsprechend sind pcn1 das Sync Interface und pcn2 das
# inside Interface. Wir konfigurieren als zuerst das Outside Interface.
# Entsprechend muss man bei obiger Frage einfach Enter drücken. Die Daten des
# Interfaces finden sich in beigefügtem Netzplan [w1]
Symbolic (host) name for pcn0? [firewall1]       # Enter drücken
The media options of pcn0 are currently
        media: Ethernet autoselect (autoselect)
Do you want to change the Media options? [no]   # Enter drücken        
IPv4 address for pcn0? (or 'none' or 'dhcp')     # 192.168.2.21 eingeben, Enter drücken
Netmask? [255.255.255.0]                        # 255.255.255.128 eingeben, Enter drücken
IPv6 address for pcn0? (or 'rtsol' or 'none') [none]     # Enter drücken

# Jetzt müssen noch die anderen Netzwerkkarten konfiguriert werden. Das
# Sync Interface ist als nächstes dran.
Available interfaces are: pcn1 pcn2.
Which one do you wish to initialize (or 'done') [pcn1]   # Enter drücken
Symbolic (host) name for pcn0? [firewall1]       # Enter drücken
The media options of pcn0 are currently
        media: Ethernet autoselect (autoselect)
Do you want to change the Media options? [no]   # Enter drücken        
IPv4 address for pcn0? (or 'none' or 'dhcp')     # 172.16.0.1 eingeben, Enter drücken
Netmask? [255.255.255.0]                        # 255.255.255.252 eingeben, Enter drücken
IPv6 address for pcn0? (or 'rtsol' or 'none') [none]     # Enter drücken

# Als letztes das Inside interface
Available interfaces are: pcn2.
Which one do you wish to initialize (or 'done') [pcn2]   # Enter drücken
Symbolic (host) name for pcn0? [firewall1]       # Enter drücken
The media options of pcn0 are currently
        media: Ethernet autoselect (autoselect)
Do you want to change the Media options? [no]   # Enter drücken        
IPv4 address for pcn0? (or 'none' or 'dhcp')     # 10.1.1.2 eingeben, Enter drücken
Netmask? [255.255.255.0]                        # Enter drücken
IPv6 address for pcn0? (or 'rtsol' or 'none') [none]     # Enter drücken

# Jetzt folgt die DNS Konfiguration
DNS domain name? (e.g. 'bar.com') [my.domain]               # $DOMAIN eingeben, Enter drücken
DNS nameserver? (IP address of 'none') [none]               # $DNS eingeben, Enter drücken
Use the nameserver now? [yes]                               # Enter drücken
Default IPv4 route? (IPv4 address, 'dhcp' or 'none')        # $GATEWAY eingeben, Enter drücken
Edit hosts with ed? [no]                                    # Enter drücken
Do you want to do any manual network configuration? [no]    # Enter drücken

# Jetzt geht es an das Passwort für den Root account
Password for root account? (will not echo)                  # $PASS eingeben, Enter drücken
Password for root account? (again)                          # $PASS eingeben, Enter drücken

# Soweit so gut. Jetzt nur noch die Installationsquelle angeben und es kann
# losgehen
Location of sets? (cd disk ftp http or 'done') [cd]         # ftp eingeben, Enter drücken

# Man wird nach einem Proxy gefragt. Da ich keinen Verwende kann ich einfach
# Enter drücken. Falls ein Proxy im Einsatz ist muss man dessen Daten hier
# eingeben.
HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none]    # Enter drücken
Display the list of known ftp servers? [no]                         # Enter drücken

# Nun muss man den zu verwendenden FTP Server angeben. Eine Liste von
# Installationsservern findet sich unter [3]. Man sollte einen Server verwenden
# der Räumlich am nächsten zu einem ist. Ich verwenden einen Mirror in Nürnberg.
Server? (IP address, hostname, or 'done')   # Server eingeben, Enter drücken
                                            # Ich gebe also ein
                                            # mirror.roothell.org

Does the server support passive mode ftp? [yes] # Enter drücken - die meisten Server
                                                # können passiv FTP.                                            

Server directory? [pub/OpenBSD/4.0/i386]        # Hier kann ich Enter drücken,
                                                # da die Daten bei dem von mir
                                                # benutzen Server wirklich unter
                                                # der Vorgabe URL liegen. Falls
                                                # dies bei anderen Server anders
                                                # ist muss man dies natürlich
                                                # anpassen.

Login? [anonymous]  # Enter drücken. Alle öffentlichen Installationsserver bieten
                    # anonymous login.                                               

# Jetzt wird einem die Liste der verfügbaren Pakete angezeigt. Standardmäßig
# werden alle Pakte bis auf bsd.mp und die x-Pakete installiert. Ich möchte aber
# auch das game40.tgz Paket nicht haben, da Spiele auf einer Firewall nichts
# verloren haben und der Plattenplatz knapp ist. Deshalb wähle ich es ab.
 -> Eingeben -game40.tgz <enter>
 -> Eingeben done <enter>

Ready to install sets? [yes]    # Enter drücken

# Jetzt werden die Pakete geholt. Anschließend wird man nochmal nach einer
# Setlocation gefragt
Location of sets? (cd disk ftp http or 'done') [cd]         # done eingeben, Enter drücken

# Anschließend wird man noch gefragt ob man sshd standardmäßig starten will. 
# Da die Administration der Firewall später per SSH erfolgen soll aktzeptieren
# wir die Standardvorgabe "yes"
Start sshd(8) by default? [yes]         # Enter drücken

# Auch den NTP wollen wir standardmäßig starten damit die Zeiten in den Logs
# immer korrekt sind.
Start ntpd(8) by default? [no]          # yes eingeben, Enter drücken

# Den Xserver wollen wir aber nicht starten
Do you expect to run the X Window System? [no]      # Enter drücken

# Die Umleitung der Ausgabe auf die Konsole wäre bei einer echten
# Firewall die keinen Tastatur/Monitor Anschluss durchaus sinnvoll. Bei
# unsere virtuellen Firewall macht das aber keinen Sinn.
Change the default console to com0? [no]            # Enter drücken

# Nun kommen wir zur Einstellung der Zeitzone
What timezone are you in ('?' for list) [Canada/Mountain] # Europe eingeben, Enter drücken
What sub-timezone of 'Europe/' are you in? ('?' for list) # Berin eingeben, Enter drücken

# Nun läuft die eigentlich Installation welche recht flott fertig ist.
# Wir müssen nun die Maschine herunterfahren, die CD aus dem virtuellen Laufwerk
# nehmen und neu starten
 -> Eingeben: halt <enter>

# Die CD nun entfernen und die Maschine neu starten.

# Die Maschine sollte jetzt von alleine hochfahren und noch letzte Aufgaben
# erledigen wie z.B. das erstellen von SSH Schlüsseln. Gerade dieses
# Schlüsselerstellen kann ein wenig dauern.
# Sobald der Loginprompt angezeigt wird kann man sich auch via SSH an der
# Maschine anmelden. Dazu eine Konsole (z.B. gnome-terminal) öffnen und sich per
# SSH auf die Maschine verbinden. 
ssh -l root 192.168.2.21

# Nach diesem ersten Test muss nun die zweite Firewall installiert werden. 
# Da ich VMWare verwende kann ich mir die Sache etwas einfacher machen. Ich
# klone einfach die erste Firewall. Wenn man mit echter Hardware arbeitet muss
# man nun das eben gezeigt nochmal auf der zweiten Firewall wiederholen.
# Natürlich muss man die IP Adressen gemäß [w1] verwenden.

# Nun starten wir die zweite Firewall.
# und loggen uns ein sobald die Maschine läuft
ssh -l root 192.168.2.21

# Zuerst passen wir den Hostnamen an.
vi /etc/myname
 -> $FIREWALL1.$DOMAIN ersetzen durch $FIREWALL2.$DOMAIN

# Nun passen wir die IP Adressen der Netzwerkkarten an
vi /etc/hostname.pcn0
 -> 192.168.2.21 durch 192.168.2.22 ersetzen.

vi /etc/hostname.pcn1
 -> 172.16.0.1 durch 172.16.0.2 ersetzen.

vi /etc/hostname.pcn2
 -> 10.1.1.2 durch 10.2.2.3 ersetzen.

# Nun müssen noch die ssh-keys neu angelegt werden damit es zu keinen Problemen
# kommt wenn zwei Firewalls laufen.
 -> Eingeben: ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key
Overwrite (y/n)?    # y eingeben, Enter drücken
Enter passphrase (empty for no passphrase):     # Enter drücken
Enter same passphrase again:                    # Enter drücken

-> Eingeben: ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
Overwrite (y/n)?    # y eingeben, Enter drücken
Enter passphrase (empty for no passphrase):     # Enter drücken
Enter same passphrase again:                    # Enter drücken

-> Eingeben: ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
Overwrite (y/n)?    # y eingeben, Enter drücken
Enter passphrase (empty for no passphrase):     # Enter drücken
Enter same passphrase again:                    # Enter drücken

# Nun sollte man die Maschine einmal neu starten. Theoretsich könnte man auch
# einfach ein "sh /etc/netstart" aber ein Neustart stellt sicher das wirklich
# alles was angepasst werden muss angepasst wurde.
halt

# Jetzt kann man Firewall2 wieder starten. Nun sollte die Firwall2 unter der IP
# Adresse 192.168.2.22 erreichbar sein.
ping 192.168.2.22

# Jetzt kann man auch Firewall1 starten.

# Nun sollte man testen ob sich die zwei Firewalls untereinander sehen können.
# Dazu verbindet man sich mit Firewall1 und pingt von dort alle Interfaces von
# Firewall2 an.
ssh -l root 192.168.2.21
 -> ping 192.168.2.22
 -> ping 172.16.0.2
 -> ping 10.1.1.3

# Da die beiden Maschinen nun laufen ist der nächste Schritt das Routing auf den
# Maschinen zu aktivieren und das Failover zu konfigurieren. Wir werden dies
# zuerst auf Firewall1 machen, und anschließend auf Firewall2. Die Verbindung
# zu Firewall1 per SSH steht ja schon.

# Zuerst aktivieren wir das Routing
vi /etc/sysctl.conf
 -> Das Routezeichen vor der Zeile "net.inet.ip.forwarding=1" entfernen.

# Damit das Routing nicht nur nach einem Reboot funktioniert, sondern sofort
# muss man noch folgenden Befehl eingeben.
sysctl net.inet.ip.forwarding=1

# Nun muss man carp configurieren. Carp ist für das Failover der Firewalls
# zuständig. Es werden  ständig Pakete hin und her geschickt um zu sehen ob die
# Primärmaschine des Clusters noch aktiv ist.  Sollte dies nicht der Fall sein
# übernimmt die Sekundärmaschine.  Um Carp zu aktivieren legt man einfach ein
# spezielles Carp Interface an.
#
# Es verhält sich im Prinzip wie ein normales Interface. Die einzigen
# zusätzlichen Informationen die man liefern muss ist ein Passwort und die VHID.
# Das Passwort dient der Authentifzierung der Clusterknoten untereinander. Damit
# werden die Datenpakete die der Zustandsüberwachung dienen verschlüsselt. Die
# VHID ist eine ID die pro verbundenen Netzwerkkarte eindeutig ist. In diesem
# Beispiel hätte also die beiden Outside Karten eine eindeutige VHID und die
# beiden Inside Karten ebenfalls. 
#
# Wie jedes Interface bekommt auch dieses Carp Interface eine IP Adresse. Diese
# IP Adresse muss man später auch den Clients als Gatewayadresse mitteilen. Gibt
# man statt dessen nämlich die IP Adresse einer bestimmten Firewall an und diese
# fällt aus, funktioniert die Verbindung der Clients nicht mehr.
#
# Da eine Firewall zwei Interface hat die Hochverfügbar sein müssen, nämlich das
# Inside Interface, als auch das Outside Interface, muss man auch zwei Carp
# Interfaces anlegen. Eines für Outside, eines für Inside.
#
# Legen wir also zuerst das Carp Interface für Outside auf Firewall1 an.
ifconfig create carp0
ifconfig carp0 vhid 1 pass PassWorD 192.168.2.20 netmask 255.255.255.128

# Nun müssen wir die Interfacekonfiguration noch speichern, damit das Interface
# auch bei nächsten Booten noch vorhanden ist.
vi /etc/hostname.carp0
 -> Einfügen "inet 192.168.2.20 255.255.255.128 192.168.2.127 vhid 1 pass PassWorD"
 -> Natürlich ohne die Anführungszeichen.

# Nun folgt die Konfiguration des Inside Carp Interfaces
ifconfig create carp1
ifconfig carp1 vhid 2 pass PassWorD 10.1.1.1 netmask 255.255.255.0

# Nun müssen wir die Interfacekonfiguration noch speichern, damit das Interface
# auch bei nächsten Booten noch vorhanden ist.
vi /etc/hostname.carp1
 -> Einfügen "inet 10.1.1.1 255.255.255.0 10.1.1.255 vhid 2 pass PassWorD"
 -> Natürlich ohne die Anführungszeichen.

# Der nächste Schritt besteht nun im Konfigurieren von pfsync. pfsync ist ein
# Programm welchen den Status des OpenBSD eigenen Paketfilters zwischen zwei
# Maschinen synchronisiert.
ifconfig create pfsync0
ifconfig pfsync0 syncdev pcn1

# Jetzt noch das ganze dauerhaft im System verankern.
vi /etc/hostname.pfsync0
 -> Einfügen:
 -> up syncdev pcn1

# Abschließend müssen wir nun noch die Firewallregeln schreiben und die Firewall
# aktivieren. Wir werden nur ein ganz einfaches Regelwerk implementieren. Die
# Firewall lässt keinerlei Zugriffe auf sich selbst zu, erlaubt neben den PFSync
# und den Carp Paketen nur DNS und HTTP vom Clientaus.
vi /etc/pf.conf
 -> Alles löschen und nachfolgendes einfügen
    #Standardpolicy (rein darf nix, raus darf alles)
    block in all
    pass out all keep state

    #Loopback ignorieren
    set skip on lo0

    #Pfsync zulassen
    pass in quick on { pcn1 } proto pfsync keep state (no-sync)

    #Carp zulassen
    pass in quick on { pcn0 pcn2 } proto carp keep state

    #HTTP vom Client zulassen
    pass in on { pcn2 } proto tcp from 10.1.1.4 to any port 80 keep state

    #DNS vom Client zulassen
    pass in on { pcn2 } proto udp from 10.1.1.4 to any port 53 keep state

    #ICMP vom Client zulassen
    pass in on { pcn2 } proto icmp from 10.1.1.4 to any keep state

# Jetzt müssen wir die Firewall aktivieren
pfctl -e -f /etc/pf.conf

# Jetzt müssen wir noch dafür sorgen, dass die Firewall beim Neustart aktiviert
# wird.
echo pf=Yes >> /etc/rc.conf.local

# Die Carp Interfaces, pf und pfsync sind nun soweit konfiguriert. Jetzt muss dies
# ebenfalls auf Firewall2 eingestellt werden. Da die Konfiguration exakt
# identisch ist, werde ich sie nicht nochmals hier aufführen.

# Jetzt da die Firewalls laufen brauchen wir noch einen Host im Inside Netzwerk.
# Hierzu setze ich eine Ubuntu-Linux Maschine als virtuelle Maschine auf. Diese
# Maschine bekommt, wie in [w1] geschildert die IP Adresse 10.1.1.4 und das
# Defaultgateway ist die virtuelle Inside IP Adresse der Firewall. Der DNS
# Server ist der gleiche wie bei den Firewalls (also $DNS). Ebenso muss
# natürlich das Routing im LAN angepasst werden, so dass auch das virtuelle Netz
# 10.1.1.0/24 erreichbar ist. Die genaue Installation dieser Maschine sowie das
# Routingsetup ist nicht Bestandteil dieser Anleitung.
#
# Sobald die Maschine läuft kann man die Verbindung testen.
ping heise.de

# Wenn dieser Ping funktioniert startet man einen größeren Download. Man kann
# z.B. die aktuellen Quellen des Linuxkernels herunterladen.
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.1.tar.bz2

# Wärend der Download läuft macht man ein Failover auf der aktiven Firewall
# in dem man folgendes Kommando ausführt:
ifconfig carp1 down; ifconfig carp1 up; ifconfig carp0 down; ifconfig carp0 up

# Die Verbindung sollte immer noch weiterlaufen. Alternativ bzw. anschließend
# kann man auch die aktive Maschine einfach ausschalten. Auch hier sollte es zu
# keinen Verbindungsproblemen kommen.
 
der Link ist ja sowas von sicher ;)

localhost: klasse. Da ist man ganz im Sinne dieses Forums total sicher vor Zugriffen *ggg*
 
OP
nbkr

nbkr

Guru
Mist, den Link aus dem falschen Browserfenster kopiert. Naja, ist korrigiert.
 
Oben