Авторизация прокси сервера Squid в домене Windows 2003 Server

Постараюсь подробно описать процесс настраивания авторизации прокси сервера Squid 3 на базе FreeBSD 7.1 в домене Windows 2003 Server. Как всегда есть два варианта авторизации:

– первый – через squid_ldap_auth
– второй – через samba

Опишу оба.

Изначально рассмотрим первый – самый простой способ авторизации.
При установки squid из портов необходимо выбрать SQUID_LDAP_AUTH и при корректной сборке и установки получится бинарник расположеный – /usr/local/libexec/squid/squid_ldap_auth. Далее тестируем работу squid_ldap_auth – вводим в командной строке:

/usr/local/libexec/squid/squid_ldap_auth -R -D admin_user@domain.ru -w admin_pass -b “dc=domen,dc=ru” -f “sAMAccountName=%s” -h ip_add_domen_control

admin_user – администратор домена
admin_pass – пароль администратора домена
domen – собственно сам домен
ip_add_domen_control – ip адрес контроллера домена

Получаем пустую строку – и вводим логин пароль через пробел. Если все работает и правильные логины и пароли – то получаем OK

Далее настраиваем /usr/local/etc/squid/squid.conf.

Для авторизации
auth_param basic program /usr/local/libexec/squid/squid_ldap_auth -R -D admin_user@domain.ru -w admin_pass -b “dc=domen,dc=ru” -f “sAMAccountName=%s” -h ip_add_domen_control

Аксес лист
acl ldapauth proxy_auth REQUIRED
http_access allow ldapauth

Последним обязательно должно быть:

http_access deny all

Теперь пробуем – вводим в настройках компьютера пользователя адрес и порт прокси сервера. Далее необходимо вводить логин и пароль.
В этом способе самое плохое – что приходится показывать в открытую пароль администратора – что очень плохо.

Вот как раз поэтому, есть второй способ – более сложный, через настройку samba и kerberos.
В сети есть много грамотных статей по этому поводу – например вот эта или вот эта. В этой статье постараюсь описать собственный процесс настравания, при котором использовались эти и другие статьи.

Для начала настроим время на контроллере домена и сервере (если разница превышает 5 минут – авторизация работать не будет), поэтому – желательно – поднять ntp сервер на одном из серверов (я это сделал на FreeBSD сервере).

Далее смотрим настройки сети – а именно /etc/resolv.conf

domain domain.ru
nameserver ip_add_dns_server

– domain.ru – собственно сам домен
– ip_add_name_server – ip адрес dns сервера

Если по каким-то причинам возникли сложности с dns сервером, то можно прописать в файле /etc/hosts:

ip_add name name.domain.ru

– ip_add – ip адрес хоста в домене
– name – имя хоста
– domain.ru – сам домен

Таким образом можно сделать принудительный резолв как для домен контроллера, так и для любого хоста.

Теперь необходимо установить и настроить kerberos. Переходим в папку /usr/ports/security/heimdal/ и устанавливаем. Правим файлик /etc/krb5.conf, он должен выглядеть так:

[libdefaults]
default_realm = DOMAIN.RU
clockskew = 300
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}

[realms]
DOMAIN.RU = {
kdc = ip_add_domain_controlller
admin_server = name_domain_controlller.domain.ru
}
OTHER.REALM = {
v4_instance_convert = {
kerberos = kerberos
computer = computer.some.other.domain
}
}
[domain_realm]
.domain.ru = DOMAIN.RU

Меняем DOMAIN на имя домена, ip_add_domain_controlller на ip адрес конроллера домена (вида x.x.x.x), name_domain_controlller на имя контроллера домена. И не забываем – там, где большие буквы – ОБЯЗАТЕЛЬНО должны быть большие, ну а маленькие соответственно маленькими. Далее проверяем корректность настройки, вводим в коммандной строке:

kinit -p user@DOMAIN.RU

Должно появится приглашение на пароль:

user@DOMAIN.RU’s Password:

и при правильном пароле:

kinit: NOTICE: ticket renewable lifetime is 1 week

И проверим состояние соединения:

#klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: user@DOMAIN.RU

Issued Expires Principal
Jan 11 16:45:47 Jan 12 02:45:47 krbtgt/DOMAIN.RU@DOMAIN.RU

Далее устанавливаем и настраиваем Samba 3. Заходим в /usr/ports/net/samba3 и устанавливаем – обязательно должно быть LDAP и ADS, остальное по выбору(если не будет ставится попробуйте удалить heimdal – как ни странно это мне помогло докомпилить пакет и все работает). Далее настраиваем /usr/local/etc/smb.conf. Выглядеть должно так:

[global]
workgroup = DOMAIN
server string = freebsd
security = ads
encrypt passwords = yes
winbind separator = +
winbind use default domain = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
hosts allow = 192.168. 127.
load printers = no
log file = /var/log/samba/log.%m
password server = ip_add_domain_controller
realm = DOMAIN.RU
passdb backend = tdbsam
socket options = TCP_NODELAY
local master = no
os level = 0
domain master = no
preferred master = no
domain logons = no
dns proxy = no
display charset = koi8-r
unix charset = koi8-r
dos charset = cp866
nt acl support = yes

Здесь также обязательны большие/маленькие буквы. Там есть и другие настройки – но для авторизации они нам не интересны. Далее пробуем зайти в домен:

net ads join -U user%password
Using short domain name — DOMAIN
Joined ‘SERVER’ to realm ‘DOMAIN.RU’

Далее прописываем в /etc/rc.conf – samba_enable=”YES” , для запуска samba после перезагрузки.

Теперь проверим winbind(необходимо запустить samba) – запустим:

#wbinfo -t
checking the trust secret via RPC calls succeeded

Выставляем права – chmod 750 /var/db/samba/winbindd_privileged, пользователь/группа должны быть root:squid

Теперь вводя комманду:
– wbinfo -u – получаете список пользователей
– wbinfo -g – список групп

Далее проверяем авторизацию в домене:

#wbinfo -a user%password
plaintext password authentication succeeded
challenge/response password authentication succeeded

Теперь изменяем файл /etc/nsswitch.conf

passwd: files winbind
group: files winbind

и проверяем распознование пользователей системой

#id user
uid=10002(user) gid=10000(domain users) groups=10000(domain users)

А теперь приступим собственно к установки и настройки самого squid.

Заходим в /usr/ports/www/squid30/ и устанавливаем. Далее настраиваем конфигурационный файл /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 ntlm max_challenge_reuses 0
#auth_param ntlm max_challenge_lifetime 2 minutes
#auth_param ntlm use_ntlm_negotiate off
auth_param basic program /usr/local/bin/ntlm_auth –helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Domain Proxy Server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
authenticate_cache_garbage_interval 10 seconds

Аксес лист
acl office src 192.168.0.0/24
acl auth proxy_auth REQUIRED
http_access deny office noacc
http_access allow office auth

Последним обязательно должно быть:

http_access deny all

Далее пробуем – вводим в настройках компьютера пользователя адрес и порт прокси сервера. При использовании IE авторизация запрашиваться не будет(все должно работать прозрачно), в случае остальных браузеров необходимо вводить логин и пароль.

Прокси сервер squid очень богат на различные настройки – в данном случае описаны ТОЛЬКО авторизационные настройки. В последующих статьях постараюсь описать некоторые другие настройки squid’а.