[Précédent : Problèmes avec FTP] [Index] [Suivant : Haute-disponibilité des pare-feu avec CARP et pfsync]
Authpf charge les règles de filtres et de NAT dans un point d'ancrage unique. L'ancre est nommée par la combinaison de l'identifiant UNIX de l'utilisateur et de l'id du processus authpf dans le format "identifiant(PID)". Chaque ancre utilisateur est stockée dans l'ancre authpf qui est elle même ancrée dans le jeu de règles principal. Le "chemin d'ancrage complet" devient dès lors :
jeu_de_regles_principal/authpf/identifiant(PID)
Les règles qu'authpf charge peuvent être configurées par utilisateur ou globalement.
Voici quelques exemples d'utilisation d'authpf :
Authpf enregistre le nom d'utilisateur et l'adresse IP de chaque utilisateur qui réussit à s'authentifier ainsi que le début et la fin de leur session. L'enregistrement se fait via syslogd(8). En utilisant cette information, un administrateur peut déterminer qui s'est connecté et responsabiliser les utilisateurs par rapport à leur trafic réseau.
Authpf ne se lancera pas si le fichier de configuration /etc/authpf/authpf.conf n'est pas présent. Même si le fichier est vide (de taille nulle), il doit être présent ou Authpf se fermera automatiquement après qu'un utilisateur s'authentifie correctement.
Les directives de configuration suivantes peuvent êtres placées dans authpf.conf :
nat-anchor "authpf/*"
rdr-anchor "authpf/*"
binat-anchor "authpf/*"
anchor "authpf/*"
PF "sortira" du jeu de règles principal pour évaluer les règles authpf à l'endroit où les règles anchor sont placées dans le jeu de règles. Il n'est pas nécessaire que les quatre règles anchor soient présentes. Par exemple, si authpf ne doit charger aucune règle de traduction nat, la règle nat-anchor peut être omise.
Le premier fichier contient des règles qui seront uniquement chargées lorsque l'utilisateur $USER (cette variable étant à remplacer par le nom d'utilisateur) se connecte. La configuration spécifique par utilisateur est utilisée lorsqu'un utilisateur donné -- un administrateur par exemple -- nécessite un jeu de règles différent du jeu de règles authpf par défaut. Le deuxième fichier contient les règles par défaut qui sont chargées pour tout utilisateur qui ne possède pas son propre fichier authpf.rules. Si le fichier spécifique à l'utilisateur existe, il est chargé au lieu du fichier par défaut. Au moins un des fichiers doit exister. Autrement authpf ne fonctionnera pas.
Les règles de filtrage et de traduction ont la même syntaxe que pour n'importe quel autre jeu de règles PF avec une seule exception : Authpf permet l'utilisation de deux macros prédéfinies :
Il est recommandé d'utiliser la macro $user_ip pour ne permettre que le trafic provenant de la machine de l'utilisateur authentifié.
En plus de la macro $user_ip, authpf utilisera la table authpf_users (si elle existe) pour stocker les adresses IP de tous les utilisateurs authentifiés. Soyez sûrs de définir la table avant de vouloir l'utiliser :
table <authpf_users> persist
pass in on $ext_if proto tcp from <authpf_users> \
to port smtp flags S/SA keep state
Cette table ne devrait être utilisée que pour les règles devant s'appliquer à tous les utilisateurs authentifiés.
Autrement, il est aussi possible d'autoriser uniquement l'accès à des utilisateurs spécifiques en mettant leur nom d'utilisateur dans le fichier /etc/authpf/authpf.allow. Si le fichier /etc/authpf/authpf.allow n'existe pas ou contient "*", authpf permettra l'accès à n'importe quel utilisateur qui a réussi à se connecter via SSH et qui n'est pas explicitement banni.
Si authpf n'est pas capable de déterminer s'il doit autoriser ou interdire l'accès à un utilisateur, il affichera un message bref et déconnectera l'utilisateur. Une entrée dans le fichier /etc/authpf/banned/ est toujours prise en compte avant une entrée dans le fichier /etc/authpf/authpf.allow.
Chaque fois qu'un utilisateur s'authentifie correctement à authpf, un message indiquant que l'utilisateur est correctement authentifié est affiché.
Hello charlie. You are authenticated from host "64.59.56.140"
Ce message peut être suivi par un message personnalisé dans /etc/authpf/authpf.message. Le contenu de ce fichier sera affiché après le message d'accueil par défaut.
Il existe plusieurs méthodes pour attribuer authpf à un utilisateur comme shell de connexion :
Les classes d'authentification sont créées dans le fichier login.conf(5). OpenBSD inclu une classe d'authentification pour les utilisateurs authpf :
authpf:\
:welcome=/etc/motd.authpf:\
:shell=/usr/sbin/authpf:\
:tc=default:
Les utilisateurs sont assignés à une classe d'authentification par l'édition du champ class de la base d'utilisateurs passwd(5). Une méthode pour le faire est l'utilisation de la commande chsh(1).
# ps -ax | grep authpf
23664 p0 Is+ 0:00.11 -authpf: charlie@192.168.1.3 (authpf)
Dans l'exemple ci-dessus, charlie est connecté depuis la
machine 192.168.1.3. En envoyant un signal SIGTERM au processus authpf,
on peut déconnecter l'utilisateur. Authpf supprimera aussi toute règle
chargée pour l'utilisateur et supprimera toutes les connexions à état que
l'utilisateur aura ouvert.
# kill -TERM 23664
Le fichier /etc/authpf/authpf.rules contient les règles
suivantes :
wifi_if = "wi0"
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
https } flags S/SA keep state
|
L'administrateur charlie devra être capable d'accéder aux
serveurs SMTP et POP3 du campus en plus des droits d'accès précités. Les
règles suivantes font partie du fichier
/etc/authpf/users/charlie/authpf.rules :
wifi_if = "wi0"
smtp_server = "10.0.1.50"
pop3_server = "10.0.1.51"
pass in quick on $wifi_if proto tcp from $user_ip to $smtp_server \
port smtp flags S/SA keep state
pass in quick on $wifi_if proto tcp from $user_ip to $pop3_server \
port pop3 flags S/SA keep state
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
https } flags S/SA keep state
|
Voici le contenu du jeu de règles principal figurant dans le fichier
/etc/pf.conf :
# macros
wifi_if = "wi0"
ext_if = "fxp0"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"
table <authpf_users> persist
scrub in all
# filtrage
block drop all
pass out quick on $ext_if inet proto tcp from \
{ $wifi_if:network, $ext_if } flags S/SA modulate state
pass out quick on $ext_if inet proto { udp, icmp } from \
{ $wifi_if:network, $ext_if } keep state
pass in quick on $wifi_if inet proto tcp from $wifi_if:network to $wifi_if \
port ssh flags S/SA keep state
pass in quick on $wifi_if inet proto { tcp, udp } from <authpf_users> \
to $dns_servers port domain keep state
anchor "authpf/*" in on $wifi_if
|
Le jeu de règles est très simple :
Le jeu de règles par défaut est utilisé pour bloquer tout trafic non strictement nécessaire pour le fonctionnement de l'architecture. Le trafic sortant de l'interface externe est autorisé. Cependant le trafic en entrée de l'interface sans fil est interdit. Une fois l'utilisateur authentifié, son trafic est autorisé à traverser l'interface sans fil et à accéder au reste du réseau. Le mot-clé quick est utilisé un peu partout afin que PF n'évalue pas tous les jeux de règles nommés quand une nouvelle connexion traverse la passerelle.
[Précédent : Problèmes avec FTP] [Index] [Suivant : Haute-disponibilité des pare-feu avec CARP et pfsync]