35.6. 根据 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 TABLE="tr-mgmt-${1}" read -r -d '' TABLE_DEF << EOF table bridge ${TABLE} { 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 case ${2:-NOTANEVENT} in block_all) nft destroy table bridge "$TABLE" printf "$TABLE_DEF" | nft -f - echo "$1: All the bridge traffic blocked. Traffic for a client with a given MAC will be allowed after 802.1x authentication" ;; 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 "$1: Denied traffic from $3" ;; allow_all) nft destroy table bridge "$TABLE" echo "$1: Allowed all bridge traffice again" ;; NOTANEVENT) echo "$0 was called incorrectly, usage: $0 interface event [mac_address]" ;; 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=bash -c '/usr/sbin/hostapd_cli ping | grep PONG' ExecStartPre=/usr/local/bin/802-1x-tr-mgmt %i block_all ExecStart=/usr/sbin/hostapd_cli -i %i -a /usr/local/bin/802-1x-tr-mgmt ExecStopPost=/usr/local/bin/802-1x-tr-mgmt %i allow_all [Install] WantedBy=multi-user.target
重新载入 systemd:
# systemctl daemon-reload
启用并启动接口名称
hostapd
正在侦听的802-1x-tr-mgmt
服务:# systemctl enable --now 802-1x-tr-mgmt@br0.service
验证
- 通过客户端向网络进行身份验证。请参阅 针对 FreeRADIUS 服务器或验证器测试 EAP-TTLS 身份验证。
其他资源
-
您系统上的
systemd.service (5)
手册页