Автор Тема: Доступ к сети интернет, только пользователей из группы InetGroup, через Squid  (Прочитано 50755 раз)

dimm

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Вечер добрый, уважаемые !

На работе поставили задачу: доступ в интернет дать только привилегированным персонам (состоящим в группе InetGroup - группа в Active Directory), и нужно ограничить загрузку файлов.
Парк из ~30 машин, данные для аутентификации хранятся в Active Directory который крутится на Windows Server 2008 R2.

Поискав информации в интернете, пришёл к мысли: установить в качестве шлюза linux, со squid+openldap на борту.

Господа, дайте правильное направление, куда копать. А то пока что, от прочитанного одна каша в голове: я так и не понял как будет производиться проверка на принадлежность юзера к группе:

1) squid проверяет юзера на принадлежность к группе в Active Directory
2) openldap настроен таким образом, что запрашивает принадлежность юзера к группе в Active Directory (а squid запрашивает информацию у openldap)

Надеюсь на Ваши терпение, помощь и понимание.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте! Поступить в Вашем случае можно по разному. Самый простой способ, IMHO, связать squid с AD напрямую через хелпер ext_ldap_group_acl (squid_ldap_group). То есть сначала провести аутентификацию пользователя (basic или negotiate, если Вы используете kerberos), а затем проверить принадлежность пользователя группе с помощью ext_ldap_group_acl. Примерно это должно выглядеть так:

ext_ldap_group_acl -b "CN=Users,DC=mycompany,DC=ru" -f "(&(samAccountName=%u)(memberof=CN=%g,CN=Users,DC=mycompany,DC=ru))" -D "CN=Some User,CN=Users,DC=mycompany,DC=ru" -w SomePass -h ADserverAddress

А в squid.conf прописать этот вызов по аналогии с тем, что я писал здесь.

Кстати, squid можно установить и на Windows, если Вы переживаете по поводу Linux. Жаль, что у меня пока не готов материал по squid, где я рассматриваю работу хелперов подробно (планирую опубликовать в мае этого года).

Егор

dimm

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Здравствуйте Егор.

Два дня пробую реализовать kerberos авторизацию на squid-сервере, чтобы пользователи не вводили пароли при серфинге инета через прокси, но пока без результатно: в логах пишет:

negotiate_kerberos_auth.cc(212): pid=548 :2014/04/29 12:09:57| negotiate_kerberos_auth: INFO: Starting version 3.0.4sq
negotiate_kerberos_auth.cc(258): pid=548 :2014/04/29 12:09:57| negotiate_kerberos_auth: DEBUG: Got 'YR TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==' from squid (length: 59).
negotiate_kerberos_auth.cc(311): pid=548 :2014/04/29 12:09:57| negotiate_kerberos_auth: DEBUG: Decode 'TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==' (decoded length: 40).
negotiate_kerberos_auth.cc(321): pid=548 :2014/04/29 12:09:57| negotiate_kerberos_auth: WARNING: received type 1 NTLM token
2014/04/29 12:09:57 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: "received type 1 NTLM token"; }}

squid.conf:
auth_param negotiate program /usr/libexec/squid/negotiate_kerberos_auth -d -s HTTP/squidreader.@DOMAIN.LOCAL

auth_param negotiate children 10
auth_param negotiate keep_alive on

external_acl_type proxy_users_group ttl=7200 children-max=20 children-startup=5 children-idle=1 negative_ttl=7200 %LOGIN /usr/libexec/squid/ext_kerberos_ldap_group_acl -g "proxy_users_group"

acl INTERNET_ACCESS external proxy_users_group


acl lan src 192.168.111.0/24
acl auth proxy_auth REQUERED


http_access deny !INTERNET_ACCESS
http_access allow INTERNET_ACCESS
http_access deny all

http_port 3128

Тикет создан правильно, через утилиту kinit авторизация проходит по kerberos 5...

Название группы для прокси: "proxy_users_group", находится она в "Groups".
Пользователи находятся в "Groups".
Пользователь (принцип) на которого создан билет: squidreader (аккаунт создан в домене)
IP DC: 192.168.111.50

версия squid: 3.4.3, собрано с поддержкой kerberos, ldap, cyrus-sasl ...

Буду благодарен за любую помощь или подсказки.
« Последнее редактирование: 29 Апрель 2014, 10:31:18 от dimm »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте! К сожалению у меня нет связки squid+AD+kerberos, поэтому проверить negotiate-аутентификацию возможности нет. На Вашем месте я бы сначала добился корректной работы хелпера аутентификации, и только потом начал бы настраивать ограничения по группам. То есть когда заработает такая конфигурация:

auth_param negotiate ...

acl auth proxy_auth REQUERED

http_access allow auth
http_access deny all

и squid станет пускать всех пользователей корректно, можно начинать экспериментировать с группами.

Егор

gsi0

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Приветствую. Откликнулся на "зов о помощи" =)
Сразу говорю, что у меня не заработала версия Squid, который вы обсуждаете. Все работает на версии
squid -v
Squid Cache: Version 3.1.10
configure options:  '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--enable-internal-dns' '--disable-strict-error-checking' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-arp-acl' '--enable-follow-x-forwarded-for' '--enable-auth=basic,digest,ntlm,negotiate' '--enable-basic-auth-helpers=LDAP,MSNT,NCSA,PAM,SMB,YP,getpwnam,multi-domain-NTLM,SASL,DB,POP3,squid_radius_auth' '--enable-ntlm-auth-helpers=smb_lm,no_check,fakeauth' '--enable-digest-auth-helpers=password,ldap,eDirectory' '--enable-negotiate-auth-helpers=squid_kerb_auth' '--enable-external-acl-helpers=ip_user,ldap_group,session,unix_group,wbinfo_group' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-icap-client' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-referer-log' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl' '--enable-storeio=aufs,diskd,ufs' '--enable-useragent-log' '--enable-wccpv2' '--enable-esi' '--with-aio' '--with-default-user=squid' '--with-filedescriptors=16384' '--with-dl' '--with-openssl' '--with-pthreads' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'target_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fpie' 'LDFLAGS=-pie' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fpie' --with-squid=/builddir/build/BUILD/squid-3.1.10

Очень важно, чтоб тикет для kerberos сделался без единого варнинга. Если вылазит, то сделайте тикет под локальным администратором домена. (там была фишка, что UAC блочил что-то, не помню уже)



Показываю свои конфиги, которые работают уже год, даже забыл, что у меня есть прокси. Очень долго вникал в эту тему.

Модераторы, простите, не знаю как сделать expand. Тороплюсь, хочется человеку помочь.
Это мой kerberos.

/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 = TEMA.LOCAL
 dns_lookup_realm = true
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 TEMA.LOCAL = {
  kdc = int-dc01.tema.local
  admin_server = int-dc01.tema.local
 }

 INT-DC01.TEMA.LOCAL = {
  kdc = int-dc01.tema.local
  kdc = int-dc02.tema.local
 }

[domain_realm]
 .tema.local = TEMA.LOCAL
 tema.local = TEMA.LOCAL

А это /etc/squid/squid.conf

cat /etc/squid/squid.conf
#
# Recommended minimum configuration:
#
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1



# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
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 Safe_ports port 888 # moscow.gks.ru
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager

# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
#http_access allow localhost

#http_access allow localnet
auth_param negotiate program /usr/lib64/squid/squid_kerb_auth -s HTTP/int-proxy02.tema.local
auth_param negotiate children 10
auth_param negotiate keep_alive on

external_acl_type ldap_verify ttl=60 %LOGIN \
/usr/lib64/squid/squid_ldap_group -R -b "dc=tema,dc=local" \
-f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,ou=Access,ou=New,ou=Tema Groups,dc=tema,dc=local))" \
-D adsquid@tema.local -K -W /usr/lib64/squid/password.txt 172.21.0.10

acl OFFICE external ldap_verify Access_Proxy_ftl_OFFICE
acl VIP external ldap_verify Access_Proxy_ftl_VIP


acl allusers proxy_auth REQUIRED
acl swf rep_mime_type -i ^application/x-shockwave-flash$
acl mediapr urlpath_regex \.swf(\?.*)?$
acl media rep_mime_type video/flv video/x-flv
acl mediapr urlpath_regex \.flv(\?.*)?$
acl flash rep_mime_type Content-Type video
acl bsites dstdomain '/etc/squid/bsites.conf'
acl bfiles url_regex '/etc/squid/block.conf'
acl asites dstdomain '/etc/squid/asites.conf'

http_access allow VIP
http_access allow OFFICE
http_reply_access allow VIP bfiles
http_reply_access allow VIP flash
http_reply_access allow VIP swf
http_reply_access allow VIP bsites
http_reply_access allow VIP media
http_reply_access allow VIP mediapr
http_reply_access allow VIP asites
http_reply_access allow OFFICE asites
http_reply_access deny flash
http_reply_access deny swf
http_reply_access deny bsites
http_reply_access deny media
http_reply_access deny mediapr
http_reply_access deny bfiles
http_access deny all !allusers

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128

# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

cache_effective_user squid
cache_effective_group squid

Начинать смотреть внимательно следует со строчек auth_param negotiate program /usr/lib64/squid/squid_kerb_auth -s HTTP/int-proxy02.tema.local...
И особенно на

external_acl_type ldap_verify ttl=60 %LOGIN \
/usr/lib64/squid/squid_ldap_group -R -b "dc=tema,dc=local" \
-f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,ou=Access,ou=New,ou=Tema Groups,dc=tema,dc=local))" \
-D adsquid@tema.local -K -W /usr/lib64/squid/password.txt 172.21.0.10

Дальше acl - это просто наборы правил, который мы потом укажем: применять их к пользователю\группе или нет.
А вот дальше тоже интересно, как применять acl
В принципе все должно быть понятно, если что-то закрываем группе, а другой нужен доступ, то это нужно указать. Иначе в конце конфига стоит deny all и группа не получит доступа к контенту.
Вообщем пробуйте, а меня начальство дёргает ) Если еще вопросы будут, я обязательно отвечу.

gsi0

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Цитировать
Поискав информации в интернете, пришёл к мысли: установить в качестве шлюза linux, со squid+openldap на борту.
   
   НЕ ГОРОДИТЕ!

Достаточно одного лишь squid на каком-нибудь CentOS
Я так понимаю, что интернет у сотрудников есть, его просто нужно ограничить?

   

dimm

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Уважаемые Егор и gsi0 !

Спасибо вам большое за отклик !

gsi0, спасибо за конфиги и заметку об версии сквида (у меня была мысля завтра на работе поковырять исходники ext_kerb_group_acl, потому что из консоли оно выдаёт два ответа: один OK а второй ERR ! - явно не должно быть так ...)

Завтра на работе скачаю и установлю указанную вами версию и буду надеяться на успех !!!

Скажите пожалуйста:

вот в фильтре:
-f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,ou=Access,ou=New,ou=Tema Groups,dc=tema,dc=local))" указано '%v', - это для логина ?

"cn=%a" - для группы ?

"ou=Access,ou=New,ou=Tema Groups" - это названия групп или названия OrganisationUnion ? и как быть если группы расположены не в "Groups", а в "MyDomain_Groups" ?


"-D adsquid@tema.local" - на этого юзера в домене сделан тикет ?

Ещё раз огромное спасибо !  :D

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте!

вот в фильтре:
-f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,ou=Access,ou=New,ou=Tema Groups,dc=tema,dc=local))" указано '%v', - это для логина ?

"cn=%a" - для группы ?

Да, Вы всё верно поняли. Вместо %v будет подставлено содержимое squid-переменной %LOGIN (например, dimm@DOMAIN.LOCAL), а вместо %a -- значение RDN записи группы (например, InetGroup). Хелпер squid_ldap_group понимает и более логичные шаблоны: %u для имени пользователя и %g для имени группы, то еть фильтр мог бы выглядеть так:
-f "(&(objectclass=user)(sAMAccountName=%u)(memberOf=cn=%g,ou=Access,ou=New,ou=Tema Groups,dc=tema,dc=local))"

"ou=Access,ou=New,ou=Tema Groups" - это названия групп или названия OrganisationUnion ? и как быть если группы расположены не в "Groups", а в "MyDomain_Groups" ?
ou=Access,ou=New,ou=Tema Groups,dc=tema,dc=local -- это DN (отличительное имя) раздела каталога, в котором хранятся записи групп. Грубо говоря, это путь до того места, гда у Вас хранятся записи групп. Само собой, необходимо указать актуальное для Вашего каталога местонахождение записей групп.

"-D adsquid@tema.local" - на этого юзера в домене сделан тикет ?
В данном случае это значения не имеет, так как сочетание аргументов -D и -W при вызове squid_ldap_group подразумевает простую (simple) аутентификацию в каталоге, то есть без kerberos.

Егор
« Последнее редактирование: 30 Апрель 2014, 01:43:21 от egor »

gsi0

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Цитировать
Цитата: dimm от 29 Апрель 2014, 17:57:20
"-D adsquid@tema.local" - на этого юзера в домене сделан тикет ?
В данном случае это значения не имеет, так как сочетание аргументов -D и -W при вызове squid_ldap_group подразумевает простую (simple) аутентификацию в каталоге, то есть без kerberos.

Вы, наверное, правы, но так у меня не работает kerberos. Пришлось добавлять пользователя.
Почему я уверен, что он работает? Помню, что проверял командами, все это работало.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте, gsi0! Пользователь в каталоге (AD) несомненно должен быть, иначе он не сможет пройти simple-аутентификацию, то есть аутентификацию по имени пользователя и паролю (у Вас же хранится пароль в файле /usr/lib64/squid/password.txt). При simple-аутентификации kerberos не используется, поэтому тикет для этого пользователя создавать не обязательно. Я имел ввиду именно этот момент.

Спасибо что откликнулись!

Егор

dimm

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Приветствую!
Спасибо за ответы !

К сожалению, у меня ничего не получается (пробовал перекомпилить сквид, версию 3.1.10 + конфиги от gsi0)...
Сегодня даже тикеты не удаётся проверить при помощт kinit ...

Я ведь правильно создаю тикет:
msktutil -c -b "CN=Computers" -s HTTP/squidproxy.домен.local -k /etc/squid/squidproxy.keytab --computer-name SQUIDPROXY --upn HTTP/squidproxy.домен.local --server dc.домен.local --enctypes 28 --verbose

(
ещё раньше пробовал так:
# kinit admin@ДОМЕН.LOCAL (ввод пароля администратора домена)
# ktutil
addent -password -p squidproxy@ДОМЕН.LOCAL -k 1 -e aes256-cts-hmac-sha1-96
addent -password -p squidproxy@ДОМЕН.LOCAL -k 1 -e rc4-hmac
addent -password -p squidproxy@ДОМЕН.LOCAL -k 1 -e des-cbc-crc
addent -password -p squidproxy@ДОМЕН.LOCAL -k 1 -e des-cbc-md5
wkt /etc/squid/squidproxy.keytab
quit
# kdestroy
)

а потом проверяю:
kinit HTTP/squidproxy@ДОМЕН.LOCAL -Vkt /etc/squid/squidproxy.keytab

Или не ?

PS: всё делаю в линуксе ...
« Последнее редактирование: 30 Апрель 2014, 15:25:53 от dimm »

gsi0

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Я делал это с помощью ktpass.exe
Если хотите, дам образ своего squid, но только в понедельник уже.

NextHop

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Коллеги, добрый день. Такой же вопрос. Настраиваю прозрачный прокси через AD и Kerberos V5. CentOS 7 введена в домен с помощью realm:

[root@vs-otr-squid02 ~]# realm list
domain.ru
  type: kerberos
  realm-name: DOMAIN.RU
  domain-name: domain.ru
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd
  required-package: oddjob
  required-package: oddjob-mkhomedir
  required-package: sssd
  required-package: adcli
  required-package: samba-common-tools
  login-formats: %U@domain.ru
  login-policy: allow-realm-logins

Сборка Squid:

Squid Cache: Version 3.5.20
Service Name: squid
configure options:  '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-strict-error-checking' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,LDAP,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,SMB_LM,getpwnam' '--enable-auth-ntlm=smb_lm,fake' '--enable-auth-digest=file,LDAP,eDirectory' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=file_userip,LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,rock,ufs' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -fpie' 'LDFLAGS=-Wl,-z,relro  -pie -Wl,-z,relro -Wl,-z,now' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -fpie' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'

Содержимое файла keytab:

slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    3               HTTP/vs-otr-squid02@DOMAIN.RU

Есть пользователь в AD - squid2018, для которого keytab и создавался. Проверяем.

[root@vs-otr-squid02 ~]# kinit HTTP/vs-otr-squid02@DOMAIN.RU
Password for HTTP/vs-otr-squid02@DOMAIN.RU:

Пароль для squid2018 принимается, получаем билет:

[root@vs-otr-squid02 ~]# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: HTTP/vs-otr-squid02@DOMAIN.RU

Valid starting       Expires              Service principal
06/27/2018 12:05:09  06/27/2018 22:05:09  krbtgt/DOMAIN.RU@DOMAIN.RU
        renew until 07/04/2018 12:04:52

Затем уничтожаем его.

Содержимое /etc/squid/squid.conf

# Авторизация в Active Directory
auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -s HTTP/vs-otr-squid02@DOMAIN.RU
auth_param negotiate children 600
auth_param negotiate keep_alive off

external_acl_type ad_group_member_check ttl=120 %LOGIN /usr/lib64/squid/ext_ldap_group_acl -d -v3 -P -R -K -b "DC=domain,DC=ru" -D "vs-otr-squid02@domain.ru" -w VerySecretPassword -f "(&(objectclass=person)(sAMAccountName=%v)(memberOf=cn=%g,CN=Domain Users,CN=Users,DC=domain,DC=ru))" -h hs-dc-1.domain.ru

# Обязательная авторизация, без неё нет доступа!
acl auth proxy_auth REQUIRED

# Стандартные порты
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
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

# Стандартные разрешения
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow auth
http_access deny all

# Порты прокси-сервера
http_port 172.31.4.64:3128
http_port 172.31.4.64:3127 transparent

# Настройки кэширования
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# Принудительно задаем желаемый DNS-сервер
dns_nameservers 172.31.2.113
dns_v4_first on

# Включаем русский язык для сообщений сервера
error_directory /usr/share/squid/errors/ru-ru
error_default_language ru

Статус работы Squid:

[root@vs-otr-squid02 ~]# systemctl status squid
● squid.service - Squid caching proxy
   Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-06-27 11:31:08 MSK; 42min ago
  Process: 2753 ExecStop=/usr/sbin/squid -k shutdown -f $SQUID_CONF (code=exited, status=0/SUCCESS)
  Process: 2762 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
  Process: 2756 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
 Main PID: 2765 (squid)
   CGroup: /system.slice/squid.service
           ├─2765 /usr/sbin/squid -f /etc/squid/squid.conf
           ├─2767 (squid-1) -f /etc/squid/squid.conf
           ├─2768 (ext_ldap_group_acl) -d -v3 -P -R -K -b DC=domain,DC=ru -D vs-otr-squid02@domain.ru -w VerySecretPassword -f (&(objectclass=person)(sAMAccountName=%v)(memberOf=cn=%g,CN=Domain Users,CN=Users,DC=domain,DC=ru)) -h hs-dc-1.domain.ru
           ├─2769 (ext_ldap_group_acl) -d -v3 -P -R -K -b DC=domain,DC=ru -D vs-otr-squid02@domain.ru -w VerySecretPassword -f (&(objectclass=person)(sAMAccountName=%v)(memberOf=cn=%g,CN=Domain Users,CN=Users,DC=domain,DC=ru)) -h hs-dc-1.domain.ru
           ├─2770 (ext_ldap_group_acl) -d -v3 -P -R -K -b DC=domain,DC=ru -D vs-otr-squid02@domain.ru -w VerySecretPassword -f (&(objectclass=person)(sAMAccountName=%v)(memberOf=cn=%g,CN=Domain Users,CN=Users,DC=domain,DC=ru)) -h hs-dc-1.domain.ru
           ├─2771 (ext_ldap_group_acl) -d -v3 -P -R -K -b DC=domain,DC=ru -D vs-otr-squid02@domain.ru -w VerySecretPassword -f (&(objectclass=person)(sAMAccountName=%v)(memberOf=cn=%g,CN=Domain Users,CN=Users,DC=domain,DC=ru)) -h hs-dc-1.domain.ru
           ├─2772 (ext_ldap_group_acl) -d -v3 -P -R -K -b DC=domain,DC=ru -D vs-otr-squid02@domain.ru -w VerySecretPassword -f (&(objectclass=person)(sAMAccountName=%v)(memberOf=cn=%g,CN=Domain Users,CN=Users,DC=domain,DC=ru)) -h hs-dc-1.domain.ru
           └─2773 (logfile-daemon) /var/log/squid/access.log

Jun 27 11:31:08 vs-otr-squid02 systemd[1]: Starting Squid caching proxy...
Jun 27 11:31:08 vs-otr-squid02 squid[2765]: Squid Parent: will start 1 kids
Jun 27 11:31:08 vs-otr-squid02 squid[2765]: Squid Parent: (squid-1) process 2767 started
Jun 27 11:31:08 vs-otr-squid02 systemd[1]: Started Squid caching proxy.

Но в браузере выскакивает окно ввода имени и пароля, чего быть не должно. Ладно, ввожу, но не принимается, а в /var/log/squid/cache.log вот что пишет:

2018/06/27 12:19:16 kid1| Accepting NAT intercepted HTTP Socket connections at local=172.31.4.64:3127 remote=[::] FD 24 flags=41
2018/06/27 12:19:29| Current Directory is /
2018/06/27 12:19:29 kid1| Preparing for shutdown after 0 requests
2018/06/27 12:19:29 kid1| Waiting 30 seconds for active connections to finish
2018/06/27 12:19:29 kid1| Closing HTTP port 172.31.4.64:3128
2018/06/27 12:19:29 kid1| Closing HTTP port 172.31.4.64:3127
2018/06/27 12:19:29 kid1| Current Directory is /
2018/06/27 12:19:29 kid1| Starting Squid Cache version 3.5.20 for x86_64-redhat-linux-gnu...
2018/06/27 12:19:29 kid1| Service Name: squid
2018/06/27 12:19:29 kid1| Process ID 2858
2018/06/27 12:19:29 kid1| Process Roles: worker
2018/06/27 12:19:29 kid1| With 16384 file descriptors available
2018/06/27 12:19:29 kid1| Initializing IP Cache...
2018/06/27 12:19:29 kid1| DNS Socket created at [::], FD 8
2018/06/27 12:19:29 kid1| DNS Socket created at 0.0.0.0, FD 10
2018/06/27 12:19:29 kid1| Adding nameserver 172.31.2.113 from squid.conf
2018/06/27 12:19:29 kid1| helperOpenServers: Starting 0/600 'negotiate_kerberos_auth' processes
2018/06/27 12:19:29 kid1| helperStatefulOpenServers: No 'negotiate_kerberos_auth' processes needed.
2018/06/27 12:19:29 kid1| helperOpenServers: Starting 5/5 'ext_ldap_group_acl' processes
2018/06/27 12:19:29 kid1| Logfile: opening log daemon:/var/log/squid/access.log
2018/06/27 12:19:29 kid1| Logfile Daemon: opening log /var/log/squid/access.log
2018/06/27 12:19:29 kid1| Local cache digest enabled; rebuild/rewrite every 3600/3600 sec
2018/06/27 12:19:29 kid1| Store logging disabled
2018/06/27 12:19:29 kid1| Swap maxSize 0 + 262144 KB, estimated 20164 objects
2018/06/27 12:19:29 kid1| Target number of buckets: 1008
2018/06/27 12:19:29 kid1| Using 8192 Store buckets
2018/06/27 12:19:29 kid1| Max Mem  size: 262144 KB
2018/06/27 12:19:29 kid1| Max Swap size: 0 KB
2018/06/27 12:19:29 kid1| Using Least Load store dir selection
2018/06/27 12:19:29 kid1| Current Directory is /
2018/06/27 12:19:29 kid1| Finished loading MIME types and icons.
2018/06/27 12:19:29 kid1| HTCP Disabled.
2018/06/27 12:19:29 kid1| Squid plugin modules loaded: 0
2018/06/27 12:19:29 kid1| Adaptation support is off.
2018/06/27 12:19:29 kid1| Accepting HTTP Socket connections at local=172.31.4.64:3128 remote=[::] FD 23 flags=9
2018/06/27 12:19:29 kid1| Accepting NAT intercepted HTTP Socket connections at local=172.31.4.64:3127 remote=[::] FD 24 flags=41
2018/06/27 12:19:30 kid1| storeLateRelease: released 0 objects
2018/06/27 12:19:46 kid1| Starting new negotiateauthenticator helpers...
2018/06/27 12:19:46 kid1| helperOpenServers: Starting 1/600 'negotiate_kerberos_auth' processes
2018/06/27 12:19:46 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
2018/06/27 12:19:50 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
2018/06/27 12:19:51 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
2018/06/27 12:19:51 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
2018/06/27 12:19:55 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
2018/06/27 12:19:55 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
2018/06/27 12:19:57 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
2018/06/27 12:19:59 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
2018/06/27 12:20:00 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
2018/06/27 12:20:03 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
2018/06/27 12:20:06 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }}
           
А в /var/log/squid/access.log

1530088115.039      4 172.31.10.71 TCP_DENIED/407 4164 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530088115.039      4 172.31.10.71 TCP_DENIED/407 4164 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530088115.039      4 172.31.10.71 TCP_DENIED/407 4176 CONNECT yastatic.net:443 - HIER_NONE/- text/html
1530088115.039      4 172.31.10.71 TCP_DENIED/407 4164 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530088115.039      4 172.31.10.71 TCP_DENIED/407 4164 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530088115.039      4 172.31.10.71 TCP_DENIED/407 4176 CONNECT yastatic.net:443 - HIER_NONE/- text/html
1530088115.039      4 172.31.10.71 TCP_DENIED/407 4176 CONNECT yastatic.net:443 - HIER_NONE/- text/html
1530088115.039      4 172.31.10.71 TCP_DENIED/407 4176 CONNECT yastatic.net:443 - HIER_NONE/- text/html
1530088115.039      4 172.31.10.71 TCP_DENIED/407 4176 CONNECT yastatic.net:443 - HIER_NONE/- text/html
1530088115.039      4 172.31.10.71 TCP_DENIED/407 4176 CONNECT yastatic.net:443 - HIER_NONE/- text/html
1530088115.047      0 172.31.10.71 TCP_DENIED/407 4269 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530088116.578      1 172.31.10.71 TCP_DENIED/407 4333 CONNECT cdn.syndication.twimg.com:443 - HIER_NONE/- text/html
1530088116.585      7 172.31.10.71 TCP_DENIED/407 4313 CONNECT gekko.spiceworks.com:443 - HIER_NONE/- text/html
1530088116.585      6 172.31.10.71 TCP_DENIED/407 4269 CONNECT 3dnews.ru:443 - HIER_NONE/- text/html
1530088116.585      1 172.31.10.71 TCP_DENIED/407 5648 POST http://top-fwz1.mail.ru/tracker? - HIER_NONE/- text/html
1530088116.596     18 172.31.10.71 TCP_DENIED/407 4269 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530088118.941      0 172.31.10.71 TCP_DENIED/407 4236 CONNECT googleads.g.doubleclick.net:443 - HIER_NONE/- text/html
1530088118.946      0 172.31.10.71 TCP_DENIED/407 4341 CONNECT googleads.g.doubleclick.net:443 - HIER_NONE/- text/html
1530088121.934      0 172.31.10.71 TCP_DENIED/407 4228 CONNECT sec.api.browser.yandex.ru:443 - HIER_NONE/- text/html
1530088121.938      0 172.31.10.71 TCP_DENIED/407 4333 CONNECT sec.api.browser.yandex.ru:443 - HIER_NONE/- text/html
1530088125.390      0 172.31.10.71 TCP_DENIED/407 4228 CONNECT sec.api.browser.yandex.ru:443 - HIER_NONE/- text/html
1530088125.393      0 172.31.10.71 TCP_DENIED/407 4333 CONNECT sec.api.browser.yandex.ru:443 - HIER_NONE/- text/html
1530091186.082      0 172.31.10.71 TCP_DENIED/407 4164 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530091186.103     17 172.31.10.71 TCP_DENIED/407 4269 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530091190.539      1 172.31.10.71 TCP_DENIED/407 4269 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530091191.307      1 172.31.10.71 TCP_DENIED/407 4269 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530091191.770      0 172.31.10.71 TCP_DENIED/407 4269 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530091195.390      0 172.31.10.71 TCP_DENIED/407 4164 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530091195.395      0 172.31.10.71 TCP_DENIED/407 4228 CONNECT sec.api.browser.yandex.ru:443 - HIER_NONE/- text/html
1530091195.396      1 172.31.10.71 TCP_DENIED/407 4269 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530091195.398      0 172.31.10.71 TCP_DENIED/407 4333 CONNECT sec.api.browser.yandex.ru:443 - HIER_NONE/- text/html
1530091197.499      0 172.31.10.71 TCP_DENIED/407 4269 CONNECT yandex.ru:443 - HIER_NONE/- text/html
1530091199.183      0 172.31.10.71 TCP_DENIED/407 4348 GET http://forundex.ru/unix%20linux/favicon.ico - HIER_NONE/- text/html
1530091199.185      0 172.31.10.71 TCP_DENIED/407 4453 GET http://forundex.ru/unix%20linux/favicon.ico - HIER_NONE/- text/html
1530091200.420      0 172.31.10.71 TCP_DENIED/407 4228 CONNECT sec.api.browser.yandex.ru:443 - HIER_NONE/- text/html
1530091200.423      0 172.31.10.71 TCP_DENIED/407 4333 CONNECT sec.api.browser.yandex.ru:443 - HIER_NONE/- text/html
1530091203.169      0 172.31.10.71 TCP_DENIED/407 4228 CONNECT cdn.syndication.twimg.com:443 - HIER_NONE/- text/html
1530091203.172      0 172.31.10.71 TCP_DENIED/407 4333 CONNECT cdn.syndication.twimg.com:443 - HIER_NONE/- text/html
1530091206.171      0 172.31.10.71 TCP_DENIED/407 4208 CONNECT gekko.spiceworks.com:443 - HIER_NONE/- text/html
1530091206.174      0 172.31.10.71 TCP_DENIED/407 4313 CONNECT gekko.spiceworks.com:443 - HIER_NONE/- text/html

Прошу помочь, коллеги. Заранее спасибо.
« Последнее редактирование: 27 Июнь 2018, 12:30:53 от NextHop »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте! К сожалению, короткого ответа я дать не могу, поскольку Kerberos очень капризен к корректным настройкам. Проверять нужно всё: указана ли запись вашего squid-сервера (vs-otr-squid02.domain.ru ?) в прямой и обратной зоне DNS, правильно ли настроен файл hosts, синхронизировано ли время, знает ли squid, где лежит keytab-файл, правильно ли указаны настройки прокси в браузере в конце концов. В общем, тонкостей может быть много. Рекомендую внимательно прочитать этот материал, автор постарался учесть все нюансы.

И ещё, пока не заработала аутентификация, настраивать авторизацию (ограничения по группам) нет смысла -- это может быть лишь дополнительным источником ошибок. Сначала добейтесь, чтобы Kerberos-аутентификация, а с группами легко разберёмся.

Егор

NextHop

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Разобрался. Оказывается, принципал должен был быть записан в виде: HTTP/vs-otr-squid02.domain.ru@DOMAIN.RU, а не HTTP/vs-otr-squid02@DOMAIN.RU.
Пересоздал keytab - прошла авторизация.