[Fli4l_dev] Test fli4l 3.10 (r35608) Portforwarding

Christoph Schulz fli4l at kristov.de
So Dez 14 19:13:31 CET 2014


Hallo!

Stefan Puschek schrieb:

> ich möchte für meinen Asterisk der auf der internen IP 192.168.6.7 läuft
> das Portforwarding einrichten. Dafür habe ich nur 4 zusätzliche Regeln
> eingerichtet:
> 
> PF_PREROUTING_N='4'             # number of PREROUTING rules
> PF_PREROUTING_1='prot:udp dynamic:10000-10100 DNAT:192.168.6.7'
> PF_PREROUTING_2='prot:tcp dynamic:10000-10100 DNAT:192.168.6.7'

Das kannst du, da die Portbereiche und die Zieladresse identisch sind, 
vereinfachen zu:

PF_PREROUTING_1='dynamic:10000-10100 DNAT:192.168.6.7'

> PF_PREROUTING_3='prot:udp dynamic:5060 DNAT:192.168.6.7'
> PF_PREROUTING_4='prot:tcp dynamic:5060 DNAT:192.168.6.7'

Dito:

PF_PREROUTING_2='dynamic:5060 DNAT:192.168.6.7'

> Mir ist nicht ganz klar, was
> der Router defaultmässig mit Paketen macht, die am externen Interface
> ankommen:

Generelle Regel: Das Routing eines Pakets ist nur abhängig von der 
_Zieladresse_ (es gibt ein so genanntes "Policy Based Routing", bei dem noch 
andere Faktoren eine Rolle spielen können, aber das ist auf dem fli4l 
standardmäßig nicht aktiviert):

a) Gehört die Zieladresse zum fli4l-Router, geht's mit der INPUT-Kette der 
Firewall weiter, es wird _nicht_ geroutet (wohin auch, das Ziel ist ja 
erreicht worden).

b) Gehört die Zieladresse nicht zum fli4l-Router, soll geroutet werden. Um 
zu prüfen, ob es erlaubt ist, geht's mit der FORWARD-Kette der Firewall 
weiter.

Wenn das Paket also für den Router gemeint ist, dann hängt es von den 
Einstellungen der INPUT-Kette ab: Gibt es keine erlaubende oder verbietende 
Regel für das Paket, dann wird das getan, was in PF_INPUT_POLICY steht. Wenn 
das Paket _nicht_ für den Router gemeint ist, dann hängt es von den 
Einstellungen der FORWARD-Kette ab (also von den Regeln in PF_FORWARD_% bzw. 
der PF_FORWARD_POLICY).

Die PREROUTING-Kette erlaubt es, noch _vor_ der Entscheidung, ob geroutet 
wird oder nicht, die Zieladresse eines Pakets (und bei Bedarf auch den 
Zielport) entsprechend abzuändern (deshalb auch der Name PREROUTING -- "vor 
dem Routing"). So kann ein Paket, das eigentlich zum Router sollte (und über 
die INPUT-Kette gehen würde), doch noch an einen anderen Rechner in ein Netz 
hinter dem Router geschickt werden (und die FORWARD-Kette durchlaufen).

> Nimmt er die Pakete automatisch erstmal an und leitet sie dann -
> wenn Portforwardings eingerichtet wurden - nach innen weiter,
> oder muss
> ich ihm auch noch sagen, dass er diese Pakete nicht droppen oder rejecten
> soll?

In der 3.10 führt eine PREROUTING-Regel _automatisch_ zu einer FORWARD-
Regel, welche die Weiterleitung erlaubt. Somit muss die Weiterleitung nicht 
explizit in der FORWARD-Kette erlaubt werden. (Das wird in 4.0 anders 
geregelt werden, aber das ist ein anderes Thema.) Also musst du nur die 
obigen PREROUTING-Regeln verwenden, damit sollte alles wie gewünscht 
funktionieren.


Viele Grüße,
-- 
Christoph Schulz
[fli4l-Team]



Mehr Informationen über die Mailingliste Fli4l_dev