[OpenBSD]

[Précédent : Problèmes avec FTP] [Index] [Suivant : Haute-disponibilité des pare-feu avec CARP et pfsync]

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 ouverte. Ainsi, le trafic de l'utilisateur ne passera à travers la passerelle que si l'utilisateur garde sa session SSH ouverte.

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.

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.

Activer Authpf

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 :

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

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.

Présenter un Message de Login

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.

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.

Créer une classe d'authentification authpf

Lors de l'utilisation d'authpf sur un système qui dispose de comptes normaux et de comptes utilisateurs authpf, il peut être intéressant d'utiliser une classe d'authentification authpf séparée pour les utilisateurs authpf. Cela autorise certains changements sur ces comptes à être faits de manière globale ainsi que de placer des politiques différentes sur les comptes normaux et les comptes authpf. Quelques exemples de ces polices peuvent être :

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).

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 supprimera toutes les connexions à état que l'utilisateur aura ouvert. # kill -TERM 23664

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 à 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" 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]


[back] www@openbsd.org
$OpenBSD: authpf.html,v 1.24 2008/01/13 13:43:34 tobias Exp $