[fli4l] PF_INPUT - ein paa?==?utf-8?Q?r Verständnisfragen
K. Dreier
usenetforum at gmx.net
Sa Jan 24 15:42:21 CET 2015
Hallo,
sicherheitstechnisch möchte ich in etwas "höhere Spären" vorstossen.
:) Natürlich hab ich mir die Doku durchgelesen, aber dort werden
gewisse Dinge vorausgesetzt à la "if:any:any" usw. Vielleicht kann mir
hier jemand etwas helfen?
Konkret geht es mir im Moment darum, fi4l so wenig löchrig wie möglich
zu machen. Aber ich brauche u.a. SSH-Zugang (später auch wieder
OpenVPN) von extern und dort schwebt mir eigentlich vor, diesen Zugang
nur von 1 (externen) IP zu erlauben, da ich via Portforwarding von einem
Server mit fixer IP "drauf" käme.
Da ich dabei bin, mehrere IP_NET_x aufzubauen, will ich nicht einfach
"22 ACCEPT" nehmen, da ich nicht will, daß z.B. mein späteres IP_NET_3
ebenfalls Zugang auf den SSH-Dienst vom fli4l hat.
Aktuell schaut es deswegen so aus:
PF_INPUT_N='3'
PF_INPUT_1='IP_NET_1 ACCEPT' # meine interne NIC
PF_INPUT_2='tmpl:samba DROP NOLOG'
PF_INPUT_3='if:IP_NET_2_DEV:any prot:tcp 22 IP_NET_1_IPADDR ACCEPT'
--> Regel 3 funktioniert und erlaubt mir den Zugang von extern (ja, ich
teste das nicht von meinem LAN aus ;-) ) auf den SSH-Dienst (nur) von
fli4l (_2_DEV ist meine WAN-NIC). Soweit so gut.
Ich verstehe "if:x:y" anhand der Doku so, daß
a) wenn (=if) etwas
b) an x ankommt und
c) an y weitergeht
dann...
Mit was genau kann man denn nun y eigentlich ersetzen? IP_NET_3 z.B.
geht nicht, ebensowenig eine bestimmte IP.
Und weiter nun eben die Frage, wie ich den Zugang zum Dienst nur für
eine bestimmte (externe) IP erlauben kann? Oder muss ich hier via
Prerouting gehen?! Aber der SSH-Dienst sitzt ja auf dem fli4l. Ich
checks nicht...
Dann:
Die Tatsache, daß ich auch von meinem IP_NET_1 drauf komme (gut so,
natürlich), sollte an 'IP_NET_1 ACCEPT' liegen, richtig?
Inwiefern spielt dann hierzu das via PF_INPUT_ACCEPT_DEF='yes' aktive
'if:lo:any ACCEPT' (noch) eine Rolle? Ist das nicht dann redundant (wenn
man nur ein Netz hat)?
Anders gefragt: gäbe es jetzt noch ein IP_NET_3, wie würde ich dann
verhindern, daß die dort drin liegenden clients auch Zugang zu Port 22
auf fli4l hätten? Ich vermute, daß ich das via explizitem Verbot
machen müsste, oder? Aber: da ich mein IP_NET_3 eigentlich eher
grundsätzlich (mit Ausnahmen) auch von innen nach aussen "dicht" machen
will, insbesondere eben verhindern möchte, dass _3 auf _1 Zugriff hat,
müsste ich dann aber verdammt viel verbieten - sinnvoller wäre es, den
Spieß umzudrehen.
Evtl ungefähr so?
PF_INPUT_ACCEPT_DEF='no'
PF_USR_CHAIN_N='1'
PF_USR_CHAIN_1_NAME='usr-in-icmp'
PF_USR_CHAIN_1_RULE_N='2'
PF_USR_CHAIN_1_RULE_1='prot:icmp:echo-request length:0-150
limit:1/second:5 ACCEPT'
PF_USR_CHAIN_1_RULE_2='state:RELATED ACCEPT'
PF_INPUT_N='4'
PF_INPUT_1='prot:icmp usr-in-icmp'
PF_INPUT_2='state:ESTABLISHED,RELATED ACCEPT'
--> PF_INPUT_3='if:IP_NET_1_DEV:any ACCEPT'
PF_INPUT_4='state:NEW 127.0.0.1 DROP BIDIRECTIONAL'
und dann mit diversen weiteren Regeln den Zugang für NET_3 zu z.B. DNS
explizit erlauben (und eben _kein_ PF_INPUT_x='IP_NET_3 ACCEPT, aber
sehr wohl ein _1 ACCEPT - oder?). Wie könnte so eine Regel denn
aussehen? So: PF_INPUT_x='if:IP_NET_3_DEV:any tmpl:dns IP_NET_3_IPADDR
ACCEPT'?
Danke vorab für einige Tips,
Gruß
Klaus
Mehr Informationen über die Mailingliste Fli4L