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 서비스가 구성되었으며 서비스는 클라이언트를 인증할 준비가 되었습니다.

절차

  1. 다음 콘텐츠를 사용하여 /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
  2. 다음 콘텐츠를 사용하여 /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
  3. systemd를 다시 로드합니다.

    # systemctl daemon-reload
  4. hostapd 인터페이스 이름이 수신 대기 중인 802-1x-tr-mgmt 서비스를 활성화하고 시작합니다.

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

검증

추가 리소스

  • systemd.service(5) man page