Sous-sections

8.5 Utiliser le filtrage de paquets

8.5.1 Ajouter vos propres chaînes et règles

Un ensemble de routines est fourni pour manipuler le filtrage de paquets, elles permettent d'ajouter ou de supprimer des chaînes (en anglais "Chains") et des règles. Une chaîne sert à nommée une liste de règles ordonnées. Il y a déjà un ensemble de chaînes prédéfinies sur le routeur fli4l (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING). Vous pouvez créer d'autre chaînes pour certaines fonctions et selon vos besoins.

add_chain/add_nat_chain <chain> :
ajoute une chaîne de «filtrage» ou de table «nat»
flush_chain/flush_nat_chain <chain> :
supprime toutes les règles d'une chaîne de «filtrage» ou de table «nat»
del_chain/del_nat_chain <chain> :
supprime une chaîne à partir du «filtrage» ou de la table «nat». Les chaînes doivent être vides avant qu'elles puissent être supprimées, et ces chaînes ne doivent pas avoir de référence. Une telle référence est par exemple l'action JUMP dont la cible est précisément cette chaîne.
add_rule/ins_rule/del_rule :
ajoute une règle à la fin d'une chaîne (add_rule) ou partout dans la chaîne ins_rule) ou supprime une règle d'une chaîne (del_rule). l'exécution sera la suivante :

    add_rule <table> <chain> <rule> <comment>
    ins_rule <table> <chain> <rule> <position> <comment>
    del_rule <table> <chain> <rule> <comment>

les paramètres ont les significations suivantes :

table
La table dans laquelle la chaîne est insérée
chain
La chaîne dans laquelle la règle est insérée
rule
La règle qui doit être insérée, vous devez utiliser le même format que dans le fichier-config
position
La position dans laquelle la règle doit être insérée (seulement avec ins_rule)
comment
Le commentaire, il sera affiché avec la règle, il sera vu dans le filtrage de paquets.

8.5.2 Classer les règles dans une infrastructure

fli4l configure les règles du filtrage de paquets avec certaine norme. Si vous souhaitez insérer vos propres règles, vous pouvez ajouter ces règles, après les régles par défaut. Pour cela, vous devez savoir quelle action l’utilisateur a effectué pour rejeter les paquets. Ces informations peut être obtenue pour les chaînes FORWARD et INPUT en utilisant deux fonctions, get_defaults et get_count. Après l'exécution de

    get_defaults <chain>

On obtient les résultats suivants :

drop :
cette variable contient la chaîne dans laquelle le paquet sera dévié et rejeté.
reject :
cette variable contient la chaîne dans laquelle le paquet sera dévié et refusé.

Après l'exécution de

    get_count <chain>

la variable res contient le nombre de règle de la chaîne <chain>. Cette position est importante car vous ne pouvez pas utiliser simplement add_rule pour ajouter une règle à la fin de les chaînes de «filtage» prédéfini INPUT, FORWARD et OUTPUT. Car ces chaînes sont déjà terminées par des règles par défaut, qui traite tous les paquets restants, en fonction de la disponibilité de la variable PF_<Chaîne>_POLICY. Donc si vous insérez cette dernière règle après les autres il n'y aura aucun effet. La fonction get_count permet maintenant, de détecter l'emplace directement avant la dernier règle et de transmettre cette position à la fonction ins_rule avec le paramètre <position> ainsi, la règle souhaitée sera ajouter à la fin de la chaîne appropriée, cependant devant la dernier règle saisis.

Voici un exemple à partir du script opt/etc/rc.d/rc390.dns_dhcp du paquetage «dns_dhcp» pour une petit explication :

    case $OPT_DHCPRELAY in
        yes)
            begin_script DHCRELAY "starting dhcprelay ..."

            idx=1
            interfaces=""
            while [ $idx -le $DHCPRELAY_IF_N ]
            do
                eval iface='$DHCPRELAY_IF_'$idx

                get_count INPUT
                ins_rule filter INPUT "prot:udp  if:$iface:any 68 67 ACCEPT" \
                    $res "dhcprelay access"

                interfaces=$interfaces' -i '$iface
                idx=`expr $idx + 1`
            done
            dhcrelay $interfaces $DHCPRELAY_SERVER

            end_script
        ;;
  esac

Ici vous pouvez voir dans le milieu de la boucle l'exécution de get_count suivie par l'exécution de la fonction ins_rule, entre autres la variable res est passé comme paramètre position.

8.5.3 Extension pour le test de filtrage de paquets

fli4l utilise la syntaxe match:params dans les règles de filtrage des paquets, cela permet d'avoir des conditions supplémentaires pour les paquets (voir mac:, limit:, length:, prot:, ...). Si vous souhaitez ajouter des tests supplémentaires, vous devez faire comme ci-dessous :

  1. Vous devez définir un nom approprié. Ce nom doit commencer par une lettre minuscule entre a-z et ensuite être composé de n'importe quelles lettres et de nombres.


    Si vous testez de filtrage de paquets pour les règles IPv6, assurez-vous alors que le nom du test n'est pas un composant d'une adresse IPv6 valide !

  2. Créer d'un fichier opt/etc/rc.d/fwrules-<name>.ext. Le contenu de ce fichier ressemble à ceci :

        # IPv4 extension is available
        foo_p=yes
    
        # the actual IPv4 extension, adding matches to match_opt
        do_foo()
        {
            param=$1
            get_negation $param
            match_opt="$match_opt -m foo $neg_opt --fooval $param"
        }
    
        # IPv6 extension is available
        foo6_p=yes
    
        # the actual IPv6 extension, adding matches to match_opt
        do6_foo()
        {
            param=$1
            get_negation6 $param
            match_opt="$match_opt -m foo $neg_opt --fooval $param"
        }
    
    Le test de filtrage de paquets ne doit pas nécessairement être implémenté pour les protocoles IPv4 et IPv6 (bien que cela soit préférable et logique pour les deux protocoles de couche 3).

  3. Test de l'extension :

        $ cd opt/etc/rc.d
        $ sh test-rules.sh 'foo:bar ACCEPT'
        add_rule filter FORWARD 'foo:bar ACCEPT'
        iptables -t filter -A FORWARD -m foo --fooval bar -s 0.0.0.0/0 \
            -d 0.0.0.0/0 -m comment --comment foo:bar ACCEPT -j ACCEPT
    

  4. L’extension est incluse et tous les fichiers restants (les composants iptables) sont archivés avec le mécanisme connus.
  5. Permet l'extension dans la configuration, il faut ajouter FW_GENERIC_MATCH et/ou FW_GENERIC_MATCH6 dans le fichier-exp, par exemple :

        +FW_GENERIC_MATCH(OPT_FOO) = 'foo:bar' : ''
        +FW_GENERIC_MATCH6(OPT_FOO) = 'foo:bar' : ''
    

© 2001-2019 L'équipe fli4l - 27 janvier 2019