Документация по ОС FreeBSD Понедельник, 29.04.2024, 14:12
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Squid

Авторизация пользователей squid в домене с доступом к ресурсам по группам [2008]
Итак. Дошли руки до корпоративной прокси. Старая была на линухе, что не есть гуд - моё отношение к помойке хоршо известно. Хотя основным фактором стало не это - доступ рулился через текстовые файлы, хотя авторизовлись все в AD. Плюс конфиг был ну абсолютно непрозрачный - сказалось то что её, в общей сложности, админили 5 человек - и понять откуда растут рога вообще не представлялось возможным.
   Итак, задача - на правильной ОС поднять правильно настроенную проксю - т.е. авторизация в AD и руление доступа виндовыми группами через ту же AD - чтобы не напрягать ночных дежурных администраторов - пользователей в основном заводят они.
   Под это дело был выделен сервак - HP Proliant 380 G3, 2 ксенона по 3 чтоли гигарца, 4Gb RAM, и 6 "косых" U320 SCSI дисков (2x73G и 4x36G 10000RPM - разного размера, потому и косые). Соотвествено - под кэш были выделены 4 мелких - в 10 раид, под систему и логи - 2 больших, зеркалом. Получилось так:
squid$ df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1a 496M 36M 420M 8% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/da1s1c 66G 108M 60G 0% /shares
/dev/da0s1d 3.9G 403M 3.2G 11% /tmp
/dev/da0s1e 7.7G 819M 6.3G 11% /usr
/dev/da0s1f 52G 17M 48G 0% /var
jabber:/shares/ports 206G 17G 172G 9% /usr/ports
squid$

   Одной из задач было использовать sqstat - поэтому пришлось отказаться от squidGuard в пользу родных методов ограничения сквида - при использовании внешних редиректоров пропадает "живая" статистика.
   Поехали. Ставим самбу:
squid$ cd /usr/ports/net/samba3/
squid$ make install clean

   В вылезшем окошке расставляем такой набор галок:
+--------------------------------------------------------------------+
| Options for samba 3.0.26a_1,1 |
| +----------------------------------------------------------------+ |
| | [X] LDAP With LDAP support | |
| | [X] ADS With Active Directory support | |
| | [ ] CUPS With CUPS printing support | |
| | [X] WINBIND With WinBIND support | |
| | [ ] ACL_SUPPORT With ACL support | |
| | [ ] FAM_SUPPORT With File Alteration Monitor | |
| | [ ] SYSLOG With Syslog support | |
| | [ ] QUOTAS With Disk quota support | |
| | [ ] UTMP With UTMP accounting support | |
| | [ ] MSDFS With MSDFS support | |
| | [ ] PAM_SMBPASS With PAM authentication vs passdb backends | |
| | [ ] CLUSTER With experimental cluster support | |
| | [ ] DNSUPDATE With dynamic DNS update | |
| | [ ] EXP_MODULES With experimental modules | |
| | [X] POPT With system-wide POPT library | |
+-+----------------------------------------------------------------+-+
| [ OK ] Cancel |
+--------------------------------------------------------------------+

   Заметим, что в современных версиях FreeBSD керберос из портов ставить не обязательно - прекрасно работает и без него. После инсталляции самбы, рисуем для неё такой конфиг:
squid$ more /usr/local/etc/smb.conf
# SAMBA for SQUID

[global]
 workgroup = MYDOMAIN
 security = ADS
 password server = MYDOMAIN.LOCAL
 realm = MYDOMAIN.LOCAL
 netbios name = SQUID
 server string = Proxy server of mydomain.local
# log level = 10
 log file = /var/log/samba/%m.%U.log
 max log size = 50000
 winbind uid = 10000-20000
 winbind gid = 10000-20000
 winbind use default domain = yes
 display charset = koi8-r
 unix charset = koi8-r
 dos charset = 866
 # for mail
 template homedir = /usr/home/%D/%U
 template shell=/bin/csh
 # added by lissyara 2007-06-21 in 10:36
 #magic script = /root/scripts/create_user_dir.sh %U
[printers]
 comment = All Printers
 path = /var/spool/samba
 printable = Yes
 browseable = No
 use client driver = yes
 public = No

squid$

   И для кербероса:
squid$ more /etc/krb5.conf
#

[libdefaults]
 default_realm = MYDOMAIN.LOCAL

[realms]
 MYDOMAIN.LOCAL = {
 kdc = MYDOMAIN.LOCAL
 admin_server = MYDOMAIN.LOCAL
 }

[domain_realm]
 .mydomain.local = MYDOMAIN.LOCAL

[logging]
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmin.log
 default = FILE:/var/log/krb5lib.log
squid$

   А также для nsswitch:
squid$ more /etc/nss
nsswitch.conf nsswitch.conf.orig
squid$ more /etc/nsswitch.conf
group: files winbind
passwd: files winbind
group_compat: nis
passwd_compat: nis
hosts: files dns
networks: files
shells: files

squid$

   Особых комментариев нет - всё это я уже рассказывал раньше, в статье про samba и ACL.
   Далее - ставим собственно сквид:
squid$ cd /usr/ports/www/squid
squid$ make install clean

   В окошке снимаем все галки - мне так ничё не нужно от него кроме авторизации и кэширования. Первый же возникающий вопрос - почему не ставил третий сквид? Ставил. Работает. Синтаксис как у 2.6 - но, QIP, сцуко, не может нативно авторизоваться. Авторизовалка ntlm у него кривая... Пришлось снести и поставить squid2.6.
   После инсталляции, занимаемся самбой - надо ввести её в домен, но, вначале получаем билетик керберос:
squid$ kinit akeda
akeda@MYDOMAIN.LOCAL's Password:
kinit: NOTICE: ticket renewable lifetime is 1 week

   Ну и вводим в домен:
squid$ net join -U akeda
akeda's password:
Using short domain name -- MYDOMAIN
Joined 'SQUID' to realm 'MYDOMAIN.LOCAL'

   Добавляем такие строки в /etc/rc.conf:
# squid
winbindd_enable="YES"
squid_enable="YES"

   Мне сама самба не нужна - нужен тока винбинд, поэтому тока он. После этого запускаем самбу
squid$ /usr/local/etc/rc.d/samba start
Performing sanity check on Samba configuration: OK
Removing stale Samba tdb files: .. done
Starting winbindd.

   Проверяем, что из всего этого получилось:
squid$ id akeda
uid=10000(akeda) gid=10000(domain users) groups=10000(domain users)
squid$
squid$ wbinfo -g | wc -l
 398
squid$ wbinfo -u | wc -l
 1131
squid$

   Всё нормально. Теперь проверяем работу хелпера отвечающего за группы. Это несложный перловый скрипт идущий в комплекте со сквидом - он тупо вызывает wbinfo на тему поиска СИДа группы, и ещё разок на тему принадлежности юзера к группе с найденным SID. Всё просто, но по три форка на запрос. Будет ли он кэшировать найденные значения - выясниться позже, когда запустим и посмотрим на скорость изменения PID`ов в шапке top`a (могу сразу успокоить - кэширует :))). Итак, проверяем хелпер:
squid$ echo akeda bank | /usr/local/libexec/squid/wbinfo_group.pl
OK
squid$ echo akeda novosibirsk_gr | /usr/local/libexec/squid/wbinfo_group.pl
ERR
squid$ echo akeda omsk_gr | /usr/local/libexec/squid/wbinfo_group.pl
ERR
squid$

   Работает. Тока косяк - не удалось ему впарить группу (или юзера) с пробелом в названии - что для меня не очень существенно, всё равно для разруливания прав будут созданы отдельные группы - разумеется без пробелов. Заметим, что сам wbinfo - прекрасно обрабатывает и группы и имена пользователей с пробелами. В принципе, допилить наверно несложно, но - у меня желания нет. Если кому понадобиться - пилите и шлите разработчикам - будет со следующих версий всем щассье.
   Далее, проверяем хелпер самого сквида:
squid$ ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of="mydomain\domain users" -d10 -I /tmp
[2007/10/29 10:20:29, 5] lib/debug.c:debug_dump_status(391)
INFO: Current debug levels:
all: True/10
tdb: False/0
printdrivers: False/0
lanman: False/0
smb: False/0
rpc_parse: False/0
rpc_srv: False/0
rpc_cli: False/0
passdb: False/0
sam: False/0
auth: False/0
winbind: False/0
vfs: False/0
idmap: False/0
quota: False/0
acls: False/0
locking: False/0
msdfs: False/0
dmapi: False/0
akeda my_password
[2007/10/29 10:20:30, 10] utils/ntlm_auth.c:manage_squid_request(2086)
Got 'akeda my_password' from squid (length: 16).
[2007/10/29 10:20:30, 3] utils/ntlm_auth.c:check_plaintext_auth(298)
NT_STATUS_OK: Success (0x0)
OK
^C
squid$

   'akeda' - это мой логин, 'my_password' - пароль. Всё нормально, пашет. Конечно, в итоге будет всё не так гладко, т.к. сквид запускается не от рута, от которого я запускал данный хелпер, и у него не хватит прав на доступ к сокету winbindd - поэтому, заранее исправляем сиё досадное упущение:
squid$ chown root:squid /var/db/samba/winbindd_privileged

   Теперь рисуем конфиг сквида:
squid$ cat /usr/local/etc/squid/squid.conf
# squid conf
# начат lissyara, 2007-10-25 в 13:25

# порт где слушаем
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 /shares/squid/cache 50000 64 512
# лог доступа - первый параметр путь, второй - формат
# форматы описаны в дефолтовом файле.
access_log /var/log/squid/access.log squid
# лог активности менеджера хранилища. Показывает, какие
# объекты были сохранениы/удалены из кэша и как долго.
# мне он не нужен, а места занимает прилично.
cache_store_log none
# файл hosts, проверяемый при запуске. Из него берётся
# доменное имя и добавляется к неполным адресам (которые
# не содержат ни одной точки в имени)
hosts_file /etc/hosts
# домен добавляемый к неполным именам
append_domain .mydomain.local
# директория где хранятся HTML c текстами ошибок
error_directory /usr/local/etc/squid/errors/Russian-1251


# программа редиректор (у меня сквидгард) для более простой
# и тонкой настройки правил использования инета
#redirect_program /usr/local/bin/squidGuard -c \
# /usr/local/etc/squid/squidguard.conf
# число процессов редиректора
#redirect_children 20

#cache_log /usr/local/squid/logs/cache.log
#debug_options ALL,5

# авторизация
# нативная авторизация ослика
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



#refresh_pattern ^ftp: 1440 20% 10080
#refresh_pattern ^gopher: 1440 0% 1440
#refresh_pattern . 0 20% 4320

# внешняя 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
# для /usr/ports/www/sqstat/
# копируете конфиг, ставите вместо 'host' - 'user'
# и начальство не оторвать от экрана :))
acl manager proto cache_object


# Описываем все сети все 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"

### настройки доступа ####

# вводим свои определения для сообщений о
# отказе по ACL - пригодиться когда кто-то
# воет что не может попасть на определённый сайт
deny_info ERR_BAD_URL bad_url
deny_info ERR_BAD_NETWORKS bad_networks
deny_info ERR_DENY_DOMAINS deny_domains
deny_info ERR_SAFE_PORTS safe_ports
deny_info ERR_SSL_PORTS SSL_ports


# пропускаем sqstat
http_access allow manager localhost
http_access deny manager

# выпускаем на неавторизуемые сайты
http_access allow client_banks
# выпускаем тех кто не авторизуется в принципе
# т.к. они не в домене и т.п.
http_access allow not_autorized
# Разрешаем всем доступ на сайт конторы
# Этим же правилом срубаются все неавторизованные
http_access allow MYDOMAIN 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


# зарубаем всё нах :)
# Для начала кустомизируем сообщение о ошибке.
# ERR_INET_NO_ALLOW - это имя файла в
# /usr/local/etc/squid/errors/Russian-1251
# синтаксис описан
# http://wiki.squid-cache.org/SquidFaq/MiscFeatures
deny_info ERR_INET_NO_ALLOW all
http_access deny all

   Сам конфиг хорошо прокомментирован, поэтому, дополнительные камменты не делаю, тока привожу файлики которые в нём фигурируют:
squid$ more /usr/local/etc/squid/db/allow_all.txt
# файл с сайтами доступ на которые разрешён всем
squid
mydomain.ru
ttb.kz
squid$


squid$ more /usr/local/etc/squid/db/deny_domains.txt
# файл со списком запрещённых доменов
# если надо весь домен с субдоменами - в начало
# надо поставить точку

# из файла mydomain_bad
download.zachot.ru
goblin.faberz.com
muzoff.ru
.udaff.ru
.udaff.com
.ziza.ru
.rapidshare.de
stream.fluendo.com
realaudio.aradio.ru
.mp3real.ru
files.rfonline.ru
files1.rfonline.ru
files2.rfonline.ru
files3.rfonline.ru
.proxy80.com
.cloakme.net
stream03.rambler.ru
.odnoklassniki.ru
.odnoklasniki.ru
.mamba.ru
.cirota.ru
.vkontakte.ru
.youtube.com
.video.google.com

# из сквидгарда - аудио-видео

123mp3links.tsx.org
128.242.103.21
128.242.103.22
128.242.103.23


squid$ 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)($|\?)


squid$ more /usr/local/etc/squid/db/clinet_banks.txt
# всякие назначения на которые надо попадать напрямую

# WU
206.211.228.242/32
206.211.227.242/32

# RF
217.227.42.3/32

# STC ATNN
213.191.224.0/19

# SB
213.85.162.11/32
193.33.122.18/32
194.84.227.220/32


squid$ more /usr/local/etc/squid/db/bad_networks.txt
# сети в которые ограничен доступ - ICQ и прочия

# переенсены из конфига старого прокси
81.19.68.114/32
217.16.18.76/32

# ICQ
64.12.0.0/16
205.188.0.0/16


squid$ more /usr/local/etc/squid/db/not_autorized.txt
# те кто ходят неавторизованными

# _guests
172.30.105.38/32
172.30.101.17/32

# notariat
172.30.19.92/32
172.30.19.93/32
172.30.19.103/32

squid$ 


squid$ more /usr/local/etc/squid/db/domains_for_restrict.txt
# список доменов для юзеров с ограниченным доступом в инет.

# из файла good
mydomain.ru
localhost.mydomain.local
maps.yandex.ru
img.yandex.net
img.yandex.ru
postindex.otrok.ru


# из файла good
mts.ru
gismeteo.ru
yandex.ru

   После рисовки всех конфигов, делаем сквида владельцем директории с кэшем, и создаём субдиректории:
squid$ chown -R squid:wheel /shares/squid
squid$ squid -z
2007/10/29 12:38:02| Creating Swap Directories
2007/10/29 12:38:02| /shares/squid/cache exists
2007/10/29 12:38:02| Making directories in /shares/squid/cache/00
2007/10/29 12:38:02| Making directories in /shares/squid/cache/01
2007/10/29 12:38:02| Making directories in /shares/squid/cache/02
2007/10/29 12:38:02| Making directories in /shares/squid/cache/03
2007/10/29 12:38:02| Making directories in /shares/squid/cache/04
2007/10/29 12:38:02| Making directories in /shares/squid/cache/05
2007/10/29 12:38:03| Making directories in /shares/squid/cache/06
2007/10/29 12:38:03| Making directories in /shares/squid/cache/07
2007/10/29 12:38:03| Making directories in /shares/squid/cache/08
2007/10/29 12:38:03| Making directories in /shares/squid/cache/09
2007/10/29 12:38:03| Making directories in /shares/squid/cache/0A
2007/10/29 12:38:03| Making directories in /shares/squid/cache/0B
2007/10/29 12:38:03| Making directories in /shares/squid/cache/0C
2007/10/29 12:38:04| Making directories in /shares/squid/cache/0D
2007/10/29 12:38:04| Making directories in /shares/squid/cache/0E
2007/10/29 12:38:04| Making directories in /shares/squid/cache/0F
squid$

   Всё. Запускаем и юзаем.

P.S. С вопросами - в форум а не в камменты - камменты для косяков.
P.S.2 По дефолту, ОС не отдайт приложению более 512 мегов рамы, поэтому на реальной эксплуатации было замечено, что сквид регулярно отлетает на этом числе используемой оперативки. Решение:
kern.maxdsiz="2610612736"
kern.dfldsiz="2610612736"
kern.maxssiz="2610612736"

в /boot/loader.conf и проблемы сняло как рукой.



Источник: http://www.lissyara.su/?id=1375
Категория: Squid | Добавил: oleg (14.04.2008) | Автор: lissyara
Просмотров: 2468 | Рейтинг: 5.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024