ipv6, pare-feu, perte de connexion

Le
Yannick Palanque
Bonjour tout le monde,

Voilà, j'ai une machine qui obtient une adresse IPv4 et un bloc /48
IPv6. « Tout marche bien » sauf que je perds (je ne saurais expliquer
ce qui se passe dans le détail) ma connexion IPv6 lorsque je bloque le
trafic IPv6 entrant avec Netfilter, ce qui ne se produit pas en IPv4.
Quelques précisions :

- Le système d'exploitation est une Gentoo Linux plutôt récente (noyau
2.6.26 par ailleurs).
- Mon fichier de configuration en ce qui concerne le
réseau, /etc/conf.d/net, ressemble à :
modules=( "iproute2" )
config_eth0=( "42.41.233.142/24" "2001:42:1871::2/48" )
routes_eth0=( "default gw 42.41.233.1" )


0/ $ ip address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
qlen 100 link/ether 00:30:48:80:42:62 brd ff:ff:ff:ff:ff:ff
inet 42.41.233.142/24 brd 42.41.233.255 scope global eth0
inet6 2001:42:1871::2/48 scope global
valid_lft forever preferred_lft forever
inet6 fe80::230:48ff:fe83:4362/64 scope link
valid_lft forever preferred_lft forever



1/ Les règles ip6tables sont vides :
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


2/ Je peux joindre n'importe quelle machine en IPv6 :
PING geeknode.org(2001:758:1664::1667) 56 data bytes
64 bytes from 2001:758:1664::1667: icmp_seq=1 ttlc time=0.897 ms
64 bytes from 2001:758:1664::1667: icmp_seq=2 ttlc time=0.781 ms
64 bytes from 2001:758:1664::1667: icmp_seq=3 ttlc time=0.447 ms


3/ Si je bloque le trafic entrant en utilisant la règle
ip6tables -P INPUT DROP
accompagnée de
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
je perds aussitôt la connexion IPv6 (ICMP, IRC, etc.). Je ne vois rien
de particulier dans les journaux.


Ce comportement ne se produit pas avec l'IPv4, je peux bloquer les
paquets entrants sans perdre aucune connexion sortante. Il se trouve
que je ne comprends pas encore tout à l'IPv6. :-P
Le fait que tout un bloc m'est « routé » (ce que je n'ai pas
entièrement compris) m'oblige-t-il à prendre des dispositions
particulières ? J'avais ajouté une règle pour autoriser le trafic
venant de 2001:42:1871::1 (la passerelle) sans résultat positif.

Je suis sûr que c'est tout bête. Une piste ? :-)

Yannick

--
« Quand je serai grand, je ferai des bug reports sur la LKML »
-- Octane in fcolm
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Benoit Izac
Le #19122531
Bonjour,

le 15/04/2009 à 20:28, Yannick Palanque a écrit dans le message

3/ Si je bloque le trafic entrant en utilisant la règle
ip6tables -P INPUT DROP
accompagnée de
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
je perds aussitôt la connexion IPv6 (ICMP, IRC, etc.). Je ne vois rien
de particulier dans les journaux.


Ce comportement ne se produit pas avec l'IPv4, je peux bloquer les
paquets entrants sans perdre aucune connexion sortante. Il se trouve
que je ne comprends pas encore tout à l'IPv6. :-P
Le fait que tout un bloc m'est « routé » (ce que je n'ai pas
entièrement compris) m'oblige-t-il à prendre des dispositions
particulières ? J'avais ajouté une règle pour autoriser le trafic
venant de 2001:42:1871::1 (la passerelle) sans résultat positif.

Je suis sûr que c'est tout bête. Une piste ? :-)



(je ne suis pas expert en IPv6)

Ça ne viendrait pas de l'autoconfiguration qui serait bloquée ?

Le mieux pour savoir serait :
ip6tables -P INPUT ACCEPT
ip6tables -F INPUT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -j LOG
ip6tables -A INPUT -j DROP

tail -f /var/log/kernel.log
--
Benoit Izac
Yannick Palanque
Le #19124081
Benoit Izac écrivit :
Ça ne viendrait pas de l'autoconfiguration qui serait bloquée ?

Le mieux pour savoir serait :
ip6tables -P INPUT ACCEPT
ip6tables -F INPUT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -j LOG
ip6tables -A INPUT -j DROP



Pas bête... ;-)

Ça me donne ceci :

Apr 16 09:16:29 [kernel] IN=eth0 OUT MAC:30:48:80:42:62:00:0b:45:a9:08:40:86:dd
SRCþ80:0000:0000:0000:020b:45ff:fea9:0840
DST 01:0042:1871:0000:0000:0000:0000:0002 LENr TC"4 HOPLIMIT%5
FLOWLBL=0 PROTO=ICMPv6 TYPE5 CODE=0
- Last output repeated 2 times -
Apr 16 09:16:32 [kernel] IN=eth0 OUT MAC3:33:ff:00:00:02:00:0b:45:a9:08:40:86:dd
SRCþ80:0000:0000:0000:020b:45ff:fea9:0840
DSTÿ02:0000:0000:0000:0000:0001:ff00:0002 LENr TC"4 HOPLIMIT%5
FLOWLBL=0 PROTO=ICMPv6 TYPE5 CODE=0

Dans l'immédiat ça ne me donne pas plus d'idées mais je vais continuer
mes recherches.

--
« Quand je serai grand, je ferai des bug reports sur la LKML »
-- Octane in fcolm
Nicolas KOWALSKI
Le #19124211
Benoit Izac
le 15/04/2009 à 20:28, Yannick Palanque a écrit dans le message

3/ Si je bloque le trafic entrant en utilisant la règle
ip6tables -P INPUT DROP
accompagnée de
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
je perds aussitôt la connexion IPv6 (ICMP, IRC, etc.). Je ne vois rien
de particulier dans les journaux.





[...]

Ça ne viendrait pas de l'autoconfiguration qui serait bloquée ?



Je plussoie, et conseille aussi cette lecture :

http://tools.ietf.org/html/rfc4890

Il y a un exemple de script ip6tables sur le filtrage des paquets
ICMPv6.

--
Nicolas
Benoit Izac
Le #19124501
Bonjour,

le 16/04/2009 à 09:24, Yannick Palanque a écrit dans le message

ip6tables -P INPUT ACCEPT
ip6tables -F INPUT





je rajouterais donc ici :
ip6tables -A INPUT -p icmpv6 -j ACCEPT

ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -j LOG
ip6tables -A INPUT -j DROP





Un fois que tu seras suffisamment documenté pour choisir les paquets
ICMP à ne pas accepter (vaste débat), tu pourras rajouter les règles
adéquates.

--
Benoit Izac
Yannick Palanque
Le #19125341
Benoit Izac écrivit :
je rajouterais donc ici :
ip6tables -A INPUT -p icmpv6 -j ACCEPT



Oh, en effet, avec cette règle ça marche déjà mieux...

Un fois que tu seras suffisamment documenté pour choisir les paquets
ICMP à ne pas accepter (vaste débat), tu pourras rajouter les règles
adéquates.



Merci à tous pour vos réponses, j'ai maintenant bien plus de pistes
afin d'étudier tous ces différents choix.


--
« Quand je serai grand, je ferai des bug reports sur la LKML »
-- Octane in fcolm
Pascal Hambourg
Le #19125391
Salut,

Yannick Palanque a écrit :

Voilà, j'ai une machine qui obtient une adresse IPv4 et un bloc /48
IPv6. « Tout marche bien » sauf que je perds (je ne saurais expliquer
ce qui se passe dans le détail) ma connexion IPv6 lorsque je bloque le
trafic IPv6 entrant avec Netfilter, ce qui ne se produit pas en IPv4.



C'est normal sur une interface de type ethernet ou équivalent qui a
besoin d'un mécanisme de résolution d'adresse IP -> MAC. Pour cela IPv4
utilise le protocole ARP, distinct d'IPv4 et transparent pour iptables
(c'est pour cela qu'il existe arptables). En revanche IPv6 utilise le
protocole "Neighbor Discovery" (ND), sous-ensemble d'ICMPv6 et faisant
partie intégrante d'IPv6, et par conséquent est filtré par ip6tables.

Pour mémoire :
type 135 = Neighbor Soliciation (~ requête ARP)
type 136 = Neighbor Advertisement (~ réponse ARP)

Pour pouvoir communiquer en IPv6 sur ce type d'interface il ne faut pas
bloquer ces types, à moins d'utiliser une table de voisinage statique
sur toutes les machines.

3/ Si je bloque le trafic entrant en utilisant la règle
ip6tables -P INPUT DROP
accompagnée de
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
je perds aussitôt la connexion IPv6 (ICMP, IRC, etc.). Je ne vois rien
de particulier dans les journaux.



L'ennui avec le protocole Neighbor Discovery, c'est qu'il utilise des
adresses multicast alors que le suivi de connexion de netfilter ne sait
suivre que des communications en multicast. Par conséquent les types
ICMPv6 utilisés par ND sont classés dans l'état INVALID (à confirmer). A
partir du noyau 2.6.29, ces types ICMPv6 ne sont plus suivis, et classés
dans l'état NEW ou UNTRACKED (à confirmer). Au passage cela concerne
aussi les types ICMPv6 utilisés par le protocole "Router Discovery",
nécessaires pour l'autoconfiguration sans état (ainsi que d'autres types
utilisés pour la gestion du multicast, MLD et MLDv2, mais c'est
probablement plus anecdotique).

Pour mémoire :
type 133 = Router Solicitation (émis par un hôte)
type 134 = Router Advertisement (émis par un routeur)

Tous ces types sont "non routables", ils ne sont pas censés traverser
les routeurs. Comme ils sont émis avec un Hop Limit (HL, équivalent en
IPv6 du TTL d'IPv4) à 255, la valeur maximum, si on est parano on peut
donc éventuellement n'accepter ces types que s'ils ont un HL à 255.
Pascal Hambourg
Le #19125571
Benoit Izac a écrit :

Ça ne viendrait pas de l'autoconfiguration qui serait bloquée ?



Non, sa configuration est statique et n'a pas besoin d'autoconfiguration
(sauf pour la route IPv6 par défaut éventuellement, je ne la vois pas
mais je ne connais pas Gentoo). Plutôt la résolution d'adresse (Neighbor
Discovery).

Accessoirement, la taille de préfixe d'un réseau IPv6 sur ethernet est
généralement /64 et l'autoconfiguration ne fonctionne qu'avec cette
taille. Un /48 permet de créer plusieurs réseaux.
Yannick Palanque
Le #19125651
Pascal Hambourg écrivit :
Non, sa configuration est statique et n'a pas besoin
d'autoconfiguration (sauf pour la route IPv6 par défaut
éventuellement, je ne la vois pas mais je ne connais pas Gentoo).



<honte>
En réalité je n'ai pas encore trouvé comment entrer la route IPv6 par
défaut avec Gentoo</honte>, je le fais « à la main » classiquement :
ip route add default via xxx:xxx:xxx dev eth0
Mais comme c'est une machine qui reste tout le temps allumée...

Accessoirement, la taille de préfixe d'un réseau IPv6 sur ethernet est
généralement /64 et l'autoconfiguration ne fonctionne qu'avec cette
taille. Un /48 permet de créer plusieurs réseaux.



Je crois que c'est ce que m'a dit justement le talentueux
directeur technique d'un bon FAI à qui je montra par hasard la
configuration IP de cette machine mais je crois n'avoir pas besoin de
plus d'une adresse IPv6 pour le moment et j'utilise ce protocole
_vraiment_ (trop) basiquement. 0:-}


--
« Quand je serai grand, je ferai des bug reports sur la LKML »
-- Octane in fcolm
Pascal Hambourg
Le #19126411
On devrait toujours se relire avant d'envoyer...

Pascal Hambourg a écrit :

type 135 = Neighbor Soliciation (~ requête ARP)



s/Soliciation/Solicitation/

le suivi de connexion de netfilter ne sait
suivre que des communications en multicast.



s/multicast/unicast/
Benoit Izac
Le #19127061
Bonjour,

le 16/04/2009 à 15:35, Pascal Hambourg a écrit dans le message

En réalité je n'ai pas encore trouvé comment entrer la route IPv6 par
défaut avec Gentoo</honte>



L'ajout de "default gw xxx:xxx:xxx" avec l'adresse IPv6 du routeur
dans la liste de routes_eth0 ne marche pas ?



Comme iproute2 est installé, c'est plutôt
routes_eth0="defaut via xxx:xxx:xxx"

je le fais « à la main » classiquement :
ip route add default via xxx:xxx:xxx dev eth0
Mais comme c'est une machine qui reste tout le temps allumée...



Au pire, il n'y a pas moyen d'exécuter une commande arbitraire ou un
script comme dans Debian avec l'option up ou post-up ?



Si, on peut définir des les fonctions preup(), predown(), postup(),
postdown(), failup(), faildown() mais c'est rarement nécessaire car
/etc/conf.d/net est assez complet.

--
Benoit Izac
Publicité
Poster une réponse
Anonyme