Начнем.
Используется Debian 7.8, Samba 4, Squid 3, Kerberos 5.
Базовая настройка
1. Устанавливаем ОС, настраиваем сетевые интерфейсы:
nano /etc/network/interfaces && /etc/init.d/networking restart
2. Обновляем пакеты с помощью двух команд:
# apt-get update && apt-get upgrade
3. Поскольку вводим машину в домен, устанавливаем необходимые для этого пакеты:
# aptitude install krb5-user samba winbind libpam-krb5 libpam-winbind libnss-winbind
4. Меняем настройки DNS в файле /etc/resolv.conf:
domain EXAMPLE.RU
search EXAMPLE.RU
nameserver 192.168.1.6
5. Задаем имя машины в /etc/hostname:
Кроме того необходимо отредактировать файл /etc/hosts так, чтобы в нём была запись с полным доменным именем компьютера и обязательно коротким именем хоста, ссылающаяся на один из внутренних IP.
6. Сразу проверяем доступность контроллера домена:
# ping domaincontroller
# ping domaincontroller.EXAMPLE.RU
7. Далее необходимо настроить синхронизацию времени с контроллером домена. Если разница будет более 5 минут мы не сможем получить тикет от Kerberos. Для разовой синхронизации можно использовать команду:
# net time set domaincontroller
Так же, если в сети присутствует сервер точного времени, можно настроить синхронизацию с него:
# ntpdate 192.168.1.3
Настройка авторизации через Kerberos
1. В первую очередь правим файл /etc/krb5.conf. Нашем случае он выглядит так:
default_realm = EXAMPLE.RU
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]
EXAMPLE.RU = {
kdc = domaincontroller
admin_server = domaincontroller
default_domain = EXAMPLE.RU
}
[domain_realm]
.example.ru = EXAMPLE.RU
example.ru = EXAMPLE.RU
[login]
krb4_convert = false
krb4_get_tickets = false
2. Проверяем, что мы можем авторизоваться в домене:
# kinit test_user@EXAMPLE.RU
Если все прошло без ошибок, значит все верно и доменконтроллер выдает нам тикет Kerberos. Проверить тикеты можно командой # klist
2.a. Распространенные ошибки Kinit:
kinit(v5): Clock skew too great while getting initial credentials
Это значит, что у нашей машины не синхронизировано время с контроллером домена.
kinit(v5): Preauthentication failed while getting initial credentials
Введен неверный пароль.
kinit(v5): KDC reply did not match expectations while getting initial credentials
Скорее всего, стоит проверить файл krb5.conf и убедиться, что realm и домен в команде kinit были указаны в верхнем регистре.
kinit(v5): Client not found in Kerberos database while getting initial credentials
Пользователя в домене не существует.
Настройка Samba и ввод машины в домен
1. Для входа в домен нужно правильно настроить Samba. Настройки хранятся в /etc/samba/smb.conf:
[global]
dos charset = cp866
unix charset = KOI8-R
workgroup = EXAMPLE (прописными)
realm = EXAMPLE.RU (прописными)
server string = SQUID-PROXY
security = ADS
auth methods = winbind
allow trusted domains = No
password server = *
log level = 1
log file = /var/log/samba/samba.%m
max log size = 50
time server = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
os level = 0
preferred master = No
local master = No
domain master = No
dns proxy = No
ldap ssl = no
winbind use default domain = Yes
strict locking = No
client NTLMv2 auth = Yes
client lanman auth = No
client plaintext auth = No
winbind enum users = Yes
winbind enum groups = Yes
winbind refresh tickets = Yes
encrypt passwords = yes
2. Проверяем конфигурацию:
# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
3. Правим файл /etc/nsswitch.conf следующим образом:
#cat /etc/nsswitch.conf
passwd: compat winbind
group: compat winbind
shadow: compat winbind
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
4. Поcле редактирования /etc/samba/smb.conf, перезапускаем Samba и Winbind:
# /etc/init.d/winbind stop && /etc/init.d/samba restart && /etc/init.d/winbind start
5. Вводим машину в домен:
# net ads join -U test_user -D EXAMPLE .RU
Enter test_user's password:
Using short domain name -- EXAMPLE
Joined 'Multiproxy' to realm 'EXAMPLE '
6. Проверяем, видит ли Samba пользователей и группы домена
# wbinfo -u
# wbinfo -g
Установка и настройка SQUID 3
1. Устанавливаем пакет SQUID 3:
# apt-get install squid3
2. Настраиваем SQUID с помощью файла /etc/squid3/squid.conf:
<listen_ip> - IP-адрес прокси
<listen_port> - Порт прокси
<acl_name> - Имя для правила
<outgoing_ip> - IP-адрес для правила
http_port <listen_ip>:<listen_port>
http_port <listen_ip>:<listen_port>
cache_access_log /var/log/squid3/access.log
acl localhost src 127.0.0.1/32
acl god_mode src 192.168.1.0/24
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
# NTLM
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm keep_alive off
acl AuthorizedUsers proxy_auth REQUIRED
acl <acl_name> myport <listen_port>
tcp_outgoing_address <outgoing_ip> <acl_name>
http_access allow localhost
http_access deny !Safe_ports
http_access allow all AuthorizedUsers
http_access deny all
icp_access deny all
cache_mgr test_user@EXAMPLE.RU
visible_hostname MultiProxy
Настройка маршрутизации
1. Создаем таблицу маршрутизации, добавляем новые таблицы в /etc/iproute2/rt_tables, номер берется из головы, но не дублирующийся:
257 <table_name2>
256 <table_name1>
2. Добавляем правила для наших таблиц:
ip route add 192.168.1.0/24 dev eth0 proto kernel scope link src <local_ip> table table_name1
ip route add default gw <gateway_ip1> table table_name1
ip route add 192.168.1.0/24 dev eth0 proto kernel scope link src <local_ip> table table_name2
ip route add default gw <gateway_ip2> table table_name2
ip rule add from xxx.xxx.xxx.xx1 table table_name1
ip rule add from xxx.xxx.xxx.xx2 table table_name2
ip route flush cache
Комментарии (8)
Nicknnn
21.08.2015 12:15А зачем нужен pam-krb pam-winbind nss-winbind? Для доступа на машину с win пользователем?
kerberos здесь нужен для функционирования samba4?
mcleod095
21.08.2015 12:17+3С трудом понял для чего вообще все это настраивалось.
А все оказалось довольно проще, оказывается из-за двух строчек в файле squid.conf. И стоило из-за них писать целую статью?
И уже если продолжать критиковать, то могу смело сказать что использование samba там где она совсем не нужна, это сильно небезопасно. Для авторизации пользователей на squid через kerberos достаточно самого kerberos и создания записи в домене для этого сервера. Ну а если уже дальше хочется еще и по доменным группам рулить пользователями, то юзаем ldap_group (или что-то в этом роде) и все становится хорошо, до того момента как нам не приходит на ум использовать squid guard для ограничения посещений интернет ресурсов. Лично у меня squidguard не получилось завести на работу с ldap. Хотя в версии 1.5 обещают работу из коробки.Aclz
21.08.2015 13:45Эх, если бы ещё всё, что понимает NTLM, понимало Kerberos, тогда действительно можно было бы забыть об winbind, как о страшном сне. Все эти аськи-квипы-etc…
kkostin
21.08.2015 17:42+1А зачем керберос, если в итоге используется NTLM?
mcleod095
21.08.2015 18:01А вот слона то я и не заметил. Реально в примере используется только ntlm.
Керберос нужен для того что бы samba вогнать в домен, без кербероса она туда не попадет.
В поставке squid вроде есть хелпер который может авторизовать через ntlm без самбы. Но вроде только ntlm v1, а не второй версии.Aclz
21.08.2015 22:41Керберос нужен для того что бы samba вогнать в домен, без кербероса она туда не попадет.
До Кербероса люди по-вашему как жили?
$ man net NAME net - Tool for administration of Samba and remote CIFS servers. COMMANDS [RPC|ADS] JOIN [TYPE] [-U username[%password]] [createupn=UPN] [createcomputer=OU] [options] Join a domain. If the account already exists on the server, and [TYPE] is MEMBER, the machine will attempt to join automatically.
Керберос тут не нужен.
В поставке squid вроде есть хелпер который может авторизовать через ntlm без самбы. Но вроде только ntlm v1, а не второй версии.
Любопытно, что за хелпер вы имеете в виду. Если MSNT Auth, то со стороны браузера это Basic с плейнтекст-паролем.
yosemity
Очень сумбурно, следы бездумной копипасты. Подходит для собственной записульки, но не для хауту. Новичок по этой инструкции ничего не настроит. Некоторые моменты спорны, правильный krb5.conf выглядит по-другому, не хватает важных пояснений. Настраивать правила ip route нужно для всех интерфейсов, включая лупбек. www.opennet.ru/docs/RUS/LARTC/x348.html
yosemity
И еще, в свете страшилок о Windows 10, я бы не стал включать SSO на прокси.