Page 1 sur 1

[iptables] questions à propos d'ip6tables (résolu)

Publié : mar. 30 sept. 2014, 22:50
par bobo
J'ai installé/configuré iptables sur mes machines, en utilisant /etc/iptables/simple_firewall.rules. À la lecture de la page https://wiki.archlinux.org/index.php/Sshguard, pour protéger le port ssh de mon raspberry pi, je me suis rendu compte qu'il existait également ip6tables pour gérer les adresses ipv6.

Après mes lectures, j'ai l'impression qu'avec une installation de base d'Archlinux :
— la machine accepte toutes les connections, ipv4 ipv6
— la mise en place d'un parefeu est une bonne pratique
— que iptables ne couvre que l'ipv4 (laissant la porte grande ouverte pour l'ipv6)
— qu'il faudrait installer¹ ip6tables pour gérer également l'ipv6, ou alors désactiver² l'ipv6

Maintenant place aux questions :
— Est-ce que j'ai bon ?
— Vous faites comment chez vous ?

_________________________________________
¹ https://wiki.archlinux.org/index.php/Si ... ewall#IPv6 : il est possible de faire du copier-coller des règles iptables.rules, mais il faut adapter les adresses IP référencées, adapter des règles à l'IPv6 (nouveau protocole icmpv6 cité à titre d'exemple), modifier les messages d'erreurs. Je suis sceptique.
² https://wiki.archlinux.org/index.php/Di ... sable_IPv6 : ça a l'air compliqué, également, et celà semble pouvoir causer des soucis

Re: [iptables] questions à propos d'ip6tables

Publié : mer. 01 oct. 2014, 00:21
par benjarobin
Oui, tu as tout bon.
Et perso j'utilise ceci :

Code : Tout sélectionner

#!/bin/sh

###############################################################################
# Voir "Firewall et securite d'un reseau personnel sous Linux"
#  http://olivieraj.free.fr/fr/linux/information/firewall/
###############################################################################

# Configuration : Interface exemple wlan0, eth0
INTERFACE="eth0"
PLAGE_LOCAL="192.168.0.0/24"

# Suppression de toutes les chaines pré-definies de la table FILTER
iptables -t filter -F

# Suppression de toutes les chaines utilisateur de la table FILTER
iptables -t filter -X

# Par défaut, toute les paquets sont détruits
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

# Autorise l'interface loopback a dialoguer avec elle-même
iptables -t filter -A OUTPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
iptables -t filter -A INPUT  -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

# Autorise les connexions entrantes avec le réseau locale depuis "PLAGE_LOCAL" connecte a l'"INTERFACE"
# Optionnel, voir dangereux sur un Wifi public, uniquement à utiliser pour que tous les PC de ton réseaux
# locale aient accès à l'intégralité des ports
iptables -t filter -A OUTPUT -o $INTERFACE -s $PLAGE_LOCAL -d $PLAGE_LOCAL -j ACCEPT
iptables -t filter -A INPUT  -i $INTERFACE -s $PLAGE_LOCAL -d $PLAGE_LOCAL -j ACCEPT

# SSH
iptables -t filter -A OUTPUT -o $INTERFACE -s 0.0.0.0/0 -d 0.0.0.0/0  -p tcp --sport 22 -j ACCEPT
iptables -t filter -A INPUT  -i $INTERFACE -s 0.0.0.0/0  -d 0.0.0.0/0 -p tcp --dport 22 -j ACCEPT

# HTTPD
iptables -t filter -A OUTPUT -o $INTERFACE -s 0.0.0.0/0 -d 0.0.0.0/0  -p tcp --sport 80 -j ACCEPT
iptables -t filter -A INPUT  -i $INTERFACE -s 0.0.0.0/0  -d 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT

# Autorise les connexions avec l’extérieur uniquement si elles sont initialisées par les processus locaux
iptables -A OUTPUT -o $INTERFACE  -d 0.0.0.0/0 -p all -m conntrack ! --ctstate INVALID -j ACCEPT 
iptables -A INPUT  -i $INTERFACE -s 0.0.0.0/0  -p all -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT


# Suppression de toutes les chaines pré-definies de la table FILTER
ip6tables -t filter -F

# Suppression de toutes les chaines utilisateur de la table FILTER
ip6tables -t filter -X

# Par défaut, toute les paquets sont détruits
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P OUTPUT DROP
ip6tables -t filter -P FORWARD DROP

# Autorise l'interface loopback a dialoguer avec elle-même
ip6tables -t filter -A OUTPUT -o lo -j ACCEPT
ip6tables -t filter -A INPUT  -i lo -j ACCEPT

# Autorise les connexions avec l’extérieur uniquement si elles sont initialisées par les processus locaux 
ip6tables -A OUTPUT -o $INTERFACE -p all -m conntrack ! --ctstate INVALID -j ACCEPT
ip6tables -A INPUT  -i $INTERFACE -p all -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Ping6 ?!
ip6tables -A INPUT -p icmpv6 -j ACCEPT
ip6tables -A INPUT -j REJECT --reject-with icmp6-adm-prohibited
ip6tables -A OUTPUT -p icmpv6 -j ACCEPT

Re: [iptables] questions à propos d'ip6tables

Publié : mer. 01 oct. 2014, 09:05
par bobo
Bon, et bien j'ai l'air bien con avec mon iptables, sans pare-feu sur l'IPv6 :lol: Moi qui croyais mes machines sécurisées.

Je vais peaufiner mes notes d'installation, et tenter d'adapter le simple firewall pour ip6tables. D'abord pour PC fixes et netbook, ensuite pour le Raspberry Pi.

Re: [iptables] questions à propos d'ip6tables (résolu)

Publié : mer. 01 oct. 2014, 20:05
par bobo
J'ai fait quelques essais infructueux pour reproduire https://wiki.archlinux.org/index.php/Si ... ewall#IPv6. Je n'ai vraisemblablement pas tout compris à la ligne de commande, voici le résultat :

Code : Tout sélectionner

# Generated by iptables-save v1.4.21 on Wed Oct  1 18:14:50 2014
*security
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Wed Oct  1 18:14:50 2014
# Generated by iptables-save v1.4.21 on Wed Oct  1 18:14:50 2014
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Wed Oct  1 18:14:50 2014
# Generated by iptables-save v1.4.21 on Wed Oct  1 18:14:50 2014
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Wed Oct  1 18:14:50 2014
# Generated by iptables-save v1.4.21 on Wed Oct  1 18:14:50 2014
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Wed Oct  1 18:14:50 2014
# Generated by iptables-save v1.4.21 on Wed Oct  1 18:14:50 2014
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Wed Oct  1 18:14:50 2014
Du coup j'ai fait le goret en recopient simple_firewall.rules, comme précédemment. Et j'ai adapté celà pour ip6tables.rules, de sorte que le service se lance. J'ai remplacé "icmp-port-unreachable" par "icmp6-port-unreachable" et j'ai supprimé la ligne en "--reject-with icmp-proto-unreachable" car "icmp6-proto-unreachable" et "icmp6-protocol-unreachable" n'existe pas, et j'ai été incapable de trouver qqch l'équivalent en IPv6.

Code : Tout sélectionner

19:52 root@ iptables% diff iptables.rules ip6tables.rules
9,10c9
< -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable 
< -A INPUT -j REJECT --reject-with icmp-proto-unreachable 
---
> -A INPUT -p udp -j REJECT --reject-with icmp6-port-unreachable

Re: [iptables] questions à propos d'ip6tables (résolu)

Publié : mer. 01 oct. 2014, 20:09
par benjarobin
Simple question, pourquoi ne pas utiliser ce que j'ai donné ?

Re: [iptables] questions à propos d'ip6tables (résolu)

Publié : mer. 01 oct. 2014, 21:12
par bobo
Question valide :mrgreen: !

Lorsque j'avais enquêté sur iptables il y a quelques mois j'ai lu les pages associées de wiki anglophone et francophone. Je n'ai pas pris de notes mais voilà ce dont je me souviens :

— la méthode documentée sur le wiki fr est une méthode par port qui, il me semble, m'avait causé des soucis avec retroshare, et peut-être bien avec bittorrent : un usage réseau = 1 port = 2 entrées (j'ai l'impression que l'approche que tu as postée semble similaire à celle-ci). Les adresses IP en dur m'ont un peu bloqué|déconcerté :transpi: , si je me souviens bien

— la méthode documentée sur le wiki en Anglais ressemble furieusement au fichier simple_firewall.rules qui vient avec le paquet iptables. J'ai trouvé les explications assez claires et l'approche très élégante (et paresseuse :love: ) : autorisation de toutes les connections sortantes, maintien de toutes les connections déjà établies, drop de toutes les sollicitations extérieures non initiées par le système = pas de cas par cas par protocole

Du coup, j'ai copié simple_firewall.rules en iptables.rules et j'ai clos le dossier :fume: (et je suis passé à côté de cette histoire d'IPv6)


Édition :
Vois-tu un problème avec l'approche "simple_firewall.rules" ?
Quelle est ta vision des choses dans la lecture comparée des 2 wikis ?

Re: [iptables] questions à propos d'ip6tables (résolu)

Publié : mer. 01 oct. 2014, 23:09
par benjarobin
Je crains que tu es fait une mauvaise lecture de mon message car les 2 (simple firewall et ma config) font strictement la même chose...
Le wiki fr est en effet beaucoup plus restrictif, il n'autorise qu'une partie des ports en sorties, mais il utilise absolument le même principe que décrit dans le wiki us.
Je vais donc pour cela détailler ma configuration pour une meilleur compréhension, bien qu'il y est déjà des commentaires très explicites

En premier il est nécessaire de vider toute configuration préalable, on part sur des bases saines

Code : Tout sélectionner

# Suppression de toutes les chaines pré-definies de la table FILTER
iptables -t filter -F
# Suppression de toutes les chaines utilisateur de la table FILTER
iptables -t filter -X
Puis on interdit tout

Code : Tout sélectionner

iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
Il est très important de laisser l'interface locale lo discuter avec n'importe qui. Bloquer des paquets sur l'interface locale pourrait avoir des effets secondaires très indésirables

Code : Tout sélectionner

iptables -t filter -A OUTPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
iptables -t filter -A INPUT  -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
Finalement on autorise toutes les connexions initiées depuis l'intérieur vers l'extérieur, rien n'est bloqué en sortie.

Code : Tout sélectionner

iptables -A OUTPUT -o $INTERFACE  -d 0.0.0.0/0 -p all -m conntrack ! --ctstate INVALID -j ACCEPT
iptables -A INPUT  -i $INTERFACE -s 0.0.0.0/0  -p all -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Comme tu peux le voir il n'y a aucune adresse IP donnée ni ne port...
Par contre si tu as un serveur ssh sur ton PC et que tu veux pouvoir t'y connecter depuis l'extérieur (un peu le but d'un serveur ssh), il te faudra nécessairement autoriser toutes les connexions faites sur le port 22, après libre à toi de modifier la règle suivante pour n'autoriser que certaines IP externes

Code : Tout sélectionner

iptables -t filter -A OUTPUT -o $INTERFACE -s 0.0.0.0/0 -d 0.0.0.0/0  -p tcp --sport 22 -j ACCEPT
iptables -t filter -A INPUT  -i $INTERFACE -s 0.0.0.0/0  -d 0.0.0.0/0 -p tcp --dport 22 -j ACCEPT
De plus si tu veux accéder à l'ensemble des ports depuis ton réseau locale, ton réseau locale étant considéré comme l'extérieur, il faudra nécessaire autoriser une plage d’adresse, mais bien sur ceci est optionnel et n'est qu'a titre d'exemple, ceci peut être relativement dangereux :

Code : Tout sélectionner

iptables -t filter -A OUTPUT -o $INTERFACE -s $PLAGE_LOCAL -d $PLAGE_LOCAL -j ACCEPT
iptables -t filter -A INPUT  -i $INTERFACE -s $PLAGE_LOCAL -d $PLAGE_LOCAL -j ACCEPT

Re: [iptables] questions à propos d'ip6tables (résolu)

Publié : jeu. 02 oct. 2014, 13:45
par bobo
Je n'avais pas vu cette subtilité :

Code : Tout sélectionner

iptables -t filter -P OUTPUT DROP
[…]
iptables -A OUTPUT -o $INTERFACE  -d 0.0.0.0/0 -p all -m conntrack ! --ctstate INVALID -j ACCEPT
La politique par défaut sur OUTPUT est DROP, avec une règle acceptant tous les paquets non-INVALID. :chinois: Du coup ça me paraît redondant avec cette ligne :

Code : Tout sélectionner

iptables -t filter -A OUTPUT -o $INTERFACE -s 0.0.0.0/0 -d 0.0.0.0/0  -p tcp --sport 22 -j ACCEPT
Je note que le port pour ssh a été passé à la trappe dans ton implémentation ip6tables

(Du coup ça n'a rien à voir avec l'approche par port documentée sur le wiki fr :
https://wiki.archlinux.fr/Iptables#Conf ... ent_simple
Même s'il y a 2 lignes par port…)

Re: [iptables] questions à propos d'ip6tables (résolu)

Publié : jeu. 02 oct. 2014, 13:55
par benjarobin
Il est en effet possible que ce soit redondant... Il est vrai que ce sont des règles écrites il y a quelques temps, et comme cela fonctionne je n'ai jamais pris le temps de voir si on peut faire mieux :-)
Sinon c'est volontaire qu'en IPv6 aucune connexion ne soit autorisé depuis l'extérieur. En sortie tout fonctionne parfaitement en IPv6, mais j'avoue n'avoir jamais pris le temps de configurer mes DNS pour ajouter une entrée IPv6...

Re: [iptables] questions à propos d'ip6tables (résolu)

Publié : jeu. 02 oct. 2014, 13:58
par bobo
« ne pas changer quelque chose qui fonctionne » C'est une approche saine… :D
Merci pour les explications en tout cas