17.9. Bloquer et autoriser le trafic en fonction des événements d'authentification hostapd
Le service hostapd
n'interagit pas avec le plan de trafic. Il agit uniquement en tant qu'authentificateur. Cependant, vous pouvez écrire un script pour autoriser ou refuser le trafic en fonction du résultat des événements d'authentification.
Cette procédure n'est pas prise en charge et ne constitue pas une solution prête pour l'entreprise. Elle montre seulement comment bloquer ou autoriser le trafic en évaluant les événements récupérés par hostapd_cli
.
Lorsque le service systemd 802-1x-tr-mgmt
démarre, RHEL bloque tout le trafic sur le port d'écoute de hostapd
, à l'exception des paquets EAPOL (extensible authentication protocol over LAN), et utilise l'utilitaire hostapd_cli
pour se connecter à l'interface de contrôle hostapd
. Le script /usr/local/bin/802-1x-tr-mgmt
évalue ensuite les événements. En fonction des différents événements reçus par hostapd_cli
, le script autorise ou bloque le trafic pour les adresses MAC. Notez que lorsque le service 802-1x-tr-mgmt
s'arrête, tout le trafic est automatiquement autorisé à nouveau.
Effectuez cette procédure sur le serveur hostapd
.
Conditions préalables
-
Le service
hostapd
a été configuré et est prêt à authentifier les clients.
Procédure
Créez le fichier
/usr/local/bin/802-1x-tr-mgmt
avec le contenu suivant :#!/bin/sh if [ "x$1" == "xblock_all" ] then nft delete table bridge tr-mgmt-br0 2>/dev/null || true nft -f - << EOF table bridge tr-mgmt-br0 { set allowed_macs { type ether_addr } chain accesscontrol { ether saddr @allowed_macs accept ether daddr @allowed_macs accept drop } chain forward { type filter hook forward priority 0; policy accept; meta ibrname "br0" jump accesscontrol } } EOF echo "802-1x-tr-mgmt Blocking all traffic through br0. Traffic for given host will be allowed after 802.1x authentication" elif [ "x$1" == "xallow_all" ] then nft delete table bridge tr-mgmt-br0 echo "802-1x-tr-mgmt Allowed all forwarding again" fi case ${2:-NOTANEVENT} in AP-STA-CONNECTED | CTRL-EVENT-EAP-SUCCESS | CTRL-EVENT-EAP-SUCCESS2) nft add element bridge tr-mgmt-br0 allowed_macs { $3 } echo "$1: Allowed traffic from $3" ;; AP-STA-DISCONNECTED | CTRL-EVENT-EAP-FAILURE) nft delete element bridge tr-mgmt-br0 allowed_macs { $3 } echo "802-1x-tr-mgmt $1: Denied traffic from $3" ;; esac
Créez le fichier de service
/etc/systemd/system/802-1x-tr-mgmt@.service
systemd avec le contenu suivant :[Unit] Description=Example 802.1x traffic management for hostapd After=hostapd.service After=sys-devices-virtual-net-%i.device [Service] Type=simple ExecStartPre=-/bin/sh -c '/usr/sbin/tc qdisc del dev %i ingress > /dev/null 2>&1' ExecStartPre=-/bin/sh -c '/usr/sbin/tc qdisc del dev %i clsact > /dev/null 2>&1' ExecStartPre=/usr/sbin/tc qdisc add dev %i clsact ExecStartPre=/usr/sbin/tc filter add dev %i ingress pref 10000 protocol 0x888e matchall action ok index 100 ExecStartPre=/usr/sbin/tc filter add dev %i ingress pref 10001 protocol all matchall action drop index 101 ExecStart=/usr/sbin/hostapd_cli -i %i -a /usr/local/bin/802-1x-tr-mgmt ExecStopPost=-/usr/sbin/tc qdisc del dev %i clsact [Install] WantedBy=multi-user.target
Recharger systemd :
# systemctl daemon-reload
Activez et démarrez le service
802-1x-tr-mgmt
avec le nom de l'interface sur laquellehostapd
écoute :# systemctl enable --now 802-1x-tr-mgmt@br0.service
Vérification
Authentifier un client sur le réseau. Voir :
Ressources supplémentaires
-
systemd.service(5)
page de manuel