4.2. Activer le suivi des connexions authentifiées avec NuFW

4.2.1. Paramétrage de nuauth

Pour activer le suivi de connexion avec NuFW, il est nécessaire de paramétrer les options suivantes dans le fichier nuauth.conf :

nuauth_log_users_sync=1
nuauth_log_users=9

4.2.2. Installation du serveur MySQL

L'installation du seveur MySQL est standard. Utilisez les paquets de votre distribution Linux, exemple avec Debian :

apt-get install mysql-server
Lisez MySQL Documentation, section "2 Installing and Upgrading MySQL" pour plus d'informations.

4.2.3. Installation du serveur PostgreSQL

L'installation du serveur PostgreSQL est standard. Utilisez les paquets de votre distribution Linux, exemple avec Debian (remplacez 8.2 par la dernière version stable) :

apt-get install postgresql-8.2
Lisez PostgreSQL Documentation, section "III. 14. Installation Instructions" pour plus d'informations.

4.2.4. Configuration de SQL

Le suivi de connexion révèle toute sa puissance lorsqu'il est associé à la journalisation SQL. Nous allons décrire ici le paramétrage du module MySQL.

Vous devrez créer la base SQL à partir du fichier dump disponible dans le sous-répertoire conf/ de l'archive. Créez un utilisateur dans MySql. Celui-ci doit disposer des droits UPDATE et INSERT sur la table "conntrack_ulog". Enfin, ajoutez les informations de connexions au serveur SQL dans le fichier nuauth.conf.

Lors du déploiement de NuFW en environnement de production, vous devez utiliser le script clean_conntrack.pl qui est disponible dans le sous-répertoire scripts/ de l'archive NuFW à partir de la version 1.0.12. Pour les versions antérieures, vous pouvez récupérer le script ici : Nulog project homepage. Vous devrez créer un utilisateur SQL disposant des privilèges suivants: : SELECT et DELETE sur la table "conntrack_ulog", INSERT sur la table "ulog". Ce script doit être exécuté très régulièrement, à intervalles de quelques minutes seulement, par l'intermédiaire de cron, notamment en cas de trafic important. Si vous ne faites pas cela, la table "conntrack_ulog" sera vite saturée de connexions "mortes" ce qui provoquera un ralentissement de NuFW. La seule opération réalisée par le script est de transférer les connexions "mortes" (ie les connexions fermées ou refusées) vers la tables ulog, qui est en fait une table d'archivage. Celle-ci n'est pas utilisée en production, ni par NuFW, ni par les modules SSO.

Vous pouvez également envisager d'archiver régulièrement la table "ulog", afin d'éviter qu'elle ne grossisse indéfiniment. A partir de la version 1.0.12, les scripts nécessaires sont disponibles dans le sous-répertoire scripts/ de l'archive. Pour les versions antérieures, pour pouvez récupérer les 2 scripts concernés là : Nulog project homepage Recherchez les scripts ulog_rotate_*.sh. Actuellement, vous devez exécuter ces scripts en tant que root via cron. Bien évidemment, une meilleure solution serait de créer un utilisateur particulier pour exécuter ces scripts, en lui donnant les droits appropriés. Merci de fournir une mise à jour à cette documentation si vous l'implémentez avant nous.

4.2.5. Vie d'une connexion dans la table SQL

Si nuauth est parametré pour journaliser les flux dans une base SQL, voici le fonctionnement du système :

Le mode de journalisation en SQL conserve donc tout l'historique de chaque connexion, et les différentes mises à jour de la base de données n'effacent en aucun cas les données journalisées précédemment. Ce mode de journalisation est le plus puissant que puisse offir un pare-feu, car il est très synthétique : une seule entrée est maintenue pour chaque connexion ; et il conserve tout l'historique de tous les événements de connexion.

4.2.6. Configuration de Netfilter

4.2.6.1. Paramètres pour les noyaux post 2.6.14

Cette opération est nettement simplifiée par rapport aux noyaux antérieurs. Pour activer le suivi des connexions authentifiées, vous n'avez qu'à ajouter l'option -C à la commande de démarrage de nufw. Cette option indiquera à nufw de communiquer à nuauth tous les évènements Netfilter ESTABLISHED et DESTROY en provenance du système de suivi de connexions de Netfilter.

L'option ci-dessus risque de générer un nombre conséquent d'évènements que devra gérer nuauth. Afin d'éviter un déni de service dû à la saturation de nuauth, nufw offre la possibilité de sélectionner les évènements à envoyer. Cette fonctionnalité utilise les capacités de Netfilter en matière de marquage des connections, matérialisées par la cible CONNMARK. Cette cible permet de marquer automatiquement tous les paquets ESTABLISHED. Ce mode de fonctionnement est activé par l'option -M de nufw. Du côté de Netfilter, les règles suivantes devront être ajoutées:

iptables -A PREROUTING -t mangle -j CONNMARK --restore-mark
iptables -A POSTROUTING -t mangle -m mark ! --mark 0 -j CONNMARK --save-mark

En résumé, vous devriez toujours utiliser l'option -C si vous utilisez libnetfilter_conntrack (qui est disponible dans le noyau linux depuis la version 2.6.14), et l'option -M si vous envisagez d'utiliser le marquage des connections par l'identifiant utilisateur (vueillz noter que vous devrez alors appliquer le patch suivant transmit_mark patch à votre noyau. Cette dernière option fonctionnera beaucoup mieux avec un noyau 2.6.16 et supérieur.

4.2.6.2. Paramètres pour les noyaux antérieurs au 2.6.14

NuFW mémorise les états des connexions TCP suivants :

  • opening : drapeau SYN envoyé

  • established : drapeaux SYN et ACK envoyés

  • closed : drapeaux FIN ou FIN,ACK envoyés

Pour détecter ces paquets, nous devons utiliser les options --syn et --tcp-flags de Netfilter. Voyons un exemple : notre serveur HTTP est protégé par un pare-feu NuFW. Ils sont positionnés dans le sous-réseau $DMZ. Les règles ci-après permettent de réaliser un suivi des connexions utilisateurs pour les connexions sortantes.
iptables -A FORWARD -p tcp -m state --state ESTABLISHED --tcp-flags ACK,FIN NONE -j ACCEPT
iptables -A FORWARD -d $DMZ -p tcp -m state --state ESTABLISHED --dport 80 --tcp-flags SYN,RST,ACK RST -j QUEUE
iptables -A FORWARD -d $DMZ -p tcp -m state --state ESTABLISHED --dport 80 --tcp-flags FIN FIN -j QUEUE
iptables -A FORWARD -s $DMZ -p tcp -m state --state ESTABLISHED --sport 80 --tcp-flags SYN,ACK SYN,ACK -j QUEUE
iptables -A FORWARD -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -d $DMZ -p tcp --syn --dport 80 -m state --state NEW -j QUEUE
La première règle accélère le fonctionnement de Netfilter en détectant la plus grande partie du trafic ESTABLISHED en l'acceptant. La dernière règle comportant l'option --state ESTABLISHED constitue la règle standard pour les connexions établies. Il est indispensable de l'ajouter après les règles de filtrage propres à NuFW.

4.2.6.3. Paramétrage pour les noyaux supérieurs à 2.6.14

Aucune régle compliquée n'est nécessaire, le noyau enverra automatiquement les nouveaux événements à NuFW. C'est pour cette raison que nous recommandons un noyau supérieur à 2.6.14.

4.2.7. Utiliser le suivi de connexions

nutop est un script perl fourni avec les sources de nufw. Il permet d'afficher en temps réel les connexions authentifiées actives de façon similaire à la commande top.

Le plus simple[1] afin d'exploiter la journalisation effectuée par le système de suivi de connexion est d'installer nulog (autrefois nommé ulog-php) qui fourni une interface web conviviale. nulog est disponible sous licence GPL ici : http://software.inl.fr/trac/trac.cgi/wiki/EdenWall/NuLog

Notes

[1]

au moment d'écrire cette documentation en tout cas