Авторизация прокси сервера 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.RUIssued 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'а.