SQUID + LDAP + AD
-
Вообщем выкладываю статейку о том как я заставил сквид понять авторизацию по группам через ЛДАП и рекурсивно искать пользователей в АД, может кому пригодится:
Для начала настраиваем параметры авторизации как на картинке:
В АД нужен пользователь с правами чтения групп и пользователей. 192.168.1.1 это ИР контроллера домена.
Пояснение:
LDAP server user DN: squid_user@domain.com пользователь на чтение АД, некоторые указывают что то в роде: cn=Squid User,ou=users,dc=domain,dc=com что тоже есть правильно, мне удобнее первый вариант.
LDAP base domain: dc=domain,dc=com это корень домена domain.com к которому мы привязываемся.
LDAP username DN attribute: cn я не знаю зачем этот параметр я просто указал cn.
LDAP search filter: sAMAccountName=%s фильтр поиска в ЛДАП, в этом поле указан логин пользователя, по нему и ищем. %s получим позже от аутентификатора.Далее дополнительные параметры:
external_acl_type ldap_users %LOGIN /usr/local/libexec/squid/squid_ldap_group -R -b "dc=domain,dc=com" -f "(&(sAMAccountName=%v)(memberOf=cn=%a,ou=users,dc=domain,dc=com))" -D squid_user@domain.com -w super_password 192.168.1.1;
acl ad_inet external ldap_users InetUsers;
http_access allow ad_inet;Пояснение:
Первая строчка разруливает сопоставление пользователей и групп
Вторая и треться назначает ACL группе из АД и разрешает этой группе доступ к интернету, InetUsers это наша группа в АД ad_inet это внутрений acl сквида. Такой АЦЛ может быть не единственным а например из группы в АД можно задать соответствие пользователя скорости в delay_pools:acl ad_inet1m external ldap_users InetUsers1m
acl ad_inet2m external ldap_users InetUsers2m
acl ad_inet3m external ldap_users InetUsers3mhttp_access allow ad_inet1m
http_access allow ad_inet2m
http_access allow ad_inet3m
Так можно разрулить скорость в пулах через группу в АД.Но так все это работать не будет если АД упорядочена в виде дерева. Для этого я подправил в файле /usr/local/pkg/squid.inc строчку добавив параметр -R как накартинке:
Это заставило аутентификатор искать пользователей рекурсивно по дереву а не только в OU к которому мы привязывались в начале. -
Добавил в http://forum.pfsense.org/index.php/topic,22839.msg117446.html#msg117446
-
Что-то с группой (InetUsers) не получается, все под ряд в инет выходят.
А ещё при первом запуске и первом заходе на веб страницу браузер долго думает, ну очень долго, потом нормально, после перезапуска компа при первом запуске и первом заходе на веб страницу браузер снова долго думает, около минуты. -
В списках доступа по ИП не должно быть ничего. Сам по себе авторизированный пользователь уже в списке доступа.
Скорость авторизации зависит от скорости сети и времени отклика домен-контроллера. -
Что-то не пашет оно:
pfsense 2.0.1 Release
win 2003 ee r2 sp2
лес и домен 2003-го уровня
win xp pro sp 3Proxy server: Access Control > Allowed subnets - пусто
Proxy server: General settings > Allow users on interface - стоит галкаsquid.conf
# Do not edit manually ! http_port 192.168.1.1:8080 icp_port 0 pid_filename /var/run/squid.pid cache_effective_user proxy cache_effective_group proxy error_directory /usr/local/etc/squid/errors/English icon_directory /usr/local/etc/squid/icons visible_hostname pfsense.rrsrv.ath.cx cache_mgr adm@rrsrv.ath.cx access_log /dev/null cache_log /var/squid/logs/cache.log cache_store_log none logfile_rotate 0 shutdown_lifetime 3 seconds # Allow local network(s) on interface(s) acl localnet src 192.168.1.0/255.255.255.0 uri_whitespace strip cache_mem 16 MB maximum_object_size_in_memory 32 KB memory_replacement_policy heap GDSF cache_replacement_policy heap LFUDA cache_dir diskd /var/squid/cache 100 16 256 minimum_object_size 0 KB maximum_object_size 4 KB offline_mode off cache_swap_low 90 cache_swap_high 95 # No redirector configured # Setup some default acls acl all src 0.0.0.0/0.0.0.0 acl localhost src 127.0.0.1/255.255.255.255 acl safeports port 21 70 80 210 280 443 488 563 591 631 777 901 3128 1025-65535 acl sslports port 443 563 acl manager proto cache_object acl purge method PURGE acl connect method CONNECT acl dynamic urlpath_regex cgi-bin \? cache deny dynamic http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !safeports http_access deny CONNECT !sslports # Always allow localhost connections http_access allow localhost quick_abort_min 0 KB quick_abort_max 0 KB request_body_max_size 10240 KB reply_body_max_size 10485760 deny all delay_pools 1 delay_class 1 2 delay_parameters 1 -1/-1 -1/-1 delay_initial_bucket_level 100 # Throttle extensions matched in the url acl throttle_exts urlpath_regex -i "/var/squid/acl/throttle_exts.acl" delay_access 1 allow throttle_exts delay_access 1 deny all # Custom options external_acl_type ldap_users %LOGIN /usr/local/libexec/squid/squid_ldap_group -R -b "dc=rrsrv,dc=ath,dc=cx" -f "(&(sAMAccountName=%v)(memberOf=cn=%a,ou=users,ou=HQ,dc=rrsrv,dc=ath,dc=cx))" -D pfs@rrsrv.ath.cx -w pfs 192.168.1.1 acl ad_inet external ldap_users InetUsers_GSG http_access allow ad_inet auth_param basic program /usr/local/libexec/squid/squid_ldap_auth -R -v 3 -b dc=rrsrv,dc=ath,dc=cx -D pfs@rrsrv.ath.cx -w pfs -f "sAMAccountName=%s" -u cn -P 192.168.1.11:389 auth_param basic children 5 auth_param basic realm Please enter your credentials to access the proxy auth_param basic credentialsttl 60 minutes acl password proxy_auth REQUIRED http_access allow password localnet # Default block all to be sure http_access deny all
В группе InetUsers_GSG один юзер, однако в нет попадают все кто есть в AD. Сама группа лежит в подразделении - ou=users,ou=HQ,dc=rrsrv,dc=ath,dc=cx, юзеры в подразделении - OU=IT,OU=users,OU=HQ,DC=rrsrv,DC=ath,DC=cx
-
http_access allow password localnet
??
# These hosts do not have any restrictions http_access allow unrestricted_hosts # Always allow access to whitelist domains http_access allow whitelist # Block access to blacklist domains http_access deny blacklist auth_param basic program /usr/local/libexec/squid/squid_ldap_auth -R -v 3 -b dc=domain,dc=com -D srv@domain.com -w pwd -f "sAMAccountName=%s" -u cn -P 192.168.1.1:389 auth_param basic children 5 auth_param basic realm Please enter your credentials to access the proxy auth_param basic credentialsttl 60 minutes acl password proxy_auth REQUIRED http_access allow unrestricted_hosts # Custom options external_acl_type ldap_users %LOGIN /usr/local/libexec/squid/squid_ldap_group -R -b "dc=domain,dc=com" -f "(&(sAMAccountName=%v)(memberOf=cn=%a,ou=hq,dc=domain,dc=com))" -D srv@domain.com -w pwd 192.168.1.1 acl ad_inet external ldap_users gginet http_access allow ad_inet # Default block all to be sure http_access deny all
Попробуй в консоли посмотреть что возвращают:
/usr/local/libexec/squid/squid_ldap_group -R -b "dc=domain,dc=com" -f "(&(sAMAccountName=%v)(memberOf=cn=%a,ou=hq,dc=domain,dc=com))" -D srv@domain.com -w pwd 192.168.1.1 /usr/local/libexec/squid/squid_ldap_auth -R -v 3 -b dc=domain,dc=com -D srv@domain.com -w pwd -f "sAMAccountName=%s" -u cn -P 192.168.1.1:389
Первой команде в консоли указываешь **user[пробел]group[энтэр]**Должно вернуть ОК или ERR
Второй user[пробел]passwd[энтэр] так же должен увидеть ОК или ERR -
http_access allow password localnet ```- хз, сам не знаю что это такое. /usr/local/libexec/squid/squid_ldap_group -R -b "dc=rrsrv,dc=ath,dc=cx" -f "(&(sAMAccountName=%v)(memberOf=cn=%a,ou=IT,ou=users,ou=HQ,dc=rrsrv,dc=ath,dc=cx))" -D pfs@rrsrv.ath.cx -w pfs 192.168.1.11 > **ERR** /usr/local/libexec/squid/squid_ldap_auth -R -v 3 -b dc=rrsrv,dc=ath,dc=cx -D pfs@rrsrv.ath.cx -w pfs -f "sAMAccountName=%s" -u cn -P 192.168.1.11:389 > **OK** А группу какую указывать основную или любую в которую входит пользователь?
-
На группу в который пользователь должно вернуть ОК на левую ERR.
Скорее всего у тебя срабатывает АЦЛ по ЛОКАЛНЕТ то есть доступ всем авторизированым не зависимо от того в группе или нет.
Кстати у тебя какой сквид? Я устанавливал 3ий но установился 2,7 ???Allow users on interface включен? У меня нет.
-
Кое-какая продрись произошла:
[2.0-RELEASE][admin@hqgw3.rrsrv.ath.cx]/root(1): /usr/local/libexec/squid/squid_ldap_group -R -b "dc=rrsrv,dc=ath,dc=cx" -f "(&(objectclass=person)(sAMAccountName=%v)(memberOf=cn=%a,ou=HQ,dc=rrsrv,dc=ath,dc=cx))" -D pfs@rrsrv.ath.cx -w pfs 192.168.1.11
adm InetUsers
OKкосяк видимо был в пути: (memberOf=cn=%a,ou=HQ,dc=rrsrv,dc=ath,dc=cx)
squid 2.7.9 STABLE устанавливал его
Allow users on interface включен. Без этого squid не стартует.
Перестало тормозить при первом входе на веб страницу, однако пускает всех авторизованных.
-
Скорее всего у тебя срабатывает АЦЛ по ЛОКАЛНЕТ то есть доступ всем авторизированым не зависимо от того в группе или нет.
Как его прибить ПРАВИЛЬНО этот ACL? Ибо при тупом комментировании оного в squid.conf всё начинает правильно работать, однако при сохранении настроек через веб интерфейс squid.conf перезаписывыается с настройками http_access allow password localnet.
-
Выложи скрин страницы General в рабочем состоянии ну и логи, чего не стартует без Allow users on interface
-
Вот такая хрень БЫЛА:
[2.0-RELEASE][admin@hqgw3.rrsrv.ath.cx]/root(1): /usr/local/etc/rc.d/squid.sh restart
[2.0-RELEASE][admin@hqgw3.rrsrv.ath.cx]/root(2): /usr/local/etc/rc.d/squid.sh restart
2012/03/05 00:53:41| ACL name 'localnet' not defined!
FATAL: Bungled squid.conf line 75: http_access allow password localnet
Squid Cache (Version 2.7.STABLE9): Terminated abnormally.
[2.0-RELEASE][admin@hqgw3.rrsrv.ath.cx]/root(3): /usr/local/etc/rc.d/squid.sh restart
2012/03/05 00:54:56| ACL name 'localnet' not defined!
FATAL: Bungled squid.conf line 75: http_access allow password localnet
Squid Cache (Version 2.7.STABLE9): Terminated abnormally.
2012/03/05 00:55:01| ACL name 'localnet' not defined!
FATAL: Bungled squid.conf line 75: http_access allow password localnet
Squid Cache (Version 2.7.STABLE9): Terminated abnormally.
Щас нормально запускается без Allow users on interface, squid нормально пашет, не тормозит, пускает только тех кого нужно. -
SysR
Такой АЦЛ может быть не единственным а например из группы в АД можно задать соответствие пользователя скорости в delay_pools:
Накатай на эту тему отдельную статью. Для pfsense.
-
К сожалению стандартная схема пулов в пфСенсе настроена на ограничение по типам файлов а не по группам. Поэтому пока что разрулись скорось по (внешним) групам не представляется возможным стандартным способом.
Если кому интересно поправить файл через консоль то могу накидать небольшой мануал что и как.
-
À â êàêîé ñòðî÷êå ôàéëà squid.inc äîáàâëÿòü -R ?
Âñå, âðîäå, çàðàáîòàëî, êàê îïèñàíî â ñòàòüå. Íî âîò ïðîáëåììà: êàê áûòü åñëè èìÿ ãðóïïû ñîäåðæèò ïðîáåëû? Íèêàê íå ïîëó÷àåòñÿ ïåðåäàòü. "" - íå ïîìîãàþò.
È ïðîáîâàë ëè êòî-íèáóäü äåëàòü negotiate àâòîðèçàöèþ ñ ó÷åòîì ïðèíàäëåæíîñòè ãðóïïàì? -
/usr/local/libexec/squid/squid_ldap_auth -R [….]
-
×òîáû ðàáîòàëî äåéñòâèëåëüíî ïî ãðóïïàì, íàäî ôàéë /usr/local/pkg/squid.inc ïîïðàâèòü òàê, ÷òîáû â squid.conf íå äîáàâëÿëèñü ñòðîêè:
acl password proxy_auth REQUIRED
http_access allow password localnet
Äëÿ ýòî äîñòàòî÷íî ïåðåä íèìè ïîñòàâèòü #.Ïîïðîáîâàë âñå ýòî íà squid 3.1.19. Òàì ïðèøëîñü ñåðüåçíåå ïîïðàâèòü squid.inc, òàê êàê îáëàñòü Custom Settings, çà÷åì òî, âïèñûâàåòñÿ ðàíüøå ÷åì íàì ýòî íàäî. Íî ïîêà íå çàðàáîòàëî.  ëîãàõ ïèøåò:
WARNING: Cannot run '/usr/local/libexec/squid/squid_ldap_group' process
Õîòÿ èç êîììàíäíîé ñòðîêè âñå ñðàáàòûâàåò.
:( -
Не обновляйте 3ий сквид кто пользуется ЛДАП авторизацией. Рискуете получить:
Can't use proxy auth because no authentication schemes are fully configured.
-
А хоть кто-нибудь настраивал Negotiate authentication method в pfSense? Ну не красиво это в 21 веке заставлять пользователей по 10 раз на дню вводить пароли и передавать их в открытом виде.
-
Браузер не просит пароль снова пока его не закроешь.