(343) 286-35-87 info@cisural.ru

Настройки контроллера домена

Нужно добавить A запись на DNS сервере :

squidkerb узел(A) 192.168.10.10

Проверим запись:

nslookup squidkerb.domen.local

Также надо создать еще PTR запись в домене. Это всё это нужно так мы не вводим компьютер в домен.

Теперь нужно создать тикет (кейтаб) для компьютера(Важно! Не пользователя), от имени которого будет проверяться валидность пользователя интернета. Также компьютер нужно поместить в корень нашего домена domen.local (Важно! Если поместить его в подразделение например IT, то работать ничего не будет работать, будет выскакивать окно об авторизации)

В АД создаем компьютер например SQUIDKERB2 желательно большими буквами. Керберос это протокол который не умеет нормальные ошибки говорить, поэтому лучше большими буквами, чтобы не было ошибок.

Для Windows Server 2003:

ktpass -princ HTTP/squidkerb.domen.local@DOMEN.LOCAL -mapuser SQUIDKERB2$@DOMEN.LOCAL -crypto RC4-HMAC-NT -ptype
KRB5_NT_PRINCIPAL -pass 123456 -out c:\krb5.keytab

Для Windows Server 2008:

ktpass -princ HTTP/squidkerb.domen.local@DOMEN.LOCAL -mapuser SQUIDKERB2$@DOMEN.LOCAL -crypto ALL -ptype KRB5_NT_SRV_HST
+rndpass -out c:\keytab

Здесь HTTP/squidkerb.domen.local@DOMEN.LOCAL — имя принципала Kerberos для нашего HTTP-сервера на UNIX-машине.

SQUIDKERB2$@DOMEN.LOCAL — имя учётной записи, которую мы только что создали, вместе с именем домена. Обратите внимание, после имени здесь добавляется знак $, чтобы команда ktpass.exe догадалась, что это учетная запись компьютера, а не пользователя. На вопрос «Reset SQUIDKERB2$’s password [y/n]?» нужно ответить y.

-pass и +rndpass задает пароль, который может быть указан вручную, или устанавливает произвольный пароль, если задано значение +rndpass.

— crypto Задает тип шифрования Kerberos, который будет использоваться при шифрации/дешифрации билетов, передаваемых между контроллером домена KDC и хостами Для windows 2003 лучше всего RC4-HMAC-NT , а 2008 -crypto ALL(создается ключ со всеми поддерживаемыми протоколами шифрования)

Полученный ключ надо скопировать на UNIX-машину и поместить, например, в /etc/krb5.keytab. После чего проверить его работоспособность: без рабочего ключа работать ничего не будет.

Все на контроллере домене больше ничего делать не надо переходим к настройке ubuntu 12.04 server.

Установка нужных нам пакетов и обновление системы

apt-get update
apt-get upgrade
apt-get install krb5-user krb5-config libkrb53 ntp ssh mc htop squid3 libpam-krb5

Настройка DNS

Пишем в /etc/resolv.conf какой домен искать и на каком DNS сервере:

domain DOMEN.LOCAL
search DOMEN.LOCAL
nameserver 192.168.0.1
nameserver 192.168.0.2

Проверяем что контроллер домена доступен:

nslookup dc.domen.local
ping dc.domen.local

Настройка сети

Настраиваем сервер на статический ip nano /etc/network/interfaces

auto eth0
iface eth0 inet static
address 192.168.0.43
netmask 255.255.240.0
gateway 192.168.0.254
dns-nameservers 192.168.0.1 192.168.0.2

Для применения изменений остается перезапустить службу

service networking restart

Настройка синхронизации времени

Далее необходимо настроить синхронизацию времени с домен контроллером. Если разница будет более 5 минут мы не сможем получить лист от Kerberos. Для единовременной синхронизации можно воспользоваться командой:

ntpdate dc.domen.local

Теперь надо исправить файл добавив в него информацию о вашем сервере времени: nano /etc/ntp.conf

server dc.domen.local

Перезапускаем ntp

sudo /etc/init.d/ntp restart

Настройка KERBEROS

nano /etc/krb5.conf И приводим его вот к такому виду

[libdefaults]
default_realm = DOMEN.LOCAL
default_keytab_name = /etc/krb5.keytab
# The following krb5.conf variables are only for MIT Kerberos.
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true# The following encryption type specification will be used by MIT Kerberos
# if uncommented. In general, the defaults in the MIT Kerberos code are
# correct and overriding these specifications only serves to disable new
# encryption types as they are added, creating interoperability problems.
#
# Thie only time when you might need to uncomment these lines and change
# the enctypes is if you have local software that will break on ticket
# caches containing ticket encryption types it doesn’t know about (such as
# old versions of Sun Java).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-md5ticket_lifetime = 24000# The following libdefaults parameters are only for Heimdal Kerberos.
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true

[realms]
DOMEN.LOCAL = {
kdc = dc:88
kdc = dc1:88
kdc = dc2:88
admin_server = dc:749
admin_server = dc1:749
admin_server = dc2:749
default_domain = DOMEN.LOCAL
}

[domain_realm]
.domen.local=DOMEN.LOCAL
domen.local=DOMEN.LOCAL

[login]
krb4_convert = true
krb4_get_tickets = false
[logging]
kdc = FILE:/var/log/kdc.log
admin_server = FILE:/var/log/kadmin.log
default = FILE:/var/log/krb5lib.log
FILE=/var/log/kdc.log

Копируем сгенерированный krb5.keytab в /etc/krb5.keytab и даем нужные права И назначим права на кейтаб:

chown proxy:proxy /etc/krb5.keytab
chmod 664 /etc/krb5.keytab

Проверим правильность настройки kerberos kinit user Потребует ввести пароль, если после ввода пароля никаких ошибок не появилось то идем дальше, если есть ошибки стоит еще раз внимательно перепроверить файл /etc/krb5.conf

Теперь проверим кейтаб который мы сделали ранее на контроллере домена:

kinit -V -k -t /etc/krb5.keytab HTTP/squidkerb.domen.local@DOMEN.LOCAL

Должно быть сообщение об успешной авторизации. Если наблюдаются ошибки то здесь они могут быть самыми не очевидными например не поддерживается алгоритм шифрования. вывод дожен быть примерно таким :

Using default cache: /tmp/krb5cc_0
Using principal: HTTP/squidkerb.domen.local@DOMEN.LOCAL
Using keytab: /etc/krb5.keytab
Authenticated to Kerberos v5

Командой kinit с параметром -k и указанным именем службы мы попробовали проверить подлинность без пароля с помощью keytab. Дополнительно могу отметить, что иногда приходится к kinit добавить ключ -t с путем к кейтаб-файлу. Это может понадобиться, если по какой-то причине, kinit не смог найти и обратиться к keytab файлу по умолчательному пути. -V это для более подробной информации об ошибках

Если на данном этапе kinit выдал ошибки, то далее настраивать смысла нет, ибо Kerberos клиент работает не корректно. Необходимо избавиться от ошибок.

Настройка Squid3

Скажем squid создать кэш и перезапустим чтобы проверить что он работает.

squid3 -z
/etc/init.d/squid3 restart

Cоздаем файл /etc/pam.d/squid в который пишем:

auth required pam_krb5.so
session required pam_krb5.so
account required pam_krb5.so
password required pam_krb5.so

Посмотрим как выглядит конфиг squid3 без лишнего мусора

egrep -v ‘^#|^$’ /etc/squid3/squid.conf

Или вот так :

cat /etc/squid3/squid.conf | grep -v ^# | grep -v ^$

/etc/squid3/squid.conf

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 SSL_ports port 443
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
include /etc/squid3/auth.conf
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_port 3128
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
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern

Я оставил дефолтный конфиг и добавил свои настройки(все комментарии я стёр, чтобы было удобочитаемо) :

:>/etc/squid3/squid3.conf

Вот так выглядит конфиг после всех изменений :

#Поддержка прозрачного проксирования.
http_port 3128 intercept
#Этот тэг задает список слов, которые при нахождении их(этих слов) в URL,сообщают Squid то, что объект расположенный по этому URL надо брать напрямую,
#а не из кэша.
hierarchy_stoplist cgi-bin ?# Отключим кеширование динамически загружаемых страниц
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
# Этот тэг определяет Email адрес на который будет отправлено сообщение, если Squid рухнет.
cache_mgr user@domen.ru
# Полезные файлы для статистики, а также хранение кеша.
cache_mem 1024 MB
cache_dir ufs /var/spool/squid3/cache 150000 64 512
cache_access_log /var/log/squid3/access.log
cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log
#При достижение этого уровня заполнения кэша (в процентном соотношении) начинается ускоренный процесс удаления старых объектов.
cache_swap_high 95
#Процесс удаления прекращается при достижении этого уровня.
cache_swap_low 90#Используем специальный helper для прозрачной авторизации через kerberos
auth_param negotiate program /usr/lib/squid3/squid_kerb_auth -s HTTP/squidkerb.domen.local@DOMEN.LOCAL
auth_param negotiate children 20
auth_param negotiate keep_alive on#Используем kerberos через систему pam для стандартной авторизации с запросом пароля
auth_param basic program /usr/lib/squid3/pam_auth -n squid
auth_param basic children 10
auth_param basic credentialsttl 2 hours
auth_param basic realm DOMEN.LOCAL#Необходимо для поиска групп в AD

external_acl_type ldap_check ttl=1200 children=15 %LOGIN /usr/lib/squid3/squid_ldap_group -R -b «dc=domen,dc=local»
-f «(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,ou=Groups,ou=MainUsers,dc=domen,dc=local))»
-D «ldap@domen.local» -w «MegaPass» -K 192.168.0.1
Несколько замечаний по поводу данного хелпера:
первое и самое плохое он не понимает русских букв.
второе данный путь стоит читать с конца тоесть снизу вверх, а не сверху вниз по порядку. (memberof=cn=%a,ou=IT,
ou=domen,dc=domen,dc=local)
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 SSL_ports port 443
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
acl lan proxy_auth REQUIRED
#Описание групп доступа из AD
acl all_it external ldap_check IT
acl all_inet external ldap_check inet
#Описываем пользователей которые не входят в другие группы
acl auth proxy_auth test@DOMEN.LOCAL

http_access allow all_inet
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow lan
http_access allow localhost
http_access deny all
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
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern
cache_effective_user proxy
http_reply_access allow all
icp_access allow all
append_domain .domen.local
error_directory /usr/share/squid3/errors/Russian-1251
visible_hostname proxy.domen.local squid Server
logfile_rotate 7

Перезапускаем squid

/etc/init.d/squid3 restart

проверим что в логах нет ошибок

tail -n 50 /var/log/squid3/access.log

Если все впорядке то осталось настроить браузер на клиенте