Après plus d’un an de développement NuFW 2.2 succède à NuFW 2.0.
Les nouveautés sont nombreuses et conséquentes. Pour citer les plus importantes :
support d’IPv6
système avancé de gestion de la marque (et donc du routage et de la qualité de service)
mode commande dans nuauth permettant une reconfiguration partielle et la remontée d’indicateurs.
L’une des nouveautés fondamentales de NuFW 2.2 est le support d’IPv6. L’apparition de nf_conntrack dans les dernières versions de Netfilter introduit le suivi de connexions pour IPv6. Cela permet donc d’utiliser l’algorithme de NuFW.
NuFW 2.2 comprend donc un support complet d’IPv6. L’ensemble des structures internes utilisent IPv6 et l’on peut presque considérer que le support d’IPv4 est une extension de NuFW 2.2 (puisque toutes les structures internes utilisent désormais IPv6).
Un travail important a été réalisé afin de garantir la compatibilité de NuFW 2.2 avec NuFW 2.0. La nouvelle version supporte donc :
Les connexions depuis un nufw 2.0
Les connexions de clients 2.0
Le format de base de données de 2.0 (ce qui garantit donc la compatibilité avec un logiciel comme Nulog ou Nulog2)
La gestion des acls dans LDAP au format 2.0
De plus, nuauth interprète correctement les fichiers de configuration de nuauth 2.0.
NuFW 2.0 exploitait partiellement les possibilités de qualité de service offertes par l’algorithme d’authentification. La version 2.2 corrige cette faiblesse en introduisant un hook qui se place juste avant la décision sur un paquet. Il est alors possible de calculer la marque en utilisant l’ensemble des informations accumulées sur le paquet :
Paramètres IP
Utilisateur
Groupes de l’utilisateur
Application
Système d’exploitation
Trois modules sont actuellement implémentés. Ils permettent de construire la marque du paquet stockée sur 32 bits en la découpant en morceaux arbitraires. L’ensemble des outils de routage et qualité de service peuvent ensuite utiliser cette marque pour traiter les flux de manière différenciée.
mark_uid
L’identifiant numérique de l’utilisateur est apposé sur une partie de la marque du paquet.
mark_group
Ce module permet d’attriibuer une marque en fonction des groupes auxquels appartient l’utilisateur.
mark_field
Ce module attribue un morceau de marque en fonction de la vérification par le champ OS ou application d’une expression. On peut par exemple écrire :
1:*firefox*
2:*explorer*pour attribuer à firefox une marque à 1 et à internet explorer une marque à 2.
mark_flag
Ce module demande aux acls de lui fournir la marque à appliquer au paquet. La granularité est donc maximale puisque l’on bénéficie de toute la puissance de filtrage de Netfilter et de NuFW.
Exemple
On peut ainsi construire une marque suivant les différents composants de la connexion :
| 0 - 16 | 16-17 | 18-24 | 25-32 |
| identifiant user | proxy ou pas (groupe) | code OS | code application |
Avec ce type de marquage, on peut décider si l’utilisateur doit passer par un proxy transparent (suivant son groupe). Les 16 premiers bits permettent de faire des calculs d’utilisation de bande passante. Les bits 18-24 et 25-32 peuvent être eux utilisés pour gérer la bande passante différemment suivant l’OS et ou l’application.
On peut donc imaginer des politiques extrêmement variées, par exemple :
Internet explorer sort par le proxy mais firefox surfe en direct
Les utilisateurs d’un groupe donné se voient alloués 15ko de bande passante depuis l’ensemble des machines du réseau et ce indépendamment du nombre de connectés.
L’ensemble des protocoles a été revu pour permettre le support d’IPv6. De plus les échanges entre nufw et nuauth ont été améliorés. Avec une version récente des bibliothèques de Netfilter, nufw est capable de remonter :
le nom des interfaces réseau d’entrée et de sortie utilisées par le paquet
la volumétrie des connexions
Un mode commande a été rajouté à nuauth. Il est ainsi possible de consulter et de modifier à chaud certaines propriétés de nuauth en envoyant des requêtes sur une socket UNIX.
Un script en python nuauth_command est fourni avec les sources.
Parmi les fonctions disponibles on peut noter :
users : liste des utilisateurs connectés
firewalls : liste des pare-feu nufw connectés
debug_level LEVEL : pour accroitre ou diminuer le niveau de log
debug_areas AREAS : pour changer le champ d’application des messages de logs
disconnect : pour déconnecter un utilisateur et le forcer à se réauthentifier.
Voici un exemple de session :
>>> users
....
#24: u'lds' at ::ffff:c0a8:21c1 (port 57980) 2:20:09 since 2007-04-19 21:26:12
id: 1012, groups: 513
Linux 2.6.18-4-k7 (#1 SMP Mon Mar 26 17:57:15 UTC 2007)
#11: u'debian' at ::ffff:c0a8:21df (port 36562) 7:23:18 since 2007-04-19 16:23:03
id: 1006, groups: 1043
Linux 2.6.18-028stab023 (#1 SMP Sun Mar 25 01:38:10 CET 2007)
(list: 18 items)
>>> uptime
Uptime: 7:23:24 since 2007-04-19 16:23:00
>>> disconnect 11
users disconnected
>>> firewalls
#7: nufw at ::ffff:c0a8:2101, 2:17:03 since 2007-04-19 21:29:34 (usage=1, alive=True)
(list: 1 items)Le support de SASL a été revu de manière à pouvoir profiter de l’ensemble des mécanismes d’authentification proposés par la bibliothèque cyrus-sasl :
plain
OTP
cramMD5
digestMD5
Le filtrage par application a été revu pour permettre le filtrage par glob. La génération et le maintien de règles de filtrage prenant en compte l’application est ainsi facilité puisque l’on peut par exemple faire une acl filtrant sur *firefox.exe.