Squid на сервере FreeBSD и доменные пользователи
Для того, чтобы облегчить администрирование доступа к интернету на прокси-сервере 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, как указано на рисунке:
# 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 с доступом в интернет для доменных пользователей.
Доброго времени суток. Читаю ваши статьи по администрированию, могу сказать что очень помогают в работе.
Поставлена следующая задача: настроить прозрачный прокси сервер с целью контроля и ограничения интернет трафика на рабочих местах пользователей. Сеть примерно 300 компов, почтовый сервер exchange 2010, контроллер домена windows 2008 r2, интернет шлюз на freebsd 9.1. Читал много форумов по настройке прозрачного прокси сервера, по итогу поднял virtual box FreeBSD 9.1
может вы сталкивались с настройкой squid на freebsd 9.1, просто у меня возникают некоторые трудности..конфиги и ошибки могу показать