Форум проекта Pro-LDAP.ru
Интеграция => Веб-сервисы => Тема начата: dimm от 26 Апрель 2014, 19:16:12
-
Вечер добрый, уважаемые !
На работе поставили задачу: доступ в интернет дать только привилегированным персонам (состоящим в группе InetGroup - группа в Active Directory), и нужно ограничить загрузку файлов.
Парк из ~30 машин, данные для аутентификации хранятся в Active Directory который крутится на Windows Server 2008 R2.
Поискав информации в интернете, пришёл к мысли: установить в качестве шлюза linux, со squid+openldap на борту.
Господа, дайте правильное направление, куда копать. А то пока что, от прочитанного одна каша в голове: я так и не понял как будет производиться проверка на принадлежность юзера к группе:
1) squid проверяет юзера на принадлежность к группе в Active Directory
2) openldap настроен таким образом, что запрашивает принадлежность юзера к группе в Active Directory (а squid запрашивает информацию у openldap)
Надеюсь на Ваши терпение, помощь и понимание.
-
Здравствуйте! Поступить в Вашем случае можно по разному. Самый простой способ, 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 прописать этот вызов по аналогии с тем, что я писал здесь (http://pro-ldap.ru/forum/index.php?topic=67.msg273#msg273).
Кстати, squid можно установить и на Windows, если Вы переживаете по поводу Linux. Жаль, что у меня пока не готов материал по squid, где я рассматриваю работу хелперов подробно (планирую опубликовать в мае этого года).
Егор
-
Здравствуйте Егор.
Два дня пробую реализовать 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 ...
Буду благодарен за любую помощь или подсказки.
-
Здравствуйте! К сожалению у меня нет связки squid+AD+kerberos, поэтому проверить negotiate-аутентификацию возможности нет. На Вашем месте я бы сначала добился корректной работы хелпера аутентификации, и только потом начал бы настраивать ограничения по группам. То есть когда заработает такая конфигурация:
auth_param negotiate ...
acl auth proxy_auth REQUERED
http_access allow auth
http_access deny all
и squid станет пускать всех пользователей корректно, можно начинать экспериментировать с группами.
Егор
-
Приветствую. Откликнулся на "зов о помощи" =)
Сразу говорю, что у меня не заработала версия 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 и группа не получит доступа к контенту.
Вообщем пробуйте, а меня начальство дёргает ) Если еще вопросы будут, я обязательно отвечу.
-
Поискав информации в интернете, пришёл к мысли: установить в качестве шлюза linux, со squid+openldap на борту.
НЕ ГОРОДИТЕ!
Достаточно одного лишь squid на каком-нибудь CentOS
Я так понимаю, что интернет у сотрудников есть, его просто нужно ограничить?
-
Уважаемые Егор и 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
-
Здравствуйте!
вот в фильтре:
-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.
Егор
-
Цитата: dimm от 29 Апрель 2014, 17:57:20
"-D adsquid@tema.local" - на этого юзера в домене сделан тикет ?
В данном случае это значения не имеет, так как сочетание аргументов -D и -W при вызове squid_ldap_group подразумевает простую (simple) аутентификацию в каталоге, то есть без kerberos.
Вы, наверное, правы, но так у меня не работает kerberos. Пришлось добавлять пользователя.
Почему я уверен, что он работает? Помню, что проверял командами, все это работало.
-
Здравствуйте, gsi0! Пользователь в каталоге (AD) несомненно должен быть, иначе он не сможет пройти simple-аутентификацию, то есть аутентификацию по имени пользователя и паролю (у Вас же хранится пароль в файле /usr/lib64/squid/password.txt). При simple-аутентификации kerberos не используется, поэтому тикет для этого пользователя создавать не обязательно. Я имел ввиду именно этот момент.
Спасибо что откликнулись!
Егор
-
Приветствую!
Спасибо за ответы !
К сожалению, у меня ничего не получается (пробовал перекомпилить сквид, версию 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: всё делаю в линуксе ...
-
Я делал это с помощью ktpass.exe
Если хотите, дам образ своего squid, но только в понедельник уже.
-
Коллеги, добрый день. Такой же вопрос. Настраиваю прозрачный прокси через 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
Прошу помочь, коллеги. Заранее спасибо.
-
Здравствуйте! К сожалению, короткого ответа я дать не могу, поскольку Kerberos очень капризен к корректным настройкам. Проверять нужно всё: указана ли запись вашего squid-сервера (vs-otr-squid02.domain.ru ?) в прямой и обратной зоне DNS, правильно ли настроен файл hosts, синхронизировано ли время, знает ли squid, где лежит keytab-файл, правильно ли указаны настройки прокси в браузере в конце концов. В общем, тонкостей может быть много. Рекомендую внимательно прочитать этот материал (http://www.k-max.name/linux/avtorizaciya-autentifikaciya-squid/#kerberos), автор постарался учесть все нюансы.
И ещё, пока не заработала аутентификация, настраивать авторизацию (ограничения по группам) нет смысла -- это может быть лишь дополнительным источником ошибок. Сначала добейтесь, чтобы Kerberos-аутентификация, а с группами легко разберёмся.
Егор
-
Разобрался. Оказывается, принципал должен был быть записан в виде: HTTP/vs-otr-squid02.domain.ru@DOMAIN.RU, а не HTTP/vs-otr-squid02@DOMAIN.RU.
Пересоздал keytab - прошла авторизация.