Problem mit IPFW Regeln

Rosendoktor

Well-Known Member
Hallo zusammen,

ich hab auf einem Server ein Problem mit den Firewall Regeln. Zur Konfiguration, das Interface re0 ist das lokale LAN, die Internetverbindung wird über einen Tunnel hergestellt und das virtuelle Interace dazu ist ng0, welches auch die öffentlichen ipv4/ipv6 Adressen hat.

Im Prinzip tun die Regeln was sie sollen, mit einer Ausnahme: Es ist kein lokaler ipv6 Zugriff auf die laufenden Serverdienste möglich. Beispielsweise funktioniert auf der lokalen Maschine ein "telnet -4 polaris 25", ein "telnet -6 polaris 25" jedoch wird geblockt und läuft in einen Timeout. Ich dachte das wäre mit den ersten beiden Regeln "allow all from any to any" erschlagen, ist es aber offenbar nicht bzw. nur für ipv4.

Da ich noch nie was mit IPFW gemacht haben und dieses Skript unten aus mehreren Beispielskripten zusammengebaut habe, bin ich jetzt ratlos woran das liegt. Ausserdem verwirrt, wann ip6 nun explizit angegeben werden muss und wann nicht. Falls jemandem weitere Dummheiten an dem Skript aufallen, immer her damit... :D

Danke!

Robert

Code:
#!/bin/sh

# Flush out the list before we begin.
ipfw -q -f flush

# Internal, no restrictions on lan interface
ipfw -q add 0005 allow all from any to any via re0

# Internal, no restrictions on loopback interface
ipfw -q add 0010 allow all from any to any via lo0

# General, no restrictions on icmp(6)
ipfw -q add 0012 allow icmp from any to any
ipfw -q add 0012 allow icmp6 from any to any

# Incoming, reassemble 
ipfw -q add 0099 reass ip from any to any in 

# Allow packets for which a state has been built.
ipfw -q add 0101 check-state

# Outgoing, allow all tcp+udp
ipfw -q add 0200 allow tcp from any to any out via ng0 keep-state
ipfw -q add 0200 allow udp from any to any out via ng0 keep-state

# Incoming, allow dns
ipfw -q add 0408 allow udp from any to 188.246.44.189 53 in via ng0 #setup limit src-addr 2
ipfw -q add 0408 allow tcp from any to 188.246.44.189 53 in via ng0 #setup limit src-addr 2
ipfw -q add 0408 allow udp from any to 2a02:a00:eb30:60::53 53 in via ng0 #setup limit src-addr 2
ipfw -q add 0408 allow tcp from any to 2a02:a00:eb30:60::53 53 in via ng0 #setup limit src-addr 2

# Incoming, allow ssh
ipfw -q add 0410 allow tcp from any to 188.246.44.189 22 in via ng0 setup limit src-addr 2
ipfw -q add 0410 allow tcp from any to 2a02:a00:eb30:60::2 22 in via ng0 setup limit src-addr 2

# Incoming, allow http(s)
ipfw -q add 0412 allow tcp from any to 188.246.44.189 80 in via ng0 #setup limit src-addr 2
ipfw -q add 0412 allow tcp from any to 2a02:a00:eb30:60::2 80 in via ng0 #setup limit src-addr 2
ipfw -q add 0412 allow tcp from any to 188.246.44.189 443 in via ng0 #setup limit src-addr 2
ipfw -q add 0412 allow tcp from any to 2a02:a00:eb30:60::2 443 in via ng0 #setup limit src-addr 2
ipfw -q add 0412 allow tcp from any to 188.246.44.189 8443 in via ng0 #setup limit src-addr 2
ipfw -q add 0412 allow tcp from any to 2a02:a00:eb30:60::2 8443 in via ng0 #setup limit src-addr 2

# Incoming, allow smtp
ipfw -q add 0414 allow tcp from any to 188.246.44.189 25 in via ng0 #setup limit src-addr 2
ipfw -q add 0414 allow tcp from any to 2a02:a00:eb30:60::2 25 in via ng0 #setup limit src-addr 2
ipfw -q add 0414 allow tcp from any to 188.246.44.189 587 in via ng0 #setup limit src-addr 2
ipfw -q add 0414 allow tcp from any to 2a02:a00:eb30:60::2 587 in via ng0 #setup limit src-addr 2

# Incoming, allow imap
ipfw -q add 0414 allow tcp from any to 188.246.44.189 143 in via ng0 #setup limit src-addr 2
ipfw -q add 0414 allow tcp from any to 2a02:a00:eb30:60::2 143 in via ng0 #setup limit src-addr 2

# Incoming, deny and log all via ng0
ipfw -q add 0499 deny log all from any to any in via ng0

# All, deny and log all not processed yet
ipfw -q add 0999 deny log all from any to any
 
füg mal testweise die Regel explizit für ip6 ein, z.B:

Code:
allow ip6 from any to any ...
Ja, das hilft, aber Sinn der Sache ist das ja nicht... Noch zur Info, in den Maillogs sieht man, dass telnet in beiden Fällen (v4 und v6) die externe Adresse als Quelladresse und Zieladresse verwendet.

Hm, noch ein weiteres Problem mit dem Regelsatz ist, dass bei einem "service ipfw restart" eine ssh Verbindung über das ng0 Interface nach ca. 5 Sekunden tot ist (mit ipv4 und ipv6), neu einloggen funktioniert aber dann. Sollte nach meinem Verständnis auch nicht sein, da ausgehend alles erlaubt ist und eingehend Port 22 auch.

Ich finde den Wurm nicht, der da drin ist...
 
Keine eine Idee was da bei ipv6 falsch läuft? Und keiner der mein Skript in der Luft zerreist? :ugly: Hm, ich probier mal weiter...
 
Ja, das hilft, aber Sinn der Sache ist das ja nicht... Noch zur Info, in den Maillogs sieht man, dass telnet in beiden Fällen (v4 und v6) die externe Adresse als Quelladresse und Zieladresse verwendet.

sicher das das nicht die link local addresse ist ? die fangen i.d.r mit fe80: an.

Holger
 
sicher das das nicht die link local addresse ist ? die fangen i.d.r mit fe80: an.

Holger
Ja. Wenn ich
Code:
root@polaris:~# telnet -4 polaris 25
Trying 188.246.44.189...
Connected to polaris.meinedomain.de.
Escape character is '^]'.
220 polaris.meinedomain.de ESMTP Postfix (FreeBSD)
quit
221 2.0.0 Bye
Connection closed by foreign host.
root@polaris:~# telnet -6 polaris 25
Trying 2a02:a00:eb30:60::2...
Connected to polaris.meinedomain.de.
Escape character is '^]'.
220 polaris.meinedomain.de ESMTP Postfix (FreeBSD)
quit
221 2.0.0 Bye
Connection closed by foreign host.
mache, dann steht in den Mailserver Logs
Code:
Oct 24 15:54:56 polaris postfix/smtpd[27657]: connect from polaris.meinedomain.de[188.246.44.189]
Oct 24 15:55:03 polaris postfix/smtpd[27657]: disconnect from polaris.meinedomain.de[188.246.44.189] quit=1 commands=1
Oct 24 15:55:07 polaris postfix/smtpd[27657]: connect from polaris.meinedomain.de[2a02:a00:eb30:60::2]
Oct 24 15:55:09 polaris postfix/smtpd[27657]: disconnect from polaris.meinedomain.de[2a02:a00:eb30:60::2] quit=1 commands=1
Also die externen Adressen als Quelle und Ziel.
Nun, mit solchen IPFW Regeln (ipv6 würde reichen, ipv4 funktioniert ja wie es soll)
Code:
ipfw -q add 0001 allow ip from 88.246.44.189 to 88.246.44.189
ipfw -q add 0001 allow ip6 from 2a02:a00:eb30:60::2 to 2a02:a00:eb30:60::2
geht es dann auch.

Nur verstehe ich nicht, warum ipv6 nicht ohne diese Regel geht, halt so wie ipv4 auch. Und da ich gerne weiß was ich tue, gerade bei sicherheitskritischen Dingen, wurmt micht das schon gehörig...
 
Zurück
Oben