[OpenBSD]

[Précédent : Ensembles d'Adresses ("Pools") et Partage de Charge] [Index] [Suivant : Journal des Evénements]

PF: Balisage de Paquets


Table des Matières


Introduction

Le balisage de paquets est une méthode pour marquer les paquets avec un identifiant interne qui peut être utilisé comme critère dans les règles de filtrage et de traduction d'adresses. Grâce au balisage, il est possible de créer des paquets dits "de confiance" entre des interfaces et de déterminer si des paquets ont été traités par les règles de traduction d'adresses. Il est aussi possible de faire du filtrage suivant une politique au lieu de faire du filtrage par règle.

Affectation de Balises aux Paquets

Pour ajouter une balise à un paquet, utilisez le mot-clé tag :
pass in on $int_if all tag INTERNAL_NET keep state

La balise INTERNAL_NET sera ajoutée à tout paquet qui correspondra à la règle précitée. Il est à noter que le mot-clé keep state : keep state (ou modulate state/synproxy state) doit être utilisé dans les règles passqui affectent des balises aux paquets.

L'affectation de balises observe les règles suivantes :

Prenons le jeu de règles suivant comme exemple :

(1) pass in on $int_if tag INT_NET keep state
(2) pass in quick on $int_if proto tcp to port 80 tag \
        INT_NET_HTTP keep state
(3) pass in quick on $int_if from 192.168.1.5 keep state

De même que pour les règles de filtrage, les balises peuvent être appliquées par des règles nat, rdr, et binat en utilisant le mot-clé tag.

Vérification des Balises Appliquées

Pour vérifier les balises précédemment appliquées, utilisez le mot-clé tagged comme dans l'exemple suivant :
pass out on $ext_if tagged INT_NET keep state

Les paquets sortant à partir de $ext_ifdoivent être balisés avec la balise INT_NET pour que la règle ci-dessus corresponde à ces paquets. La correspondance inverse peut aussi être réalisée avec l'opérateur ! :

pass out on $ext_if tagged ! WIFI_NET keep state

Filtrage par Politique

Le filtrage par politique utilise une approche différente pour l'écriture d'un jeu de règles. Une politique est définie par rapport aux types de trafic : règles pour les types de trafic à passer, règles pour les types de trafic à bloquer. Les paquets sont ensuite classifiés au sein de la politique selon les critères traditionnels : adresse IP source/destination, protocole, etc. Examinez la politique de filtrage qui suit :

Notez la manière dont la politique couvre all le trafic qui transite par le pare-feu. Le mot entre parenthèses indique le nom de la balise qui sera utilisée pour chaque élément de la politique.

Des règles de filtrage et de traduction doivent être écrites maintenant pour classifier les paquets au sein de la politique.

rdr on $ext_if proto tcp from <spamd> to port smtp \
   tag SPAMD -> 127.0.0.1 port 8025

block all
pass in on $int_if from $int_net tag LAN_INET keep state
pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ keep state
pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ keep state

Maintenant les règles qui constituent la politique sont définies.

pass in  quick on $ext_if tagged SPAMD keep state
pass out quick on $ext_if tagged LAN_INET keep state
pass out quick on $dmz_if tagged LAN_DMZ keep state
pass out quick on $dmz_if tagged INET_DMZ keep state

Maintenant que le jeu de règles a été paramétré, les modifications futures sont à apporter uniquement dans les règles de classifications. Par exemple, si un serveur POP3/SMTP est ajouté à la DMZ, il sera nécessaire d'ajouter des règles de classification pour le trafic POP3 et SMTP comme le montre l'exemple suivant :

mail_server = "192.168.0.10"
...
pass in on $ext_if proto tcp to $mail_server port { smtp, pop3 } \
   tag INET_DMZ keep state

Le trafic mail sera autorisé car il fait partie de la classification INET_DMZ.

Voici le jeu de règles complet :
# macros
int_if  = "dc0"
dmz_if  = "dc1"
ext_if  = "ep0"
int_net = "10.0.0.0/24"
dmz_net = "192.168.0.0/24"
www_server = "192.168.0.5"
mail_server = "192.168.0.10"

table <spamd> persist file "/etc/spammers"

# classification -- classifier les paquets selon la politique
# définie
rdr on $ext_if proto tcp from <spamd> to port smtp \
    tag SPAMD -> 127.0.0.1 port 8025

block all
pass in on $int_if from $int_net tag LAN_INET keep state
pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ keep state
pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ keep state 
pass in on $ext_if proto tcp to $mail_server port { smtp, pop3 } \
    tag INET_DMZ keep state 

# filtrage -- autoriser/bloquer suivant la politique.
pass in  quick on $ext_if tagged SPAMD keep state
pass out quick on $ext_if tagged LAN_INET keep state
pass out quick on $dmz_if tagged LAN_DMZ keep state
pass out quick on $dmz_if tagged INET_DMZ keep state 

Balisage des Trames Ethernet

Le balisage peut être effectué au niveau Ethernet si la machine de balisage/filtrage est aussi un pont ( bridge(4)). En créant des règles de filtrage pour bridge(4) qui utilisent le mot-clé tag, PF peut filtrer les paquets d'après leur adresse MAC source/destination. Les règles pour bridge(4) sont créés avec la commande brconfig(8). Exemple :
# brconfig bridge0 rule pass in on fxp0 src 0:de:ad:be:ef:0 \
   tag USER1

Puis dans pf.conf:

pass in on fxp0 tagged USER1

[Précédent : Ensembles d'Adresses ("Pools") et Partage de Charge] [Index] [Suivant : Journal des Evénements]


[back] www@openbsd.org
Originally [OpenBSD: tagging.html,v 1.2 ]
$Translation: tagging.html,v 1.2 2004/01/02 22:10:05 saad Exp $
$OpenBSD: tagging.html,v 1.2 2004/01/03 19:45:23 jufi Exp $