Rechercher

17.9. Bloquer et autoriser le trafic en fonction des événements d'authentification hostapd

download PDF

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.

Important

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

  1. 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
  2. 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
  3. Recharger systemd :

    # systemctl daemon-reload
  4. Activez et démarrez le service 802-1x-tr-mgmt avec le nom de l'interface sur laquelle hostapd écoute :

    # systemctl enable --now 802-1x-tr-mgmt@br0.service

Ressources supplémentaires

  • systemd.service(5) page de manuel
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.