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

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
tyler56
сержант
Сообщения: 198
Зарегистрирован: 2009-06-03 18:10:15

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

Непрочитанное сообщение tyler56 » 2014-10-20 10:28:29

Приветствую всех.
Есть 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 и если логин не найден отбрасывать запрос.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2015-06-02 17:08:07

Скриптик к нему никакой не привернуть?
Убей их всех! Бог потом рассортирует...

tyler56
сержант
Сообщения: 198
Зарегистрирован: 2009-06-03 18:10:15

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

Непрочитанное сообщение tyler56 » 2015-06-03 15:43:59

Завелось.
Авторизует из файла и из 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
        }
}