Аутентификация пользователей в squid через доменные аккаунты Windows
Задача.
Необходимо аутентифицировать пользователей в squid на основе доменных
аккаунтов. Не всегда подходит классическая схема учета трафика по IP
адресам примеры случаев когда подобная ситуация не устраивает достаточно
полно описаны в [1].
Инструменты.
1. OC FreeBSD использовались версии FreeBSD 7.2-RELEASE
2. Windows 2003 - контроллер домена.
3. samba34-3.4.9_2
4. squid-2.7.9
Сеть и топология.
Домен - msk.vbrr.loc
Контроллер домена - dc1.msk.vbrr.loc
Рабочие станции соответственно - *.msk.vbrr.loc
Машина на которой установлен squid - fox2.msk.vbrr.loc
Практическое руководство.
1. Настройка клиента Kerberos
В FreeBSD существует две реализации Kerberos производства MIT и HEIMDAL,
соединиться с сервером Kerberos используемым в Windows 2003 получилось
в случае использования Kerberos клиента производства HEIMDAL.
Более того, он работает, только если версия старше 0.6. В седьмой
ветке FreeBSD в базовой системе идет Kerberos производства HEIMDAL
версии 0.6.3,
[root@fox2] /root/> kadmin -v
kadmin (Heimdal 0.6.3)
Copyright 1999-2004 Kungliga Tekniska Hogskolan
Send bug-reports to heimdal-bugs@pdc.kth.se
Важное замечание - DNS сервер, прописанный в /etc/resolv.conf ДОЛЖЕН
ЗНАТЬ о зоне используемой для построения Windows домена (наиболее
удобный путь настроить его как вторичный DNS сервер). Клиент Kerberos
будет искать записи типа SRV _kerberos._udp.
Файл /etc/resolv.conf:
=====================================================================
domain msk.vbrr.loc
nameserver 10.1.10.25
nameserver 10.1.10.2
nameserver 10.1.2.64
=====================================================================
Настраиваем клиента Kerberos. В файл /etc/krb5.conf необходимо добавить
информацию о сервере Kerberos в нашем случае это:
=====================================================================
[libdefaults]
default_realm = MSK.VBRR.LOC
clockskew = 300
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
[realms]
MSK.VBRR.LOC = {
kdc = dc1.msk.vbrr.loc
admin_server = dc1.msk.vbrr.loc
}
OTHER.REALM = {
v4_instance_convert = {
kerberos = kerberos
computer = computer.some.other.domain
}
}
[domain_realm]
.msk.vbrr.loc = MSK.VBRR.LOC
msk.vbrr.loc = MSK.VBRR.LOC
;[logging]
; kdc = FILE:/var/log/kdc.log
; admin_server = FILE:/var/log/kadmin.log
; default = FILE:/var/log/krb5lib.log
=====================================================================
Все остальные опции можно оставлять по умолчанию.
Попробуем соединиться с сервером Kerberos.
[root@fox2] /root/> kinit -p a_afn@MSK.VBRR.LOC
a_afn@MSK.VBRR.LOC's Password:
Где, a_afn - пользователь с административными правами в домене MSK.VBRR.LOC
И вводим пароль, система должна выдать
kinit: NOTICE: ticket renewable lifetime is 1 week
проверим соединение, в моем случае это выглядит так:
[root@fox2] /root/> klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: a_afn@MSK.VBRR.LOC
Issued Expires Principal
Apr 15 15:30:08 Apr 16 03:10:38 krbtgt/MSK.VBRR.LOC@MSK.VBRR.LOC
Отлично, соединение есть.
2. Samba
Устанавливаем /usr/ports/net/samba34/. Необходимые опции:
Options for samba34 3.4.9_2
[X] LDAP With LDAP support
[X] ADS With Active Directory support
[ ] CUPS With CUPS printing support
[X] WINBIND With WinBIND support
[ ] SWAT With SWAT WebGUI
[ ] ACL_SUPPORT With ACL support
[ ] AIO_SUPPORT With Asyncronous IO support
[ ] FAM_SUPPORT With File Alteration Monitor
[ ] SYSLOG With Syslog support
[ ] QUOTAS With Disk quota support
[ ] UTMP With UTMP accounting support
[ ] PAM_SMBPASS With PAM authentication vs passdb backends
[ ] DNSUPDATE With dynamic DNS update(require ADS)
[ ] AVAHI With Bonjour service discovery support
[ ] EXP_MODULES With experimental modules
[X] POPT With system-wide POPT library
[ ] MAX_DEBUG With maximum debugging
[ ] SMBTORTURE With smbtorture
Далее необходимо настроить smb.conf
Отличное руководство по этому процессу [6].
Опции, которые добавили в /usr/local/etc/smb.conf:
=====================================================================
[global]
;bind interfaces only = yes
;interfaces = 127.0.0.1/8 10.1.102.200/24
winbind separator = +
winbind use default domain = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = no
winbind enum groups = no
template homedir = /home/winnt/%D/%U
template shell = /bin/sh
workgroup = MSK
server string = FOX2 samba serveR
security = ads
; guest account = pcguest
log file = /var/log/samba34/log.%m
log level = 3 passdb:5 auth:10 winbind:9
max log size = 50
password server = dc1.msk.vbrr.loc
realm = msk.vbrr.loc
; passdb backend = tdbsam
; include = /usr/local/etc/smb.conf.%m
socket options = TCP_NODELAY
#============================ Share Definitions ==============================
[homes]
comment = Home Directories
browseable = no
writable = yes
=====================================================================
Входим в домен:
[root@fox2] /root/> net ads join -U a_afn
Enter a_afn's password:
Using short domain name -- MSK
Joined 'FOX2' to realm 'msk.vbrr.loc'
3. winbindd
Следующим шагом у нас запуск winbindd.
В файл /etc/rc.conf добавляем:
...
winbindd_enable="YES"
winbindd_flags="-d 3"
...
И запускаем с ключиком -d 3, в debug режиме. Потом можно убрать.
Файл /etc/nsswitch.conf оставляем как есть:
=====================================================================
#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD: src/etc/nsswitch.conf,v 1.1.8.1 2009/04/15 03:14:26 kensmith Exp $
#
group: files
group_compat: nis
hosts: files dns
networks: files
passwd: files
passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files
=====================================================================
Проверить работоспособность winbind можно командой wbinfo
Необходимо удостовериться, что winbind нормально работает и может
получать списки пользователей и групп с сервера.
[root@fox2] /root/> wbinfo -t
checking the trust secret via RPC calls succeeded
Это означает что доверительный аккаунт компьютера создан.
Посмотрим на список пользователей.
[root@fox2] /root/> wbinfo -u (для просмотра пользователей)
...
fox2
...
Как видно, аккаунт для нашего компьютера уже создался (fox2) и
взаимодействие налажено.
Попробуем аутентифицироваться в домене:
[root@fox2] /root/> wbinfo -a a_afn
plaintext password authentication succeeded
challenge/response password authentication succeeded
На этом настройку winbind можно считать законченной.
4. squid
Устанавливаем /usr/ports/www/squid
Options for squid 2.7.9
[X] SQUID_KERB_AUTH Install Kerberos authentication helpers
[X] SQUID_LDAP_AUTH Install LDAP authentication helpers
[X] SQUID_NIS_AUTH Install NIS/YP authentication helpers
[ ] SQUID_SASL_AUTH Install SASL authentication helpers
[X] SQUID_DELAY_POOLS Enable delay pools
[ ] SQUID_SNMP Enable SNMP support
[X] SQUID_CARP Enable CARP support
[ ] SQUID_SSL Enable SSL support for reverse proxies
[ ] SQUID_PINGER Install the icmp helper
[ ] SQUID_DNS_HELPER Use the old 'dnsserver' helper
[ ] SQUID_HTCP Enable HTCP support
[ ] SQUID_VIA_DB Enable forward/via database
[ ] SQUID_CACHE_DIGESTS Enable cache digests
[ ] SQUID_WCCP Enable Web Cache Coordination Prot. v1
[ ] SQUID_WCCPV2 Enable Web Cache Coordination Prot. v2
[ ] SQUID_STRICT_HTTP Be strictly HTTP compliant
[ ] SQUID_IDENT Enable ident (RFC 931) lookups
[ ] SQUID_REFERER_LOG Enable Referer-header logging
[ ] SQUID_USERAGENT_LOG Enable User-Agent-header logging
[ ] SQUID_ARP_ACL Enable ACLs based on ethernet address
[ ] SQUID_PF Enable transparent proxying with PF
[ ] SQUID_IPFILTER Enable transp. proxying with IPFilter
[ ] SQUID_FOLLOW_XFF Follow X-Forwarded-For headers
[ ] SQUID_AUFS Enable the aufs storage scheme
[ ] SQUID_COSS Enable the COSS storage scheme
[X] SQUID_KQUEUE Use kqueue(2) instead of poll(2)
[ ] SQUID_LARGEFILE Support log and cache files >2GB
[ ] SQUID_STACKTRACES Create backtraces on fatal errors
Насколько видно из Makefile helper для winbind включен по умолчанию.
Т.е. ничего особенного конфигурировать не нужно.
После установки при запущенном winbindd необходимо проверить работу
helper'а. Для этого запускаем:
/usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
Если получен ответ OK значит все отлично. Иначе необходимо смотреть логи
winbindd
Настраиваем собственно сам squid. Отличное руководство по это делу [3]
Файл /usr/local/etc/squid/squid.conf выглядит следующим образом:
=====================================================================
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 10
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563 1443 2443 9091
acl CONNECT method CONNECT
acl local-servers dstdomain .vbrr.loc
acl ssl_sites url_regex "/usr/local/etc/squid/ssl_sites.txt"
acl blocked url_regex "/usr/local/etc/squid/block.txt"
acl noblocked url_regex "/usr/local/etc/squid/unblock.txt"
acl sirius src 10.1.10.65 10.2.1.75 10.1.102.12 10.1.10.64 10.1.10.63 10.2.1.30 10.2.1.31
acl ctrl src 10.1.100.4 10.2.1.96 10.2.1.95 10.1.2.100
acl NTLMauth proxy_auth REQUIRED
acl odnoklassniki url_regex odnoklassniki.ru
acl worktime time 09:00-13:00
acl worktime time 14:00-18:00
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow ctrl
http_access allow CONNECT ctrl
http_access deny NTLMauth sirius odnoklassniki worktime
http_access allow sirius NTLMauth
http_access deny sirius
http_access deny all
http_reply_access allow all
icp_access allow all
http_port 3128
cache_peer 10.1.10.9 parent 3128 3130 no-query default
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_dir null /usr/local/squid/cache
access_log /usr/local/squid/logs/access.log squid
cache_log /usr/local/squid/logs/cache.log
cache_store_log none
logfile_rotate 1
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
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
visible_hostname sadr.msk.vbrr.loc
never_direct deny local-servers
never_direct allow all
coredump_dir /usr/local/squid/cache
=====================================================================
В данном случае были добавлены следующие стороки:
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 10
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
Данная конфигурация описывает два helper'a один дня IE (ntlmssp)
другой для всех остальных пользователей (mozilla, opera, etc).
Необходимо отметить что для нормальной работы из броузера у пользователя
под который работает squid должно хватать прав для обращения к сокету на
котором слушает winbindd. Согласно man ntlm_auth это winbindd_privileged
в $LOCKDIR. В моем случае сокет находиться в
/var/db/samba34/winbindd_privileged. Для решения проблемы нужно изменить
группу владельца этой директории на squid.
[root@fox2] /root/> chown root:squid /var/db/samba34/winbindd_privileged
[root@fox2] /root/> ls -al /var/db/samba34/ | grep winbindd_privileged
drwxr-x--- 2 root squid 512 Apr 20 11:36 winbindd_privileged
После этого можно приступать к полноценному тестированию из веб броузера.
5. Как это выглядит
В случае если пользователь не входит в домен ему выдается окно в котором
предлагается ввести имя пользователя, пароль и домен. Клиенты вошедшие в
домен и использующие IE аутентифицируются прозрачно. Клиенты вошедшие в
домен и использующие иные броузеры аутентифицируются по протоколу basic.
Каждый раз при запуске вводят имя и пароль.
Самая главная проблема - невозможность аутентифицировать пользователей с
русскими именами.
6. Дополнительный функционал
Дополнительно можно использовать возможность управлять доступом в
Internet из Windows. Для этого можно воспользоваться параметром
--require-membership-of= ntlm_auth. Как видно из названия при
аутентификации helper будет требовать наличие пользователя в
определенной группе. В моем случае указание там названия группы проблемы
не решило. Пришлось указывать универсальный идентификатор группы в
домене (SID). Узнать его можно с помощью уже знакомой программы wbinfo.
Например, если необходимо узнать SID группы inetusers:
[root@fox2] /root/> wbinfo -n inetusers
S-1-5-21-1828638205-4279006917-513177360-1121 Domain Group (2)
После этого необходимо изменить конфигурационный файл squid указав в
местах описания хелперов необходиму директиву.
auth_param ntlm program /usr/local/bin/ntlm_auth \
--require-membership-of=S-1-5-21-1828638205-4279006917-513177360-1121 \
--helper-protocol=squid-2.5-ntlmssp
Теперь пользователи которые не входят в группу inetusers не смогут выйти
в Internet.
Источники.
1. http://www.opennet.ru/base/net/win_squid.txt.html
2. http://www.opennet.ru/base/net/win_domain_squid.txt.html
3. http://www.squid-cache.org
4. http://www.squid-cache.org/Doc/FAQ/FAQ-23.html
5. http://devel.squid-cache.org/ntlm/squid_helper_protocol.html
6. http://groups-beta.google.com
7. http://samba.org/samba/docs/man/Samba-HOWTO-Collection/domain-member.html
8. http://www.wlug.org.nz/ActiveDirectoryKerberos
Задача.
Необходимо аутентифицировать пользователей в squid на основе доменных
аккаунтов. Не всегда подходит классическая схема учета трафика по IP
адресам примеры случаев когда подобная ситуация не устраивает достаточно
полно описаны в [1].
Инструменты.
1. OC FreeBSD использовались версии FreeBSD 7.2-RELEASE
2. Windows 2003 - контроллер домена.
3. samba34-3.4.9_2
4. squid-2.7.9
Сеть и топология.
Домен - msk.vbrr.loc
Контроллер домена - dc1.msk.vbrr.loc
Рабочие станции соответственно - *.msk.vbrr.loc
Машина на которой установлен squid - fox2.msk.vbrr.loc
Практическое руководство.
1. Настройка клиента Kerberos
В FreeBSD существует две реализации Kerberos производства MIT и HEIMDAL,
соединиться с сервером Kerberos используемым в Windows 2003 получилось
в случае использования Kerberos клиента производства HEIMDAL.
Более того, он работает, только если версия старше 0.6. В седьмой
ветке FreeBSD в базовой системе идет Kerberos производства HEIMDAL
версии 0.6.3,
[root@fox2] /root/> kadmin -v
kadmin (Heimdal 0.6.3)
Copyright 1999-2004 Kungliga Tekniska Hogskolan
Send bug-reports to heimdal-bugs@pdc.kth.se
Важное замечание - DNS сервер, прописанный в /etc/resolv.conf ДОЛЖЕН
ЗНАТЬ о зоне используемой для построения Windows домена (наиболее
удобный путь настроить его как вторичный DNS сервер). Клиент Kerberos
будет искать записи типа SRV _kerberos._udp.
Файл /etc/resolv.conf:
=====================================================================
domain msk.vbrr.loc
nameserver 10.1.10.25
nameserver 10.1.10.2
nameserver 10.1.2.64
=====================================================================
Настраиваем клиента Kerberos. В файл /etc/krb5.conf необходимо добавить
информацию о сервере Kerberos в нашем случае это:
=====================================================================
[libdefaults]
default_realm = MSK.VBRR.LOC
clockskew = 300
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
[realms]
MSK.VBRR.LOC = {
kdc = dc1.msk.vbrr.loc
admin_server = dc1.msk.vbrr.loc
}
OTHER.REALM = {
v4_instance_convert = {
kerberos = kerberos
computer = computer.some.other.domain
}
}
[domain_realm]
.msk.vbrr.loc = MSK.VBRR.LOC
msk.vbrr.loc = MSK.VBRR.LOC
;[logging]
; kdc = FILE:/var/log/kdc.log
; admin_server = FILE:/var/log/kadmin.log
; default = FILE:/var/log/krb5lib.log
=====================================================================
Все остальные опции можно оставлять по умолчанию.
Попробуем соединиться с сервером Kerberos.
[root@fox2] /root/> kinit -p a_afn@MSK.VBRR.LOC
a_afn@MSK.VBRR.LOC's Password:
Где, a_afn - пользователь с административными правами в домене MSK.VBRR.LOC
И вводим пароль, система должна выдать
kinit: NOTICE: ticket renewable lifetime is 1 week
проверим соединение, в моем случае это выглядит так:
[root@fox2] /root/> klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: a_afn@MSK.VBRR.LOC
Issued Expires Principal
Apr 15 15:30:08 Apr 16 03:10:38 krbtgt/MSK.VBRR.LOC@MSK.VBRR.LOC
Отлично, соединение есть.
2. Samba
Устанавливаем /usr/ports/net/samba34/. Необходимые опции:
Options for samba34 3.4.9_2
[X] LDAP With LDAP support
[X] ADS With Active Directory support
[ ] CUPS With CUPS printing support
[X] WINBIND With WinBIND support
[ ] SWAT With SWAT WebGUI
[ ] ACL_SUPPORT With ACL support
[ ] AIO_SUPPORT With Asyncronous IO support
[ ] FAM_SUPPORT With File Alteration Monitor
[ ] SYSLOG With Syslog support
[ ] QUOTAS With Disk quota support
[ ] UTMP With UTMP accounting support
[ ] PAM_SMBPASS With PAM authentication vs passdb backends
[ ] DNSUPDATE With dynamic DNS update(require ADS)
[ ] AVAHI With Bonjour service discovery support
[ ] EXP_MODULES With experimental modules
[X] POPT With system-wide POPT library
[ ] MAX_DEBUG With maximum debugging
[ ] SMBTORTURE With smbtorture
Далее необходимо настроить smb.conf
Отличное руководство по этому процессу [6].
Опции, которые добавили в /usr/local/etc/smb.conf:
=====================================================================
[global]
;bind interfaces only = yes
;interfaces = 127.0.0.1/8 10.1.102.200/24
winbind separator = +
winbind use default domain = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = no
winbind enum groups = no
template homedir = /home/winnt/%D/%U
template shell = /bin/sh
workgroup = MSK
server string = FOX2 samba serveR
security = ads
; guest account = pcguest
log file = /var/log/samba34/log.%m
log level = 3 passdb:5 auth:10 winbind:9
max log size = 50
password server = dc1.msk.vbrr.loc
realm = msk.vbrr.loc
; passdb backend = tdbsam
; include = /usr/local/etc/smb.conf.%m
socket options = TCP_NODELAY
#============================ Share Definitions ==============================
[homes]
comment = Home Directories
browseable = no
writable = yes
=====================================================================
Входим в домен:
[root@fox2] /root/> net ads join -U a_afn
Enter a_afn's password:
Using short domain name -- MSK
Joined 'FOX2' to realm 'msk.vbrr.loc'
3. winbindd
Следующим шагом у нас запуск winbindd.
В файл /etc/rc.conf добавляем:
...
winbindd_enable="YES"
winbindd_flags="-d 3"
...
И запускаем с ключиком -d 3, в debug режиме. Потом можно убрать.
Файл /etc/nsswitch.conf оставляем как есть:
=====================================================================
#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD: src/etc/nsswitch.conf,v 1.1.8.1 2009/04/15 03:14:26 kensmith Exp $
#
group: files
group_compat: nis
hosts: files dns
networks: files
passwd: files
passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files
=====================================================================
Проверить работоспособность winbind можно командой wbinfo
Необходимо удостовериться, что winbind нормально работает и может
получать списки пользователей и групп с сервера.
[root@fox2] /root/> wbinfo -t
checking the trust secret via RPC calls succeeded
Это означает что доверительный аккаунт компьютера создан.
Посмотрим на список пользователей.
[root@fox2] /root/> wbinfo -u (для просмотра пользователей)
...
fox2
...
Как видно, аккаунт для нашего компьютера уже создался (fox2) и
взаимодействие налажено.
Попробуем аутентифицироваться в домене:
[root@fox2] /root/> wbinfo -a a_afn
plaintext password authentication succeeded
challenge/response password authentication succeeded
На этом настройку winbind можно считать законченной.
4. squid
Устанавливаем /usr/ports/www/squid
Options for squid 2.7.9
[X] SQUID_KERB_AUTH Install Kerberos authentication helpers
[X] SQUID_LDAP_AUTH Install LDAP authentication helpers
[X] SQUID_NIS_AUTH Install NIS/YP authentication helpers
[ ] SQUID_SASL_AUTH Install SASL authentication helpers
[X] SQUID_DELAY_POOLS Enable delay pools
[ ] SQUID_SNMP Enable SNMP support
[X] SQUID_CARP Enable CARP support
[ ] SQUID_SSL Enable SSL support for reverse proxies
[ ] SQUID_PINGER Install the icmp helper
[ ] SQUID_DNS_HELPER Use the old 'dnsserver' helper
[ ] SQUID_HTCP Enable HTCP support
[ ] SQUID_VIA_DB Enable forward/via database
[ ] SQUID_CACHE_DIGESTS Enable cache digests
[ ] SQUID_WCCP Enable Web Cache Coordination Prot. v1
[ ] SQUID_WCCPV2 Enable Web Cache Coordination Prot. v2
[ ] SQUID_STRICT_HTTP Be strictly HTTP compliant
[ ] SQUID_IDENT Enable ident (RFC 931) lookups
[ ] SQUID_REFERER_LOG Enable Referer-header logging
[ ] SQUID_USERAGENT_LOG Enable User-Agent-header logging
[ ] SQUID_ARP_ACL Enable ACLs based on ethernet address
[ ] SQUID_PF Enable transparent proxying with PF
[ ] SQUID_IPFILTER Enable transp. proxying with IPFilter
[ ] SQUID_FOLLOW_XFF Follow X-Forwarded-For headers
[ ] SQUID_AUFS Enable the aufs storage scheme
[ ] SQUID_COSS Enable the COSS storage scheme
[X] SQUID_KQUEUE Use kqueue(2) instead of poll(2)
[ ] SQUID_LARGEFILE Support log and cache files >2GB
[ ] SQUID_STACKTRACES Create backtraces on fatal errors
Насколько видно из Makefile helper для winbind включен по умолчанию.
Т.е. ничего особенного конфигурировать не нужно.
После установки при запущенном winbindd необходимо проверить работу
helper'а. Для этого запускаем:
/usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
Если получен ответ OK значит все отлично. Иначе необходимо смотреть логи
winbindd
Настраиваем собственно сам squid. Отличное руководство по это делу [3]
Файл /usr/local/etc/squid/squid.conf выглядит следующим образом:
=====================================================================
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 10
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563 1443 2443 9091
acl CONNECT method CONNECT
acl local-servers dstdomain .vbrr.loc
acl ssl_sites url_regex "/usr/local/etc/squid/ssl_sites.txt"
acl blocked url_regex "/usr/local/etc/squid/block.txt"
acl noblocked url_regex "/usr/local/etc/squid/unblock.txt"
acl sirius src 10.1.10.65 10.2.1.75 10.1.102.12 10.1.10.64 10.1.10.63 10.2.1.30 10.2.1.31
acl ctrl src 10.1.100.4 10.2.1.96 10.2.1.95 10.1.2.100
acl NTLMauth proxy_auth REQUIRED
acl odnoklassniki url_regex odnoklassniki.ru
acl worktime time 09:00-13:00
acl worktime time 14:00-18:00
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow ctrl
http_access allow CONNECT ctrl
http_access deny NTLMauth sirius odnoklassniki worktime
http_access allow sirius NTLMauth
http_access deny sirius
http_access deny all
http_reply_access allow all
icp_access allow all
http_port 3128
cache_peer 10.1.10.9 parent 3128 3130 no-query default
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_dir null /usr/local/squid/cache
access_log /usr/local/squid/logs/access.log squid
cache_log /usr/local/squid/logs/cache.log
cache_store_log none
logfile_rotate 1
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
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
visible_hostname sadr.msk.vbrr.loc
never_direct deny local-servers
never_direct allow all
coredump_dir /usr/local/squid/cache
=====================================================================
В данном случае были добавлены следующие стороки:
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 10
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
Данная конфигурация описывает два helper'a один дня IE (ntlmssp)
другой для всех остальных пользователей (mozilla, opera, etc).
Необходимо отметить что для нормальной работы из броузера у пользователя
под который работает squid должно хватать прав для обращения к сокету на
котором слушает winbindd. Согласно man ntlm_auth это winbindd_privileged
в $LOCKDIR. В моем случае сокет находиться в
/var/db/samba34/winbindd_privileged. Для решения проблемы нужно изменить
группу владельца этой директории на squid.
[root@fox2] /root/> chown root:squid /var/db/samba34/winbindd_privileged
[root@fox2] /root/> ls -al /var/db/samba34/ | grep winbindd_privileged
drwxr-x--- 2 root squid 512 Apr 20 11:36 winbindd_privileged
После этого можно приступать к полноценному тестированию из веб броузера.
5. Как это выглядит
В случае если пользователь не входит в домен ему выдается окно в котором
предлагается ввести имя пользователя, пароль и домен. Клиенты вошедшие в
домен и использующие IE аутентифицируются прозрачно. Клиенты вошедшие в
домен и использующие иные броузеры аутентифицируются по протоколу basic.
Каждый раз при запуске вводят имя и пароль.
Самая главная проблема - невозможность аутентифицировать пользователей с
русскими именами.
6. Дополнительный функционал
Дополнительно можно использовать возможность управлять доступом в
Internet из Windows. Для этого можно воспользоваться параметром
--require-membership-of= ntlm_auth. Как видно из названия при
аутентификации helper будет требовать наличие пользователя в
определенной группе. В моем случае указание там названия группы проблемы
не решило. Пришлось указывать универсальный идентификатор группы в
домене (SID). Узнать его можно с помощью уже знакомой программы wbinfo.
Например, если необходимо узнать SID группы inetusers:
[root@fox2] /root/> wbinfo -n inetusers
S-1-5-21-1828638205-4279006917-513177360-1121 Domain Group (2)
После этого необходимо изменить конфигурационный файл squid указав в
местах описания хелперов необходиму директиву.
auth_param ntlm program /usr/local/bin/ntlm_auth \
--require-membership-of=S-1-5-21-1828638205-4279006917-513177360-1121 \
--helper-protocol=squid-2.5-ntlmssp
Теперь пользователи которые не входят в группу inetusers не смогут выйти
в Internet.
Источники.
1. http://www.opennet.ru/base/net/win_squid.txt.html
2. http://www.opennet.ru/base/net/win_domain_squid.txt.html
3. http://www.squid-cache.org
4. http://www.squid-cache.org/Doc/FAQ/FAQ-23.html
5. http://devel.squid-cache.org/ntlm/squid_helper_protocol.html
6. http://groups-beta.google.com
7. http://samba.org/samba/docs/man/Samba-HOWTO-Collection/domain-member.html
8. http://www.wlug.org.nz/ActiveDirectoryKerberos
Комментариев нет:
Отправить комментарий