4.8.09

Сразу. Пока не забыл

Давно написал несколько статей на AspLinux.net, думаю здесь их тоже следует опубликовать, также думаю следует их немного исправить дабы вернуть им актуальность. Итак статья:

squid-авторизация в AD с контролем доступа к сайтам

Настройки описанные в данной статье не претендуют на абсолютно верные. Данные настройки созданы после прочтения кучи факов и ман. Данная настройка работает на ASPLinux 11.2. Пакеты, используемые в данной конфигурации, не пересобирались, использовались пакеты, идущие на дистрибутиве. Использована сеть с адресным полем 10.12.0.0/255.255.255.0 В данной статье подразумевается что у вас уже должным образом настроены samba и winbind В данной конфигурации заблокирована почти вся графика для экономии трафика. Если данная функция не нужна, отключите соответствующие настройки в конфиге.

Рекомендую так же удалить стандартные HTML-файлы, отображающие ошибки, и сделать свои для наилучшего понимания пользователями.
Итак,

Конфигурирование Squid c авторизацией в AD

Squid - прокси-сервер. Основная конфигурация настраивается с помощью файла squid.conf, который в данном случае находится в каталоге /etc/squid/
В принципе, может работать и при дефолтном конфиге, но лучше настроить все руками.

Конфиг, используемый мною:

cache_mgr admin@domain.ru
visible_hostname my_proxy
log_mime_hdrs on
ignore_unknown_nameservers on
connect_timeout 120 seconds
half_closed_clients on

forwarded_for off
error_directory /etc/squid/error

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY
http_port 10.12.0.10:3128

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp

acl all src 0.0.0.0/0.0.0.0
acl localnet src 10.12.0.0/255.255.255.0

acl nobanners src 0/0
acl banners url_regex "/etc/squid/conf/banners.acl"

acl My_SNMP snmp_community squidmrtg
snmp_port 3401

acl ICQ_port port 5190
acl ICQ_server dstdomain login.icq.com login.oscar.aol.com ibucp-vip-d.blue.aol.com ibucp-vip-m.blue.aol.com bucp2-vip-m.blue.aol.com bucp-m08.blue.aol.com 205.188.153.98 205.188.153.97 64.12.161.153
http_access allow ICQ_port localnet
http_access allow ICQ_server localnet

acl Jabber_port port 5222
http_access allow Jabber_port localnet

acl CONNECT method CONNECT

acl goodusers proxy_auth "/etc/squid/conf/good"
http_access deny goodusers banners
http_access allow goodusers

acl free_image proxy_auth "/etc/squid/conf/free_image"

acl aolaccess dst "/etc/squid/conf/host.acl"

acl banusers proxy_auth "/etc/squid/conf/user-deny"
acl nu proxy_auth "/etc/squid/conf/naglyi_user"

http_access allow aolaccess banusers localnet
http_access deny banusers localnet

acl squid_block_badlang url_regex -i "/etc/squid/squidblock/badlang.block.txt"
acl squid_unblock_badlang url_regex -i "/etc/squid/squidblock/badlang.unblock.txt"
acl squid_block_entertain url_regex -i "/etc/squid/squidblock/entertain.block.txt"
acl squid_unblock_entertain url_regex -i "/etc/squid/squidblock/entertain.unblock.txt"
acl squid_block_games url_regex -i "/etc/squid/squidblock/games.block.txt"
acl squid_unblock_games url_regex -i "/etc/squid/squidblock/games.unblock.txt"
acl squid_block_pirate url_regex -i "/etc/squid/squidblock/pirate.block.txt"
acl squid_block_mp3 url_regex -i "/etc/squid/squidblock/mp3.block.txt"
acl squid_unblock_pirate url_regex -i "/etc/squid/squidblock/pirate.unblock.txt"
acl squid_block_porn url_regex -i "/etc/squid/squidblock/porn.block.txt"
acl squid_unblock_porn url_regex -i "/etc/squid/squidblock/porn.unblock.txt"
acl squid_block_video url_regex -i "/etc/squid/squidblock/video.block.txt"
acl squid_block_reklama url_regex -i "/etc/squid/squidblock/reklama.block.txt"
acl squid_unblock url_regex -i "/etc/squid/squidblock/unblock.txt"
acl squid_block url_regex -i "/etc/squid/squidblock/block.txt"
acl squid_nu_block url_regex -i "/etc/squid/squidblock/nu_block"

http_access deny nu squid_nu_block all

http_access deny squid_block all
http_access allow squid_unblock localnet

http_access deny squid_block_badlang all
http_access deny squid_block_entertain all
http_access deny squid_block_games all
http_access deny squid_block_mp3 all
http_access deny squid_block_pirate all
http_access deny squid_block_porn all
http_access deny squid_block_video all
http_access deny squid_block_reklama all

http_access allow squid_unblock_badlang localnet
http_access allow squid_unblock_games localnet
http_access allow squid_unblock_pirate localnet

acl bigfiles url_regex -i "/etc/squid/conf/bigfile.txt"
acl image url_regex -i "/etc/squid/conf/image.txt"
acl free_image_site url_regex -i "/etc/squid/conf/free_image_site"

http_access allow image free_image localnet
http_access allow image free_image_site localnet
http_access deny bigfiles all

http_access deny nobanners banners


acl myusers proxy_auth REQUIRED
http_access allow myusers

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


acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8

snmp_access allow localhost
snmp_access deny all

acl SSL_ports port 443 563

acl Safe_ports port 80
acl Safe_ports port 21 20
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777

http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost

http_access allow localnet
http_access allow localhost
http_reply_access allow all
icp_access allow all

coredump_dir /var/spool/squid
http_access deny all

maximum_object_size 10 MB
cache_mem 20 MB


Рассмотрим некоторые параметры.

Имя вашего хоста которое будет видно для скриптов удалённых сайтов:
visible_hostname my_proxy

Опция позволяющая выцепить все заголовки отправляемых пользователями, не включайте ее если эта информация вам не нужна:

log_mime_hdrs off

Данная опция позволяет предотвратить получение ответа пользователем не с того сервера на который он отправлял запрос:
ignore_unknown_nameservers off

Время ожидания ответа
от сервера, после окончания которого пользователю выведется соответствующее сообщение:
connect_timeout 120 seconds

Закрытие сокета для клиентов которые отключились раньше чем получили ответ:
half_closed_clients on

Скрыть IP внутренней локалки для внешних сайтов:

forwarded_for off

Каталог с файлами которые будет высвечиваться при ошибках. Я изменил файлы умолчательные файлы на свои и что бы они не затирались при обновлении пакета, я поместил их в не стандартный каталог:

error_directory /etc/squid/error

Емаил администратора, который будет высвечиваться на окне ошибки у пользователя.

cache_mgr admin@domai.ru

Порт и адрес, на которых будет работать squid для http:

http_port 10.12.0.12:3128

Аутефикация юзеров в AD контроллера, используется утилита входящая в в пакет samba-winbind:

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp

Зададим имена используемых подсетей

Все адреса интернет я обозначил all:
acl all src 0.0.0.0/0.0.0.0

Локалка это localnet:
acl localnet src 10.12.0.0/255.255.255.0 - ваша локалка

Задается блокирование баннеров:

в файле banners.acl содержится распространённые адреса баннеров найден на www.opennet.ru.
acl nobanners src 0/0
acl banners url_regex "/etc/squid/conf/banners.acl"

Для аськи нужны следующие правила:


acl ICQ_port port 5190
http_access allow ICQ_port localnet

По аналогии можно составить правила для любого клиента:


acl Jabber_port port 5222
http_access allow Jabber_port localnet

Этот правило описывает метод соединения клиентов к серверам аськи и других клиентов быстрых сообщений:
acl CONNECT method CONNECT

Ниже идут списки доступов (acl)
.
Что бы не лазить по конфигу каждый раз когда списки изменяются решил занести их в отдельные файлы, представляют собой просто списки логинов пользователей например:

vasya
director
lawyer

Для того что бы описать alc для сайтов также созданы файлы со списком доменов или IP адресов например:

hostname
host.ru
host.domain.com
187.25.45.15

Пользователи, имеющие доступ ко всем ресурсам инета, прописал в файле good и указал соответствующую группу для них
acl goodusers proxy_auth "/etc/squid/conf/good"
http_access deny goodusers banners
http_access allow goodusers

Я использовал схему урезающую полностью всю графику из веб страниц, некоторым пользователям было сделано исключение, для этого нужно прописать их в соответственную группу в файле
free_image:

acl free_image proxy_auth "/etc/squid/conf/free_image"

Для сайтов одобренных администрацией :) был открыт доступ для всех пользователей (даже тех кто превысил свой лимит трафика). Для этого создан файл со списком логинов
host.acl:
acl aolaccess dst "/etc/squid/conf/host.acl"

Файл содержащий список пользователей которые превысили месячный трафик. Я использовал одну из систем которая обрабатывает логи squid для подсчёта трафика и занесения списка пользователей в этот файл.

acl banusers proxy_auth "/etc/squid/conf/user-deny"

Здесь пользователи, которые окончательно потеряли совесть, им открыт доступ только к сайтам, описаным в host.acl

acl nu proxy_auth "/etc/squid/conf/naglyi_user"

Правила разрешающие доступ к одобренным сайтам всем пользователям:

http_access allow aolaccess banusers localnet

Правила запрещающие доступ
забаненых пользователей:
http_access deny banusers localnet

Списки сайтов, которые юзеры будут смотреть только дома, входили в комплект пакета:

acl squid_block_badlang url_regex -i "/etc/squid/squidblock/badlang.block.txt"
acl squid_unblock_badlang url_regex -i "/etc/squid/squidblock/badlang.unblock.txt"
acl squid_block_entertain url_regex -i "/etc/squid/squidblock/entertain.block.txt"
acl squid_unblock_entertain url_regex -i "/etc/squid/squidblock/entertain.unblock.txt"
acl squid_block_games url_regex -i "/etc/squid/squidblock/games.block.txt"
acl squid_unblock_games url_regex -i "/etc/squid/squidblock/games.unblock.txt"
acl squid_block_pirate url_regex -i "/etc/squid/squidblock/pirate.block.txt"
acl squid_block_mp3 url_regex -i "/etc/squid/squidblock/mp3.block.txt"
acl squid_unblock_pirate url_regex -i "/etc/squid/squidblock/pirate.unblock.txt"
acl squid_block_porn url_regex -i "/etc/squid/squidblock/porn.block.txt"
acl squid_unblock_porn url_regex -i "/etc/squid/squidblock/porn.unblock.txt"
acl squid_block_video url_regex -i "/etc/squid/squidblock/video.block.txt"
acl squid_block_reklama url_regex -i "/etc/squid/squidblock/reklama.block.txt"

Файлы со списакими того что прошло фильтр но не должно было пройти. Для ручного добавления создал эти правила:
acl squid_unblock url_regex -i "/etc/squid/squidblock/unblock.txt" - для разблокирования
acl squid_block url_regex -i "/etc/squid/squidblock/block.txt" - и для заблокирования


Ну и сами правила блокирующие доступы к спискам в файлах выше (помните что очередность правил играет роль):
http_access deny squid_block all
http_access allow squid_unblock

http_access deny squid_block_badlang all
http_access deny squid_block_entertain all
http_access deny squid_block_games all
http_access deny squid_block_mp3 all
http_access deny squid_block_pirate all
http_access deny squid_block_porn all
http_access deny squid_block_video all
http_access deny squid_block_reklama all

http_access allow squid_unblock_badlang localnet
http_access allow squid_unblock_games localnet
http_access allow squid_unblock_pirate localnet


Здесь описывается, какие файлы нужно блокировать по расширениям.

acl bigfiles url_regex -i "/etc/squid/conf/bigfile.txt"

Отдельно заводим список расширений для картинок, что бы иметь возможность разрешать к ним доступ и в то же время запрещать доступ к другим заблокированным расширениям:

acl image url_regex -i "/etc/squid/conf/image.txt"

Список сайтов с не заблокированным содержимым но при этом эти сайты недоступны после отключения за превышение трафика.
acl free_image_site url_regex -i "/etc/squid/conf/free_image_site"

Правило разрешающее указанным
пользователям графику:
http_access allow image free_image localnet

И правило разрешающее графику на указын сайтах:

http_access allow image free_image_site localnet

Правило блокирующее баннеры на сайтах

http_access deny nobanners banners

Заключающие правила, разрешающие всему оставшемуся пройти к пользователю:

acl myusers proxy_auth REQUIRED


Списки портов, взяты из дефолта:

acl SSL_ports port 443 563

acl Safe_ports port 80
acl Safe_ports port 21 20
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777

И правила для разрешения соединений на них:
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost

http_access allow localnet
http_access allow localhost
http_reply_access allow all

Директория, где находиться ядро squid:

coredump_dir /var/spool/squid

Блокирование всего, что не подошло ни под одно из правил:
http_access deny all

Задание максимального объема обектов в кеше:

maximum_object_size 10 MB

Общий обем кеша:

cache_mem 45 MB

На этом кофигурация squid закончена, можно стартовать службу squid командой:


/etc/rc.d/init.d/squid start

Если осуществляется какое-либо изменение в файлах конфигурации или правил, то чтобы не перезагружать squid, используйте команду:

squid -k reconfigure

На этом статью заканчиваю, всем спасибо за внимание


Моя статья на Asplinux.net

Комментариев нет:

Отправить комментарий

Популярные сообщения