Iptables et ipv6

Bonsoir, je viens de me rappeller qu’iptables doit être configuré à la fois pour ipv4 et ipv6.
Comment ca se passe pour les règles ipv6?

on fait bien comme ca?

pour l’ipv4
puis on retape

pour l’ipv6 et à partir des mêmes règles chargées et tout est bon?

Je poste, non pas pour répondre mais pour marquer ce fil dont la réponse m’intéresse aussi.
Je n’ai jamais sauté le pas IPv4 ==> IPv6.
Un ptit truc explicatif simple, ça se trouve ?
Je suis chez Free et je crois qu’il est déjà près à servir (???)

On fait bien quoi ?
Ces commandes ne font qu’enregistrer le jeu de règles iptables (pour IPv4) actif dans deux fichiers. A quoi vont-ils servir ?

Les commandes pour manipuler les règles iptables pour IPv6 sont [mono]ip6tables[/mono], [mono]ip6tables-save[/mono]… Les règles iptables et ip6tables ne sont pas forcément compatibles car il y a des différences entre les deux protocoles, le format des adresses. Notamment certains types de paquets qui n’existent pas en IPv4 doivent être acceptés en IPv6 (ICMPv6 NDP).

D’autre part, les jeux de règles IPv4 et IPv6 n’ont pas forcément vocation à être identiques : par exemple on peut vouloir autoriser un port en IPv4 mais pas en IPv6 si le service correspondant n’est accessible qu’en IPv4.

ipv6pourtous.free.fr/faq/#support_routeur
Apparemment il faut vérifier sur la notice du routeur s’il est précisé si le support ipv6 est assuré, sinon contacter le constructeur.

Ce serait vraiment dommage de ne configurer que le parefeu ipv4 chez sois et de laisser passer ipv6.

PascalHambourg, est ce que je peux au moins faire un
ip6tables -P INPUT -j DROP
ip6tables -P OUTPUT -j DROP
ip6tables -P FORWARD -j DROP

l’Idée c’est de ne pas prendre de risque d’être une passoire à une époque où on se passe pas mal de l’ipv6 et le temps de vraiment me familiariser avec iptables?

Si tu fais cela tu bloques toute communication en IPv6 avec l’extérieur de la machine mais aussi en local sur l’interface de loopback, ce que je ne recommande pas. Ajoute au moins les règles suivantes :

ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A OUTPUT -o lo -j ACCEPT

J’ai bien lu le lien donné par Vger mais ça date quand même.
Qu’en est-il, ce 10 février 2016, de la possibilité d’accès IPv6 quand on est abonné Free et qu’on se sert de la Fbox V6 en tant que routeur ?
Merci.

EDIT :
Excusez-moi pour l’intrusion.
Sitôt réponse à cette question, j’ouvre un nouveau fil.

D’accord, tu penses quoi du script du tutoriel réadapté de cette manière?

touch /etc/init.d/mon_parefeuv6 chmod +x /etc/init.d/mon_parefeuv6 nano /etc/init.d/mon_parefeuv6

[quote]#!/bin/sh

BEGIN INIT INFO

Provides: ip6tables

Required-Start:

Should-Start:

Required-Stop:

Should-Stop:

Default-Start: 2 3 4 5

Default-Stop: 0 1 6

Short-description: ip6tables

Description: Firewall

END INIT INFO

chargement/déchargement d’ip6tables

case “$1” in
’start’)
/sbin/ip6tables-restore < /etc/config_parefeuv6
RETVAL=$?
;;
‘stop’)
/sbin/ip6tables-save > /etc/config_parefeuv6
RETVAL=$?
;;
‘clean’)

clean le parefeu pendant que la machine tourne

ça peut être une faille de sécurite si on l’exécute lors de l’extinction avant l’arrêt des interfaces

pensez à refaire un start après sinon la sauvegarde se fera automatiquement à l’extinction

/sbin/ip6tables -t filter -F
/sbin/ip6tables -t nat -F
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t filter -P INPUT ACCEPT
/sbin/ip6tables -t filter -P OUTPUT ACCEPT
/sbin/ip6tables -t filter -P FORWARD ACCEPT
/sbin/ip6tables -t nat -P PREROUTING ACCEPT
/sbin/ip6tables -t nat -P POSTROUTING ACCEPT
/sbin/ip6tables -t nat -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P PREROUTING ACCEPT
/sbin/ip6tables -t mangle -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P POSTROUTING ACCEPT
/sbin/ip6tables -t mangle -P FORWARD ACCEPT
/sbin/ip6tables -t mangle -P INPUT ACCEPT
/sbin/ip6tables -t raw -P OUTPUT ACCEPT
/sbin/ip6tables -t raw -P PREROUTING ACCEPT
RETVAL=$?
;;
‘restart’)
$0 stop && $0 start
RETVAL=$?
;;
*)
echo "Usage: $0 { start | stop | restart | clean}"
RETVAL=1
;;
esac
exit $RETVAL [/quote]

/etc/init.d/mon_parefeuv6 clean ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A OUTPUT -o lo -j ACCEPT ip6tables -P INPUT DROP ip6tables -P OUTPUT DROP ip6tables -P FORWARD DROP /etc/init.d/mon_parefeuv6 stop update-rc.d mon_parefeuv6 start XX S . stop YY 0 6 .

je ne sais pas si la question s’adresse à moi ou à Pascal.

[quote=“ricardo”]J’ai bien lu le lien donné par Vger mais ça date quand même.
Qu’en est-il, ce 10 février 2016, de la possibilité d’accès IPv6 quand on est abonné Free et qu’on se sert de la Fbox V6 en tant que routeur ?
Merci.

EDIT :
Excusez-moi pour l’intrusion.
Sitôt réponse à cette question, j’ouvre un nouveau fil.[/quote]

pas de soucis,
free.fr/assistance/54.html

je pense qu’il doit être activé avant.

j’ai trouvé ca qui semble vérifier si la fonctionnalité ipv6 est activé
test-ipv6.com/

je n’ai pas d’ipv6 donc finallement je n’aurais pas besoin de m’embêter au niveau du parefeu pour l’instant.

Pour info voilà mes règles IPv6

[code]#! /bin/sh

Règles de base

Interdire tout

ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P OUTPUT DROP
ip6tables -t filter -P FORWARD DROP

Authorisation global#########################################################

Conserver les connections

ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Autoriser la boucle local (loopback)

ip6tables -t filter -A INPUT -i lo -j ACCEPT
ip6tables -t filter -A OUTPUT -o lo -j ACCEPT

ping

#réponse aux ping

ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
#envoi d’un ping
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type echo-reply -j ACCEPT

Pour toute interface de type broadcast

ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT
ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT

Authorisation au cas par cas

FTP

#ip6tables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT

SSH

#ip6tables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
#ip6tables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

SMTP

#ip6tables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT

#DNS
#ip6tables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
#ip6tables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
#ip6tables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

HTTP

#ip6tables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

POP3

#ip6tables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT

NTP

#ip6tables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

IMAP

#ip6tables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT

HTTPS

#ip6tables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

Samba

#ip6tables -t filter -A OUTPUT -p tcp --dport 445 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 445 -j ACCEPT

SSL SMTP (SSMTP)

#ip6tables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 465 -j ACCEPT

SMTP (avec authentification)

#ip6tables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT

Rsync

#ip6tables -t filter -A OUTPUT -p tcp --dport 873 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 873 -j ACCEPT

FTP SSL implicite (FTPS)

#ip6tables -t filter -A OUTPUT -p tcp --dport 989 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 989 -j ACCEPT

#ip6tables -t filter -A OUTPUT -p udp --dport 989 -j ACCEPT
#ip6tables -t filter -A INPUT -p udp --dport 989 -j ACCEPT

#ip6tables -t filter -A OUTPUT -p tcp --dport 990 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 990 -j ACCEPT

#ip6tables -t filter -A OUTPUT -p udp --dport 990 -j ACCEPT
#ip6tables -t filter -A INPUT -p udp --dport 990 -j ACCEPT

IMAP SSL (IMAPS)

#ip6tables -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 993 -j ACCEPT

POP3 SSL (PO3S)

#ip6tables -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 995 -j ACCEPT

FTP passif

#ip6tables -t filter -A OUTPUT -p tcp --sport 3000:3100 -j ACCEPT

UPS

#ip6tables -t filter -A OUTPUT -p tcp --dport 3493 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 3493 -j ACCEPT

Bittorent

#ip6tables -t filter -A OUTPUT -p tcp --sport 6880:6999 -j ACCEPT

Postgre admin

#ip6tables -t filter -A OUTPUT -p tcp --dport 5432 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 5432 -j ACCEPT

MPD

#ip6tables -t filter -A OUTPUT -p tcp --dport 6600 -j ACCEPT
#ip6tables -t filter -A INPUT -p tcp --dport 6600 -j ACCEPT
[/code]

J’avais trouvé sur le forum des fil qui traitais de ça et Pascal disait globalement que les règles IPv4 pouvait toute servir sauf pour le ping qui était plus compliqué et la découverte réseau.
Après je suis preneur de toute suggestion pour améliorer ça :mrgreen:

Bonsoir,

je te remercie, ta manière de présenter les règles m’inspire beaucoup, moi je rédigeais par chaîne et je me rends compte que c’est moins pratique.

Par contre pourquoi placer les règles générales avant les cas particulier? C’est pas un coup à faire passer un cas particulier dans une règle générale ca?

edit : en fait chez toi ca fonctionne parce que les autorisations au cas pas cas sont aussi des autorisations globales,
si tu avais voulu mettre de vrais autorisation au cas par cas (faire des exceptions à tes règles générales) là il aurait fallu les placer avant ou alors mettre le -I au lieu du A…
oui je pense tout haut, mais je commence à comprendre le tout ^^

Bonjour,

'stop') /sbin/ip6tables-save > /etc/config_parefeuv6
Cette partie du script ne me semble pas souhaitable.
Sur le principe, tu crées ton fichier /etc/config_parefeuv6 et tu ne le mets à jour qu’en cas de besoin et surtout volontairement après avoir testé le résultat.

Pour info, il est possible de mettre le chargement des règles iptables dans le fichier interface et de le déclencher juste avant l’activation d’une interface.

Le ping n’est pas plus compliqué en IPv6 qu’en IPv4. C’est ICMPv6 qui assure plus de fonctions qu’ICMP, notamment en remplaçant ARP qui n’est pas filtré par iptables. A ce sujet, tes règles autorisent les types ICMPv6 pour la découverte des voisins mais pas ceux pour la découverte des routeurs (router-solicitation et router-advertisement). L’autoconfiguration sans état ne peut donc pas fonctionner avec ces règles.

Cette présentation me gêne un peu car elle groupe les règles autorisant les connexions entrantes et sortantes pour un même protocole, alors qu’il n’y a aucun lien entre être client et serveur. Personnellement je groupe plutôt les règles par type client ou serveur.

Quelle règles générales ?
De toute façon s’il n’y a que des règles ACCEPT l’ordre n’influe que sur les performances (c’est plus efficace de mettre en premier les règles qui concernent le plus grand nombre paquets).

[quote=“vger”] en fait chez toi ca fonctionne parce que les autorisations au cas pas cas sont aussi des autorisations globales,
si tu avais voulu mettre de vrais autorisation au cas par cas (faire des exceptions à tes règles générales)[/quote]
Je ne comprends pas ce que tu veux dire.

[quote=“PascalHambourg”]
Je ne comprends pas ce que tu veux dire.[/quote]
Je parlais du cas où il voudrait faire des liste d’exclusions sur ses autorisations comme bannir des ips spécifiques, si il les renseigne après les autorisations ca ne passera pas.

Ce qui m’a aussi frappé c’était de séparer les policy et les règles qui reviennent tout le temps chez les débutants comme l’autorisation de la loopback et des connexions déjà établies et liées, du reste des règles.
Ca devient plus rapide et plus simple pour les nouveaux script de parefeu car pas besoin de recopier sans arrêt ces règles là, on a plus qu’à copier coller le fichier bash et remplir les règles.
Je pense que la présentation par port c’est plus pour rendre accessible aux débutant il n’y a qu’à dé-commenter ce qu’on veut autoriser. En tout cas j’ai trouvé ca plus lisible que mon script, je commente rien et j’ai pas d’astuces de présentation donc j’obtiens des blocs difficile à lire

je me demande bien à quoi peut ressembler un script bash abouti? Quand on s’y connait bien, ca peut se remplir très vite? Comment tu fais pour t’y retrouver à la lecture d’un script que tu n’a pas lû depuis des semaines?

PS : le port DNS c’est pas que de l’udp? je n’autorise pas le tcp pour ce port et ca à l’air de fonctionner chez moi.

Pour la présentation je commence par tout fermer et j’ouvre petit à petit ce qu’il me faut. Pour plus de lisibilité je regroupe en fonctionnalité/logiciel, après je sais que le INPUT est pour le serveur et le OUTPUT pour le client (en générale)

Pour exécuter ce script j’ai un service dans init.d qui gère le start/stop.

@Pascal : Il me manquerait des règles comme ça ?

ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT

Dans ce cas il faudra placer les exceptions avant les règles générales. Mais il n’y avait pas d’exception dans le script de Mimoza.

Je soigne la lisibilité, avec beaucoup de commentaires.

DNS utilise principalement UDP mais peut aussi utiliser TCP pour certaines requêtes dont les réponses sont trop grosses pour un paquet UDP. Cas typique : transfert de zone entre serveur maître et esclave (AXFR).

Pas tout à fait, il faut les mettre dans les bonnes chaînes.
Un poste “client” (non routeur) envoie router-solicitation et reçoit router-advertisement.
Un routeur reçoit router-solicitation et envoie router-advertisement.

[quote=“PascalHambourg”]Pas tout à fait, il faut les mettre dans les bonnes chaînes.
Un poste “client” (non routeur) envoie router-solicitation et reçoit router-advertisement.
Un routeur reçoit router-solicitation et envoie router-advertisement.[/quote]

Vu que c’est pour un serveur web, donc plus comme ça ?

ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT

[quote=“mazarini”]Bonjour,
Pour info, il est possible de mettre le chargement des règles iptables dans le fichier interface et de le déclencher juste avant l’activation d’une interface.[/quote]

Bonjour,
tu peux expliquer la méthode que tu suis?

Oui, un “simple” serveur est un hôte non routeur. Mais contrairement à un poste client, un serveur peut (voire devrait) être configuré de façon statique et non par autoconfiguration et ne pas avoir besoin des annonces de routeur IPv6.