3 сентября 2008 г.

Авторизация пользователей домена Windows 2003 в Squid (черновик)

Долго думал, какую авторизацию прикрутить к сквиду.
И каким образом это настроить.

В итоге получилось что то типа нижеследующего. Руководствовался этой статьей.

Ставим squid.
# aptitude install squid

Теперь проверяем работу хелпера отвечающего за группы. Это несложный перловый скрипт идущий в комплекте со сквидом - он тупо вызывает wbinfo на тему поиска СИДа группы, и ещё разок на тему принадлежности юзера к группе с найденным SID. Всё просто, но по три форка на запрос. Будет ли он кэшировать найденные значения - выясниться позже, когда запустим и посмотрим на скорость изменения PID`ов в шапке top`a (могу сразу успокоить - кэширует :))). Итак, проверяем хелпер:

nx-admin@altair-nx:~$ echo proba inet | /usr/lib/squid/wbinfo_group.pl
OK
nx-admin@altair-nx:~$ echo ssa inet | /usr/lib/squid/wbinfo_group.pl
OK
nx-admin@altair-nx:~$ echo trifonov inet | /usr/lib/squid/wbinfo_group.pl
ERR


Работает. Тока косяк - не удалось ему впарить группу (или юзера) с пробелом в названии - что для меня не очень существенно, всё равно для разруливания прав будут созданы отдельные группы - разумеется без пробелов. Заметим, что сам wbinfo - прекрасно обрабатывает и группы и имена пользователей с пробелами.

Сквид запускается не от рута и у него не хватит прав на доступ к сокету winbindd - поэтому, заранее исправляем сиё досадное упущение:

squid$ chown root:proxy /var/run/samba/winbindd_privileged/




Теперь рисуем конфиг сквида:

# порт где слушаем
http_port 3128

# список слов, которые будучи обнаруженными в URL вызывают обработку без кэширования
hierarchy_stoplist cgi-bin ?

# список ACL которые вызывают несовпадение с кэшем, и, запрос с ответом кэшироваться не будут
acl QUERY urlpath_regex cgi-bin \?

# собственно - правило что не кэшируем
no_cache deny QUERY

# сколько отдаём ему памяти (реально пожрёт втрое больше)
cache_mem 128 MB

# Директория для кэша, числа - размер кэша в Mb, число директорий первого уровня, число директорий второго уровня в каждой директории первого.
cache_dir ufs /var/spool/squid 4096 16 256

# лог доступа - первый параметр путь, второй - формат, форматы описаны в дефолтовом файле.
access_log /var/log/squid/access.log squid

# лог активности менеджера хранилища. Показывает, какие объекты были сохранены/удалены из кэша и как долго.
# мне он не нужен, а места занимает прилично.
cache_store_log none

# файл hosts, проверяемый при запуске. Из него берётся доменное имя и добавляется к неполным адресам (которые не содержат ни одной точки в имени)
hosts_file /etc/hosts

# домен добавляемый к неполным именам
append_domain .jscguideh.ru

# директория где хранятся HTML c текстами ошибок
error_directory /usr/share/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/bin/ntlm_auth \
--helper-protocol=squid-2.5-ntlmssp
# число детишек для авторизации - сколько процессов запускать
auth_param ntlm children 50
# базовая авторизация для тех, кто не может нативную
auth_param basic program /usr/bin/ntlm_auth \
--helper-protocol=squid-2.5-basic
# Число процессов для базовой аворизации - значительно меньше чем для основной, т.к. таких юзеров/программ немного
auth_param basic children 10
# Заголовок окна выводимый при запросе авторизации
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/lib/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_restrict external nt_group inet_restrict
# Пользователи которым разрешён метод CONNECT
#acl inet_connect external nt_group inet_connect
# ACL авторизации на проксе
acl JSCGUIDEH 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 guideh.com dstdomain \
"/usr/share/squid/db/allow_all.txt"
# запрещённые в URL выражения (для всего УРЛа)
acl bad_url url_regex \
"/usr/share/squid/db/deny_url.txt"
# запрещённые в URL выражения (для самого урла, без домена)
#acl bad_url_2 urlpath_regex \
# "/usr/share/squid/db/deny_url_2.txt"
# запрещённые доменные имена
acl deny_domains dstdomain \
"/usr/share/squid/db/deny_domains.txt"
# acl для клиент-банков и прочих кому надо напрямую ходить
acl client_banks dst \
"/usr/share/squid/db/client_banks.txt"
# сети в которые ходить не надо (ICQ и прочия)
acl bad_networks dst \
"/usr/share/squid/db/bad_networks.txt"
# те кто ходят без авторизации
acl not_autorized src \
"/usr/share/squid/db/not_autorized.txt"
# список сайтов для тех у кого их определённый набор
acl domains_for_restrict dstdomain \
"/usr/share/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 JSCGUIDEH guideh.com
# Разрешаем доступ ко всему группе '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/share/squid/errors/Russian-1251
# синтаксис описан
# http://wiki.squid-cache.org/SquidFaq/MiscFeatures
#deny_info ERR_INET_NO_ALLOW all
http_access deny all



http_port 3128


Сам конфиг хорошо прокомментирован, поэтому, дополнительные камменты не делаю, тока привожу файлики которые в нём фигурируют:

Здесь будут примеры


После рисовки всех конфигов, делаем сквида владельцем директории с кэшем, и создаём субдиректории:

squid$ chown -R squid:wheel /var/spool/squid
squid$ squid -z

2 комментария:

  1. Добрый вечер, Швед!
    Такой вопрос: ПК был подключен к домену. Понадобилось его подключить к определённой рабочей группе, выполнена соответствующая настройка. Теперь под учётной записью для домена в него не войти. Встроенное восстановление Windows не работает (сбойные файлы). Можно ли восстановить конфигурацию для входа в домен не прибегая к доменным админам?
    Если не трудно на адрес: boleo2003@mail.ru
    Спасибо.

    ОтветитьУдалить
  2. ну во-первых, мало информации.
    во-вторых, мне кажется что это совсем не касается темы поста.
    комп был с виндой? какой? встроенное восстановление виндоус и не поможет.
    если честно, не подскажу, но мне кажется, что это маловероятно (сделать это без доменных админов).
    почему бы к ним и не обратится?

    ОтветитьУдалить