PfSense 2.1.3 и Kerberos (для Squid)



  • Здравствуйте.

    Есть желание использовать Squid3 на текущей версии pfSense (2.1.3).
    Так как прямых руководств по настройке поддержки Kerberos для Squid именно в pfSense найти так и не удалось, решил воспользоваться статьёй описывающей процесс настройки связки SQUID+Kerberos на FreeBSD. И почти сразу упёрся в одну проблему - как я понял, в pfSense после чистой установки нет нужных для работы Kerberos файлов (klist, kinit, ktutil и т.п.). Собственно вопрос в том, как их можно добавить в систему.

    Установил пакет KRB5:

    pkg_add -r https://files.pfsense.org/packages/amd64/8/All/krb5-1.9.2_3.tbz
    

    в итоге при попытке вызвать любую из ранее перечисленных утилит, получаю следующее:

    $ kinit
    libexec/ld-elf.so.1: /usr/local/lib/libkrb5.so: Undefined symbol "add_error_table"
    




  • Эти ветки я читал. В первой ветке речь идёт про установку Samba (а хочется обойтись без неё как описано в статье на которую я привел ссылку), а во второй речь вообще об NTLM, а меня интересует именно Kerberos.



  • Вот еще варианты
    http://www.opennet.ru/openforum/vsluhforumID1/95369.html
    http://squid-web-proxy-cache.1019090.n4.nabble.com/Kerberos-and-NTLM-authentication-td4660031.html

    По поводу ошибок "Undefined symbol " сдается вы установили не пакет не с той версии FreeBSD.



  • @dvserg:

    …По поводу ошибок "Undefined symbol " сдается вы установили не пакет не с той версии FreeBSD.

    Ссылка откуда устанавливал видна в первом посте. Я полагал что в каталоге https://files.pfsense.org/packages/amd64/8/All/ лежат пакеты именно для pfSense 2.1.3 x64.

    В конечном итоге пакеты доступные в этом каталоге (ни krb5-1.9.2_3.tbz ни heimdal-1.5.2_4.tbz) не принесли желаемого результата. Такое ощущение что для корректно работы этих пакетов не хватает каких-то зависимостей.

    Установил пакет heimdal-1.4_1 из коллекции пакетов для FreeBSD 8.3 ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.3-release/Latest/heimdal.tbz
    и утилиты для работы с Kerberos заработали. То есть эту проблему решить удалось.

    Но теперь возник другой вопрос относительно настройки LDAP-фильтра для хелпера squid_ldap_group к Squid.
    Его можно здесь задать?



  • C squid_ldap_group вроде разобрался. По крайней мере тестирование работает и хелпер мне успешно показывает включен пользователь домена в группу или не включен.

    Теперь реально упёрся в другую проблему.
    Не работает как надо хелпер /usr/local/libexec/squid/squid_kerb_auth, хотя по идее должен так как пакет squid3, как я вижу, собран с параметром '–enable-negotiate-auth-helpers=squid_kerb_auth'.

    Для проверки работы хелпера выполняю команду:

    /usr/local/libexec/squid/squid_kerb_auth_test -d kom-ad01-gw01.holding.com
    

    В ответ получаю:

    
    dlopen: Cannot open "/usr/lib/libgssapi_krb5.so.10"
    dlopen: Cannot open "/usr/lib/libgssapi_spnego.so.10"
    2014/05/29 11:14:57| squid_kerb_auth_test: gss_init_sec_context() failed:  An unsupported mechanism was requested. unknown mech-code 0 for mech unknown
    Token: NULL
    
    

    Дополнительная информация по исходным данным:

    Содержимое файла /etc/krb5.conf

    
    [libdefaults]
      default_realm = HOLDING.COM
      default_keytab_name = /usr/local/etc/squid/SQUID-Svc-on-GW01.keytab
    [realms]
      HOLDING.COM = {
      kdc = kom-ad01-dc01.holding.com
      kdc = kom-ad01-dc02.holding.com
      admin_server = kom-ad01-dc01.holding.com
      default_domain = holding.com
      }
    [domain_realm]
      .holding.com = HOLDING.COM
      holding.com = HOLDING.COM
    
    

    Содержимое файла keytab (ktutil -k /usr/local/etc/squid/SQUID-Svc-on-GW01.keytab list) :

    
    /usr/local/etc/squid/SQUID-Svc-on-GW01.keytab:
    
    Vno  Type                     Principal                                                 Aliases
      5  des-cbc-crc              HTTP/kom-ad01-gw01.holding.com@HOLDING.COM
      5  des-cbc-md5              HTTP/kom-ad01-gw01.holding.com@HOLDING.COM
      5  arcfour-hmac-md5         HTTP/kom-ad01-gw01.holding.com@HOLDING.COM
      5  aes256-cts-hmac-sha1-96  HTTP/kom-ad01-gw01.holding.com@HOLDING.COM
      5  aes128-cts-hmac-sha1-96  HTTP/kom-ad01-gw01.holding.com@HOLDING.COM
    
    

    Выполнен тест получения билета:

    
    kinit -k HTTP/kom-ad01-gw01.holding.com
    klist
    
    

    Результат:

    
    Credentials cache: FILE:/tmp/krb5cc_0
            Principal: HTTP/kom-ad01-gw01.holding.com@HOLDING.COM
    
      Issued           Expires          Principal
    May 29 11:24:28  May 29 21:24:28  krbtgt/HOLDING.COM@HOLDING.COM
    
    

    То есть, как я понимаю, билет успешно получен.

    Однако squid_kerb_auth_test  как и squid_kerb_auth выдают вышеописанную ошибку.

    Подскажите пожалуйста в какую сторону копать.



  • Никто ничего не подскажет?



  • @pfs-beginner:

    Никто ничего не подскажет?

    Возможно здесь проблема

    dlopen: Cannot open "/usr/lib/libgssapi_krb5.so.10"
    dlopen: Cannot open "/usr/lib/libgssapi_spnego.so.10"
    2014/05/29 11:14:57| squid_kerb_auth_test: gss_init_sec_context() failed:  An unsupported mechanism was requested. unknown mech-code 0 for mech unknown
    Token: NULL
    


  • Это я уже понял :)
    Только вот как решить эту проблему?



  • В гугле пробовали поискать по squid_kerb_auth_test: gss_init_sec_context() failed ?

    http://forum.lissyara.su/viewtopic.php?f=3&t=25959&start=50

    осилил спустя полтора дня мозгового штурма, слишком много нюансов, которые в гайдах не везде указываются:
    у клиента системное время должно соответствовать прокси и КД
    в условиях win2008 нужно для mapuser разрешить использовать des шифрование, что бы тикет опознался как родной
    в настройках прокси нужно указывать прокси как fqdn, а не ip адрес
    необходимо для krb наличие обратной и прямой зоны для сквида

    https://bbs.archlinux.org/viewtopic.php?id=157458

    http://squid-web-proxy-cache.1019090.n4.nabble.com/Problems-setting-up-Kerberos-authentication-td1576502.html



  • Добрый день, werter

    Тоже интересна эта тема
    Бьюсь с настройкой уже пару дней
    Поясните если не сложно как заставили squid использовать полученный keytab
    Вариант с прописывание в стартовом скрипте squid.sh естественно не подошел, ибо затирает система автоматом при перезапуске squid3 из веб-интерфейса)

    У самого домен на win2003
    Сейчас с клиентского ПК (IE8,Firefox 29, в прокси FQDN:3128) пытаюсь зайти в Инет, squid кидает ошибку
    "Доступ к кэшу запрещен"
    В логах squid3 cache:
    authenticateNegotiateHandleReply: Error validating user via Negotiate
    Error returned 'BH gss_acquire_cred() failed

    (настройки в основном брал тут
    http://www.k-max.name/linux/avtorizaciya-autentifikaciya-squid/ )

    В pfsense 2.1 в настройках squid3 прописал свои опции в Custom Options:

    auth_param negotiate program /usr/local/libexec/squid/squid_kerb_auth -s HTTP/gate.mydomen.lan@MYDOMEN.LAN
    (пробовал просто с параметров -d)

    auth_param negotiate children 10
    auth_param negotiate keep_alive on
    acl lan proxy_auth REQUIRED
    http_access allow lan

    Изначально ставил пакет heimdal (установился без вопросов)
    ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.3-release/Latest/

    Мой /etc/krb5.conf

    
    [logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
            default_realm = MYDOMEN.LAN
    	 default_keytab_name = /usr/local/etc/squid/gatehttp.keytab
    [realms]
            DOMAIN.LOCAL = {
                    kdc = backup.mydomen.lan
            }[libdefaults]
            default_realm = MYDOMEN.LAN
    [realms]
            DOMAIN.LOCAL = {
                    kdc = backup.mydomen.lan
            }
    
    


  • В Гугл - Error returned 'BH gss_acquire_cred() failed

    http://www.lissyara.su/?id=2101 - настройка

    authenticateNegotiateHandleReply: Error validating user via Negotiate. Error returned 'BH gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information. Permission denied'
    Неверно назначены права на keytab, сквид его не может прочитать.



  • Спасибо, werter
    Но у меня ошибка другая

    Проверка работы Kerberos для авторизации через keytab файл проходит успешно

    
    kinit -k HTTP/gate.mydomen.lan
    klist
    Credentials cache: FILE:/tmp/krb5cc_0
            Principal: HTTP/gate.mydomen.lan@MYDOMEN.LAN
    
      Issued           Expires          Principal
    Jun  4 09:36:02  Jun  4 19:36:02  krbtgt/MYDOMEN.LAN@MYDOMEN.LAN
    kdestroy
    
    

    Права на keytab файл выставлены

    ls -l gatehttp.keytab
    -rw–-----  1 proxy  proxy  71 Jun  4 08:02 gatehttp.keytab

    Сейчас при попытке с клиентского ПК открыть браузер ошибка
    Доступ к кэшу запрещён

    В логе cache.log

    dlopen: Cannot open "/usr/lib/libgssapi_krb5.so.10"
    dlopen: Cannot open "/usr/lib/libgssapi_spnego.so.10"
    2014/06/04 09:24:54| authenticateNegotiateHandleReply: Error validating user via Negotiate. Error returned 'BH gss_acquire_cred() failed:  No credentials were supplied, or the credentials were unavailable or inaccessible.. unknown mech-code 0 for mech unknown'

    Я так понимаю все же не хватает библиотек ? (не нашел где их взять)
    Все же не могу понять, как в pfsense заставить squid увидеть keytab файл

    На некоторых форумах советуют добавить
    KRB5_KTNAME=/dir/to/HTTP.keytab
    export KRB5_KTNAME
    в скрипт запуска squid, но вопрос как добавить, если squid.sh генерируется системой

    Есть ли мысли?
    Заранее благодарен



  • https://forums.freebsd.org/viewtopic.php?f=7&t=46530

    ldconfig -r
    ….
    lgssapi_krb5.10 => /usr/lib/libgssapi_krb5.so.10
    lgssapi_spnego.10 => /usr/lib/libgssapi_spnego.so.10
    ....



  • Спасибо, werter

    Но, пока не понятно, как все же установить необходимые библиотеки в Pfsense
    Изначально установил пакет heimdal-1.4_1 из коллекции пакетов для FreeBSD 8.3

    
    ldconfig -r | grep libgssapi_krb5.so
    130:-lgssapi_krb5.2 => /usr/local/lib/libgssapi_krb5.so.2
    
    ldconfig -r | grep libgssapi_spnego.so
    - пусто -
    
    

    Не судите строго, pfsense (как и FreeBSD) осваиваю недавно



  • Спасибо, werter за помощь
    В проблеме разобрался, все заработало как надо

    В логе cache.log
    dlopen: Cannot open "/usr/lib/libgssapi_krb5.so.10"
    dlopen: Cannot open "/usr/lib/libgssapi_spnego.so.10"
    2014/06/04 09:24:54| authenticateNegotiateHandleReply: Error validating user via Negotiate. Error returned 'BH gss_acquire_cred() failed:  No credentials were supplied, or the credentials were unavailable or inaccessible.. unknown mech-code 0 for mech unknown'

    Скачал необходимые библиотеки

    
    cd /usr/lib/
    fetch ftp://ftp.freebsd.tsc.ru/pub/FreeBSD/releases/i386/9.0-RELEASE/usr/lib/libgssapi_spnego.so.10
    fetch ftp://ftp.freebsd.tsc.ru/pub/FreeBSD/releases/i386/9.0-RELEASE/usr/lib/libgssapi_krb5.so.10
    
    

    Никаких переменных в скрипт запуска squid3 (squid.sh, squid.inc) прописывать не пришлось, все благополучно опознал

    
    1402399039.444  70618 <ip адрес="">TCP_MISS/200 4685 CONNECT forum.pfsense.org:443 user@MYDOMEN.LAN DIRECT/208.123.73.68</ip> 
    


  • Не за что.
    Т.с. общее дело делаем и решение пригодится не только мне и вам.



  • После мытарств с pfSense понял, что нужной мне гибкости Squid я на этой платформе не получу (больше сил уйдёт на борьбу с авто-генерируемыми конфигами). Перебрался на Linux и настроил всё как мне надо.
    Если интересно, полное пошаговое описание из 10 частей настройки опубликовал в блоге.
    Ссылка на первую часть:
    http://blog.it-kb.ru/2014/06/16/forward-proxy-squid-3-3-on-ubuntu-server-14-04-lts-part-1-install-os-on-hyper-v-generation-2-vm/


Log in to reply