Squid - LDAP группы AD нужен совет
-
Проблема заключается в том, что мой АД выполнен в виде дерева каталогов, юзеры рассованы по отделам (каталогам), всего порядка 15 отделов в них у каждого по 6-7 подотделов (подкаталоги), некоторые отделы именуются кириллицей, некоторые имеют символ типа "!". - хелперы по ходу не умеют работать с кириллицей и искать в подкаталогах.
Так вот из-за подобного хауса в АД не могу определить членство в группах у юзеров для выдачи им интернета в соответсвии с группой.
Так же настроена авторизация через керберос, с ней всё в порядке.
Есть ли какой способ назначить права доступа к инету конкретному пользователю не по ip (information text)что мне необходимо от всего этого - Прозрачная авторизация, три группы пользователей - ходят везде, ходят только по белому списку, не ходят вообще
-
Добрый.
Приведите AD в порядок (сменить на латиницу, убрать "!" etc). Потому как с такой кашей проблемы могут в ближайшем будущем вылезти не только с pfsense. Поверьте. -
@werter АД вроде бы привёл в более менее божеский вид. Теперь хелпер ext_ldap_group_acl стал сопоставлять пользователя и группу, но это только из консоли а когда запихиваю в конфиг кальмар выключается....
мой конфиг -
"Advanced Features"
в поле "Integrations"url_rewrite_program /usr/local/bin/squidGuard -c /usr/local/etc/squidGuard/squidGuard.conf;url_rewrite_bypass off;url_rewrite_children 16 startup=8 idle=4 concurrency=0
в поле "Custom Options (Before Auth)"
# прозрачная авторизация через Kerberos auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth -k /etc/CRB/squid3.keytab # сколько параллельных потоков запускать для обслуживания аутентификации клиентов через kerberos auth_param negotiate children 1000 # указывает поддерживать связь, а не обрывать, когда браузер опрашивает схемы аутентификации (в положении on) auth_param negotiate keep_alive on # включаем авторизацию по паролю acl auth proxy_auth REQUIRED # разрешить\запретить доступ после авторизации http_access deny !auth http_access allow auth
в таком виде реализована прозрачная авторизация по средствам kerberos. Тут всё работает и в логах пишет :
Date IP Status Address User Destination
28.06.2018 12:47:38 ip-компа TCP_TUNNEL/200 сайт_куда_ходил:порт User@Domain 94.100.180.76Но мне так же необходимо разграничить права доступа в инет пользователям в соответсвии с их группой в АД
пытаюсь использовать хелпер ext_ldap_group_acl - проверяю в консоле
2.4.3-RELEASE][root@******.******.*****.ru]/root: /usr/local/libexec/squid/ext_ldap_group_acl -d -v 3 -P -R -K -s sub -b "OU=OU,DC=office,DC=domain,DC=ru" -D user@domain -W /usr/local/libexec/squid/conf_param_ldappass.txt -f "(&(objectclass=person)(sAMAccountName=%v)(memberOf=CN=%a,CN=Users,DC=office,DC=domain,DC=ru))" -h hostnameDC username group ext_ldap_group_acl.cc(584): pid=97207 :Connected OK ext_ldap_group_acl.cc(727): pid=97207 :group filter '(&(objectclass=person)(sAMAccountName=user)(memberOf=CN=internet_blocked,CN=Users,DC=office,DC=domain,DC=ru))', searchbase 'OU=OU,DC=office,DC=domain,DC=ru' OK
на основе этого добавляю в поле "Custom Options (Before Auth)"
acl localnet src 10.2.0.0/16 dns_nameservers 127.0.0.1 acl SSL_ports port 443 8443 9443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 9443 acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT acl AUTH proxy_auth REQUIRED http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager cache deny all ### allow list acl acl_rabota dstdomain "/usr/local/etc/squid/allow_list/allow_sites.txt" external_acl_type ldap_search ttl=300 negative_ttl=300 %LOGIN /usr/local/libexec/squid/ext_ldap_group_acl -d -v 3 -P -R -K -s sub -b "OU=OU,DC=office,DC=domain,DC=ru" -D user@domain -W /usr/local/libexec/squid/conf_param_ldappass.txt -f "(&(objectclass=person)(sAMAccountName=%v)(memberOf=CN=%a,CN=Users,DC=office,DC=domain,DC=ru))" -h hostnameDC acl acl_all_internet external ldap_search all_internet acl acl_rabota_only external ldap_search rabota_only acl acl_not_internet external ldap_search not_internet http_access allow CONNECT SSL_ports #---------- Правило для группы all_internet ----------# http_access allow AUTH acl_all_internet #---------- Правило для группы rabota_only ----------# http_access allow AUTH acl_rabota_only acl_rabota #---------- Правило для группы not_internet ----------# http_access deny AUTH acl_not_internet http_access allow CONNECT SSL_ports http_access deny all http_port 3128 access_log stdio:/usr/local/squid/logs/access.log squid cache_store_log stdio:/usr/local/squid/logs/store.log cache_log /usr/local/squid/logs/cache.log coredump_dir /usr/local/squid
Ну в общем после сохранения кальмар стопариться и не запускается...
-
Может тут чего подойдет :
http://www.k-max.name/linux/squid-auth-kerberos-ldap-grupp-active-directory/
https://fakirss.wordpress.com/2017/05/04/авторизация-в-squid-через-kerberos-на-pfsense/
https://pro-ldap.ru/art/levintsa/20140626-squid/
https://ubuntuforums.org/archive/index.php/t-2187256.html
I found a solution!
Problem was with IPv6.
When squid tries to run the helper he asks IPv6, which I have disabled. Therefore, in logs appears following line of code:
WARNING: Cannot run '/usr/lib/squid3/ext_ldap_group_acl' process.
As far as I have good understanding of the process, squid do not stop to restart the helper. Therefore in logs appears:
WARNING: external ACL 'memberof' queue overload. Request rejected 'administrator InternetAccess'
The solution is to put the ipv4 flag in front of %LOGIN just like this:
external_acl_type memberof ipv4 %LOGIN /usr/lib/squid3/ext_ldap_group_acl -P -R -K -b "dc=dot,dc=lan" -f "(&(cn=%v)(memberOf=cn=%g,cn=Users,dc=dot,dc=lan))" -D nslcd-service@dot.lan -w "Pa77w0rd" -h ubuntu.dot.lan
references:
http://squid-web-proxy-cache.1019090.n4.nabble.com/external-acl-td4662446.html~
http://squid-web-proxy-cache.1019090.n4.nabble.com/Starting-helpers-with-ipv6-disabled-td4660978.htmlhttp://timp87.blogspot.com/2014/02/squid-ad.html в комментариях есть что-то
https://forum.netgate.com/topic/131081/вопрос-прокся-без-авторизации-но-с-ограни/
https://www.youtube.com/playlist?list=PLQ7gVTPc8Kmij4-2RpiQMAQjkj3XkolGI -
@werter Да, спасибо я по этим статьям и делал. Вроде как условно заработало, правда пришлось другой хелпер использовать. Разбираюсь в правилах по что...
код сейчас выглядит вот так -auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth -k /etc/CRB/squid3.keytab auth_param negotiate children 15 auth_param negotiate keep_alive on external_acl_type ldap_verify %LOGIN /usr/local/libexec/squid/ext_ldap_group_acl -d -v 3 -P -R -K -s sub -b "OU=OU,DC=office,DC=********,DC=ru" -D *******@******* -K -W /usr/local/libexec/squid/conf_param_ldappass.txt -f "(&(objectclass=person)(sAMAccountName=%v)(memberOf=CN=%a,CN=Users,DC=office,DC=********,DC=ru))" -h *******.******.******.ru acl manager proto cache_object acl localhost src 127.0.0.1/32 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl CONNECT method CONNECT acl localnet src 10.0.0.0/16 acl to_localnet dst 10.0.0.0/16 http_port 10.2.1.46:3129 acl users external ldap_verify all_internet acl users-list external ldap_verify rabota_only acl whitelist dstdomain "/usr/local/etc/squid/allow_list/allow_sites.txt" acl allusers proxy_auth REQUIRED http_access deny manager http_access allow users http_access allow users-list whitelist http_access deny !allusers all http_access deny all
-
Добрый.
https://forum.netgate.com/topic/108251/прошу-помощи-в-настройке-squid-ldap-pfsense-2-3-1
У вас в хелпере OU был пропущен.
Здесь http://www.k-max.name/linux/squid-auth-kerberos-ldap-grupp-active-directory в комментариях оч. интересно :
Спасибо за мануал. Сделал всё тоже самое, но с хелпером ext_kerberos_ldap_group_acl.
Работает магическим способом, получая все необходимые данные о сервере ldap из DNS, и авторизуясь в нём для проверки по уже существующему ключику kerberos (используя учётную запись машины). Таким образом, не надо создавать учётку пользователя и хранить её пароль на сервере.
Конфиг, который проверяет пользователей на вхождение в группы:
external_acl_type adgroup ttl=1200 %LOGIN %ACL /usr/lib/squid3/ext_kerberos_ldap_group_acl -D AD.LOCAL
acl internet external adgroup
acl fastinternet external adgroup
где internet и fastinternet — имена соответствующих груп в AD. Ну и да, realm AD.LOCAL указан только потому, что у нас в сети несколько доменов.