Re: Was beachten bei IPv6 Firewall?



Peter Mairhofer <63832452@xxxxxxx>:
Hmm, schade :-( Hat wirklich noch keiner eine IPv6 Firewall gebaut?

Doch:
1:root@hal:~# ip6tables-save
# Generated by ip6tables-save v1.3.6 on Wed Aug 5 07:44:29 2009
*filter
:INPUT ACCEPT [901919:291128098]
:FORWARD ACCEPT [64701742:39075625325]
:OUTPUT ACCEPT [825429:70219491]
-A INPUT -s ::/0 -d ::/0 -m rt --rt-type 0 -j DROP
-A FORWARD -s ::/0 -d ::/0 -m rt --rt-type 0 -j DROP
-A OUTPUT -s ::/0 -d ::/0 -m rt --rt-type 0 -j DROP
COMMIT
# Completed on Wed Aug 5 07:44:29 2009

Da ich keine IPv6 Cliens oder Server laufen habe, denen ich nicht auch
volle Konnektivitaet geben moechte, existiert bei mir schlicht keine
Sicherheitstechnische Notwendigkeit fuer weitere Regeln.

Bei IPv6 funktionert mein Sicherheitskonzept der Absicherung aller
Anwendungen aufgrund der Ueberschaubarkeit der IPv6-faehigen Programme
noch.

ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP

ip6tables -N answers
ip6tables -A answers -p udp --dport 32768:60999 -j ACCEPT

Wieso diese Portrange? Was ist wenn $UNGEWOLLTES_PROGRAMM auf Port
50000/UDP lauscht?
Was ist wenn dein Client intern einen lower Source-UDP port verwendet?

ip6tables -A answers -p tcp ! --syn -j ACCEPT

Das deckt dann auch TCP ab. Was ist mit SCTP?

# Disable processing of any RH0 packet
# Which could allow a ping-pong of packets

auch andere Poese Tinge.

#ip6tables -A INPUT -m rt --rt-type 0 -j DROP
#ip6tables -A OUTPUT -m rt --rt-type 0 -j DROP
#ip6tables -A FORWARD -m rt --rt-type 0 -j DROP

# Allow anything on the local link
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT

Ist bei Drop-Default noetig, ja.

# Allow Link-Local addresses
ip6tables -A INPUT -s fe80::/10 -j ACCEPT
ip6tables -A OUTPUT -s fe80::/10 -j ACCEPT

# Allow multicast
ip6tables -A INPUT -s ff00::/8 -j ACCEPT
ip6tables -A OUTPUT -s ff00::/8 -j ACCEPT
ip6tables -A FORWARD -s ff00::/8 -j ACCEPT

Es fehlt dir noch fc00::/7 (ULA, RFC 4193), ff02::1:0:0/96 (Solicied
Multicast), Falls du auf Linux Dual-mashed-mixer-Stack stehst, auch
noch ::ffff:0.0/96 (kannste dir echt sparen wenn du net.ipv6.bindv6only
auf 1 stellst)

# Allow ICMP
ip6tables -A INPUT -p icmpv6 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 -j ACCEPT
ip6tables -A FORWARD -p icmpv6 -j ACCEPT

Somit funktionert das schonmal grundsaetzlich.

# Raus darf alles
ip6tables -A OUTPUT -j ACCEPT
# Antwortpakete dürfen von überall rein
ip6tables -A INPUT -j answers

s.o. Insbesondere DNS-lookups funktioneren damit nicht.

# Lokales Netz darf uneingeschraenkt rein
ip6tables -A INPUT -i ${LAN} -j ACCEPT

Ok, Interface-basiert. Mit VLAN-interfaces kann netfilter ja auch
umgehen, nicht so wie mit diesen schwachsinnigen
Pseudo-wir-verpacken-secondary-addressen-einfach-als-pseudo-interface
mit ethX:Y.

# Und SSH darf von überall rein
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT

Siehe $DISKUSSION_UEBER_SSH.

# LAN --> DMZ
ip6tables -A FORWARD -i ${LAN} -o ${DMZ} -j ACCEPT
ip6tables -A FORWARD -i ${DMZ} -o ${LAN} -j answers

S.o.

# DMZ --> LAN
# Alle: Interner DNS Server, syslog, apt-proxy
ip6tables -A FORWARD -i ${DMZ} -o ${LAN} -d $INT_SERV -p tcp --dport 53
-j ACCEPT
ip6tables -A FORWARD -i ${DMZ} -o ${LAN} -d $INT_SERV -p udp --dport 53
-j ACCEPT
ip6tables -A FORWARD -i ${DMZ} -o ${LAN} -d $INT_SERV -p tcp --dport
9999 -j ACCEPT
ip6tables -A FORWARD -i ${DMZ} -o ${LAN} -d $INT_SERV -p udp --dport 514
-j ACCEPT

Serviecs innen, DMZ-server als Clients. Unsauber aber oft nicht ohne
aufwand anders realisierbar.
Ich wuerde zumindest den DNS server und den Apt-Proxy in die DMZ stellen.

# DMZ --> Internet
ip6tables -A FORWARD -i ${DMZ} -o ${EXT} -j ACCEPT
ip6tables -A FORWARD -i ${EXT} -o ${DMZ} -j answers
# LAN --> Internet
ip6tables -A FORWARD -i ${LAN} -o ${EXT} -j ACCEPT
ip6tables -A FORWARD -i ${EXT} -o ${LAN} -j answers

Soweit kein Unterschied zwischen DMZ und LAN.

# public services (DMZ)
# ns: 1984, 53
1984?
ip6tables -A FORWARD -d $NS_SERV -p tcp --dport 1984 -j ACCEPT
ip6tables -A FORWARD -d $NS_SERV -p tcp --dport 53 -j ACCEPT
ip6tables -A FORWARD -d $NS_SERV -p udp --dport 53 -j ACCEPT

Brav. TCP gehoert zu DNS wie Kiemen zum Fisch.
(Ohne Kiemen hat man auch Fisch, nur faengt der schnell an zu Stinken)

Der DNS Server, steht der in der DMZ? oder wo? Du schraenkst hier nix
weiter per -i /-o ein. Diese Regeln gelten also fuer LAN-> Internet,
Internet -> LAN, Internet->DMZ etc.pp.

# mail: 1984, 25, 465, 993
SMTP, Submission und imaps?
ip6tables -A FORWARD -d $MX_SERV -p tcp --dport 1984 -j ACCEPT
ip6tables -A FORWARD -d $MX_SERV -p tcp --dport 25 -j ACCEPT
ip6tables -A FORWARD -d $MX_SERV -p tcp --dport 465 -j ACCEPT
ip6tables -A FORWARD -d v -p tcp --dport 993 -j ACCEPT

Das v sollte $IMAP_SERV heissen?

# web: 1984, 21, 80, 443
ip6tables -A FORWARD -d $WEB_SERV -p tcp --dport 1984 -j ACCEPT
ip6tables -A FORWARD -d $WEB_SERV -p tcp --dport 80 -j ACCEPT
ip6tables -A FORWARD -d $WEB_SERV -p tcp --dport 443 -j ACCEPT
ip6tables -A FORWARD -d $WEB_SERV -p tcp --dport 21 -j ACCEPT

WWW laeuft nicht nur ueber diese Ports. Und FTP blockierst du die
Datenkanele solande es noch kein FTP-Helpermodul fuer ipv6 gibt.
(IIRC, bitte sagen wenn es eines gibt)

ip6tables -A FORWARD -j LOG --log-prefix "FORWARD:REJ:"
ip6tables -A FORWARD -j DROP

Uh oh, Denial-Of-Service!

Logging sollte immer rate-limitiert werden.

Die letzte Regel würde ich sehr gerne REJECT machen, aber OpenWRT hat
das Modul leider nicht.

Distro-Schrott. Selber bauen und draufkopieren.

Die Regeln mit den RH0-Paketen funktionieren leider auch nicht. Wie
schlimm ist das bzw. für was sind die überhaupt?

Der Route-header ist bei IPv6 sowas wie source-routing unter IPv4.
Er laest sich zu allerlei Schabernack misbrauchen. Darum ist die
offizielle Empfehlung fuer IPv6 an Netzgrenzen Pakete mit diesem
Header einfach zu verwerfen.

Ist in diesem Anwendungsfall die explizite Behandlung der
link-local/multicast Pakete überhaupt noch notwendig?

Ja. Andernfalls kannst du IPV6 gleich ganz abschalten.

Ist es schlecht wenn ich generisch alle ICMP von überall passieren
lasse? Oder sollte man hier noch feiner granulieren und wenn ja, wie?

Zwingend notwendig sind bei ICMPv6 die Typen 1, 2, 3, 4 und 127.
Sinnvoll (sonst klemmt dich sixxs ab!) sind die Typen 128 und 129.
(Echo request und echo reply) Schon alleine fuers trouble shooting.
Alle anderen sind /derzeit/ nicht notwendig. Es gibt aber (Ausser
den "private experimentation") auch sonst keine definierten Typen, von
daher kann man sich das Filtern auch sparen.
(Anders als bei IPv4 gibt es keine potentiell sicherheitskritischen
Typen/Funktionen, das hat man bei IPv6 von vorneherein garnicht
vorgesehen).

Du kannst das also so lassen.

Passt die Behandlung der Antwortpakete für UDP nun oder gibts da bessere
Lösungen?

Das passt nur, wenn du auf /allen/ Rechnern in deinem LAN/DMZ
folgendes umsetzt:

1) Es darf kein "client-Programm" einen UDP Socket mit Portnummer
kleiner 32768 aufmachen.
2) Es darf kein unauthorisiertes "Server-Programm" einen UDP Socket
mit Portnummer groesser 32767 aufmachen.

Wie du das umsetzt waere spannend. Ich wuerde sagen: Das passt so nicht
ganz.
(Bei UDP kannst du technisch gesehen nicht zwischen Client und Server
differnzieren).

HTH,
Juergen
--
Juergen P. Meier - "This World is about to be Destroyed!"
end
If you think technology can solve your problems you don't understand
technology and you don't understand your problems. (Bruce Schneier)
.



Relevant Pages

  • Re: IPv6 Praxisgrundlagen
    ... Die Telekom plant das oben beschriebene noch in diesem Jahr umzusetzen. ... D.h. du nimmst bereits fuer jedes einzelne Netzsegment ein /64 (groesser ... Die "First Allocation" fuer Ripe-Mitglieder liegt bei IPv6 ... Das verteilen der IPv6-Adressen kann man mittels "stateless autoconfiguration" ...
    (de.comp.os.unix.networking.misc)
  • Re: Multiple domain name support
    ... on three separate IP addresses on the current mail server. ... It's not trivial -if at all possible- to force sendmail to use ... being forwarded to an IPv4 only host that came in via IPv6. ...
    (comp.mail.sendmail)
  • Re: suddenly lots of named errors(?) in the log
    ... your name server asked some remote name server for an ... the remote name servers returned ... a result code that essentially says "I don't do IPv6". ... FORMERR 1 The name server was unable to interpret the request ...
    (uk.comp.os.linux)
  • Re: DNS: IP --> Alle Hostnamen
    ... Und IPv6 ist fuer ... Interstellare Netze grundsaetzlich nicht geeignet. ... Jahren auch mit ipv6 nicht besser aus als jetzt mit ipv4. ... jedem Proton und jedem Neutron) in 5 kg Kohle eine eigene IP-Adresse ...
    (de.comp.os.unix.networking.misc)
  • Re: sendmail problems
    ... I need help to resolve a problem with my sendmail server. ... I use this server to manage mailman lists, ... or are you running IPv6? ...
    (freebsd-questions)