----------------------------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------------------------------