web-dev-qa-db-ja.com

Auth-Type:-拒否RADIUSユーザーファイルは内部トンネル要求に一致しますが、Access-Acceptを送信します

OpenLDAPと通信するUbuntu10.04.4でFreeRADIUS2.1.8を使用してWPA2802.11x EAP認証をセットアップし、PEAP/MSCHAPv2、TTLS/MSCHAPv2、およびTTLS/PAPを使用して正常に認証できます(AP経由と eapol_test )。現在、ユーザーが属するLDAPグループに基づいて特定のSSIDへのアクセスを制限しようとしています。

/etc/freeradius/modules/ldapでグループメンバーシップチェックを次のように構成しました。

groupname_attribute = cn
groupmembership_filter = "(|(&(objectClass=posixGroup)(memberUid=%{User-Name}))(&(objectClass=posixGroup)(uniquemember=%{User-Name})))"

Mac Auth wikiページに基づいて、Called-Station-IdからCalled-Station-SSIDへのSSIDの抽出を構成しました。 /etc/freeradius/eap.confで、外部トンネルから内部トンネルへの属性のコピーと、外部トンネルでの内部トンネル応答の使用を有効にしました(PEAPとTTLSの両方)。ただし、これらのオプションを変更する前は、同じ動作をしていました。

copy_request_to_tunnel = yes
use_tunneled_reply = yes

セットアップをテストするために、次のようにeapol_testを実行しています。

eapol_test -c peap-mschapv2.conf -a 172.16.0.16 -s testing123 -N 30:s:01-23-45-67-89-01:Example-EAP

次のpeap-mschapv2.confファイルを使用:

network={
    ssid="Example-EAP"
    key_mgmt=WPA-EAP
    eap=PEAP
    identity="mgorven"
    anonymous_identity="anonymous"
    password="foobar"
    phase2="autheap=MSCHAPV2"
}

/etc/freeradius/usersに次のように:

DEFAULT Ldap-Group == "employees"

freeradius-Xxを実行すると、LDAPグループの取得が機能し、SSIDが抽出されていることがわかります。

Debug:   [ldap] performing search in dc=example,dc=com, with filter (&(cn=employees)(|(&(objectClass=posixGroup)(memberUid=mgorven))(&(objectClass=posixGroup)(uniquemember=mgorven))))
Debug: rlm_ldap::ldap_groupcmp: User found in group employees
...
Info:        expand: %{7} -> Example-EAP

次に、(SSIDに関係なく)employeesグループのユーザーのみにアクセスを許可しようとしているので、/etc/freeradius/usersに次のように入力します。

DEFAULT Ldap-Group == "employees"

DEFAULT Auth-Type := Reject

ただし、anonymousユーザーがemployeesグループに属していないため、これは外部トンネルのAccess-Requestを即座に拒否します。したがって、次のように内部トンネル要求のみに一致するように変更します。

DEFAULT Ldap-Group == "employees"

DEFAULT FreeRADIUS-Proxied-To == "127.0.0.1"
        Auth-Type := Reject, Reply-Message = "User does not belong to any groups which may access this SSID."

これで、employeesグループに属するユーザーが認証されますが、employeesグループに属さないユーザーも認証されます。拒否エントリが一致し、Reply-Messageが設定されているのがわかりますが、クライアントはAccess-Acceptを受け取ります。

Debug: rlm_ldap::ldap_groupcmp: Group employees not found or user is not a member.
Info: [files] users: Matched entry DEFAULT at line 209
Info: ++[files] returns ok
...
Auth: Login OK: [mgorven] (from client test port 0 cli 02-00-00-00-00-01 via TLS tunnel)
Info:   WARNING: Empty section.  Using default return values.
...
Info: [peap] Got tunneled reply code 2
        Auth-Type := Reject
        Reply-Message = "User does not belong to any groups which may access this SSID."
...
Info: [peap] Got tunneled reply RADIUS code 2
        Auth-Type := Reject
        Reply-Message = "User does not belong to any groups which may access this SSID."
...
Info: [peap] Tunneled authentication was successful.
Info: [peap] SUCCESS
Info: [peap] Saving tunneled attributes for later
...
Sending Access-Accept of id 11 to 172.16.2.44 port 60746
        Reply-Message = "User does not belong to any groups which may access this SSID."
        User-Name = "mgorven"

およびeapol_testレポート:

RADIUS message: code=2 (Access-Accept) identifier=11 length=233
   Attribute 18 (Reply-Message) length=64
      Value: 'User does not belong to any groups which may access this SSID.'
   Attribute 1 (User-Name) length=9
      Value: 'mgorven'
...
SUCCESS

リクエストが拒否されないのはなぜですか?これはこれを実装する正しい方法ですか?

3
mgorven

奇妙な理由で、Auth-Typeの設定はcheckアイテムであり、replyアイテムではないため、これはルールの最初の行で行う必要があります。以下は正しく機能します。

DEFAULT FreeRADIUS-Proxied-To == "127.0.0.1", Auth-Type := Reject
    Reply-Message = "User does not belong to any groups which may access this SSID."
1
mgorven