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

Постараюсь подробно описать процесс настраивания авторизации прокси сервера Squid 3 на базе FreeBSD 7.1 в домене Win­dows 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 pro­gram /​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 lda­pauth proxy_​auth REQUIRED
http_​access allow ldapauth

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

http_​access deny all

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

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

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

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

domain domain​.ru
name­server 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 — сам домен

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

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

[lib­de­faults]
default_​realm = DOMAIN​.RU
clockskew = 300
v4_​instance_​resolve = false
v4_​name_​convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
some­thing = something-​​else
}
}

[realms]
DOMAIN​.RU = {
kdc = ip_​add_​domain_​controlller
admin_​server = name_domain_controlller.domain.ru
}
OTHER.REALM = {
v4_​instance_​convert = {
ker­beros = ker­beros
com­puter = 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 Pass­word:

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

kinit: NOTICE: ticket renew­able life­time is 1 week

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

#klist
Cre­den­tials cache: FILE:/tmp/krb5cc_0
Prin­ci­pal: user@​DOMAIN.​RU

Issued Expires Prin­ci­pal
Jan 11 16:45:47 Jan 12 02:45:47 krbtgt/​DOMAIN.​RU@​DOMAIN.​RU

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

[global]
work­group = DOMAIN
server string = freebsd
secu­rity = ads
encrypt pass­words = yes
win­bind sep­a­ra­tor = +
win­bind use default domain = yes
win­bind uid = 10000–20000
win­bind gid = 10000–20000
win­bind enum users = yes
win­bind enum groups = yes
hosts allow = 192.168. 127.
load print­ers = no
log file = /var/log/samba/log.%m
pass­word server = ip_​add_​domain_​controller
realm = DOMAIN​.RU
passdb back­end = tdb­sam
socket options = TCP_​NODELAY
local mas­ter = no
os level = 0
domain mas­ter = no
pre­ferred mas­ter = no
domain logons = no
dns proxy = no
dis­play charset = koi8-​​r
unix charset = koi8-​​r
dos charset = cp866
nt acl sup­port = 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 после перезагрузки.

Теперь проверим win­bind(необходимо запустить samba) — запустим:

#wbinfo –t
check­ing the trust secret via RPC calls succeeded

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

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

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

#wbinfo –a user%password
plain­text pass­word authen­ti­ca­tion suc­ceeded
challenge/​response pass­word authen­ti­ca­tion succeeded

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

passwd: files win­bind
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 pro­gram /​usr/​local/​bin/​ntlm_​auth –helper-protocol=squid-2.5-ntlmssp
auth_​param ntlm chil­dren 10
#auth_​param ntlm max_​challenge_​reuses 0
#auth_​param ntlm max_​challenge_​lifetime 2 min­utes
#auth_​param ntlm use_​ntlm_​negotiate off
auth_​param basic pro­gram /​usr/​local/​bin/​ntlm_​auth –helper-protocol=squid-2.5-basic
auth_​param basic chil­dren 5
auth_​param basic realm Domain Proxy Server
auth_​param basic cre­den­tial­sttl 2 hours
auth_​param basic cas­esen­si­tive 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’а.

No Comments

Leave a Reply