Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Squid - LDAP группы AD нужен совет

    Scheduled Pinned Locked Moved Russian
    6 Posts 2 Posters 2.0k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      pouwer
      last edited by pouwer

      Проблема заключается в том, что мой АД выполнен в виде дерева каталогов, юзеры рассованы по отделам (каталогам), всего порядка 15 отделов в них у каждого по 6-7 подотделов (подкаталоги), некоторые отделы именуются кириллицей, некоторые имеют символ типа "!". - хелперы по ходу не умеют работать с кириллицей и искать в подкаталогах.

      Так вот из-за подобного хауса в АД не могу определить членство в группах у юзеров для выдачи им интернета в соответсвии с группой.
      Так же настроена авторизация через керберос, с ней всё в порядке.
      Есть ли какой способ назначить права доступа к инету конкретному пользователю не по ip (information text)

      что мне необходимо от всего этого - Прозрачная авторизация, три группы пользователей - ходят везде, ходят только по белому списку, не ходят вообще

      1 Reply Last reply Reply Quote 0
      • werterW
        werter
        last edited by werter

        Добрый.
        Приведите AD в порядок (сменить на латиницу, убрать "!" etc). Потому как с такой кашей проблемы могут в ближайшем будущем вылезти не только с pfsense. Поверьте.

        P 1 Reply Last reply Reply Quote 0
        • P
          pouwer @werter
          last edited by pouwer

          @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
          

          Ну в общем после сохранения кальмар стопариться и не запускается...

          1 Reply Last reply Reply Quote 0
          • werterW
            werter
            last edited by werter

            Может тут чего подойдет :

            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

            P 1 Reply Last reply Reply Quote 0
            • P
              pouwer @werter
              last edited by

              @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
              
              1 Reply Last reply Reply Quote 0
              • werterW
                werter
                last edited by werter

                Добрый.

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

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post
                Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.