Forum Linux.debian/ubuntu Script de démarrage du pare-feu

Posté par .
Tags : aucun
1
19
sept.
2009
Bonjour :)

J'utilise depuis pas mal de temps /etc/network/if-pre-up.d/ et /etc/network/if-post-down/ pour stocker mes scripts de pare-feu dépendants d'une interface spécifique.

J'utilise également /etc/init.d/ pour placer les règles génériques (politiques par défaut, ports ouverts dans tous les cas, journalisation des choses étranges, etc). Ce script s'exécute avant que les interfaces soient montées (start) et il lorsqu'elles sont toutes démontées (stop). Les interfaces sont donc protégées tout le temps.

Le tout pointe vers /etc/iptables/ qui contient les scripts et les fichiers de configuration. Ca évite de tout éparpiller.

Question 1:
J'aimerais ne pas utiliser de script dans /etc/init.d/ Pour cela il faut qu'un script de /etc/network/if-pre-up.d s'exécute une seule fois lorsque la première interface se monte.
J'aimerais le faire sans poser un fichier de verrou. Je me dis que je pourrais me baser sur la sortie de ifconfig. Si aucune interface n'est affichée alors le script s'exécute, sinon ça veut dire qu'il a déjà été lancé. Ou se baser sur le contenu de /proc/net/xxxx ?
J'ai bon ? :)

Question 2:
Si je reste avec mon script dans /etc/init.d/ alors je voudrais quelque chose de plus propre que ma bidouille actuelle.
Pour être certain que mon script s'exécute avant le montage des interfaces, je le numérote à la main dans /etc/rcS.d/
Je suis certain qu'on peut faire plus propre en utilisant l'en-tête standard du script. Genre:

#! /bin/sh
### BEGIN INIT INFO
# Provides: iptables-maison
# Required-Start: ifupdown-clean
# Required-Stop: ifupdown-clean
# Default-Start: 2 3 4 5 ou alors "S" ?
# Default-Stop: 0 6 ou rien, c'est aussi bien
# short-description: pare-feu maison
### END INIT INFO


Ma question est: si je précise ifupdown-clean, suis-je certain que le script sera exécuté après ifupdown-clean mais avant tout autre script nécessitant ifupdown-clean ? En particulier ifupdown s'exécute après, puis networking. Et je veux que mon script s'exécute avant ceux-là.
  • # Ordre alphabétique

    Posté par (page perso) . Évalué à 4.

    En théorie tu devrais pouvoir utiliser "# X-Start-Before: ifupdown" dans ton en-tête. Mais ce n'est traité que comme une indication non obligatoire. Et ça ne fonctionne pas avec la méthode de démarrage à l'ancienne (l'actuelle quoi), uniquement avec insserv.

    Si tu veux être certain que ça fonctionne... tu ne peux pas sans bidouiller (à moins qu'une autre personne sache, je suis preneur).
    Une astuce est de nommer ton script aaa-iptables, comme ça les liens seront S18-aaa-iptables et seront lancés avant les autres (lancement par ordre alphabétique). C'est moche, ça marche. Lors de l'arrêt, ça fonctionne aussi.

    Une autre bidouille est d'éditer les scripts des services que tu veux lancer ensuite pour inclure ton service (puis relancer update-rc.d pour chaque), mais ça va lâcher à la première mise à jour sérieuse. Bof bof.

    Sinon pour placer ton script dans if-pre-up.d tu peux également voir si le contenu de run/ifstate te convient. Je n'ai pas testé, c'est peut-être une mauvaise idée. /proc/net me semble bien comme idée. Reste à savoir que tester.
  • # /etc/network/interfaces

    Posté par . Évalué à 2.

    Je ne sais pas quelle distro tu utilises...

    Sur Debian GNU/Linux, je lance mes scripts iptables depuis /etc/network/interfaces, grâce aux 'commandes' pre-up, up, post-up... pour chaque interface que je souhaite configurer.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.