Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|
|
Каталог статей |
Squid с авторизацией в AD
Squid
<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } CODE { font-family: "DejaVu Sans Mono", monospace } -->
Авторизация пользователей squid в домене с доступом
к ресурсам по группам AD
Ставим самбу:
#cd /usr/ports/net/samba34/
#make config
В вылезшем окошке расставляем такой набор галок:
[X] LDAP With LDAP support
[X] ADS With Active Directory support
[X] WINBIND With WinBIND support
[X] SYSLOG With Syslog support
[X] UTMP With UTMP accounting support
[X] POPT With system-wide POPT library
И собираем
#make install clean
Заметим, что в современных версиях FreeBSD керберос из портов ставить не обязательно - прекрасно работает и без него. После инсталляции самбы, копируем дефолтный конфиг и правим его для наших нужд
#cd /usr/local/etc
#/usr/local/etc/>cp smb.conf.sample smb.conf
#/usr/local/etc/>ee smb.conf
[global]
# netbios имя нашего домена
workgroup = local
# Комментарий сервера
server string = Proxy Server
# Режим безопасности
security = ADS
# Указываем сети, которым разрешен досту к прокси
hosts allow = 192.168.5.
# Указываем расположение логов
log file = /var/log/samba34/log.%m
# Указываем размер логов (в килобайтах)
max log size = 50
# Указываем имя контроллера домена (Внимание! Необходимо указать контроллер
# домена,выполняющий роль PDC, если он у вас один то не заморачивайтесь. У
# меня в сети много сайтов.)
password server = w2003.local
# Указываем полное имя нашего домена
realm = local
# Указываем тип хранилища
passdb backend = tdbsam
# Сетевые настройки
socket options = TCP_NODELAY
# Указываем самбе, что она не является PDC
local master = no
os level = 0
domain master = no
preferred master = no
domain logons = no
# Настройки кодировки
display charset = koi8-r
unix charset = koi8-r
dos charset = cp866
# Настройки winbind
winbind use default domain = no
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
И для кербероса:
# more /etc/krb5.conf
[libdefaults]
default_realm = LOCAL
#192.168.5.6 — ip адрес контроллера домена с AD.
[realms]
LOCAL = {
kdc = 192.168.5.6
admin_server = 192.168.5.6
kpasswd_server = 192.168.5.6
}
[domain_realms]
.local = LOCAL
[logging]
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log
default = FILE:/var/log/krb5lib.log
А также для nsswitch:
# more /etc/nsswitch.conf
group: files winbind
group_compat: nis
hosts: files dns
networks: files
passwd: files winbind
passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files
Далее - ставим собственно сквид:
# cd /usr/ports/www/squid
# make install clean
В окошке снимаем все галки - мне так ничё не нужно от него кроме авторизации и кэширования.
После инсталляции, занимаемся самбой - надо ввести её в домен, но, вначале получаем билетик керберос:
# kinit root
root@LOCAL's Password:
kinit: NOTICE: ticket renewable lifetime is 1 week
Ну и вводим в домен:
#net ads join -U root
root's password:
Добавляем такие строки в /etc/rc.conf:
winbindd_enable="YES"
squid_enable="YES"
Мне сама самба не нужна - нужен тока винбинд, поэтому тока он. После этого запускаем самбу
#/usr/local/etc/rc.d/samba start
Осталось указать пользователя, от имени которого будет проходить аутентификация (для этих целей я создал отдельного пользователя, и делегировал ему нужные права (если не хочется заморачиваться дайте ему права администратора домена))
#wbinfo --set-auth-user=LOCAL\\root%password
//>wbinfo --get-auth-user
LOCAL\root%password
Проверяем, что из всего этого получилось:
#wbinfo -g
#wbinfo -u
Всё нормально. Теперь проверяем работу хелпера отвечающего за группы. Это несложный перловый скрипт идущий в комплекте со сквидом - он тупо вызывает wbinfo на тему поиска СИДа группы, и ещё разок на тему принадлежности юзера к группе с найденным SID. Всё просто, но по три форка на запрос. Итак, проверяем хелпер:
#echo serega users | /usr/local/libexec/squid/wbinfo_group.pl
OK
Т.к. сквид запускается не от рута, у него не хватит прав на доступ к сокету winbindd - поэтому, заранее исправляем сие досадное упущение:
#chown root:squid /var/db/samba/winbindd_privileged
Теперь рисуем конфиг сквида:
#cat /usr/local/etc/squid/squid.conf
# squid conf
# порт где слушаем
http_port 3128
# список слов, которые будучи обнаруженными в URL вызывают обработку без кэширования
hierarchy_stoplist cgi-bin ?
# список ACL которые вызывают несовпадение с кэшем, и, запрос с ответом кэшироваться не будут
acl QUERY urlpath_regex cgi-bin \?
# собственно - правило что не кэшируем
no_cache deny QUERY
# сколько отдаём ему памяти (реально пожрёт втрое больше)
cache_mem 1024 MB
# Директория для кэша, числа - размер кэша в Mb,
# число директорий первого уровня, число директорий второго уровня в каждой директории #первого.
cache_dir ufs /usr/local/squid/cache 1024 16 256
# лог доступа - первый параметр путь, второй — формат форматы описаны в дефолтовом #файле.
access_log /var/log/squid/access.log squid
# лог активности менеджера хранилища. Показывает, какие объекты были #сохранениы/удалены из кэша и как долго.Мне он не нужен, а места занимает прилично.
cache_store_log none
# файл hosts, проверяемый при запуске. Из него берётся доменное имя и добавляется к #неполным адресам (которые не содержат ни одной точки в имени)
hosts_file /etc/hosts
# домен добавляемый к неполным именам
append_domain .mydomain.local
# авторизация
# нативная авторизация ослика
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
# число детишек для авторизации - сколько процессов запускать
auth_param ntlm children 30
# базовая авторизация для тех, кто не может нативную (я, например, т.к. сижу из под #FreeBSD, да и многие программы — например, родной ICQ клиент от AOL)
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
# Число процессов для базовой аворизации - значительно меньше чем для основной, т.к. #таких юзеров/программ немного
auth_param basic children 4
# Заголовок окна выводимяй при запросе авторизации
auth_param basic realm Squid proxy-caching web server
# время жизни авторизации - сколько кэшировать данные (для базовой авторизации)
auth_param basic credentialsttl 2 hours
# внешняя ACL для разруливания по группам
external_acl_type nt_group %LOGIN /usr/local/libexec/squid/wbinfo_group.pl
# пользователи у которых просто интернет - с ограничениями
acl inet_users external nt_group inet_users
# пользователи у которых есть тока аська
acl inet_icq external nt_group inet_icq
# пользователи с полными парвами на доступ в инет
acl inet_full external nt_group inet_full
# люди с доступом к серверу аналитики
acl inet_analit external nt_group inet_analit
# пользователи с ограниченным доступом в инет — тока определённый набор ресурсов и всё.
acl inet_restrict external nt_group inet_restrict
# Пользователи которым разрешён метод CONNECT
acl inet_connect external nt_group inet_connect
# ACL авторизации на проксе
acl MYDOMAIN proxy_auth REQUIRED
# Описываем порты на которые разрешено лазить
acl SSL_ports port 443 563
acl SSL_for_client_banks port 910 8443 4500
# порты на которе можно ходить юзерам
acl safe_ports port 80 # http
acl safe_ports port 21 # ftp
acl safe_ports port 443 # ssl
acl ICQ_ports port 5190 # ICQ
# надо ли? 1025-65535
acl CONNECT method CONNECT
# Описываем все сети все IP
acl all src 0.0.0.0/0.0.0.0
# описываем локалхост
acl localhost src 127.0.0.1/255.255.255.255
# acl до сайтов которые разрешены всем
acl mydomain_site dstdomain "/usr/local/etc/squid/db/allow_all.txt"
# запрещённые в URL выражения (для всего УРЛа)
acl bad_url url_regex "/usr/local/etc/squid/db/deny_url.txt"
# запрещённые в URL выражения (для самого урла, без домена)
#acl bad_url_2 urlpath_regex "/usr/local/etc/squid/db/deny_url_2.txt"
# запрещённые доменные имена
acl deny_domains dstdomain "/usr/local/etc/squid/db/deny_domains.txt"
# acl для клиент-банков и прочих кому надо напрямую ходить
acl client_banks dst "/usr/local/etc/squid/db/clinet_banks.txt"
# сети в которые ходить не надо (ICQ и прочия)
acl bad_networks dst "/usr/local/etc/squid/db/bad_networks.txt"
# те кто ходят без авторизации
acl not_autorized src "/usr/local/etc/squid/db/not_autorized.txt"
# список сайтов для тех у кого их определённый набор
acl domains_for_restrict dstdomain "/usr/local/etc/squid/db/domains_for_restrict.txt"
### настройки доступа ####
# выпускаем на неавторизуемые сайты
http_access allow client_banks
# выпускаем тех кто не авторизуется в принципе т.к. они не в домене и т.п.
http_access allow not_autorized
# Разрешаем всем доступ на сайт конторы
# Этим же правилом срубаются все неавторизованные
http_access allow LOCAL mydomain_site
# Разрешаем доступ ко всему группе 'inet_full'
http_access allow inet_full all
# Зарубаем запрещённые куски url
http_access deny bad_url
# Разрешаем асечный порт тем у кого есть аська
http_access allow inet_icq ICQ_ports
# зарубаем запрещённые сети
http_access deny bad_networks
# зарубаем запрещённые домены
http_access deny deny_domains
# Зарубаем коннект кроме как к SSL (надо ли группе отдельной?)
http_access deny CONNECT !SSL_ports
# зарубаем все порты проме safe_ports
http_access deny !safe_ports
# разрешаем инет обычным пользователям
http_access allow inet_users
# разрешаем инет ограниченным пользователям на разрешённые сайты
http_access allow inet_restrict domains_for_restrict
# зарубаем всё нах :)
http_access deny all
Привожу файлики которые в нём фигурируют:
#more /usr/local/etc/squid/db/allow_all.txt
# файл с сайтами доступ на которые разрешён всем
ya.ru
#more /usr/local/etc/squid/db/deny_domains.txt
# файл со списком запрещённых доменов если надо весь домен с субдоменами - в начало
# надо поставить точку
muzoff.ru
.udaff.ru
.udaff.com
.ziza.ru
.rapidshare.de
stream.fluendo.com
.odnoklassniki.ru
#more /usr/local/etc/squid/db/deny_url.txt
# url на котоые нельзя никому кроме тех у кого полный доступ
#
# ya[a-z/0-9/-]+dex\.ru диапазон буквы (мелкие), цифры и дефис
# ya.+ex\.ru - всё что начинается на ya и кончается на ex.ru
# объединение (gaz|plan)(eta) порубаются gazeta planeta
porn
sex
# из скивдгарда - реклама
/ads/
/ad/
/banner/
/sponsor/
/event.ng/
/Advertisement
/adverts/
#из сквидгарда - аудио-видео
\.(ra?m|wma|mp2|mpv2|mp3|asx)($|\?)
\.(mpe?g?|wmv|mov|movie|qt|avi|dvd?|divx|flv|iflv)($|\?)
\.(iso|exe|vbs)($|\?)
#и т.д. и т.п.
#more /usr/local/etc/squid/db/clinet_banks.txt
# всякие назначения на которые надо попадать напрямую
# WU
206.211.228.242/32
206.211.227.242/32
#more /usr/local/etc/squid/db/bad_networks.txt
# ICQ
64.12.0.0/16
205.188.0.0/16
#more /usr/local/etc/squid/db/not_autorized.txt
# те кто ходят неавторизованными
# _guests
172.30.105.38/32
172.30.101.17/32
#more /usr/local/etc/squid/db/domains_for_restrict.txt
# список доменов для юзеров с ограниченным доступом в инет.
maps.yandex.ru
После рисовки всех конфигов, делаем сквида владельцем директории с кэшем, и создаём субдиректории:
#chown -R squid:wheel /shares/squid
squid$ squid -z
Всё. Запускаем и юзаем.
|
Категория: Мои статьи | Добавил: Admin (28.10.2011)
|
Просмотров: 5704
| Рейтинг: 0.0/0 |
|
|
|