Настройка squid

Материал из Записки на полях
Перейти к навигации Перейти к поиску

Настройки Squid

Используется squid версии 3.1.8. Прокси сервер Squid работает на порту 3128. Основной конфигурационный файл сервера squid: /etc/squid/squid.conf

Для работы сервера в прозрачном режиме использована опция

http_port 3128 transparent

Список коммутаторов, на которых должен регистрироваться сервер, указан с помощью опций

wccp2_router 10.10.0.3                                                                                                                                                             
wccp2_router 10.10.0.4                                                                                                                                                             

Специфика работы проксирования в прозрачном режиме - отсутствие возможности авторизации пользователей, а возможность вести учёт и ограничениия только по ip-адресу клиента. Т.к. в локальной сети используется DHCP - был использован протокол WMI, который позволил узнавать имя залогиненого пользователя у клиентов с Windows-машинами, включенными в домен. Для остальных клиентов по-прежнему используется ip-адрес.

Пакет с поддержкой wmi взят с сайта http://pkgs.org/download/wmi Для использования wmi-клиента прокси-сервером был написан скрипт /usr/lib64/squid/get_username.sh

#!/bin/bash

while read SRC; do
 if [ "$SRC" != "" ]; then
  wmic -U "company/smsop%secret123" //$SRC "SELECT username FROM Win32_ComputerSystem" 2>&1 | tail -n1 | awk -F'|' '{print "OK user="$2}' | sed 's/company\\//gi' | sed "s/user=$/user=$SRC/"
 fi
done

Для авторизации на клиентских компьютерах данным скриптом используется системный доменный пользователь company\smsop.

Для подключения данного скрипта в конфигурационном файле прокси-сервера прописаны следующие опции:

external_acl_type domainusers children=100 %SRC /usr/lib64/squid/get_username.sh
acl authenticated_user external domainusers

В системе предусмотрена возможность полного блокирования HTTP-доступа для определённых групп пользователей, а также "белый список" для пользователей, которым будет разрешён полный доступ по HTTP, если в будущем будет принято решение о фильтрации запросов. Для этого в Active Directory созданы 2 группы:

  • ILock - для блокированных пользователей (в частности, из соображений безопасности туда добавлены все учётные записи администраторов домена)
  • IunLock - для привелегированных пользователей

Для реализации данной концепции используется модуль squid_ldap_group, для чего в конфигурационом файле прокси-сервера прописаны следующие строчки:

external_acl_type ldap_users children=100 %EXT_USER /usr/lib64/squid/squid_ldap_group -R -b "dc=company,dc=com" -f "(&(sAMAccountName=%u)(memberOf=cn=%g,OU=System,OU=Functional Gr
acl internet_resricted external ldap_users ILock
acl internet_unlimited external ldap_users IunLock

Для указания списка блокируемых сайтов создан access-list blocked_site:

acl blocked_site dstdomain .combats.com

Таким образом на данный момент настройки доступа по протоколу HTTP выглядят следующим образом:

http_access deny blocked_site !internet_unlimited
http_access allow authenticated_user !internet_resricted
http_access deny all

Для ограничения полосы пропускания HTTP-трафика значением 50 Мбит/с указаны следующие строки:

delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 6400000/6400000

Для решения проблемы с некорректными HTTP запросами, посылаемыми некоторым ПО включена опция:

ignore_expect_100 on

Кэширование трафика отключено. На данный момент кэшируется только трафик с сайта dicto.org.ru, т.к. данное ПО генерирует очень большое количество запросов:

acl cached_site dstdomain .dicto.org.ru
offline_mode on
cache allow cached_site
cache deny all

Лог-файлы прокси-сервера расположены в директории /var/log/squid

Настройки мониторинга

Для мониторинга сервера Squid используется шаблон Template_Squid. Для сбора данных на сервере vottv-tproxy используется утилита squidclient, для чего в файл /etc/zabbix/zabbix_agentd.conf добавлены следующие строки:

UserParameter=squid.http_requests,squidclient mgr:info|grep 'Number of HTTP requests received:'|cut -d':' -f2| tr -d ' \t'
UserParameter=squid.clients,squidclient mgr:info|grep 'Number of clients accessing cache:'|cut -d':' -f2| tr -d ' \t'
UserParameter=squid.icp_received,squidclient mgr:info|grep 'Number of ICP messages received:'|cut -d':' -f2| tr -d ' \t'
UserParameter=squid.icp_sent,squidclient mgr:info|grep 'Number of ICP messages sent:'|cut -d':' -f2| tr -d ' \t'
UserParameter=squid.icp_queued,squidclient mgr:info|grep 'Number of queued ICP replies:'|cut -d':' -f2| tr -d ' \t'
UserParameter=squid.htcp_received,squidclient mgr:info|grep 'Number of HTCP messages received:'|cut -d':' -f2| tr -d ' \t'
UserParameter=squid.htcp_sent,squidclient mgr:info|grep 'Number of HTCP messages sent:'|cut -d':' -f2| tr -d ' \t'
UserParameter=squid.req_fail_ratio,squidclient mgr:info|grep 'Request failure ratio:'|cut -d':' -f2| tr -d ' \t'
UserParameter=squid.avg_http_req_per_min,squidclient mgr:info|grep 'Average HTTP requests per minute since start:'|cut -d':' -f2| tr -d ' \t'
UserParameter=squid.avg_icp_msg_per_min,squidclient mgr:info|grep 'Average ICP messages per minute since start:'|cut -d':' -f2| tr -d ' \t'
UserParameter=squid.request_hit_ratio,squidclient mgr:info|grep 'Request Hit Ratios:'|cut -d':' -f3|cut -d',' -f1|tr -d ' %'
UserParameter=squid.byte_hit_ratio,squidclient mgr:info|grep 'Byte Hit Ratios:'|cut -d':' -f3|cut -d',' -f1|tr -d ' %'
UserParameter=squid.request_mem_hit_ratio,squidclient mgr:info|grep 'Request Memory Hit Ratios:'|cut -d':' -f3|cut -d',' -f1|tr -d ' %'
UserParameter=squid.request_disk_hit_ratio,squidclient mgr:info|grep 'Request Disk Hit Ratios:'|cut -d':' -f3|cut -d',' -f1|tr -d ' %'
UserParameter=squid.servicetime_httpreq,squidclient mgr:info|grep 'HTTP Requests (All):'|cut -d':' -f2|tr -s ' '|awk '{print $1}'
UserParameter=squid.process_mem,squidclient mgr:info|grep 'Process Data Segment Size via sbrk'|cut -d':' -f2|awk '{print $1}'
UserParameter=squid.cpu_usage,squidclient mgr:info|grep 'CPU Usage:'|cut -d':' -f2|tr -d '%'|tr -d ' \t'
UserParameter=squid.cache_size_disk,squidclient mgr:info|grep 'Storage Swap size:'|cut -d':' -f2|awk '{print $1}'
UserParameter=squid.cache_size_mem,squidclient mgr:info|grep 'Storage Mem size:'|cut -d':' -f2|awk '{print $1}'
UserParameter=squid.mean_obj_size,squidclient mgr:info|grep 'Mean Object Size:'|cut -d':' -f2|awk '{print $1}'
UserParameter=squid.filedescr_max,squidclient mgr:info|grep 'Maximum number of file descriptors:'|cut -d':' -f2|awk '{print $1}'
UserParameter=squid.filedescr_avail,squidclient mgr:info|grep 'Available number of file descriptors:'|cut -d':' -f2|awk '{print $1}'

Шаблон Zabbix для мониторинга серверов squid: Файл:Zbx Template Squid export.xml