Возникла такая задача, особенно с тех пор, как районы отгородились маршрутизаторами и авторизация по MAC-адресам стала невозможна.
Задача не новая, но решать надо "как в первый раз", тем более, что это и есть первый раз, когда я такое проделал. Два месяца назад я забил сюда как в закладки ссылку на блог Лиссяры. Всё бы ничего, но он описывает работу с FreeBSD, а у меня таки "неправославная" ОС в его понимании. Ага, всё та же убунта-сервер (10.04.4, Lucid) с третьим сквидом. Кроме того, статье на данный момент около 6 лет, а за это время космические корабли избороздили еще кусок вселенной... В общем, мысленно поблагодарив Лиссяру за наводку, я отправился дальше.
Куда более подходящую статью я нашел у Макродмина. Статье нет еще и года, поэтому информация актуальна.
1. sudo apt-get install ntp
настраиваем синхронизацию времени со своим контроллером, вписывая его в нужное место в /etc/ntp.conf:
server имя_или_IP_контроллера_домена
Макродмин советует ставить туда IP, у меня нормально работает и с FQDN, тем более, что в примерах внутри самого этого файла указан ntp.ubuntu.com, а не его IP.
2. В /etc/resolv.conf у меня уже были прописаны нужный домен и в правильном порядке серверы DNS - первым сервером стоял адрес контроллера. Порядок здесь имеет значение - если на первом откликнувшемся сервере нет нужных SRV и т.п. записей, то не удастся ввести прокси в домен - будет тупо не находить контроллер.
3. Поскольку на этой "машине" (сервер крутится в виртуалке) отродясь не было ни самбы, ни злой собаки-цербера, то согласился с Макродмином и тупо установил рекомендованное:
sudo apt-get install samba winbind krb5-admin-server krb5-clients krb5-config krb5-doc krb5-kdc krb5-user
При установке пакетов вылезали различные интересные параметры конфигурации, которые я установил в соответствии с подобными им, которые уже сделаны у меня на двух самбовских файл-серверах.
4. В этом месте у Макродмина опечатка, которая стоила мне нескольких седых волос. Вот мой рабочий конфиг самбы:
В качестве wins-сервера указан именно IP моего PDC, остальное самоочевидно.
Оранжевый прямоугольник обозначает то же самое, что и у Макродмина - после знака равенства ставим пробел, чтобы самба не формировала серверную строку типа "samba server (ubuntu чего-то там)".
А вот подчеркнутое жирное "yes" - это как раз то место с опечаткой: в оригинале написано "yse", и я долго не мог понять, на что же самба ругается разными нехорошими словами вроде "lp_bool(yse): value is not boolean!". То, что это следствие опечатки, заметил совершенно случайно.
Задача не новая, но решать надо "как в первый раз", тем более, что это и есть первый раз, когда я такое проделал. Два месяца назад я забил сюда как в закладки ссылку на блог Лиссяры. Всё бы ничего, но он описывает работу с FreeBSD, а у меня таки "неправославная" ОС в его понимании. Ага, всё та же убунта-сервер (10.04.4, Lucid) с третьим сквидом. Кроме того, статье на данный момент около 6 лет, а за это время космические корабли избороздили еще кусок вселенной... В общем, мысленно поблагодарив Лиссяру за наводку, я отправился дальше.
Куда более подходящую статью я нашел у Макродмина. Статье нет еще и года, поэтому информация актуальна.
1. sudo apt-get install ntp
настраиваем синхронизацию времени со своим контроллером, вписывая его в нужное место в /etc/ntp.conf:
server имя_или_IP_контроллера_домена
Макродмин советует ставить туда IP, у меня нормально работает и с FQDN, тем более, что в примерах внутри самого этого файла указан ntp.ubuntu.com, а не его IP.
2. В /etc/resolv.conf у меня уже были прописаны нужный домен и в правильном порядке серверы DNS - первым сервером стоял адрес контроллера. Порядок здесь имеет значение - если на первом откликнувшемся сервере нет нужных SRV и т.п. записей, то не удастся ввести прокси в домен - будет тупо не находить контроллер.
3. Поскольку на этой "машине" (сервер крутится в виртуалке) отродясь не было ни самбы, ни злой собаки-цербера, то согласился с Макродмином и тупо установил рекомендованное:
sudo apt-get install samba winbind krb5-admin-server krb5-clients krb5-config krb5-doc krb5-kdc krb5-user
При установке пакетов вылезали различные интересные параметры конфигурации, которые я установил в соответствии с подобными им, которые уже сделаны у меня на двух самбовских файл-серверах.
4. В этом месте у Макродмина опечатка, которая стоила мне нескольких седых волос. Вот мой рабочий конфиг самбы:
# cat smb.conf
[global]
workgroup = MYDOMAIN
realm = MYDOMAIN.FQDN.RU
netbios name = VMPROXY
server string =_
security = ADS
encrypt passwords = true
password server = pdc.mydomain.fqdn.ru
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
wins server = xxx.yyy.zzz.ttt
[global]
workgroup = MYDOMAIN
realm = MYDOMAIN.FQDN.RU
netbios name = VMPROXY
server string =_
security = ADS
encrypt passwords = true
password server = pdc.mydomain.fqdn.ru
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
wins server = xxx.yyy.zzz.ttt
В качестве wins-сервера указан именно IP моего PDC, остальное самоочевидно.
Оранжевый прямоугольник обозначает то же самое, что и у Макродмина - после знака равенства ставим пробел, чтобы самба не формировала серверную строку типа "samba server (ubuntu чего-то там)".
А вот подчеркнутое жирное "yes" - это как раз то место с опечаткой: в оригинале написано "yse", и я долго не мог понять, на что же самба ругается разными нехорошими словами вроде "lp_bool(yse): value is not boolean!". То, что это следствие опечатки, заметил совершенно случайно.
5. Править файл /etc/krb5.conf сильно не пришлось: как я уже сказал, при установке пакетов мне было задано много вопросов, ответы на которые были автоматически вписаны в нужные конфиги. Часок работы напильником и всё готово. (из текста конфига я удалил оригинальные комментарии)
# cat krb5.conf
[libdefaults]
default_realm = MYDOMAIN.FQDN.RU
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
MYDOMAIN.FQDN.RU = {
kdc = pdc.mydomain.fqdn.ru
kdc = bdc.mydomain.fqdn.ru
kdc = 3rddc.mydomain.fqdn.ru
admin_server = pdc.mydomain.fqdn.ru
default_domain = MYDOMAIN.FQDN.RU }
[domain_realm]
.mydomain.fqdn.ru = MYDOMAIN.FQDN.RU
mydomain.fqdn.ru = MYDOMAIN.FQDN.RU
[login]
krb4_convert = true
krb4_get_tickets = false
[libdefaults]
default_realm = MYDOMAIN.FQDN.RU
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
MYDOMAIN.FQDN.RU = {
kdc = pdc.mydomain.fqdn.ru
kdc = bdc.mydomain.fqdn.ru
kdc = 3rddc.mydomain.fqdn.ru
admin_server = pdc.mydomain.fqdn.ru
default_domain = MYDOMAIN.FQDN.RU }
[domain_realm]
.mydomain.fqdn.ru = MYDOMAIN.FQDN.RU
mydomain.fqdn.ru = MYDOMAIN.FQDN.RU
[login]
krb4_convert = true
krb4_get_tickets = false
Обращаем внимание на регистр букв!!!
6. После внесения правок просим билетик у кербероса:
kinit administrator
где administrator - логин администратора домена.
Если не последовало ругани и klist выдал что-то осмысленное, то вводим прокси в домен:
net ads join -U admin
Как сообщают разные источники и мой личный опыт, может вылезти невразумительная ошибка насчет сервера DNS (у меня в этот раз не вылезла, но с прежними самбами бывало), ее можно смело игнорировать.
7. Сквид у меня уже был настроен, поэтому не заморачиваюсь общими вопросами, а сразу лезем править конфиги. Для большей гибкости, конфиг сквида у меня разбит на три файла - основной конфиг (squid3.conf), файл "учёток" (squid3.acl.conf) и файл ограничений (squid3.restrictions.conf), причем два последних подключаются директивой include к первому.
При правке возникли некоторые вопросы, ответы на которые я нашел на вики сквида: авторизация ntlm и авторизация ntlm с использованием групп. Существенная грабля: нельзя тупо копипастить! Я сидел и тихо сходил с ума, пытаясь понять, почему же сквид жалуется "хелпер слишком часто падает и я отключаюсь". У меня сквид третьей версии и установлен в squid3. Но в абсолютном большинстве примеров речь о второй версии, установленной в просто squid. И естественно, что хелпер вылетал - трудно запустить что-то вроде /usr/lib/squid/program, если на самом деле оно находится в /usr/lib/squid3/program.
В домене я создал отдельную ОЕ: domain/groups/ACL/Internet. В ней находятся группы разрешения и запрета доступа - по одной группе на каждую службу. Все эти группы в зависимости от того, что они делают, входят в супергруппы inet_allow или inet_deny, живущие уровнем выше в domain/groups/ACL.
8.Итак, конфиги сквида (частичные):
SQUID3.CONF
#http://wiki.squid-cache.org/ConfigExamples/Authenticate/Ntlm
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 15
auth_param basic realm Proxy Autentification Required
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 15
auth_param basic realm Proxy Autentification Required
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
SQUID3.ACL.CONF
#Проверка работы через AD
acl nt_group proxy_auth REQUIRED
external_acl_type nt_group %LOGIN /usr/lib/squid3/wbinfo_group.pl
acl dom-white-list external nt_group inet_allow
acl dom-black-list external nt_group inet_deny
acl nt_group proxy_auth REQUIRED
external_acl_type nt_group %LOGIN /usr/lib/squid3/wbinfo_group.pl
acl dom-white-list external nt_group inet_allow
acl dom-black-list external nt_group inet_deny
SQUID3.RESTRICTIONS.CONF
#Через домен
http_access allow dom-white-list
http_access deny dom-black-list
http_access allow dom-white-list
http_access deny dom-black-list
Как раз из-за последнего "/usr/lib/squid3/wbinfo_group.pl" у меня и вылезали ошибки, о которых я говорил - в примерах везде было "squid", а не "squid3".
9. Ну и финальный штрих. Winbind при запуске создает каталог /var/run/samba/winbindd_privileged, на который дает права группе winbindd_priv. Сквид в нее не входит и сильно расстраивается из-за невозможности проверить права доступа. Фигня. Просто добавляем его в эту группу. У меня сквид работает от имени пользователя proxy:
gpasswd -a proxy winbindd_priv
Перезапускаем самбовские службы и сквид.
В некоторых источниках предлагают изменить стартовый скрипт самого winbind-a, но это неправильно, я считаю.
10. Осталось внести нужных пользователей в соответствующие группы, а дальше уже раздавать полномочия по мере необходимости... После внесения пользователя в группу разрешения/запрета не помешает сделать
sudo service squid3 force-reload
чтобы не ждать, пока сквид повторно обратится к AD за проверкой разрешений. Поскольку доступ в домен мне нужен только для проверки, входит ли указанный пользователь в указанную группу, то я не настраивал nsswitch и т.п. дела.
Для проверки работы хелпера можно воспользоваться командой:
# ntlm_auth --username=логин
password:
NT_STATUS_OK: Success (0x0)
Где вместо "логин" подставляем имя пользователя из домена.
Комментариев нет:
Отправить комментарий
Пожалуйста, воздержитесь от грубостей и персональных нападок.
Я не против матерщины, но она должна быть уместной и использоваться для выражения эмоций, а не в качестве основного средства выражения мыслей.