# Installation parefeu (iptables & ip6tables) "pour les nuls"

**URL:** <https://www.debian-fr.org/t/installation-parefeu-iptables-ip6tables-pour-les-nuls/2183>\
**Category:** Trucs et Astuces\
**Created:** [Février 20, 2016, 12:10 UTC](https://www.debian-fr.org/t/installation-parefeu-iptables-ip6tables-pour-les-nuls/2183 "2016-02-20T12:10:20Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 20, 2016, 12:10 UTC](https://www.debian-fr.org/t/installation-parefeu-iptables-ip6tables-pour-les-nuls/2183/1 "2016-02-20T12:10:20Z")

</div>

**POUR TOUTE DISCUSSION SUR CE TUTO, VOUS ÊTES PRIÉS D’ALLER [LÀ](https://www.debian-fr.org/t/digression-installation-parefeu-iptables-pour-les-nuls/771)**

Voici une sorte de ‘tuto’ destiné à l’installation primaire d’un pare-feu (ou parefeu) sous Debian.  
Ce qui suit n’a pas pour objectif de renseigner les utilisateurs accomplis, qui n’y apprendront rien de plus que ce qu’ils savent mais est plutôt dirigé vers les débutants, avec un maximum d’explications.  
Préambule :  
En principe, le paquet ‘iptables’ est installé d’origine sous Debian mais si ce n’était pas le cas, rien de plus simple à faire :

apt-get install iptables  
Dans ce ‘tuto’, la majeure partie des commandes se feront à partir de la console (petite télé noire qui sert, entre-autres, à entrer ces commandes).  
Il est recommandé de ne pas faire cette installation, ni une éventuelle modification par le biais de SSH, mais en “direct” machine.  
Ces commandes seront entrées sous la forme :  
login@nom\_machine:~$ sudo la\_commande\_à\_taper  
mais par la suite, je n’écrirai que la commande proprement dite, il vous appartiendra donc de la faire précéder par ‘sudo’.  
Il est préférable d’utiliser ‘sudo’ plutôt que de taper en tant que ‘root’, pour des raisons de sécurité mais il est possible que certaines commandes ne soient pas prises en compte de cette façon. Il vous faudra alors taper en tant que ‘root’ ( su et mot de passe = # au lieu de $ )  
Si vous n’avez pas installé ‘sudo’, faites une recherche sur le forum d’aide ou posez la question.

(1) Installation :

A l’origine, le pare-feu est installé mais il est ouvert à toutes les communications, c’est en quelque sorte, une ‘passoire’ et de ce fait, il ne remplit pas ses objectifs.  
Dans un premier temps, il va nous falloir installer un ‘script’ qui sera le "donneur d’ordre"  
Créez le fichier ‘mon\_parefeu’ :  
touch /etc/init.d/mon\_parefeu  
Rendez ce fichier (pour l’instant, vide) exécutable avec :  
chmod +x /etc/init.d/mon\_parefeu  
Ouvrez kedit (ou tout autre traitement de texte) à partir de la console pour être ‘root’ :  
kedit  
Dans kedit, ouvrez le fichier /etc/init.d/mon\_parefeu  
Collez-y le code ci-dessous :

```auto
#!/bin/sh

### BEGIN INIT INFO
# Provides: iptables
# Required-Start:
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start: S
# Default-Stop: 0 6
# Short-description:	iptables
# Description: Firewall
### END INIT INFO

# chargement/déchargement d'iptables

case "$1" in
'start')
/sbin/iptables-restore < /etc/config_parefeu
RETVAL=$?
;;
'stop')
/sbin/iptables-save > /etc/config_parefeu
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/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t filter -P INPUT ACCEPT
/sbin/iptables -t filter -P OUTPUT ACCEPT
/sbin/iptables -t filter -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t raw -P OUTPUT ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
RETVAL=$?
;;
'restart')
$0 stop && $0 start
RETVAL=$?
;;
*)
echo "Usage: $0 { start | stop | restart | clean}"
RETVAL=1
;;
esac
exit $RETVAL 
```

Sauvegardez et fermez kedit  
Retournez à la console pour réinitialiser le pare-feu à blanc avec :  
/etc/init.d/mon\_parefeu clean

(2) Configuration :

Tapez les séquences suivantes (les lignes en gras et une à la fois, suivi de ‘Entrée’)

“Pour un hôte (station ou serveur) non routeur”:

iptables -t filter -P INPUT DROP  
iptables -t filter -P FORWARD DROP  
iptables -t filter -P OUTPUT ACCEPT  
iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
Précisions par fran.b suite à débat  
_Si on veut un serveur FTP_  
**iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT**  
Si on souhaite utiliser SSH  
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT  
Si on souhaite installer un serveur Web  
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT  
Si on veut rendre CUPS accessible  
iptables -A INPUT -p tcp -m tcp --dport 631 -j ACCEPT  
Si on souhaite utiliser Jabber  
iptables -A INPUT -p tcp -m tcp --dport 5222 -j ACCEPT

“Pour une machine faisant office de routeur avec NAT” :

iptables -t filter -P INPUT DROP  
iptables -t filter -P FORWARD DROP  
iptables -t filter -P OUTPUT ACCEPT  
iptables -A INPUT -i ethx -j ACCEPT  
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
iptables -A INPUT -i lo -j ACCEPT  
iptables -A INPUT -p icmp -j ACCEPT  
Précisions par fran.b suite à débat  
Si on veut un serveur FTP  
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT  
Si on souhaite utiliser SSH  
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT  
Si on souhaite installer un serveur Web  
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT  
Si on veut rendre CUPS accessible  
iptables -A INPUT -p tcp -m tcp --dport 631 -j ACCEPT  
Si on souhaite utiliser Jabber  
iptables -A INPUT -p tcp -m tcp --dport 5222 -j ACCEPT  
iptables -A FORWARD -i ethy-o ethx -m state --state RELATED,ESTABLISHED -j ACCEPT  
iptables -A FORWARD -o ethy -j ACCEPT  
iptables -t nat -A POSTROUTING -o ethy -j MASQUERADE

Où  
ethx correspond à l’interface du LAN  
et  
ethy correspond à l’interface relié à la truc-box

Sauvegardez le pare-feu une première fois (simulation d’un signal d’arrêt) avec :  
/etc/init.d/mon\_parefeu stop  
Activez ‘mon\_parefeu’ avec :  
**update-rc.d mon\_parefeu defaults**

(3) Modifications

Nous allons aborder maintenant la façon de modifier notre pare-feu  
– Ajouter une règle :

- on connaît le nom du port à autoriser, taper :  
iptables -A INPUT -p tcp -m tcp --dport www -J ACCEPT (où ‘www’ est le nom du serveur http)
- on connaît le numéro du port, taper :  
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT (où ‘80’ est le N° de ce même http)  
Pour connaître le numéro d’un grand nombre de port, tapez :  
less /etc/services

Pour les explications des différentes options, vous pourrez avantageusement consulter :  
man iptables  
ou  
iptables --help

– Enlever une règle :  
taper ce qui suit pour connaître le numéro de ligne de cette règle  
iptables -L --line-numbers  
puis taper  
iptables -D INPUT (ou FORWARD) N° (où ‘N°’ doit être le chiffre ou nombre en tête de la ligne à supprimer)

Vous pourrez modifier l’exemple présenté plus haut à votre convenance (ajouter ou retirer ce que vous voudrez).  
Toutefois, il convient de ne pas supprimer les deux lignes suivantes :

-A INPUT -i lo -j ACCEPT ((Ce sont les communications IP entre processus locaux s’exécutant sur la machine et c’est critique)).  
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ((ça permet le retour vers la machine des infos demandées auprès des sites web. En l’absence de cette règle, la navigation deviendrait difficile. C’est relativement important )).

Après chaque modification, il vous faudra sauvegarder de nouveau votre pare-feu avec :  
/etc/init.d/mon\_parefeu stop  
ou attendre un redémarrage qui fera la même chose automatiquement.  
Si vous voulez revenir à l’état que vous aviez au présent démarrage, vous tapez :  
/etc/init.d/mon\_parefeu start  
Si vous voulez revenir à un pare-feu vierge, vous tapez :  
/etc/init.d/mon\_parefeu clean

Ce qui précède concerne la partie ‘Filter’ d’un pare-feu. Ça assure un minimum de protection mais c’est loin d’être exhaustif.  
Je laisse à d’autres, plus ‘pointus’ que moi, le soin d’expliquer les parties plus complexes, telles que Raw, Mangle et Nat.  
J’espère que ce ‘tuto’, encore une fois réservé aux débutants, vous aura permis de mieux appréhender le pare-feu sous Debian.  
Les aides de tous les amis de ce forum et particulièrement celle de  
Matt, de François (fran.b) et de Pascal Hambourg, ont été de la plus grande utilité.  
Merci à eux !

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Mars 13, 2016, 11:40 UTC](https://www.debian-fr.org/t/installation-parefeu-iptables-ip6tables-pour-les-nuls/2183/4 "2016-03-13T11:40:18Z")

</div>

**MODIFICATIONS À APPORTER POUR LES IP v6**

Vous pouvez reprendre le tuto IPv4 de dessus en prenant soin de modifier le script comme suit :  
Partout où est écrit «&nbsp;iptables&nbsp;», ajoutez un ‹&nbsp;6&nbsp;› entre le ‹&nbsp;p&nbsp;› et le ‹&nbsp;t&nbsp;›, pour obtenir «&nbsp;ip6tables&nbsp;».  
Pour tout le reste du tuto, modifiez comme suit :  
Partout où est écrit «&nbsp;mon\_parefeu&nbsp;», ajoutez ‹&nbsp;IPv6&nbsp;› à la fin, pour obtenir «&nbsp;mon\_parefeuIPv6&nbsp;».  
Pour toutes les commandes, vous devrez remplacer «&nbsp;iptables&nbsp;» par «&nbsp;ip6tables&nbsp;».

De plus, il vous faudra ajouter les commandes suivantes :

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

```

Vous pouvez ignorer les règles de la chaîne OUTPUT si sa politique par défaut est ACCEPT, comme proposé dans le présent tuto.  
Si vous avez modifié cette politique, il vous faudra ajouter aussi les commandes :

```
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT

```

====================================

Pour quelques détails sur une discussion "IPv4 ==\>IPv6, vous pouvez consulter [ce fil](https://www.debian-fr.org/t/apprendre-a-passer-en-ipv6/68242)

====================================

Précisions de PascalHambourg dont l’original est page 469 du lien ci-dessus :

> Remplacer «&nbsp;icmp&nbsp;» par «&nbsp;icmpv6&nbsp;».  
> Attention : certains types/codes ICMP n’existent pas ou changent de nom en IPv6 et vice versa.  
> Sur une machine faisant office de routeur IPv6, remplacer  
> ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT  
> ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT  
> par  
> ip6tables -A INPUT -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT  
> ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT  
> La cible MASQUERADE n’est normalement pas nécessaire, l’un des objectifs d’IPv6 étant  
> de pouvoir allouer des adresses globales à toutes les machines.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Mars 13, 2016, 11:46 UTC](https://www.debian-fr.org/t/installation-parefeu-iptables-ip6tables-pour-les-nuls/2183/5 "2016-03-13T11:46:28Z")

</div>

_Dernière mise à jour les 12, 13 et 14 mars 2016._

**POUR TOUTE DISCUSSION SUR CE TUTO, VOUS ÊTES PRIÉS D’ALLER [LÀ](https://www.debian-fr.org/t/digression-installation-parefeu-iptables-pour-les-nuls/771)**

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Octobre 8, 2024, 10:26 UTC](https://www.debian-fr.org/t/installation-parefeu-iptables-ip6tables-pour-les-nuls/2183/6 "2024-10-08T10:26:15Z")

</div>

A scindé ce sujet (le Octobre 8, 2024, 10:26 UTC)

2 messages ont été scindés en un nouveau sujet : [Problème ver et pare feu](https://www.debian-fr.org/t/probleme-ver-et-pare-feu/90418)
