LSB tags, iptables, et runlevel

Bonjour,

Je suis en train de configurer iptables, et j’écrivais mon script de démarrage. Voici donc les lsb-flags que je lui ai donné :

BEGIN INIT INFO

Provides: iptables configuration

Required-Start: $local_fs $network

Required-Stop: $local_fs $remote_fs

Default-Start: 3 5

Default-Stop: 0 1 2 4 6

Short-Description: règles de filtrage

Description: Iptables is an open-source firewall

END INIT INFO

au départ, les runlevel étaient ainsi :
2 3 4 5
0 1 6

voici les sorties d’“update-rc iptables defaults” :
avec Default-Start: 2 3 4 5
update-rc.d: using dependency based boot sequencing
insserv: warning: current stop runlevel(s) (empty) of script iptables' overwrites defaults (0 1 6). insserv: warning: current stop runlevel(s) (empty) of scriptiptables’ overwrites defaults (0 1 6).
avec Default-Start: 3 5
pdate-rc.d: using dependency based boot sequencing
update-rc.d: warning: iptables start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (3 5)
update-rc.d: warning: iptables stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 1 2 4 6)
insserv: warning: current start runlevel(s) (2 3 4 5) of script iptables' overwrites defaults (3 5). insserv: warning: current stop runlevel(s) (empty) of scriptiptables’ overwrites defaults (0 1 2 4 6).
insserv: warning: current start runlevel(s) (2 3 4 5) of script iptables' overwrites defaults (3 5). insserv: warning: current stop runlevel(s) (empty) of scriptiptables’ overwrites defaults (0 1 2 4 6).

Alors… Pourquoi ne me permet-il pas de choisir tranquillement mes runlevel ? comment faire pour éviter les avertissements ?

Merci :slightly_smiling:

Je ne sais toujours pas à quoi correspondent ces avertissements, mais le boot se passe correctement, mes règles marchent et mon pare-feu est niquel :slightly_smiling: .

Je ne pourrai pas réellement te dire pourquoi ça fait ça : j’ai eu ce genre d’avertissements aussi en jouant avec les runlevel, ils sont partis quand j’ai bidouillé le script et je ne me suis jamais vraiment posé la question puisqu’il ne me dit plus rien. :unamused:

Je soupçonne (sans avoir le courage de vérifier) que c’est parce que je/tu avons un peu trop joué avec les runlevels et fait des update … defaults sans forcément faire de update … remove avant.

Par contre, si je peux te donner un conseil… Démarre ton iptables avant que tes interfaces soient montées : ça évite un “trou” (même minuscule) durant lequel tu as du réseau sans firewall.
Pour ça, il faut démarrer en S juste avant “networking” (qui monte les interfaces) mais après “ifupdown” (à priori nécessaire, je n’ai pas testé sans mais ça mange pas de pain) et “mountkernfs” (pour pouvoir configurer certains paramètres réseau dans /proc).

Aussi, pas besoin de Stop (inutile de faire un flush des règles quand tu éteins la machine).

Mon header, qui fait tout ça sans avertissements :

[code]### BEGIN INIT INFO

Provides: le-nom-de-ton-script

Required-Start: mountkernfs ifupdown $local_fs

X-Start-Before: networking

Default-Start: S

Required-Stop:

Default-Stop:

Short-Description: Configure the ip(6)tables firewall.

Description: Configure the ip(6)tables firewall.

END INIT INFO[/code]

Puis pour mettre à jour :

## le "remove" risque de te donner des avertissements, si oui suis ses conseils update-rc.d le-nom-de-ton-script remove update-rc.d le-nom-de-ton-script defaults

Ce qui me fait penser que ton “iptables configuration” (avec espace) dans le “Provides” c’est pas forcément très catholique. Ou pas.

D’accords pour les dépendances, mais le runlevel S ??

Est-ce qu’il démarre bien dans tous les runlevel ?
Il me semble que c’est le mode mono-utilisateur, non ?

Edit, j’ai trouvé pour les warnings :

BEGIN INIT INFO

Provides: ipconf

Required-Start: mountkernfs ifupdown $local_fs

X-Start-Before: networking

Default-Start: 2 3 4 5

Required-Stop:

Default-Stop: 0 1 6

Short-Description: Configure the iptables firewall.

Description: Configure the iptables firewall.

END INIT INFO

pour le runlevel 2 : normalement, aucun démon n’est lancé à ce niveau, ni d’interfaces réseau. C’est ce que je croyais, et c’est pourquoi je ne l’avais pas indiqué après documentation. Or, Debian semble le considérer différemment, d’où l’inclusion ici.

avec
update-rc.d -f ./ipconf remove
update-rc.d ./ipconf defaults

tout roule.

[quote=“Lancazar”]D’accords pour les dépendances, mais le runlevel S ??

Est-ce qu’il démarre bien dans tous les runlevel ?
Il me semble que c’est le mode mono-utilisateur, non ?[/quote]

Lors du démarrage de ta machine le runlevel S est toujours exécuté avant de basculer vers 2/3/4/5 selon je-ne-sais-plus-quelle-règle. D’ailleurs si tu regardes /etc/init.d/networking (qui déclenche, entre autres, un ifup de toutes tes interfaces réseau) il ne démarre qu’en S et pourtant tes interfaces sont bien actives dans tous les runlevel.

Donc, en runlevel 2/3/4/5 le X-Start-Before networking est impossible à satisfaire puisque ce dernier a été lancé depuis belle lurette. La raison pour laquelle insserv ne grogne pas doit être qu’il ne fait pas de comparaisons inter-runlevels mais uniquement intra.

De toutes façons, une fois ton iptables configuré en S, peu importe vers quel runlevel tu bascules ensuite, les règles ne vont pas s’effacer toutes seules. Sachant, je me répète, que le S est systématiquement exécuté à chaque boot, peu importe vers quel runlevel “final” tu te diriges.

D’accord, merci pour les précisions.