Страница 1 из 1

Freeradius и AD с несколько групп

Добавлено: 2014-10-20 10:28:29
tyler56
Приветствую всех.
Есть wi-fi точка с прикрученным freeradius-ом и учетками в AD (WPA+PEAP+MSCHAP).
Нужно отдавать разные параметры (vlan и т.д.) в зависимости от нахождения пользователя в N-ой группе AD.
С одной группой все просто. Для двух и более есть загвоздка.
cat sites-enabled/default

Код: Выделить всё

authorize {
        preprocess
        auth_log
        mschap
        eap {
                ok = return
        }
        files
        expiration
        logintime
}

authenticate {
        Auth-Type MS-CHAP {
                mschap
        }

        eap
        Auth-Type vlan1 {
                ntlm_auth_1
        }
        Auth-Type vlan2 {
                ntlm_auth_2
        }
}
Аналогично sites-enabled/inner-tunnel
cat modules/ntlm_auth

Код: Выделить всё

exec ntlm_auth_1 {
 wait = yes
 program = "/usr/local/bin/ntlm_auth --request-nt-key --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00} --require-membership-of='PDC.MYDOMEN.NET\\WI-FI-1'"
}
exec ntlm_auth_2 {
wait = yes
program = "/usr/local/bin/ntlm_auth --request-nt-key --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00} --require-membership-of='PDC.MYDOMEN.NET\\WI-FI-2'"
}
cat users

Код: Выделить всё

DEFAULT Auth-Type := vlan1
        Service-Type = Framed-User,
        Tunnel-Type = VLAN,
        Tunnel-Medium-Type = IEEE-802,
        Tunnel-Private-Group-ID = 1
DEFAULT Auth-Type := vlan2
        Service-Type = Framed-User,
        Tunnel-Type = VLAN,
        Tunnel-Medium-Type = IEEE-802,
        Tunnel-Private-Group-ID = 2
 
Если Auth-Type vlan1 возвращает отрицательный результат, то Auth-Type vlan2 не обрабатывается.
А требуется последовательно перебирать все указанные Auth-Type vlanN и если логин не найден отбрасывать запрос.

Freeradius и AD с несколько групп

Добавлено: 2015-06-02 17:08:07
Alex Keda
Скриптик к нему никакой не привернуть?

Freeradius и AD с несколько групп

Добавлено: 2015-06-03 15:43:59
tyler56
Завелось.
Авторизует из файла и из AD. Сделал так.

Код: Выделить всё

cat /usr/local/etc/raddb/sites-enabled/default

authorize {
        preprocess
        mschap
        eap {
                ok = return
        }
        files
        ldap
        expiration
        logintime
}
authenticate {
        Auth-Type PAP {
                pap
        }
        Auth-Type CHAP {
                chap
        }
        Auth-Type MS-CHAP {
                mschap
        }
        Auth-Type LDAP {
                ldap
        }
        eap
}

Код: Выделить всё

cat /usr/local/etc/raddb/users

user1   Cleartext-Password := "123456", MS-CHAP-Use-NTLM-Auth := 0
        Service-Type = Framed-User,
        Tunnel-Type = VLAN,
        Tunnel-Medium-Type = IEEE-802,
        Tunnel-Private-Group-ID = 100,
        Reply-Message = "Accepted from local file"


DEFAULT Ldap-Group == "WI-FI-100"
        Service-Type = Framed-User,
        Tunnel-Type = VLAN,
        Tunnel-Medium-Type = IEEE-802,
        Tunnel-Private-Group-ID = 100

DEFAULT Ldap-Group == "WI-FI-200"
        Service-Type = Framed-User,
        Tunnel-Type = VLAN,
        Tunnel-Medium-Type = IEEE-802,
        Tunnel-Private-Group-ID = 200

DEFAULT Auth-Type := Reject
        Reply-Message = "Account not found"

Код: Выделить всё

cat /usr/local/etc/raddb/modules/mschap

mschap {
        use_mppe = yes
        require_encryption = yes
        require_strong = yes
        with_ntdomain_hack = yes
        ntlm_auth = "/usr/local/bin/ntlm_auth --request-nt-key \
        --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} \
        --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"
}

Код: Выделить всё

cat /usr/local/etc/raddb/modules/ldap

ldap {
        server = "pdc.mydomain.by"	#свой контроллер
        identity = "admin@mydomain.by"	#своя учетка
        password = "mypassword"	# свой пароль
        basedn = "dc=mydomain,dc=by"	# свой домен
        filter = "(sAMAccountName=%{%{Stripped-User-Name}:-%{User-Name}})"
         ldap_connections_number = 5
        max_uses = 0
        #port = 389
        timeout = 4
        timelimit = 3
        net_timeout = 1

        tls {
                start_tls = no
        }
        dictionary_mapping = ${confdir}/ldap.attrmap
        password_attribute = userPassword
        edir_account_policy_check = no

        groupname_attribute = cn
        groupmembership_filter = "(|(&(objectClass=GroupOfNames)(member=%{control:Ldap-UserDn}))(&(objectClass=GroupOfUniqueNames)(uniquemember=%{control:Ldap-UserDn})))"
        groupmembership_attribute = memberOf

        access_attr_used_for_allow = yes

        chase_referrals = yes
        rebind = yes
        # set_auth_type = yes

        keepalive {
                idle = 60
                probes = 3
                interval = 3
        }
}