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

