PDA

Bekijk Volledige Versie : IPTables v6



Nielsvk
28/03/11, 09:17
Beste,

Ik vroeg me eigen af hoe het zat met de firewall rules van iptables6. Kan je de regels van v4 regelrecht in 6 pasten?

Of zitten er nog belangrijke verschillen in?

BVB,

Niels.

Japje
28/03/11, 09:54
Je kan ze bijna 1op1 overnemen. Je zal waarschijnlijk zelf snel ontdekken dat ICMP anders genoemd word.

Ohja, en er is natuurlijk geen NAT ;-)

pierce
28/03/11, 10:01
Of zitten er nog belangrijke verschillen in?



Nou ja, ik zou je ipv4 adressen vervangen voor ipv6 ;)

visser
28/03/11, 13:49
Beste,

Ik vroeg me eigen af hoe het zat met de firewall rules van iptables6. Kan je de regels van v4 regelrecht in 6 pasten?

Of zitten er nog belangrijke verschillen in?

BVB,

Niels.

Tsja, wat is belangrijk...
De adressen zijn anders ;-)

Hoe "preciezer" je firewalls rules zijn, des te meer je ze moet herschrijven voor IPv6.
Waar je je heel erg van bewust moet zijn :

arp op IPv4 is een L2.5 protocol. Het is geen IP, heeft een eigen ethertype, en wordt zelden of nooit meegenomen in firewall rules.
Die functie (mapping van mac adres naar L3 adres) is bij IPv6 deel van het protocol geworden via ICMPv6.
Nu is rücksichtlos icmp blokkeren op IPv4 al een dom idee (pmtud...), maar op V6 merk je meteen dat je wat mist : geen connectivity.

Verder heb je altijd twee adressen : een link-local adres voor (duh) link-local verkeer (waarmee ook die neighbour discovery via icmp gedaan wordt, naast, eventueel adres autoconfig) en een publiek IPv6 adres.

Hoewel je op dat link-local adres dus alleen maar bereikbaar bent voor hosts in hetzelfde segment, moet je er wel aan denken wat je voor andere hosts in dat segment bereikbaar wilt hebben (en wat niet).

Kortom, zorg dat je weet wat je wilt bereiken met je firewall rules, dat je de verschillen tussen IPv4 en IPv6 snapt, en dan kun je vrij makkelijk V6 firewall rules met equivalente functionaliteit schrijven.

(oja nog een verschilletje : ULOG is nog geen target in ip6tables, alleen LOG).

Randy
28/03/11, 15:22
Hier (http://weblog.aklmedia.nl/2010/03/help-csf-zegt-ipv6-is-fout/) heb je een goed voorbeeld met basis settings.

visser
28/03/11, 19:05
Hier (http://weblog.aklmedia.nl/2010/03/help-csf-zegt-ipv6-is-fout/) heb je een goed voorbeeld met basis settings.

Dat voorbeeld mist alles van ICMPv6, en dat gaat mis.
Mogelijk heeft het eventjes bij jou gewerkt , wanneer neighbour mappings (ipv6/mac) nog in de cache zaten en je daarna pas de rules toevoegde.

Zet het maar op een host, doe "ip -6 neigh flush all" op host en gateway, en kijk of je nog steeds op poort 22 kunt komen.
Minimaal moet je icmpv6 type 135/136 (neighbour advertisement/neighbour sollication) toevoegen, maar er zijn nog een aantal meer nuttige icmp functies.

Nielsvk
28/03/11, 22:30
Bedankt voor jullie reacties. Heb net de v6 firewall getuned. :)

Jullie doelen dan op de volgende opties?:



#IPV6 ICMP6

/sbin/ip6tables -I INPUT -p icmpv6 -j ACCEPT
/sbin/ip6tables -I OUTPUT -p icmpv6 -j ACCEPT
/sbin/ip6tables -I FORWARD -p icmpv6 -j ACCEPT

visser
28/03/11, 23:08
Bedankt voor jullie reacties. Heb net de v6 firewall getuned. :)

Jullie doelen dan op de volgende opties?:



#IPV6 ICMP6

/sbin/ip6tables -I INPUT -p icmpv6 -j ACCEPT
/sbin/ip6tables -I OUTPUT -p icmpv6 -j ACCEPT
/sbin/ip6tables -I FORWARD -p icmpv6 -j ACCEPT


Dat zal werken ja. Het kan wel iets strakker als je wilt, de neighbour en router discovery types gaan alleen over link-local / en link-local multicast.
En je kunt twijfelen of je een router redirect moet willen / verwachten bijvoorbeeld.

Je kunt ping rate-limiten, of als je alleen zelf wilt pingen, dat stateful matchen.

Het is wel nuttig en leerzaam om te beginnen met alles dicht, dan kijken met wireshark wat er gebeurt als je verkeer initieert of binnen krijgt, en wat je daarvoor moet open zetten.
(met tussendoor de L3 -> L2 cache flushen met "ip -6 neigh flush all" (= clear arp in IPv4).

En dan allerlei icmp types en subtypes expliciet permitten, en evt nog een catch-all permit icmpv6 met een log statement erbij.

Ik ken/heb er op moment nog geen handige templates van, ip6tables met uitgebreid commentaar wat er voor welk soort gebruik minimaal noodzakelijk is aan icmp verkeer.

Nielsvk
28/03/11, 23:10
Oke, thanks voor de tip.

Is leuke stof om me eens in te verdiepen. :)

visser
29/03/11, 01:14
Oke, thanks voor de tip.

Is leuke stof om me eens in te verdiepen. :)

Must-do, de komende tijd, als het zo goed gaat met IPv6 als we hopen (en nodig is) :-)

Ik heb een vrij uitgebreid setje (test) rules, om een tijd te laten lopen en te zien welke counters oplopen (en wat er in de logs komt).



# Flushing all rules
SERVER_IP=2001:x.y.z.::1
ip6tables -F
ip6tables -X
# Setting default filter policy
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP
# Allow unlimited traffic on loopback
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
# Allow incoming ssh only
ip6tables -A INPUT -p tcp -s 0/0 -d $SERVER_IP --sport 513:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -p tcp -s $SERVER_IP -d 0/0 --sport 22 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT

#ICMP errors and unreachables. Split out into subtypes.

# 4x subtypes of destination unreachable (type 1)
ip6tables -A INPUT -p icmpv6 --icmpv6-type no-route -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type communication-prohibited -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type address-unreachable -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type port-unreachable -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
#Type 2, packet too big
ip6tables -A INPUT -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
# 2x subtype of time-exceeded (type 3)
ip6tables -A INPUT -p icmpv6 --icmpv6-type ttl-zero-during-transit -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type ttl-zero-during-reassembly -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
# 3x subtype of parameter-problem (type 4)
ip6tables -A INPUT -p icmpv6 --icmpv6-type bad-header -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type unknown-header-type -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type unknown-option -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
#Multicast listener query
ip6tables -A INPUT -p icmpv6 --icmpv6-type 130 -j ACCEPT
#Multicast listener report
ip6tables -A INPUT -p icmpv6 --icmpv6-type 131 -j ACCEPT
#Multicast listener done
ip6tables -A INPUT -p icmpv6 --icmpv6-type 132 -j ACCEPT
#MLDv2 Multicast Listener Report RFC3810
ip6tables -A INPUT -p icmpv6 --icmpv6-type 143 -j ACCEPT


# 4x subtypes of destination unreachable (type 1)
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type no-route -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type communication-prohibited -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type address-unreachable -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type port-unreachable -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
# Type 2, packet to big
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
# 2x subtype of time-exceeded (type 3)
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type ttl-zero-during-transit -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type ttl-zero-during-reassembly -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
# 3x subtype of parameter-problem (type 4)
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type bad-header -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type unknown-header-type -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type unknown-option -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
#Multicast listener query
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type 130 -j ACCEPT
#Multicast listener report
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type 131 -j ACCEPT
#Multicast listener done
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type 132 -j ACCEPT
#MLDv2 Multicast Listener Report RFC3810
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type 143 -j ACCEPT


# More and less necessary icmpv6 traffic
# type 128 : echo request
# type 129 : echo reply
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type echo-request -m state --state NEW,ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type echo-reply -m state --state ESTABLISHED -j ACCEPT
# type 133 : router solicitation
# type 134 : router advertisement.
# Not needed in case of a static next hop address.
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
# 135 neighbour solicitation
# 136 neighbour advertisement
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
#Seen : Type 143: MLDv2 Multicast Listener Report. , RFC3810.
#ip6tables -A OUTPUT -p icmpv6 --icmpv6-type 143 -j ACCEPT
# DHCP : only checked on local segment. caveat in case of dhcp relay (reply).
# DHCP v6 : anycast to ff02::1:2 udp port 547
# Reply from link-local server adres to link-local client .
ip6tables -A OUTPUT -p udp -d ff02::1:2 --dport 547 -j ACCEPT
ip6tables -A INPUT -p udp -s fe80::/10 --sport 547 -j ACCEPT

# ping
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-reply -m state --state ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -m state --state NEW -j ACCEPT
# type 133 router solicitation
# type 134 router advertisement
# type 135 neighbour solicitation
# type 136 neighbour advertisement
#
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT

# make sure nothing comes or goes out of this box
ip6tables -A INPUT -j LOG
ip6tables -A INPUT -j DROP
ip6tables -A OUTPUT -j LOG
ip6tables -A OUTPUT -j DROP


Leuke doordenker :
Als je een rule voor (inkomende) DHCP requests hebt staan (dest ff02::1:2 udp 547), en je draait geen dhcpv6 daemon, krijg je geen hits op die rule.
Ook al worden die frames wel aangeboden.
Start je de dhcpv6 daemon, krijg je de hits wel.

Kleine hint: Wat is de klassieke uitleg van de vuistregel voor een maximum van een paar honderd (IPv4,IPX,Netbeui) hosts in hetzelfde vlan.

Nielsvk
29/03/11, 21:37
Maar, als ik het goed begrijp, bied CSF geen IPv6 ondersteuning?

The-BosS
29/03/11, 23:24
Maar, als ik het goed begrijp, bied CSF geen IPv6 ondersteuning?

Jawel, maar je kernel moet het ook supporten en dat is nog het grootste probleem bij sommige.

Randy
30/03/11, 11:06
Maar, als ik het goed begrijp, bied CSF geen IPv6 ondersteuning?

Jawel, tegenwoordig is dit netjes meegenomen. Dat was tot een half jaar geleden niet.

Nielsvk
30/03/11, 21:32
Oke, het het inderdaad net ook gezien in de feature lijst. Ik ga er eens mee spelen op een test VM.

Danku voor de reacties!