Red Hat Training
A Red Hat training course is available for RHEL 8
17.9. 根据 hostapd 验证事件阻止和允许流量
hostapd
服务不与流量平面交互。该服务仅充当身份验证器。但是,您可以编写一个脚本,根据身份验证事件的结果来允许或拒绝流量。
重要
此流程不受支持,没有企业级的解决方案。它只演示如何通过评估由 hostapd_cli
检索的事件来阻止或允许流量。
当 802-1x-tr-mgmt
systemd 服务启动时,RHEL 会阻止 hostapd
监听端口上的所有流量,但 LAN(EAPOL)数据包上可扩展验证协议除外,并使用 hostapd_cli
工具连接到 hostapd
控制接口。/usr/local/bin/802-1x-tr-mgmt
脚本随后评估事件。根据 hostapd_cli
收到的不同事件,该脚本允许或阻止 MAC 地址的流量。请注意,当 802-1x-tr-mgmt
服务停止时,所有流量会自动允许。
在 hostapd
服务器上执行这此流程。
前提条件
-
hostapd
服务已配置,服务已准备好对客户端进行身份验证。
流程
使用以下内容创建
/usr/local/bin/802-1x-tr-mgmt
文件:#!/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
使用以下内容创建
/etc/systemd/system/802-1x-tr-mgmt@.service
systemd 服务文件:[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
重新载入 systemd:
# systemctl daemon-reload
启用并启动接口名称
hostapd
正在侦听的802-1x-tr-mgmt
服务:# systemctl enable --now 802-1x-tr-mgmt@br0.service
验证
通过客户端向网络进行身份验证。请参阅:
其他资源
-
systemd.service(5)
手册页