В данной статье описывается только базовая настройка прокси сервера с авторизацией KERBEROS в Active Directory без настройки всяких ограничений и прочего. Тестовый стенд: Windows Server 2008 R2 Hyper-V, VM с Debian 6.0.3 x86 (так же были тесты с Debian 6.0.4 x64 c обновлённым ядором 3.2) Уровень домена и леса: Windows 2008 R2. Контроллер домена на SBS 2011. К сожалению виртуальные машины с ядром 3.2 иногда не сразу загружались после перезагрузки. Пока не знаю в чём дело. Баг решён в ядре 3.4. Так же для него нет необходимости устанавливать Linux IC.

Статья протестирована с Windows Server 2012 !

Настройка прокси сервера:

uname -a

Linux squid 2.6.32-5-686 #1 SMP Wed Jan 11 12:29:30 UTC 2012 i686 GNU/Linux

uname -a

Linux proxy 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 x86_64 GNU/Linux

 Настройка разрешения имён. Небольшое отступление: корневая зона домена .local. Если у вас есть вопросы почему я её использую - можете обратиться в Microsoft. Данная зона содаётся при установке SBS 2011 и изменить её нельзя.

cat /etc/resolv.conf
domain domain.local
search domain.local
nameserver 192.168.10.1

cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 debian.domain.local debian
192.168.10.1 dc dc.domain.local dc.domain.local

Установка и настройка сервера времени для синхронизации времени с контроллером домена. Для протокла KERBEROS это важно.

apt-get install ntp 
cat /etc/ntp.conf
server dc.domain.local
restrict 127.0.0.1

service ntp restart

 Установка и настройка клиента аутентификации по протоколу KERBEROS.
В данном случае очень важно соблюдать регистр DOMAIN.LOCAL. В противном случае - будут ошибки при попытке авторизоваться.

apt-get install krb5-user libkrb53
cat /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 = DOMAIN.LOCAL
dns_lookup_kdc = true
dns_lookup_realm = true
ticket_lifetime = 24h
default_keytab_name = /etc/squid3/PROXY.keytab
; for Windows 2003
; default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
; default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
; permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
; for Windows 2008 with AES
default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
[realms]
DOMAIN.LOCAL = {
kdc = dc.domain.local
admin_server = dc.domain.local
default_domain = domain.local
kpasswd_server = dc.domain.local
}
[domain_realm]
.DOMAIN.LOCAL = DOMAIN.LOCAL
DOMAIN.LOCAL = DOMAIN.LOCAL

 Установка прокси сервера squid3. Но его настройка будет произведена позже.

apt-get install squid3 ldap-utils

 Установка утилиты для генерации файла keytab. Это можно не делать, если файл генерится на Windows и если используется Debian 8.

wget http://fuhm.net/software/msktutil/releases/msktutil_0.4-2_i386.deb
apt-get install libsasl2-modules-gssapi-mit libsasl2-modules
dpkg -i msktutil_0.4-2_i386.deb

Для х64:

wget http://fuhm.net/software/msktutil/releases/msktutil_0.4-2_amd64.deb
apt-get install libsasl2-modules-gssapi-mit libsasl2-modules
dpkg -i msktutil_0.4-2_amd64.deb
kinit administrator

 Где administrator - учётная запись, имеющая права администратора домена. Создаём файл PROXY.keytab. Учётная запись компьютера предварительно создана:

msktutil -c -b "OU=SERVERS,OU=FIRMA" -s HTTP -k /etc/squid3/PROXY.keytab --computer-name SQUID --upn HTTP/squid.domain.local --server dc.domain.local --verbose --enctypes 28 
chgrp proxy /etc/squid3/PROXY.keytab
chmod g+r /etc/squid3/PROXY.keytab
msktutil --auto-update --verbose


 Создайте пользователя "squid". У данного пользователя не должен истекать время действия пароля, а так же пользователь не может его изменить. Данному пользователю назначаются права на чтение всего домена.

  


 Создайте группу для доступа в интернет "INTERNET"
 Настройка прокси сервера squid3:

vi /etc/default/squid3
KRB5_KTNAME=/etc/squid3/PROXY.keytab
export KRB5_KTNAME
cat /etc/squid3/squid.conf
####### /etc/squid3/squid.conf Configuration File #######
####### cache manager
cache_mgr admin@domain.local
####### kerberos authentication
auth_param negotiate program /usr/lib/squid3/squid_kerb_auth -d -s HTTP/squid.domain.local
auth_param negotiate children 10
auth_param negotiate keep_alive on
####### provide access via ldap for clients not authenticated via kerberos
auth_param basic program /usr/lib/squid3/squid_ldap_auth -R \
-b "dc=domain,dc=local" \
-D squid@domain.local \
-w "passw squid" \
-f sAMAccountName=%s \
-h dc.domain.local
auth_param basic children 10
auth_param basic realm Internet Proxy
auth_param basic credentialsttl 1 minute
####### ldap authorizations
# restricted proxy access logged
external_acl_type internet_users %LOGIN /usr/lib/squid3/squid_ldap_group -R -K \
-b "dc=domain,dc=local" \
-D squid@domain.local \
-w "passw squid" \
-f "(&(objectclass=person)(sAMAccountName=%v)(memberof=CN=INTERNET,OU=yourOU,DC=domain,DC=local))" \
-h dc.domain.local
####### acl for proxy auth and ldap authorizations
acl auth proxy_auth REQUIRED
# format "acl, aclname, acltype, acltypename, activedirectorygroup"
acl RestrictedAccessLog external internet_users INTERNET
####### squid defaults
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
acl local_net src 192.168.10.0/24
acl SSL_ports port 443 #https
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 allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
####### enforce auth: order of rules is important for authorization levels
http_access allow RestrictedAccessLog auth
####### logging
access_log /var/log/squid3/access.log squid
####### squid defaults
http_access deny all !local_net
http_port 3128
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid3
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0

 Для того, чтобы узнать полный путь к объекту в Active Directory воспользуйтесь командой в командной строке Windows:

C:\Users\user>dsquery group -samid INTERNET

 Установим веб-сервер apache2 для настройки файла WPAD.

apt-get install apache2
vi /etc/apache2/conf.d/wpad.dat
AddType application/x-ns-proxy-autoconfig .dat
vi /var/www/wpad.dat
function FindProxyForURL(url, host)
{ $proxy = "PROXY squid.domian.local:3128";
// URLs within this network are accessed direct
if (isInNet(host, "192.168.10.0", "255.255.0.0")) {return "DIRECT";}
if (isInNet(host, "127.0.0.0", "255.0.0.0")) {return "DIRECT";}
//Return proxy for EVERYTHING else
else return $proxy;
}
apachectl restart

 Для работы необходимо настроить браузер. Адрес сервер пишется в виде FQDN. Если написать IP - работать не будет. Проверьте, что ДНС сервер содержит запись о прокси сервере.

Делал по этой статье, а ошибки исправлял по этой статье

январь 2011

проверка 2012 сервера - март 2013