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

    http://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 указан только потому, что у нас в сети несколько доменов.