[OpenBSD]

[Précédent : Problèmes avec FTP] [Index] [Suivant : Exemple #1 : Pare-feu SoHo ]

PF: Authpf : Shell Utilisateur pour les Passerelles d'Authentification


Table des Matières


Introduction

Authpf(8) est un shell utilisateur pour les passerelles d'authentification. Une passerelle d'authentification est comme n'importe quelle passerelle réseau normale (un routeur) excepté que les utilisateurs doivent d'abord s'authentifier sur la passerelle avant que celle-ci ne permette au trafic généré par les utilisateurs de la traverser. Quand le shell d'un utilisateur est /usr/sbin/authpf (au lieu que son shell soit ksh(1), csh(1), etc) et que l'utilisateur se connecte en utilisant SSH, authpf fera les modifications nécessaires au jeu de règles pf(4) actif de telle manière à permettre au trafic généré par l'utilisateur de passer à travers les filtres et/ou d'être traduit en utilisant la Traduction d'Adresses IP ("NAT") ou d'être redirigé. Une fois que l'utilisateur se déconnecte ou que sa session est terminée, authpf supprimera toutes les règles chargées pour l'utilisateur et enlevera toutes les connexions avec maintien d'état que l'utilisateur aura ouvertes. Ainsi, le trafic de l'utilisateur ne passera à travers la passerelle que si l'utilisateur garde sa session SSH ouverte.

Authpf altère le jeu de règles pf(4) en ajoutant des règles à un jeu de règles nommé attaché à un point d'ancrage. Chaque fois qu'un utilisateur s'authentifie, authpf crée un nouveau jeu de règles nommé et y charge les règles de filtrage, nat, binat, et rdr. 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.

Configuration

La section suivante fournit les étapes de base nécessaires pour configurer authpf. Pour une description complète de la configuration d'authpf, veuillez consulter la page du manuel authpf.

Attacher Authpf au Jeu de Règles Principal

Authpf peut être rattaché au jeu de règles principal en utilisant des règles d'ancrage. Ces règles utilisent le mot-clé anchor :
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.

Configurer les Règles Chargées

Authpf charge les règles à partir d'un des deux fichiers suivants :

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'utilisateur 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é.

Les Listes de Contrôle d'Accès

On peut empêcher les utilisateurs d'utiliser authpf en créant un fichier sous le répertoire /etc/authpf/banned/. Le fichier doit avoir comme nom le nom de l'utilisateur banni. Le contenu du fichier sera affiché à l'utilisateur avant qu'authpf ne le déconnecte. Cette fonctionnalité fournit une méthode pratique pour notifier un utilisateur ou lui dire pourquoi son accès n'est pas autorisé et la personne qu'il doit contacter pour la restauration de son accè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.

Attribuer Authpf comme Shell Utilisateur

Afin qu'authpf fonctionne, il doit être attribué à l'utilisateur en tant que shell de connexion ("login shell"). Lorsque l'utilisateur s'authentifie selon les mécanismes offerts par sshd(8), authpf sera executé comme shell de l'utilisateur. Authpf vérifiera ensuite si l'utilisateur est autorisé à utiliser authpf, chargera les règles à partir du fichier approprié, etc.

Il existe plusieurs méthodes pour attribuer authpf à un utilisateur comme shell de connexion :

  1. Manuellement pour chaque utilisateur en utilisant chsh(1), vipw(8), useradd(8), usermod(8), etc.
  2. En affectant les utilisateurs à une classe de connexion et en changeant l'option shell dans /etc/login.conf.

Voir Les Personnes Connectées

Une fois l'utilisateur connecté et les règles chargées par authpf, ce dernier changera son nom de processus pour indiquer le nom d'utilisateur et l'adresse IP de l'utilisateur connecté :
    # 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 supprimer toutes les connexions à état que l'utilisateur aura ouvert.

    # kill -TERM 23664

Plus d'Information

Pour une description complète du fonctionnement d'authpf, veuillez vous référer à la page du manuel authpf.

Exemple

Dans cet exemple, authpf est utilisé sur une passerelle OpenBSD pour authentifier des utilisateurs sur un réseau sans fil faisant partie d'un réseau de campus plus grand. Une fois les utilisateurs authentifiés, et en supposant qu'ils ne font pas partie de la liste des utilisateurs bannis, ils seront autorisés à établir des sessions SSH vers l'extérieur et de naviguer sur le web (y compris sur les sites web sécurisés). De plus, ils pourront accéder à un des serveurs DNS du campus.

Le fichier /etc/authpf/authpf.rules contient les règles suivantes :

wifi_if = "wi0"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"

pass in quick on $wifi_if proto udp from $user_ip to $dns_servers \
   port domain keep state
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"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"

pass in quick on $wifi_if proto udp from $user_ip to $dns_servers \
   port domain keep state
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"

scrub in all

# filtrage
block drop all

pass out quick on $ext_if proto tcp from $wifi_if:network flags S/SA \
   modulate state
pass out quick on $ext_if proto { udp, icmp } from $wifi_if:network \
   keep state

pass in quick on $wifi_if proto tcp from $wifi_if:network to $wifi_if \
   port ssh flags S/SA 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é, leur 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 : Exemple #1 : Pare-feu SoHo ]


[back] www@openbsd.org
Originally [OpenBSD: authpf.html,v 1.5 ]
$Translation: authpf.html,v 1.3 2004/02/19 20:30:12 saad Exp $
$OpenBSD: authpf.html,v 1.3 2004/02/20 06:33:11 jufi Exp $