mouss wrote: > Gaëtan PERRIER a écrit : >> C'est ce que je fais par défaut mais là je voulais ajouter dynamiquement des >> règles en fonction de l'apparition de connections vpn par ex. mais finalement >> je me dis que ce n'est peut-être pas problématique de les ajouter en premier >> avec un iptables -I ? >> > > > La méthode usuelle est de créer une chaîne et d'insérer les règles > dynamiques dans cette chaîne. > > si l'anglais ne te fait pas peur, tu peux jeter un coup d'oeil sur: > > http://dave.thehorners.com/tech-talk/unix-linux-bsd-osx-etc/76-information-about-the-linuxunix-os-and-friends/86-iptables-a-real-mans-firewall >
Voila ce que cela donne chez moi :p! [code] # ifup eth3 Chargement du fichier : fw_config.sh dthfw v0.2 Chargement du fichier : fw_modules.sh Chargement du fichier : fw_proc.sh Chargement du fichier : fw_rules.sh Chargement du fichier : eth3.sh [+] Loading iptables rules for eth3 interface ... Done. # iptables -L -v | grep eth3 0 0 eth3_in_new all -- eth3 any anywhere anywhere 17 3006 eth3_out_new all -- any eth3 anywhere anywhere Chain eth3_in_new (1 references) Chain eth3_out_new (1 references) # ifdown eth3 Chargement du fichier : fw_config.sh dthfw v0.2 Chargement du fichier : fw_modules.sh Chargement du fichier : fw_proc.sh Chargement du fichier : fw_rules.sh Chargement du fichier : eth3.sh [+] Unloading rules for eth3 interface ... Done. # iptables -L -v | grep eth3 [/code] Avec un simple script bash présent dans: - /etc/network/if-pre-up.d/ - /etc/network/if-post-down.d Un petit exemple: [code] #!/bin/bash DTHFW="dthfw" if [ "$MODE" = "start" ]; then MODE=load else MODE=unload fi invoke-rc.d $DTHFW $MODE $IFACE exit 0 [/code] Ensuite, c'est le script firewall qui prend le relais et fait les vérifications d'usage: - firewall démarré, - recherche des règles associées à l'interface ... Aujourd'hui j'ai un fichier de règles par interface. Chaque fichier est renseigné de la même façon: [code] #!/bin/sh METHOD=$1 IFACE=$2 IPTABLES='/sbin/iptables' IN_CHAIN=$IFACE'_in_new' OUT_CHAIN=$IFACE'_out_new' ============================================================================= # Unload iptables rules for this specific interface # # This function removes all specific rules linked to this interface. # Therefore, the user defined chains are unlinked from the dynamic # chain, then flushed and by the end removed # # syntax : unload # # return : nothing unload () { $IPTABLES -D dyn_in_new -i $IFACE -j $IN_CHAIN $IPTABLES -F $IN_CHAIN $IPTABLES -X $IN_CHAIN $IPTABLES -D dyn_out_new -o $IFACE -j $OUT_CHAIN $IPTABLES -F $OUT_CHAIN $IPTABLES -X $OUT_CHAIN } # ============================================================================= # Load iptables rules for this specific interface # # This function adds all specific rules linked to this interface. # Therefore, the user defined chains are created and linked to the # dynamic chains, then the ruleset is applied # # syntax : load # # return : nothing load () { ... } [/code] On remarquera les chaines utilisateurs dyn_in_new et dyn_out_new dans lesquelles sont ajoutées une chaine utilisateur par interface. L'avantage est grand, car: - Le firewall n'est jamais redémarré à moins d'une modification de la politique par défaut. - Chaque ruleset associé à une interface peut-être chargé/déchargé de façon simple. - Une mise à jour de mon ruleset pour mon interface de test peut échouer sans impacter tout le firewall et verrouiller ainsi tous les accès. - Toutes les interfaces bénéficient de la politique par défaut bien qu'ajouter plus tard. -- Franck Joncourt http://debian.org - http://smhteam.info/wiki/ Fingerprint : C10E D1D0 EF70 0A2A CACF 9A3C C490 534E 75C0 89FE
signature.asc
Description: OpenPGP digital signature