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.
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.
Je kan ze bijna 1op1 overnemen. Je zal waarschijnlijk zelf snel ontdekken dat ICMP anders genoemd word.
Ohja, en er is natuurlijk geen NAT ;-)
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).
Linkedin: linkedin.com/in/randytenhave
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.
Bedankt voor jullie reacties. Heb net de v6 firewall getuned.
Jullie doelen dan op de volgende opties?:
Code:#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.
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).
Leuke doordenker :Code:# 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
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.
Maar, als ik het goed begrijp, bied CSF geen IPv6 ondersteuning?
Dennis de Houx - All In One ~ Official ISPsystem partner
Lees hier de webhostingtalk.nl forum regels en voorwaarden!
Linkedin: linkedin.com/in/randytenhave
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!