Давно написал несколько статей на AspLinux.net, думаю здесь их тоже следует опубликовать, также думаю следует их немного исправить дабы вернуть им актуальность. Итак статья:
squid-авторизация в AD с контролем доступа к сайтам
Настройки описанные в данной статье не претендуют на абсолютно верные. Данные настройки созданы после прочтения кучи факов и ман. Данная настройка работает на ASPLinux 11.2. Пакеты, используемые в данной конфигурации, не пересобирались, использовались пакеты, идущие на дистрибутиве. Использована сеть с адресным полем 10.12.0.0/255.255.255.0 В данной статье подразумевается что у вас уже должным образом настроены samba и winbind В данной конфигурации заблокирована почти вся графика для экономии трафика. Если данная функция не нужна, отключите соответствующие настройки в конфиге.
Рекомендую так же удалить стандартные HTML-файлы, отображающие ошибки, и сделать свои для наилучшего понимания пользователями.
Итак,
Рекомендую так же удалить стандартные 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
Комментариев нет:
Отправить комментарий