Показаны сообщения с ярлыком asplinux. Показать все сообщения
Показаны сообщения с ярлыком asplinux. Показать все сообщения

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

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