Теперь нужно создать тикет (кейтаб) для компьютера(Важно! Не пользователя), от имени которого будет проверяться валидность пользователя интернета. Также компьютер нужно поместить в корень нашего домена 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-md5
ticket_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
Если все впорядке то осталось настроить браузер на клиенте.