Squid на FreeBSD и домен Windows Server 2003
Для того, чтобы облегчить администрирование доступа к интернету на прокси-сервере Squid, было принято решение использовать доменные аккаунты пользователей и их пароли. Предлагаю пошаговое руководство по воду сервера под управлением FreeBSD в домен Windows и использование доменных аккаунтов и групп безопасности в Squid для доступа в интернет.
В примере будет использоваться имя компьютера – COMPUTER, домен – DOMAIN.RU, уполномоченный доменный пользователь – admin. Сервер под управлением FreeBSD 7.2-RELEASE, кэширующий прокси – squid-3.0.24, winbind в составе samba34-3.4.5_1.
1. Проверьте в Active Directory, не существует ли уже в домене компьютер с именем, который вы хотите сейчас присоединить к AD. Если имя уже используется, то выберите другое имя для нового члена AD. Так же необходимо синхронизировать время присоединяемого компьютера с временем домена. Сделать это можно командой ntpdate с указанием сервера времени вашего домена (в моем случае – это 192.168.0.1):
# ntpdate 192.168.0.1 10 Feb 14:37:44 ntpdate[61010]: step time server 192.168.0.1 offset -1.405955 sec
2. Установите в систему samba, с поддержкой ADS (Active Directory support) и WinBIND, как указано на рисунке:
Рис.1
# cd /usr/ports/net/samba34/ # make config # make && make install && make clean
Вносим изменения в конфигурационный файл samba (в моем случае samba используется только для работы с доменом, расшаренных ресурсов на сервере нет):
# nano -w /usr/local/etc/smb.conf [global] # указываем рабочую группу workgroup = DOMAIN # указываем домен realm = DOMAIN.RU # домен-контроллер password server = 192.168.0.2 # имя нашего сервера с прокси netbios name = COMPUTER # комментарий к имени нашего компьютера в сети server string = computer # указываем сетевой интерфейс для работы samba interfaces = em0 # принимать SMB-запросы только на указанных интерфейсах bind interfaces only = yes # IP-адрес нашего сервера socket address = 192.168.0.4 socket options = SO_RCVBUF=8192 SO_SNDBUF=8192 TCP_NODELAY # порт для работы samba smb ports = 139 # подсети, с которых принимаем SMB-запросы hosts allow = 192.168.0 127. # указываем режим работы samba (Active Directory support) security = ADS idmap backend = tdb # время в сек. хранения ответа на запрос winbind'ом (неделя) idmap cache time = 604800 # диапазон пользовательских идентификаторов, полученных winbind'ом idmap uid = 1000000-2000000 # диапазон идентификаторов для групп, полученных winbind'ом idmap gid = 1000000-2000000 # использовать зашифрованные пароли при общении с AD encrypt passwords = yes # использовать этот разделитель пары DOMAIN / user winbind separator = + # заставляем winbind нумеровать доменных пользователей winbind enum users = yes # заставляем winbind нумеровать доменные группы winbind enum groups = yes # всех пользователей считать членами домена по-умолчанию winbind use default domain = yes # не загружать принтеры load printers = no # расположение и формат логов samba log file = /var/log/samba/log.%m # уровень логирования samba log level = 3 # максимальный размер лога (в килобайтах) max log size = 1000 # порядок сопоставления ip-адресов их именам name resolve order = host lmhost bcast # говорим samba не становиться мастер-браузером local master = no # говорим samba, что она не домен контроллер domain master = no # говорим samba, что она не wins-сервер dns proxy = no # говорим samba, что она не первичный мастер-браузер preferred master = no # кодировка для отображения сообщений на стандартном выводе display charset = koi8-r # кодировка при общении с другими SMB-клиентами unix charset = koi8-r # кодировка при общении с DOS-подобными системами dos charset = cp866 # время неактивности, по истечении которого клиент отключается от samba deadtime = 5
Теперь внесем в файл /etc/rc.conf строку, разрешающую запуск winbind:
# nano -w /etc/rc.conf winbindd_enable="YES"
После окончания конфигурирования samba дадим команду testparm, которая проверить наш конфигурационный файл smb.conf на возможные ошибки и выведет на экран параметры, которые установлены не по-умолчанию:
# testparm Load smb config files from /usr/local/etc/smb.conf max_open_files: sysctl_max (11095) below minimum Windows limit (16384) rlimit_max: rlimit_max (11095) below minimum Windows limit (16384) Loaded services file OK. 'winbind separator = +' might cause problems with group membership. Server role: ROLE_DOMAIN_MEMBER Press enter to see a dump of your service definitions [global] dos charset = cp866 unix charset = koi8-r display charset = koi8-r workgroup = DOMAIN realm = DOMAIN.RU server string = computer interfaces = em0 bind interfaces only = Yes security = ADS password server = 192.168.0.2 log level = 3 log file = /var/log/samba/log.%m max log size = 1000 smb ports = 139 read raw = No name resolve order = host lmhost bcast deadtime = 5 socket options = SO_RCVBUF=8192 SO_SNDBUF=8192 TCP_NODELAY load printers = No local master = No domain master = No dns proxy = No socket address = 192.168.0.4 idmap uid = 1000000-2000000 idmap gid = 1000000-2000000 winbind separator = + winbind enum users = Yes winbind enum groups = Yes winbind use default domain = Yes hosts allow = 192.168.0, 127.
Нам осталось запустить samba и проверить ее работу:
# /usr/local/etc/rc.d/samba start Removing stale Samba tdb files: ... done Starting winbindd.
3. Теперь введем наш сервер в домен. Командой kinit получаем билетик для kerberos, чтобы подключиться к домену. Необходимо указать доменного пользователя, который имеет право на присоединение компьютера к домену, а так же его доменный пароль:
# kinit admin admin@DOMAIN.RU's Password: kinit: NOTICE: ticket renewable lifetime is 1 week
4. Командой klist проверяем наличие билетика:
# klist Credentials cache: FILE:/tmp/krb5cc_0 Principal: admin@DOMAIN.RU Issued Expires Principal Feb 10 14:18:04 Feb 11 00:18:04 krbtgt/DOMAIN.RU@DOMAIN.RU
5. Теперь с помощью команды net производим присоединение компьютера к домену, указав имя доменного пользователя и его пароль, которого мы указывали при получении билетика для kerberos.
# net join -U admin Enter admins's password: Using short domain name -- DOMAIN Joined 'COMPUTER' to realm 'domain.ru'
6. Теперь необходимо внести изменения в конфигурационный файл системных баз данных и переключателя сервисов имен/etc/nsswitch.conf, чтобы указать системе, каким образом искать базы с именами доменных пользователей и доменными группами безопасности.
# nano -w /etc/nsswitch.conf group: files winbind passwd: files winbind shadow: files winbind
group_compat: nis
hosts: files dns
networks: files
passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files
Первые три строки теперь говорят системе, что пользователей и группы нужно искать с помощью winbind.
7. На этом этапе нам надо проверить работу winbind командой wbinfo:
# wbinfo -p Ping to winbindd succeeded
Если вы видите такое же сообщение – то демон winbind успешно запущен. Теперь произведем отображение существующих в домене пользователей и групп. Команда
# wbinfo -g
выведет список всех групп. Команда
# wbinfo -u
выведет список всех пользователей. Командой id вы сможете узнать принадлежность какого-либо пользователя к группам:
# id admin uid=1000001(admin) gid=1000000(пользователи домена) groups=1000000(пользователи домена), 1000005(администраторы домена),1000006(владельцы-создатели групповой политики), 1000008(dnsupdateproxy),1000010(издатели сертификатов),1000021(debugger users),1000022(olap administrators), 1000038(администраторы exchange),1000043(dnsadmins),1000045(exchange organization administrators), 1000050(администраторы предприятия),1000051(администраторы схемы)
8. Осталось установить squid и внести изменения в его конфигурационный файл. Делаем:
# cd /usr/ports/www/squid30 # make config # make install && make clean
Теперь надо внести в файл /etc/rc.conf строку squid_enable=“YES”, разрешающую запуск собранного нами порта squid.
# nano -w /etc/rc.conf squid_enable="YES"
Теперь нам необходимо внести в конфигурационный файл прокси-сервера squid необходимые нам изменения, чтобы дать нашим доменным пользователям право на доступ в интернет. Редактируем файл /usr/local/etc/squid/squid.conf
# nano -w /usr/local/etc/squid/squid.conf
Находим секцию OPTIONS FOR AUTHENTICATION и производим в ней следующие изменения (конфигурируем squid на работу с winbind (ntlm, basic) авторизацией). Для этого раскомментирываем указанные ниже строки и добавляем свои настройки:
# указываем инструменту ntlm_auth от winbind'а какой использовать хелпер для ntlm-аутентификации # доменных пользователей auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp # указываем, сколько данных хелперов запускать (исходить надо из численности вашей организации, # при их нехватке, добавляйте число хелперов) auth_param ntlm children 15 # говорим squid поддерживать соединение, при начальном подключении браузера auth_param ntlm keep_alive on # указываем инструменту ntlm_auth от winbind'а какой использовать хелпер для при basic-аутентификации # доменных пользователей auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic # указываем количество хелперов данной аутентификации auth_param basic children 10 # указываем часть текста, который будет виден пользователю при запросе от него имени / пароля auth_param basic realm Squid proxy-caching web server # определяет, как долго squid не будет переспрашивать у хелпера пару логин / пароль auth_param basic credentialsttl 2 hours # не учитывать регистр в именах пользователей auth_param basic casesensitive off
Теперь надо объявить некоторые минимальные ACL в конфигурационном файле squid:
# описываем диапазон нашей сети acl our_network src 192.168.10.0/24 # описываем диапазон сетей нашего домена acl our_domain dst 192.168.0.0/16 # пускаем через squid нашу подсеть ко всем ресурсам нашего домена http_access allow our_domain our_network # описываем, каким образом будет осуществляться аутентификация на squid # требуем от пользователей аутентификацию acl SQUID proxy_auth REQUIRED # указываем, где брать сопоставление логин / паролей и как проводить проверку external_acl_type nt_group ttl=10 %LOGIN /usr/local/libexec/squid/wbinfo_group.pl # объявляем две простейшие ACL # deny - группа пользователей в домене, кому мы запрещаем доступ в интернет acl deny_inet external nt_group deny # full - группа пользователей в домене, кому мы разрешаем доступ в интернет acl full_inet external nt_group full # объявляем правила доступа для этих групп http_access deny all deny_inet http_access allow all full_inet # и наконец запрещаем всем остальным доступ к интернету через наш squid http_access deny all
Теперь дадим команду squid проверить написанный нами конфигурационный файл:
#squid -f /usr/local/etc/squid/squid.conf -k parse 2010/02/19 12:43:03| Processing Configuration File: /usr/local/etc/squid/squid.conf (depth 0)
Если в результате работы команды мы не видим никаких ошибок – то теперь нам надо проинициализировать swap-каталоги squid командой:
# squid -z
А еще надо дать права squid на рекурсивный доступ к каталогу /var/db/samba34/winbindd_privileged:
# chown -R root:squid /var/db/samba34/winbindd_privileged
Все. Запускаем squid командой:
# /usr/local/etc/rc.d/squid start
Ставим в известность пользователей о доступности прокси-сервера и смотрим в реальном режиме времени логи squid по пути:
# tail -f /usr/local/squid/logs/access.log # tail -f /usr/local/squid/logs/cache.log
В результате проделанной работы мы получили сервер FreeBSD в домене с настроенным прокси-сервером squid с доступом в интернет для доменных пользователей.