Konfiguration NAT und Firewall

NAT benötigt unbedingt den NAT-Daemon. Dieser Dienst nimmt von der Firewall "Pakete" entgegen, übersetzt die Adressen und wirft das Paket wieder "zurück" ... Bildlich gesehen :-)

Der NAT Daemon wird einfach in der /etc/rc.conf konfiguriert und dann gestartet. Der Dienst selbst macht ja nicht viel und wird quasi nur vom IPFW aus gesteuert

natd_enable=YES
natd_interface=em1
natd_flags="-dynamic -m"

Danach mittels /etc/rc.d/natd start den Dienst starten. Damit das aber auch klappt, müssen wir den Host als Router kennzeichnen. Das geht wieder in der /etc/rc.conf mittels

gateway_enable=YES

Sollte das noch nicht drinstehen, bitte Rebooten, weil sonst kann man es nicht gleich testen

Als nächstes schauen wir uns die Firewall an. Dazu erstelle ich immer eine /etc/fwruleset wo ich die Regeln einpflege. Aber zuerst aktivieren wir es in der /etc/rc.conf und zwar wie folgt

firewall_enable=YES
firewall_type=/etc/fwruleset
firewall_logging=YES

Danach erstellen wir eine /etc/fwruleset und definieren die Regeln :

add 30101 allow ip from any to any via lo0
add 30201 allow ip from any to any via em0
add 30301 allow tcp from me to any via em1 keep-state
add 30302 allow udp from me to any via em1 keep-state
add 30303 allow icmp from me to any via em1 keep-state

add 30401 divert natd ip from any to any in via em1

add 30501 skipto 40001 icmp from 10.0.0.0/24 to any keep-state
add 30502 skipto 40001 tcp from 10.0.0.0/24 to any keep-state
add 30503 skipto 40001 udp from 10.0.0.0/24 to any keep-state

add 30999 deny log all from any to any

add 40001 divert natd ip from any to any out via em1
add 40002 allow ip from any to any

Was passiert da ?

Die Regel 30101 erlaubt die Kommunikation über das Loopback. Die Regel 30201 erlaubt jede Kommunikation auf dem internen Interface, und die Regeln 30301, 30302 und 30303 erlaubt die uneingeschränkte Kommunikation von der Firewall selbst ins Internet Netzwerk

Die Regel 30401 leitet alle ankommenden Pakete aus dem Internet an den NAT Daemon weiter. Der NAT schaut dann in seine Tabellen und ersetzt möglicherweise die Destination Adresse, er Translatet die dann

Die Regeln 30501, 30502, 30503 legen fest, welcher der internen Hosts mit dem Internet sprechen dürfen und wie. Wenn einer dieser Regeln greift spring der IPFW zu Regel 40001. Dort können dann diverse Filter eingepflegt werden. Also zum Beispiel der Host 10.0.0.42 darf nur mit TCP Port 80 raus. Oder so. In meinen Regeln darf jeder alles

Alles was nicht mehr passt wird gnadenlos in Regel 30999 gekillt.

Die Regel 40001, die von einem erlaubten Paket aufgerufen wird leitet dieses jene welches weiter zum NAT. Das NAT ersetzt die Quell IP mit der IP auf em1 und speichert diese Verbindung in einer Liste. Nach dem Translate setzt IPFW weiter fort mit Regel 40002 die alles erlaubt. Das Paket geht also genattet auf reisen.

Es wird also quasi zweimal genattet. In Regel 40001 wird ein Outgoing-NAT gemacht, in Regel 30401 ein Incoming-NAT

Um das ganze zu testen kann die Firewall manuell reloaded werden mittels

echo y | ipfw flush; ipfw /etc/fwruleset

Achtung der Befehl ist nur für das Testen !!!!! NIEMALZ dieses Ding in Produktion verwenden ... es wirft nähhhhhhhmlich ein paar recht wichtige Regeln in Bezug auf IPv6 weg ...

Später sollte man die Regel in die Datei einfügen, und danach aus der gespeicherten Datei sich die Zeile per Copy And Paste in die Kommandozeile holen und dort mit ipfw ausführen. Dann kann man sicher sein das die Zeile beim Booten auch kein Ärger macht

Ok Was jetzt noch fehlt ist die Sache Boot fest zu machen. Leider wird der NAT Dienst erst nach der Firewall gestartet (FreeBSD 8.2). Das bedeutet das zum Zeitpunkt der Firewall das NAT noch nicht aktiv ist und das Script volle Pulle gegen die Wand ballert ... Mit Getöse und so ...

Um das Problem zu umgehen laden wir beim Booten gleich das Divert Modul und dann ist alles toll. In der /boot/loader.conf trägt man also noch schnell die zwei Zeilen ein

ipfw_load="YES"
ipdivert_load="YES"

Danach rebootet man mal und schaut ob er alles läd so wie man will. Technisch gesehen sollte unsere Firewall jetzt eigentlich schon Natten können und die Verbindungen müssten gehen. Probiert mal ... es geht schon ^^

Und wer noch mehr aus seiner Firewall machen will liest einfach weiter ... wenn er will ... aber nur wenn er will ... ansonsten nicht ... keiner wird gezwungen ... ehrlisch net ... :-)

 

Veröffentlichen Sie ihre Kommentare ...

      Copyright 1997 - 2012 by Wolfgang Hurst