----------------------------win1251------------------------------ оКЮЦХМ ЮСРЕМРХТХЙЮЖХХ Б LDAP ДКЪ ЯЕПБЕПЮ 3proxС (ня windows,unix) (c) Lopuchov Kirill lopuchov@mail.ru 1. йПЮРЙНЕ НОХЯЮМХЕ * оНДДЕПФХБЮЕРЯЪ РНКЭЙН ЮСРЕМРХТХЙЮЖХЪ НРЙПШРШЛ РЕЙЯРНЛ (basic) * оНДДЕПФХБЮЕРЯЪ ЯНГДЮМХЕ КХЛХРНБ ОН РПЮТХЙС ДКЪ ЦПСОО ОНКЭГНБЮРЕКЕИ (Б ДЕМЭ,ЛЕЯЪЖ,МЕДЕКЧ) * оНДДЕПФХБЮЕРЯЪ ЯНГДЮМХЕ КХЛХРНБ ОН ЯЙНПНЯРХ ДКЪ ЦПСОО ОНКЭГНБЮРЕКЕИ (ОНЙЮ КХЛХРШ РНКЭЙН МЮ БУНДЪЫХИ РПЮТХЙ) * нРЯСРcРБСЕР ЙЕЬХПНБЮМХЕ ХЛЕМ ОНКЭГНБЮРЕКЕИ. б ЙЮВЕЯРБЕ ХМРЕПТЕИЯЮ ДНЯРСОЮ Й ldap ХЯОНКЭГСЕРЯЪ АХАКХНРЕЙЮ openldap, ОНЩРНЛС ОКЮЦХМ ЛНФЕР ЙНЛОХКХПНБЮРЭЯЪ Х ПЮАНРЮРЭ ЙЮЙ МЮ Windows 98/2000/XP РЮЙ Х МЮ ПЮГКХВМШУ unix ОНДНАМШУ ЯХЯРЕЛЮУ МЮОПХЛЕП Linux,FreeBSD. бЯЕ РЕЯРШ ПЮАНРНЯОНЯНАМНЯРХ ОПНБНДХКХЯЭ МЮ ЯЕПБЕПЕ Я Active Directory Б ЕЕ ПЕЮКХГЮЖХХ ldap МН Б ОПХМЖХОЕ ДНКФМН ПЮАНРЮРЭ Х МЮ ДПСЦХУ ldap ЯХЯРЕЛЮУ. дКЪ ЙНЛОХКЪЖХХ Х РЕЯРХПНБЮМХЪ ОНД ня Windows ХЯОНКЭГНБЮКЯЪ ОЮЙЕР Dev-C++ http://www.bloodshed.net/dev/ Х ВЮЯРЭ АХАКХНРЕЙ OpenLDAP for Windows http://lucas.bergmans.us/hacks/openldap/ БЕПЯХЪ openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe, БЕПЯХЪ ЩРНИ ФЕ АХАКХНРЕЙХ ХДЕР Б ЙНЛОКЕЙРЕ Й ОКЮЦХМС. ОНД unix ОНДНАМНИ ня (Freebsd) ХЯОНКЭГНБЮКЯЪ ЯРЮМДЮПРМШИ gcc. Х АХАКХНРЕЙХ openldap-client. 2. мЮЯРПНИЙЮ ОКЮЦХМЮ. 2.1 дКЪ ОНДЙКЧВЕМХЪ Й LDAP ЯЕПБЕПС ХЯОНКЭГСЕРЯЪ ЙНЛЛЮМДЮ ldapconnect . оЕПБШИ ОЮПЮЛЕРП НОПЕДЕКЪР ip ЮДПЕЯ ХКХ host ХЛЪ LDAP ЯЕПБЕПЮ , БРНПНИ ОЮПЮЛЕРП ХЛЪ ОНКЭГНБЮРЕКЪ НР ХЛЕМХ ЙНПНЦН АСДСР ЯНБЕПЬХРЭЯЪ БЯЪ ДЮКЭМЕИЬЮЪ ПЮАНРЮ Я ldap ЙЮРЮКНЦНЛ РЮЙЮЪ ЙЮЙ ОНХЯЙ ОНКЭГНБЮРЕКЕИ Х ОПНБЕПЙЮ ХУ ОПХМЮДКЕФМНЯРХ Й РНИ ХКХ ХМНИ ЦПСООЕ, РПЕРХИ ОЮПЮЛЕРП ЩРН ОЮПНКЭ ДКЪ ЩРНЦН ОНКЭГНБЮРЕКЪ. с РЮЙНЦН ОНКЭГНБЮРЕ Б ЙНМРЕЙЯРЕР Active Directory ЛНЦСР НРЯСРЯБНБЮРЭ ОПЮБЮ ЮДЛХМХЯРПЮРНПЮ ДКЪ МНПЛЮКЭМНИ ПЮАНРШ ОКЮЦХМЮ. б ЙКЮЯЯХВЕЯЙХУ Open Ldap ЯЕПБЕПЮУ ОНД xNIX РЮЙХЛ ОНКЭГНБЮРЕКЕЛ ЛНФЕР БШЯРСОЮРЭ anonymous. оПХЛЕП: ldapconnect 192.160.0.1 cn=ldap,cn=users,dc=domain,dc=ru ldap 2.2 дКЪ НОПЕДЕКЕМХЪ Б ЙЮЙНЛ ЙНМРЕЙЯРЕ ХЯЙЮРЭ ОНКЭГНБЮРЕКЕИ Х ЦПСООШ ЯКСФХР ЙНЛЛЮМДЮ ldapsbase оПХЛЕП: ldapsbase cn=users,dc=domain,dc=ru 2.3 йНЛЛЮМДЮ ldapattr ЯКСФХР ДКЪ НОПЕДЕКМХЪ ПЮГКХВМШУ ОЮПЮЛЕРПНБ ОКЮЦХМЮ. a)ОЕПБШИ ОЮПЮЛЕРП НОПЕДЕКЪЕР ЮРПХАСР "ОНКЭГНБЮРЕКЭ" Б ЙНМРЕЙЯРЕ ldap ЙЮРЮКНЦЮ Б Active Directory ЩРН ЙЮЙ ОПЮБХКН "cn" , Б ДПСЦХУ ldap ЯЕПБЕПЮУ "uid". b)БРНПНИ ОЮПЮЛЕРП НОЕПЕДЕКЪЕР ЮРПХАСР "ЦПСООЮ" Б ЙНМРЕЙЯРЕ ldap ЙЮРЮКНЦЮ Б Active Directory ЩРН ЙЮЙ ОПЮБХКН "memberof" , Б ДПСЦХУ ldap ЯЕПБЕПЮУ "ou". c)РПЕРХИ ОЮПЮЛЕРП ЛНФЕР МЕ НАЪГЮРЕКЭМШИ Х ЛНФЕР ЯНДЕПФЮРЭ 0 ХКХ 1 1 - НГМЮВЮЕР, ВРН ОПХ ЮБРНПХГЮЖХХ ОНКЭГНБЮРЕКЪ ХКХ ЯНГДЮМХХ ДКЪ МЕЦН НПЦПЮМХВЕМХЪ ОН РПЮТХЙС ЕЦН ХЛЪ АСДЕР ОПХБНДХРЯЪ Й МХФМЕЛС ПЕЦХЯРПС (ОПХЛЕВЮМХЕ: РНКЭЙН ДКЪ ХЛЕМ ОНКЭГНБЮРЕКЕИ МЮ ЮМЦКХИЯЙНЛ) . щРНР ОЮПЮЛЕРП ЯНГДЮМ ДКЪ ХЯЙКЧВЕМХЪ ЯКСВЮЕБ ЙНЦДЮ LDAP ЙЮРЮКНЦ ОПХ ЮБРНПХГЮЖХХ МЕ НРКХВЮЕР ХЛЕМ ОНКЭГНБЮРЕКЕИ Б ПЕЦХЯРПЮУ. оПХЛЕП: ldapattr cn memberof 1 2.4 йНЛЛЮМДЮ ldapaccess ЯКСФХР ДКЪ НОПЕДЕКЕМХЪ "ОПХГМЮЙЮ" ДНЯРСОМНЯРХ ОНКЭГНБЮРЕКЧ БННАЫЕ ОПНИРХ ЮБРНПХГЮЖХЧ МЮ proxy ЯЕПБЕПЕ. б ЙНМРЕЙЯРЕ ldap ЙЮРЮКНЦЮ ЩРН гмювемхе ЮРПХАСРЮ "ЦПСООШ" НОХЯЮММНИ Б ЙНЛЛЮМДЕ ldapattr. оПХЛЕП: ldapaccess CN=internet,CN=Users,DC=domain,DC=ru мЮОПХЛЕП: ДКЪ Active Directory ЩРН АСДЕР ОНКЭГНБЮРЕКЭ БУНДЪЫХИ Б ЦПСООС internet. рНЕЯРЭ ОПХ ОПНБЕПЙЕ ЛНФМН КХ ОНКЭГНБЮРЕКЧ ПЮАНРЮРЭ Я proxy ТНПЛХПСЕРЯЪ ТХКЭРП НМ ДНКФЕМ ОНОЮЯРЭ Б ЯКЕДСЧЫХИ ТХКЭРП: (&(cn=ХЛЪОНКЭГНБЮРЕКЪ)(memberof=CN=internet,CN=Users,DC=domain,DC=ru)) 2.5 йНЛЛЮМДЮ ldapuserenv ЯКСФХР ДКЪ ТНПЛХПНБЮМХЪ ЯРПНЙХ ХЛЕМХ ОНКЭГНБЮРЕКЪ ЙНРНПШИ ОШРЮЕРЯЪ ОПНИРХ ЮБРНПХГЮЖХЧ Б ldap. рНЕЯРЭ ТЮЙРХВЕЯЙХ ЩРН base DN ДКЪ ОНКЭГНБЮРЕКЪ. оПХЛЕП: ldapuserenv cn=users,dc=domain,dc=ru 2.7 йНЛЛЮМДЮ ldaptrafgroup ЯКСФХР ДКЪ ЯНГДЮМХЪ КХЛХРНБ нмх наъгюрекэмн днкфмю хдрх оняке бяеу НЯРЮКЭМШУ ЙНЛЛЮМД ОКЮЦХМЮ. a) ОЕПБШИ ОЮПЮЛЕРП ЩРН МЮГБЮМХЕ ЦПСООШ (ГМЮВЕМХЕ ldap ЮРПХАСРЮ ) Б ЙНРНПСЧ БУНДХР ОНКЭГНБЮРЕКЭ. b) БРНПНИ ОЮПЮЛЕРП МЮ ЙЮЙНИ ОЕПХНД МЮЙКЮДШБЮЕРЯЪ НЦПЮМХВЕМХЕ ОН НАЗЕЛС РПЮТХЙЮ . лНФЕР ХЛЕРЭ НДМН ХГ ЯКЕДСЧЫХУ ГМЮВЕМХИ "MONTHLY","DAILY","WEEKLY". Я) РПЕРХИ ОЮПЮЛЕРП ЩРН ПЮГЛЕП КХЛХРЮ Б ЛЕЦЮАЮИРЮУ . Б) ВЕРБЕПРШИ ОЮПЮЛЕРП ЩРН НЦПЮМХВЕМХЕ ОН ЯЙНПНЯРХ Б АХР/ЯЕЙ. кХЛХРШ МЮЙКЮДШБЮЧРЯЪ ОЕПЯНМЮКЭМН МЮ ОНКЭГНБЮРЕКЪ БУНДЪЫЕЦН Б ЦПСООС, Ю МЕ мю ЦПСООС Б ЖЕКНЛ. б ДЮММНЛ ОПХЛЕПЕ Б Active Directory ЯНГДЮМЮ ЦПСООЮ Я ХЛЕМЕЛ traf200m ЙСДЮ ЙКЧВЕММШ БЯЕ ОНКЭГНБЮРЕКХ ЙРНПШЛ МЕНАУНДХЛ ДЮММШИ КХЛХР 200 лАЮИР, Б ЛЕЯЪЖ Я БУНДЪЫЕИ ОНКНЯНИ 60000 АХР/ЯЕЙ мю йюфднцн онкэгнбюрекъ. оПХЛЕП: ldaptrafgroup CN=traf200m,CN=Users,DC=domain,DC=ru MONTHLY 200 60000 яВЕРВХЙХ УПЮМЪРЭЯЪ ДКЪ ЙЮФДНЦН ОНКЭГНБЮРЕКЪ Б НРДЕКЭМНЛ ТЮИКЕ,ХЛЪ ЙНРНПШУ ТНПЛХПСЕРЯЪ, ЙЮЙ ХЛЪ ОНКЭГНБЮРЕКЪ Х ПЮЯЬХПЕМХЕ lc. яНУПЮМЕМХЕ ЯВЕРВХЙНБ ОПНХЯУНДХР ПЮГ Б ЛХМСРС. 2.6 йНЛЛЮМДЮ ldapdircount ЯКСФХР ДКЪ СЙЮГЮМХЪ ДХПЕЙРНПХХ ЙСДЮ АСДСР ЯНУПЮМЪРЭЯЪ ТЮИКШ Я ОНКЭГНБЮРЕКЭЯЙХЛХ ЯВЕРВХЙЮЛХ. оСРЭ Й ДХПЕЙРНПХХ МЮДН ГЮЙЮМВХБЮРЭ ЯКЩЬЕЛ, ОПЪЛНИ ХКХ НАПЮРМШИ Б ГЮБХЯХЛНЯРХ НР ня. оПХЛЕП: ldapdircount c:\3proxy\counter\ ldapdircount /usr/3proxy/counter/ мЮЯРПНИЙЮ 3proxy --------------------- # бмхлюмхе ! мЕ ГЮАШБЮИРЕ ВРН daemon ХКХ service ДНКФЕМ ХДРХ ОЕПБНИ ЯРПНЙНИ # ЙНМТХЦСПЮЖХНММНЦН ТЮИКЮ,РН ЕЯРЭ ДН ГЮЦПСГЙХ КЧАШУ ОКЮЦХМНБ daemon # ДКЪ win32 plugin "Я:\3proxy\ldapauth.dll" start # ДКЪ unix plugin "/3proxy/libldapauth.so" start ldapconnect 192.160.0.1 cn=ldap,cn=users,dc=domain,dc=ru ldap ldapsbase cn=users,dc=domain,dc=ru ldapaccess CN=internet,CN=Users,DC=domain,DC=ru ldapuserenv cn=users,dc=domain,dc=ru ldapdircount /3proxy/counter/ ldapattr cn memberof 1 ldaptrafgroup CN=traf200m,CN=Users,DC=domain,DC=ru MONTHLY 200 60000 ldaptrafgroup CN=traf60d,CN=Users,DC=domain,DC=ru DAILY 60 80000 ldaptrafgroup CN=traf100w,CN=Users,DC=domain,DC=ru WEEKLY 100 80000 auth ldap allow * * * * proxy -p3128 -n -------------------- рЮЙ ФЕ БНГЛНФМЮ ЯКЕДСЧЫЮЪ ЙНМТХЦСПЮЖХЪ АЕГ СВЕРЮ РПЮТХЙЮ Х НЦПЮМХВЕМХИ ОН ЯЙНПНЯРХ. --------------------- service plugin "Я:\3proxy\ldapauth.dll" start ldapconnect 192.160.0.1 cn=ldap,cn=users,dc=domain,dc=ru ldap ldapsbase cn=users,dc=domain,dc=ru ldapaccess CN=internet,CN=Users,DC=domain,DC=ru ldapuserenv cn=users,dc=domain,dc=ru ldapattr cn memberof 1 auth ldap allow * * * * proxy -p3128 -n --------------------- яНГДЮМХЕ ЯОХЯЙНБ ДНЯРСОЮ вРНАШ ЛНФМН АШКН ЯНГДЮБЮРЭ ACL МЮ НЯМНБЕ ЯОХЯЙНБ ОНКЭГНБЮРЕКЕИ БУНДЪЫХУ Б ПЮГКХВМШЕ ЦПСООШ ЙЮРЮКНЦЮ ldap ЯСЫЕЯРБСЕР СРХКХРЮ getldapuser дЮММНИ СРХКХРЕ ЛНЦСР ОЕПЕДЮМШ 5 ОЮПЮЛЕРПНБ : getldapuser < ldapserver basedn user_attribute filter user password > ldapserver - ХЛЪ ХКХ ip ЮДПЕЯ LDAP ЯЕПБЕПЮ basedn - ЙНМРЕЙЯР ОНДЙКЧВЕМХЪ Й LDAP (МЮОПХЛЕП: cn=users,dc=domain,dc=com) user_attribute - МЮГБЮМХЕ ОНКЭГНБЮРЕКЭЯЙНЦН ЮРПХАСРЮ (МЮОПХЛЕП: Б Active Directory ЩРН cn Б ДПСЦХУ LDAP ЙЮРЮКНЦЮУ НМ ЛНФЕР АШР ou) filter - ТХКЭРП ОН ЙЮЙНЛС ОНКЭГНБЮРЕКХ АСДСР НРАХПЮРЭЯЪ ХГ LDAP (МЮОПХЛЕП: ДКЪ Active Directory БШБЕЯРХ БЯЕУ ОНКЭГНБЮРЕКЕИ БУНДЪЫХУ Б ЦПСООС internet АСДЕР ЯКЕДСЧЫЮЪ ЯРПНЙЮ (memberOf=cn=internet,cn=Users,dc=domain,dc=com) ) user - ХЛЪ ОНКЭГНБЮРЕКЪ ДКЪ ОНДЙКЧВЕМХЪ Й ЯЕПБЕПС password - ОЮПНКЭ (ЕЯКХ ЕЯРЭ) оПХЛЕП ХЯОНКЭГНБЮМХЪ getldapuser Б 3proxy. мЕНАУНДХЛН ДЮРЭ ДНЯРСО Й icq РНКЭЙН НОПЕДЕКЕММШЛ ОНКЭГНБЮРКЪЛ . CНГДЮЕЛ Б AD ЦПСООС icquser ГЮМНЯХЛ РСДЮ МСФМШУ ОНКЭГНБЮРЕКЕИ. яНГДЮЕЛ bat ТЮИК ЯКЕДСЧЫЕЦН ЯНДЕПФЮМХЪ ЙНРНПШИ АСДЕР ТНПЛХПНБЮРЭ ТЮИК c:\3proxy\icquser ЯН ЯОХЯЙНЛ ОНКЭГНБЮРЕКЕИ: ------------------------------------------- getldapuser 192.168.0.1 dc=domain,dc=com cn (memberOf=cn=icquser,cn=Users,dc=domain,dc=com) cn=admin,cn=users,dc=domain,dc=com password > c:\3proxy\icquser ------------------------------------------- бЯРЮБКЪЕЛ ДЮММШИ bat ТЮИК МЮ ОЕПХНДХВЕЯЙНЕ БШОНКМЕМХЕ. дЮКЕЕ ОПНОХЯШБЮЕЛ 3proxy.cfg ЯКЕД ЯРПНЙХ ------------------------------------------------- monitor "c:\3proxy\icquser" auth ldap allow $"c:\3proxy\icquser" * *icq.com deny * * *icq.com allow * proxy -n ------------------------------------------------- йНЛОХКЪЖХЪ ОКЮЦХМЮ МЮ ПЮГКХВМШУ ня 1) Win32 (windows 98/NT/XP/2000/2003) дКЪ ЯАНПЙХ Х ПЮАНРШ ОКЮЦХМЮ Б ЮПУХБЕ Я МХЛ СФЕ ХДСР Б ЙЮРЮКНЦЕ ldapwindev ЯКЕДСЧЫХЕ АХАКХНРЕЙХ (БЕПЯХЪ 2.2.29). libcrypto.dll liblber.dll libldap.dll libssl.dll Х ГЮЦНКНБНВМШЕ ТЮИКШ lber.h lber_types.h ldap.h ldap_cdefs.h ldap_features.h ldap_schema.h ldap_utf8.h дЮКЕЕ БЮЛ МЕНАУНДХЛН ЯЙЮВЮРЭ Х СЯРЮМНБХРЭ ЙНЛОХКЪРНП Dev-Cpp Я ЯЮИРЮ http://www.bloodshed.net/dev/ дЮКЕЕ ЯЙЮВЮРЭ ХЯУНДМШЕ РЕЙЯРШ 3proxy НРЯЧДЮ: http://3proxy.ru/current/3proxy-0.6-devel.tgz Х ПЮЯОЮЙНБЮРЭ. б ЙЮРЮКНЦ \src\plugins ЯЙНОХПНБЮРЭ ЙЮРЮКНЦ Я ХЯУНДМШЛХ РЕЙЯРЮЛХ ОКЮЦХМЮ. яЙНППЕЙРХПНБЮРЭ com-win32.bat ТЮИК Я СВЕРНЛ РНЦН ЦДЕ С бЮЯ СЯРЮМНБКЕМ ЙНЛОХКЪРНП gcc , МЮОПХЛЕП: -------------com-win32.bat---------------- c:\Dev-Cpp\bin\gcc -shared -o ldapauth.dll ldapauth.c -DWIN32 -I"./ldapwindev" -L"./ldapwindev" -lldap ------------------------------------------ х ГЮОСЯРХРЭ МЮ БШОНКМЕМХЕ com-win32.bat ОНЯКЕ ЩРНЦН С бЮЯ ДНКФМЮ ОНЪБХРЯЪ АХАКХНРЕЙЮ ldapauth.dll Х ХЯОНКМЪЕЛШИ ТЮИК getldapuser.exe . дКЪ ДЮКЭМЕИЬЕИ ПЮАНРШ ОНКСВХБЬХЕЯЪ ТЮИКШ Х БЯЕ АХАКХНРЕЙХ dll ХГ ЙЮРЮКНЦЮ ldapwindev ЯЙНОХПНБЮРЭ Б ЙЮРЮКНЦ Я 3proxy. 2) xNIX (linux,freebsd Х Р.О. ) оЕПЕД ЙНЛОХКЪЖХЕИ МСФМН ОПНБЕПХРЭ ВРНАШ Б ЯХЯРЕЛЕ АШК СcРЮМНБКЕМ OpenLDAP client. б ЯХЯРЕЛЕ ДНКФМШ ОПХЯСРБНБЮРЭ ЯКЕДСЧЫХЕ АХАКХНРЕЙХ: liblber.a libldap.a liblber.so libldap.so Х ГЮЦНКНБНВМШЕ ТЮИКШ lber.h lber_types.h ldap.h ldap_cdefs.h ldap_features.h ldap_schema.h ldap_utf8.h сЯРЮМНБЙЮ ЙКХЕМРЮ ОНД ПЮГМШЛХ ня ЩРН ДЕКЮЕРЯЪ КХАН ХМЯРЮКЪЖХЕИ ЦНРНБНЦН ОЮЙЕРЮ КХАН ЯЮЛНЯРНЪРЕКЭМЮЪ ЯАНПЙЮ ДЮММНЦН ЙКХЕМРЮ ХГ ХЯУНДМШУ РЕЙЯРНБ ЙНРНПШЕ ПЮЯОНКНФЕММШ РСР ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/ вРНАШ ЯНАПЮРЭ ОЮЙЕР, МЕНАУНДХЛН ЯЙЮВЮРЭ ЮПУХБ wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.3.9.tgz ПЮЯОЮЙНБШБЮЕЛ ЮПУХБ tar xvzf openldap-2.3.9.tgz Х ГЮОСЯЙЮЕЛ ЯЙПХОР ЮБРНЙНМТХЦСПЮЖХХ ЯН ЯКЕДСЧЫХЛХ ОЮПЮЛЕРПЮЛХ: ./configure --enable-backends=no --enable-slapd=no ДЮКЕЕ make make install дЮКЕЕ ЯЙЮВЮРЭ ХЯУНДМШЕ РЕЙЯРШ 3proxy НРЯЧДЮ: http://3proxy.ru/current/3proxy-0.6-devel.tgz Х ПЮЯОЮЙНБЮРЭ. б ЙЮРЮКНЦ \src\plugins ЯЙНОХПНБЮРЭ ЙЮРЮКНЦ Я ХЯУНДМШЛХ РЕЙЯРЮЛХ ОКЮЦХМЮ. хГЛЕМХРЭ ОСРХ Б ТЮИКЕ com-unix.sh ОЮПЮЛЕРПЮУ ЙНЛОХКЪЖХХ -I Х -L Й ГЮЦНКНБНВМШЛ Х АХАКХНРЕВМШЛ ТЮИКЮЛ ldap ДКЪ бЮЬЕИ ЯХЯРЕЛШ. бШОНКМХРЭ ЯКЕДСЧЫХЕ ЙНЛЛЮМДШ: chmod +x com-unix.sh com-unix.sh х ГЮОСЯРХРЭ МЮ БШОНКМЕМХЕ com-unix.sh ОНЯКЕ ЩРНЦН С бЮЯ ДНКФМЮ ОНЪБХРЯЪ АХАКХНРЕЙЮ ldapauth.so Х ХЯОНКМЪЕЛШИ ТЮИК getldapuser. оНКСВХБЬХЕЯЪ ТЮИКШ ЯЙНОХПНБЮРЭ Б ЙЮРЮКНЦ Я 3proxy. ----------------------------win1251------------------------------ ----------------------------KOI8-R------------------------------ Плагин аутентификации в LDAP для сервера 3proxу (ОС windows,unix) (c) Lopuchov Kirill lopuchov@mail.ru 1. Краткое описание * Поддерживается только аутентификация открытым текстом (basic) * Поддерживается создание лимитов по трафику для групп пользователей (в день,месяц,неделю) * Поддерживается создание лимитов по скорости для групп пользователей (пока лимиты только на входящий трафик) * Отсутcтвует кеширование имен пользователей. В качестве интерфейса доступа к ldap используется библиотека openldap, поэтому плагин может компилироваться и работать как на Windows 98/2000/XP так и на различных unix подобных системах например Linux,FreeBSD. Все тесты работоспособности проводились на сервере с Active Directory в ее реализации ldap но в принципе должно работать и на других ldap системах. Для компиляции и тестирования под ОС Windows использовался пакет Dev-C++ http://www.bloodshed.net/dev/ и часть библиотек OpenLDAP for Windows http://lucas.bergmans.us/hacks/openldap/ версия openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe, версия этой же библиотеки идет в комплекте к плагину. под unix подобной ОС (Freebsd) использовался стандартный gcc. и библиотеки openldap-client. 2. Настройка плагина. 2.1 Для подключения к LDAP серверу используется комманда ldapconnect . Первый параметр определят ip адрес или host имя LDAP сервера , второй параметр имя пользователя от имени корого будут совершиться вся дальнейшая работа с ldap каталогом такая как поиск пользователей и проверка их принадлежности к той или иной группе, третий параметр это пароль для этого пользователя. У такого пользовате в контекстет Active Directory могут отсутсвовать права администратора для нормальной работы плагина. В классических Open Ldap серверах под xNIX таким пользователем может выступать anonymous. Пример: ldapconnect 192.160.0.1 cn=ldap,cn=users,dc=domain,dc=ru ldap 2.2 Для определения в каком контексте искать пользователей и группы служит комманда ldapsbase Пример: ldapsbase cn=users,dc=domain,dc=ru 2.3 Комманда ldapattr служит для определния различных параметров плагина. a)первый параметр определяет атрибут "пользователь" в контексте ldap каталога в Active Directory это как правило "cn" , в других ldap серверах "uid". b)второй параметр опеределяет атрибут "группа" в контексте ldap каталога в Active Directory это как правило "memberof" , в других ldap серверах "ou". c)третий параметр может не обязательный и может содержать 0 или 1 1 - означает, что при авторизации пользователя или создании для него орграничения по трафику его имя будет приводится к нижнему регистру (примечание: только для имен пользователей на английском) . Этот параметр создан для исключения случаев когда LDAP каталог при авторизации не отличает имен пользователей в регистрах. Пример: ldapattr cn memberof 1 2.4 Комманда ldapaccess служит для определения "признака" доступности пользователю вообще пройти авторизацию на proxy сервере. В контексте ldap каталога это ЗНАЧЕНИЕ атрибута "группы" описанной в комманде ldapattr. Пример: ldapaccess CN=internet,CN=Users,DC=domain,DC=ru Например: для Active Directory это будет пользователь входящий в группу internet. Тоесть при проверке можно ли пользователю работать с proxy формируется фильтр он должен попасть в следующий фильтр: (&(cn=имяпользователя)(memberof=CN=internet,CN=Users,DC=domain,DC=ru)) 2.5 Комманда ldapuserenv служит для формирования строки имени пользователя который пытается пройти авторизацию в ldap. Тоесть фактически это base DN для пользователя. Пример: ldapuserenv cn=users,dc=domain,dc=ru 2.7 Комманда ldaptrafgroup служит для создания лимитов ОНИ ОБЯЗАТЕЛЬНО ДОЛЖНА ИДТИ ПОСЛЕ ВСЕХ остальных комманд плагина. a) первый параметр это название группы (значение ldap атрибута ) в которую входит пользователь. b) второй параметр на какой период накладывается ограничение по объему трафика . Может иметь одно из следующих значений "MONTHLY","DAILY","WEEKLY". с) третий параметр это размер лимита в мегабайтах . в) четвертый параметр это ограничение по скорости в бит/сек. Лимиты накладываются персонально на пользователя входящего в группу, а не НА группу в целом. В данном примере в Active Directory создана группа с именем traf200m куда ключенны все пользователи кторым необходим данный лимит 200 Мбайт, в месяц с входящей полосой 60000 бит/сек НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ. Пример: ldaptrafgroup CN=traf200m,CN=Users,DC=domain,DC=ru MONTHLY 200 60000 Счетчики храняться для каждого пользователя в отдельном файле,имя которых формируется, как имя пользователя и расширение lc. Сохранение счетчиков происходит раз в минуту. 2.6 Комманда ldapdircount служит для указания директории куда будут сохраняться файлы с пользовательскими счетчиками. Путь к директории надо заканчивать слэшем, прямой или обратный в зависимости от ОС. Пример: ldapdircount c:\3proxy\counter\ ldapdircount /usr/3proxy/counter/ Настройка 3proxy --------------------- # ВНИМАНИЕ ! Не забывайте что daemon или service должен идти первой строкой # конфигурационного файла,то есть до загрузки любых плагинов daemon # для win32 plugin "с:\3proxy\ldapauth.dll" start # для unix plugin "/3proxy/libldapauth.so" start ldapconnect 192.160.0.1 cn=ldap,cn=users,dc=domain,dc=ru ldap ldapsbase cn=users,dc=domain,dc=ru ldapaccess CN=internet,CN=Users,DC=domain,DC=ru ldapuserenv cn=users,dc=domain,dc=ru ldapdircount /3proxy/counter/ ldapattr cn memberof 1 ldaptrafgroup CN=traf200m,CN=Users,DC=domain,DC=ru MONTHLY 200 60000 ldaptrafgroup CN=traf60d,CN=Users,DC=domain,DC=ru DAILY 60 80000 ldaptrafgroup CN=traf100w,CN=Users,DC=domain,DC=ru WEEKLY 100 80000 auth ldap allow * * * * proxy -p3128 -n -------------------- Так же возможна следующая конфигурация без учета трафика и ограничений по скорости. --------------------- service plugin "с:\3proxy\ldapauth.dll" start ldapconnect 192.160.0.1 cn=ldap,cn=users,dc=domain,dc=ru ldap ldapsbase cn=users,dc=domain,dc=ru ldapaccess CN=internet,CN=Users,DC=domain,DC=ru ldapuserenv cn=users,dc=domain,dc=ru ldapattr cn memberof 1 auth ldap allow * * * * proxy -p3128 -n --------------------- Создание списков доступа Чтобы можно было создавать ACL на основе списков пользователей входящих в различные группы каталога ldap существует утилита getldapuser Данной утилите могут переданы 5 параметров : getldapuser < ldapserver basedn user_attribute filter user password > ldapserver - имя или ip адрес LDAP сервера basedn - контекст подключения к LDAP (например: cn=users,dc=domain,dc=com) user_attribute - название пользовательского атрибута (например: в Active Directory это cn в других LDAP каталогах он может быт ou) filter - фильтр по какому пользователи будут отбираться из LDAP (например: для Active Directory вывести всех пользователей входящих в группу internet будет следующая строка (memberOf=cn=internet,cn=Users,dc=domain,dc=com) ) user - имя пользователя для подключения к серверу password - пароль (если есть) Пример использования getldapuser в 3proxy. Необходимо дать доступ к icq только определенным пользоватлям . Cоздаем в AD группу icquser заносим туда нужных пользователей. Создаем bat файл следующего содержания который будет формировать файл c:\3proxy\icquser со списком пользователей: ------------------------------------------- getldapuser 192.168.0.1 dc=domain,dc=com cn (memberOf=cn=icquser,cn=Users,dc=domain,dc=com) cn=admin,cn=users,dc=domain,dc=com password > c:\3proxy\icquser ------------------------------------------- Вставляем данный bat файл на периодическое выполнение. Далее прописываем 3proxy.cfg след строки ------------------------------------------------- monitor "c:\3proxy\icquser" auth ldap allow $"c:\3proxy\icquser" * *icq.com deny * * *icq.com allow * proxy -n ------------------------------------------------- Компиляция плагина на различных ОС 1) Win32 (windows 98/NT/XP/2000/2003) Для сборки и работы плагина в архиве с ним уже идут в каталоге ldapwindev следующие библиотеки (версия 2.2.29). libcrypto.dll liblber.dll libldap.dll libssl.dll и заголовочные файлы lber.h lber_types.h ldap.h ldap_cdefs.h ldap_features.h ldap_schema.h ldap_utf8.h Далее вам необходимо скачать и установить компилятор Dev-Cpp с сайта http://www.bloodshed.net/dev/ Далее скачать исходные тексты 3proxy отсюда: http://3proxy.ru/current/3proxy-0.6-devel.tgz и распаковать. В каталог \src\plugins скопировать каталог с исходными текстами плагина. Скорректировать com-win32.bat файл с учетом того где у Вас установлен компилятор gcc , например: -------------com-win32.bat---------------- c:\Dev-Cpp\bin\gcc -shared -o ldapauth.dll ldapauth.c -DWIN32 -I"./ldapwindev" -L"./ldapwindev" -lldap ------------------------------------------ И запустить на выполнение com-win32.bat после этого у Вас должна появится библиотека ldapauth.dll и исполняемый файл getldapuser.exe . Для дальнейшей работы получившиеся файлы и все библиотеки dll из каталога ldapwindev скопировать в каталог с 3proxy. 2) xNIX (linux,freebsd и т.п. ) Перед компиляцией нужно проверить чтобы в системе был уcтановлен OpenLDAP client. В системе должны присутвовать следующие библиотеки: liblber.a libldap.a liblber.so libldap.so и заголовочные файлы lber.h lber_types.h ldap.h ldap_cdefs.h ldap_features.h ldap_schema.h ldap_utf8.h Установка клиента под разными ОС это делается либо инсталяцией готового пакета либо самостоятельная сборка данного клиента из исходных текстов которые расположенны тут ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/ Чтобы собрать пакет, необходимо скачать архив wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.3.9.tgz распаковываем архив tar xvzf openldap-2.3.9.tgz и запускаем скрипт автоконфигурации со следующими параметрами: ./configure --enable-backends=no --enable-slapd=no далее make make install Далее скачать исходные тексты 3proxy отсюда: http://3proxy.ru/current/3proxy-0.6-devel.tgz и распаковать. В каталог \src\plugins скопировать каталог с исходными текстами плагина. Изменить пути в файле com-unix.sh параметрах компиляции -I и -L к заголовочным и библиотечным файлам ldap для Вашей системы. Выполнить следующие комманды: chmod +x com-unix.sh com-unix.sh И запустить на выполнение com-unix.sh после этого у Вас должна появится библиотека ldapauth.so и исполняемый файл getldapuser. Получившиеся файлы скопировать в каталог с 3proxy. ----------------------------KOI8-R------------------------------