# Script iptable ne s'éxécute pas au boot

**URL:** <https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026>\
**Category:** Support Debian\
**Created:** [Avril 5, 2016, 1:23 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026 "2016-04-05T13:23:35Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Eonelia](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/958977/32.png) [@Eonelia](https://www.debian-fr.org/u/Eonelia)\
**Post date:** [Avril 5, 2016, 1:23 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/1 "2016-04-05T13:23:36Z")

</div>

Bonjour à tous,

En ce moment même, j’expérimente sur un VM Debian, la configuration d’iptables pour après, configurer le pare-feu sur mes serveurs virtuels.

Je me suis pas mal documenté depuis hier, en essayant de bien comprendre les commandes. Ca commence à rentrer, et j’ai fait un script avec l’aide de la doc ubuntu.

Mon fichier s’éxécute bien en faisant “sudo /etc/init.d/firewall”.  
puis “sudo iptables -L” m’affiche bien toutes les règles.

Mais quand je reboot, je relance un “sudo iptables -L” et j’ai aucune règle. Mon script ne doit pas se lancer au démarrage.

Les droits de mon script :  
`-rwxr-xr-x 1 root root 1301 avril 4 22:15 /etc/init.d/firewall`

Et j’ai bien fait “sudo update-rc.d firewall default”.

Je pensais que c’était lié au fait qu’on doit lancer le script et les commandes en root (ou sudo) donc j’ai mis root en propriétaire du fichier, mais sans succès …

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Avril 5, 2016, 1:36 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/2 "2016-04-05T13:36:43Z")

</div>

Tu peux regarder [ce fil](https://www.debian-fr.org/t/pare-feu-ipv4-ipv6-versions-bureau-et-serveur/68665?u=seb-ksl), pour essayer de comparer et trouver ce qui ne va pas de ton côté ;-).

---

<div class="post-metadata">

**Author:** ![Arnaud](https://www.debian-fr.org/user_avatar/www.debian-fr.org/arnaud/32/4098_2.png) [@Arnaud](https://www.debian-fr.org/u/Arnaud)\
**Post date:** [Avril 5, 2016, 3:08 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/3 "2016-04-05T15:08:07Z")

</div>

Tu es sous jessie ?  
Tu utilises quel système d’init : systemd ?  
C’est peut-être simplement ça le problème ?

---

<div class="post-metadata">

**Author:** ![Eonelia](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/958977/32.png) [@Eonelia](https://www.debian-fr.org/u/Eonelia)\
**Post date:** [Avril 6, 2016, 9:37 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/4 "2016-04-06T09:37:37Z")

</div>

Bonjour,

Oui je suis sous jessie et j’ai pris l’habitude d’utiliser systemd. C’est vrai que finalement, il faudrait que je vois pour faire un script systemd qui lance mon script iptables. Merci 🙂

Par contre, j’ai suivi le tuto que m’a indiqué seb-ksl, et je me suis rendu compte qu’au final, mon fichier était vraiment light. J’ai utiliser la méthode utilisée dans le tuto (le script init et le script iptables) mais quand je lance `sudo service init_firewall start`, j’ai l’erreur `Failed to start init_firewall.service. No such file or directory`

Pourtant, si je fais `sudo iptables`, iptables est bien reconnu. Mais dans le script on met juste “iptables”, ça peut être lié ? Et j’ai pas trop envie d’autoriser iptables à un user non ‘su’

De plus, quand je veux exécuter le script qui écrit les règles, ça me met `sudo : enable to execute /usr/local/sbin/config\_firewall : No such file or directory

Si je me log en `su root`et que je relance le script, j’ai `bin/sh : Mauvais interpréteur: aucun fichier ou dossier de ce type`

J’ai un peu de mal à comprendre il ne veut pas m’exécuter les scripts …

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Avril 6, 2016, 12:52 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/5 "2016-04-06T12:52:18Z")

</div>

C’est possible (étonnant mais possible) que tu n’aies pas l’interpréteur `dash` (qui fournit la commande `sh`). Il suffit d’installer le paquet `dash`.

---

<div class="post-metadata">

**Author:** ![Eonelia](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/958977/32.png) [@Eonelia](https://www.debian-fr.org/u/Eonelia)\
**Post date:** [Avril 6, 2016, 1:34 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/6 "2016-04-06T13:34:26Z")

</div>

J’ai vérifié et dash est bien installé.

Voici mes deux fichiers :  
/etc/init.d/init\_firewall

[http://pastebin.com/FkrTXPFc](http://pastebin.com/FkrTXPFc)

/usr/local/sbin/config\_firewall :  
[http://pastebin.com/w7eufKCS](http://pastebin.com/w7eufKCS)

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Avril 6, 2016, 4:24 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/7 "2016-04-06T16:24:36Z")

</div>

Bon, et si tu changes `#!bin/sh` par `#!bin/bash` en début des scripts ?  
Que donne le retour de `which sh` ?

---

<div class="post-metadata">

**Author:** ![mazarini](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/6f9a4e/32.png) [@mazarini](https://www.debian-fr.org/u/mazarini)\
**Post date:** [Avril 7, 2016, 1:19 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/8 "2016-04-07T13:19:46Z")

</div>

Bonjour,

Il me semble plus judicieux de lié le script à l’interface avec un “up: …” ou un “pre-up: …” dans le fichier /etc/network/interfaces  
Perso, j’utilise “iptables-restaure \< mes-règles” sachant que “iptables-save \> mes-règles” après le lancement de mon script de commandes iptables.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 7, 2016, 1:46 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/9 "2016-04-07T13:46:59Z")

</div>

Il manque un / devant bin/sh dans le shebang du script /usr/local/sbin/config\_firewall qui devrait être `#!/bin/sh` et non `#!bin/sh`.

Pour le reste, je n’ai pas accès à pastebin en ce moment pour voir la suite des scripts. Il n’était pas possible de les coller en entier ici ?

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Avril 7, 2016, 2:02 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/10 "2016-04-07T14:02:37Z")

</div>

> [@](#):
>
> Il manque un /

T’as d’bons yeux tu sais !

Édit : je me rends compte que j’ai copié/collé la connerie en plus :-/

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 7, 2016, 6:14 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/11 "2016-04-07T18:14:39Z")

</div>

> [@](#):
>
> Et j’ai bien fait “sudo update-rc.d firewall default”.

La systaxe correcte est `defaults` au pluriel, pas `default`.  
Faute de frappe lors de la rédaction du message ou lors de l’exécution de la commande (qui aurait donné lieu à une erreur) ?

Il y a d’autres points à éclaircir.

1. Dans ton message initial, tu écris que le script d’init est `/etc/init.d/firewall` mais dans les suivants le script est nommé `init_firewall`.  
Qu’en est-il ?

> [@](#):
>
> Pourtant, si je fais `sudo iptables`, iptables est bien reconnu.

Aucun rapport. L’erreur ne porte pas sur iptables mais sur ton script.

Pour faire le point, qu’affiche la commande suivante ?  
`ls -l /etc/*.d/*firewall*`

1. D’après le contenu du script `init_firewall`publié sur pastebin, le fichier `/usr/local/sbin/config_firewall` ne devrait pas être un script exécutable mais un fichier de règles iptables au format utilisé par `iptables-save` et `iptables-restore`, qui n’a donc rien à faire dans `/usr/local/sbin`. Or le contenu du fichier `config_firewall`publié sur pastebin est un script shell classique.

A noter qu’il y a une erreur dans le script `init_firewall` : la redirection dans les commandes `ip{6}tables-restore`devrait être faite sur l’entrée standard avec “\<” et non sur la sortie standard avec “\>” puisque le contenu du fichier `config_firewall` doit être lu par `iptables-restore` et non écrit.

Autre erreur dans ce script : tu spécifies le même fichier de règles `/usr/local/sbin/config_firewall` pour `iptables` et `ip6tables`. C’est acceptable seulement si les deux n’utilisent que des éléments communs entre IPv4 et IPv6 (donc pas d’`icmp`, `icmpv6`, `hl`, `ttl`…) contrairement à tes règles. Et dans ce cas, il est inutile d’enregistrer deux fois les règles pour IPv4 et IPv6 dans `stop)` puisque la seconde fois va écraser la première.

---

<div class="post-metadata">

**Author:** ![Eonelia](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/958977/32.png) [@Eonelia](https://www.debian-fr.org/u/Eonelia)\
**Post date:** [Avril 8, 2016, 8:57 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/12 "2016-04-08T08:57:13Z")

</div>

> La systaxe correcte est defaults au pluriel, pas default.  
> Faute de frappe lors de la rédaction du message ou lors de l’exécution de la commande (qui aurait donné lieu à une erreur) ?

Oui c’était bien une erreur de frappe lors de la saisie du topic ;).

> [@](#):
>
> 1. Dans ton message initial, tu écris que le script d’init est /etc/init.d/firewall mais dans les suivants le script est nommé init\_firewall.Qu’en est-il

En fait, comme expliqué dans mon premier message, j’avais prit des exemples à plusieurs endroits et principalement sur le doc ubuntu.  
Puis lorsque seb\_ksl m’a indiqué le lien du “tuto” pour configurer iptables, je suis reparti de 0 et je l’ai suivi.  
D’où le changement de nom du fichier.

> [@](#):
>
> Pour faire le point, qu’affiche la commande suivante ?ls -l /etc/\*.d/_firewall_

Elle m’affiche : `-rwxr-xr-x 1 root root 1645 avril 5 05:05 /etc/init.d/init_firewall`

Pour le reste, je vais refaire un script au format iptables-save et essayer de résoudre ou améliorer les scripts de moi même :).

Edit :  
J’ai donc fait 2 scripts différents (init\_firewall\_ipv4 et init\_firewall\_ipv6), après pas mal de corrections, les scripts fonctionnent.  
Je voudrais maintenant mettre au démarrage init\_firewall\_ipv4, mais quand je tape `update-rc.d /etc/init_firewall_ipv4 defaults`, j’ai `insserv : init_firewall_ipv6: service init_firewall_ipv6 already provided`.

Serait-ce parce que j’ai copié le script original, je l’ai modifié et enregistrer sous un nouveau nom ?

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 10, 2016, 6:12 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/13 "2016-04-10T18:12:20Z")

</div>

Probablement. Vérifie les en-têtes LSB des deux scripts, la valeur du champ `Provides:` de l’un des deux doit être erronée.

---

<div class="post-metadata">

**Author:** ![Eonelia](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/958977/32.png) [@Eonelia](https://www.debian-fr.org/u/Eonelia)\
**Post date:** [Avril 12, 2016, 9:08 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/14 "2016-04-12T09:08:32Z")

</div>

Effectivement, c’était vraiment tout bête. Le `Provides :` ne comportait pas le même nom que le script.  
Sur mon linux test, ça a l’air de bien fonctionner.

Je vous remercie beaucoup pour votre aide 😃

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 12, 2016, 12:01 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/15 "2016-04-12T12:01:21Z")

</div>

La valeur du champ `Provides:` ne doit pas forcément être identique au nom du script, mais il faut qu’elle soit unique parmi tous les scripts d’init.

---

<div class="post-metadata">

**Author:** ![Eonelia](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/958977/32.png) [@Eonelia](https://www.debian-fr.org/u/Eonelia)\
**Post date:** [Avril 12, 2016, 1:31 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/16 "2016-04-12T13:31:04Z")

</div>

Ah je comprend mieux alors. Mais pourquoi j’avais cette erreur, alors que j’avais supprimé l’ancien script ? Il y a un moyen pour voir si j’ai des résidus (liens cassés ou autre) de l’ancien script ?

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 13, 2016, 9:41 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/17 "2016-04-13T09:41:59Z")

</div>

Tu peux regarder s’il reste des anciens liens dans `/etc/rc[S0-6].d/`.

---

<div class="post-metadata">

**Author:** ![Eonelia](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/958977/32.png) [@Eonelia](https://www.debian-fr.org/u/Eonelia)\
**Post date:** [Mai 3, 2016, 8:58 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/18 "2016-05-03T08:58:38Z")

</div>

Bonjour,

Après plusieurs jours d’arrêt sur ce script, je viens de m’y remettre pour le perfectionner. Sur un de mes serveurs il fonctionne bien, j’ai donc récupéré les fichiers (fichier de conf + script) pour les mettre sur mon deuxième serveur. Et là, quand je lance le script j’ai :  
`● init\_firewall\_ipv4.service - LSB: iptables based firewall  
Loaded: loaded (/etc/init.d/init\_firewall\_ipv4)  
Active: failed (Result: exit-code) since ven. 2016-04-29 10:11:38 CEST; 13min ago  
Process: 1768 ExecStart=/etc/init.d/init\_firewall\_ipv4 start (code=exited, status=203/EXEC)

avril 29 10:11:38 Timide systemd[1]: init\_firewall\_ipv4.service: control process exited, code=exited status=203  
avril 29 10:11:38 Timide systemd[1]: Failed to start LSB: iptables based firewall.  
avril 29 10:11:38 Timide systemd[1]: Unit init\_firewall\_ipv4.service entered failed state.  
`

Les droits sont identiques sur les deux serveurs, et les deux sont sous Debian 8. J’ai beau vérifier mon script, je vois pas d’où vient le problème …

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Mai 3, 2016, 9:09 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/19 "2016-05-03T09:09:17Z")

</div>

Essaie d’exécuter le script manuellement pour voir ce qui se passe.  
`/etc/init.d/init_firewall_ipv4 start`

---

<div class="post-metadata">

**Author:** ![Eonelia](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/958977/32.png) [@Eonelia](https://www.debian-fr.org/u/Eonelia)\
**Post date:** [Mai 3, 2016, 9:12 UTC](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026/20 "2016-05-03T09:12:04Z")

</div>

Ca me renvoi :

`bash: /etc/init.d/init_firewall_ipv4 : /bin/sh^M : mauvais interpréteur: Aucun fichier ou dossier de ce type`

Avec #!/bin/bash c’est pareil. Mais qu’est ce qu’il bien faire là ce ^M ? Il y est pas dans mon script

[Page suivante](https://www.debian-fr.org/t/script-iptable-ne-sexecute-pas-au-boot/69026.md?page=2)
