17.9. hostapd 인증 이벤트를 기반으로 트래픽 차단 및 허용
hostapd
서비스는 트래픽 플레인과 상호 작용하지 않습니다. 이 서비스는 인증자 역할을 합니다. 그러나 인증 이벤트 결과에 따라 트래픽을 허용 및 거부하는 스크립트를 작성할 수 있습니다.
이 절차는 지원되지 않으며 엔터프라이즈 대응 솔루션이 아닙니다. hostapd_cli
에서 검색된 이벤트를 평가하여 트래픽을 차단하거나 허용하는 방법만 보여줍니다.
802-1x-tr-mgmt
systemd 서비스가 시작되면 RHEL은 LAN (EAPOL) 패킷을 통한 확장 가능한 인증 프로토콜을 제외하고
포트의 모든 트래픽을 차단하고 hostapd
hostapd_cli
유틸리티를 사용하여 호스트 설정 제어 인터페이스에 연결합니다. /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)
man page