Описание
В данной статье будет описан способ настройки прокси-сервера Squid.
Для авторизации пользователей будет использоваться Kerberos.
Для фильтрации по доменным группам будет использоваться SquidGuard.
Для мониторинга будет использован Lightsquid, sqstat и внутренние системы мониторинга pfSense.Также будет решена частая проблема, связанная с внедрением технологии единого входа (SSO), а именно приложения, пытающиеся ходить в интернет под учеткой компасвоей системной учеткой.
«прозрачный» squid с разграничением доступа

Как готовить кальмара, думаю что не я один сталкивался с задачей настройки Squid’а для разграничения доступа сотрудникам предприятия, но при этом он должен быть «прозрачным». Другими словами конфигурация показанная далее удовлетворяет трём условиям:
Хотелось бы уточнить по последнему пункту, так как шлюз «прозрачный», то использовать доменную авторизацию пользователей мы не можем, по данной причине выбрано разграничение именно по ip-адресам.
В качестве базовой конфигурации использовались материалы из статьи «Прозрачный» Squid с фильтрацией HTTPS ресурсов без подмены сертификатов (x86). Так как установка и настройка компонентов в данной статье описаны достаточно подробно, я пропущу данную информацию.
Программное обеспечение использованное мной для тестирование конфигурации:
Итак, файл
/etc/squid/squid.conf:
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 901 # SWAT
acl CONNECT method CONNECT
#Добавление в acl трёх списков: запрещенные, разрешенные и группа расширенного доступа
acl denied_urls url_regex "/etc/squid/denied_urls"
acl allowed_urls url_regex "/etc/squid/allowed_urls"
acl extended_access_group src "/etc/squid/extended_access_group"
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
#Ключевая строчка из-за которой долго ломали голову, так как без нее запрос сертификатов к сайтам
# на https не осуществляется.
#Разрешаем осуществлять коннект к ресурсу, если https
http_access allow localnet CONNECT
#Запрещаем всем доступ на запрещенные сайты
http_access deny denied_urls
#Этим правилом разрешаем всем кто не в группе расширенного доступа ходить только на
#разрешенные сайты
http_access deny !extended_access_group !allowed_urls
http_access allow localnet
http_access allow localhost
http_access deny all
#Обязательно один из портов должен быть в таком виде и являться заглушкой
http_port 3130
http_port 3128 intercept
https_port 3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidCA.pem
always_direct allow all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
#Правила доступа для ssl
acl allowed_urls_ssl ssl::server_name_regex "/etc/squid/allowed_urls"
acl denied_urls_ssl ssl::server_name_regex "/etc/squid/denied_urls"
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump terminate denied_urls_ssl
ssl_bump splice extended_access_group
ssl_bump terminate !allowed_urls_ssl
ssl_bump splice all
sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB
#cache_dir ufs /var/cache/squid 100 16 256
coredump_dir /var/cache/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|?) 0 0% 0
refresh_pattern . 0 20% 4320
Перед запуском Squid’а не забываем создать три файла в
/etc/squid/
.
denied_urls
и
allowed_urls
вида:
geektimes.ru
habrahabr.ru
toster.ru
windowsupdate.microsoft.com
И
extended_access_group
вида:
192.168.1.5 #Иванов И.И.
192.168.1.87 #Петров П.П.
192.168.1.108 #Сидоров С.С.
При обращении по http на запрещенный сайт выдаст стандартную заглушку Squid’а, а по https — «ERR_SSL_PROTOCOL_ERROR».
Спасибо за прочтение статьи.
Завершение
pfSense очень мощный инструмент, который может очень много всего — и проксирование трафика, и контроль над доступом пользователей в интернет это лишь крупица всего функционала, тем не менее на предприятии с 500 машинами это решило проблему и позволило сэкономить на покупке прокси.
Надеюсь данная статья поможет кому-нибудь решить достаточно актуальную для средних и крупных предприятий задачу.
Настройка squidguard
Переходим в СервисыSquidGuard Proxy Filter.
В LDAP Options вводим данные нашей учетной записи, используемой для керберос аутентификации, но в следующем формате:
CN=pfsense,OU=service-accounts,DC=domain,DC=local
Если есть пробелы иили не латинские символы всю эту запись стоит заключить в одинарные или двойные кавычки:
'CN=sg,OU=service-accounts,DC=domain,DC=local'
"CN=sg,OU=service-accounts,DC=domain,DC=local"
Далее обязательно ставим эти галочки:
Чтобы отрезать ненужные DOMAINpfsenseDOMAIN.LOCALк которым вся система очень чувствительна.
Теперь переходим в Group Acl и привязываем наши доменные группы доступа, я использую простые наименования в духе group_0, group_1 и тд до 3, где 3 — доступ только в белый список, а 0 — можно всё.
Привязываются группы следующим образом:
Настройка аутентификации squid и списка доступа без аутентификации
Успешно настроив керберос прикрутим его к нашему Squid`у.
Для этого перейдите в СервисыSquid Proxy Server и в основных настройках опуститесь в самый низ, там найдем кнопочку «Расширенные настройки».
В поле Custom Options (Before Auth) введем:
Подготовка к установке squid
За основу будет взят pfSense,
Внутри которого мы организуем аутентификацию на сам межсетевой экран с помощью доменных учеток. Инструкция.
Очень важно!
Перед началом установки Squid необходимо настроить DNS сервера в pfsense, сделать для него запись A и PTR записи на нашем DNS сервере и настроить NTP так, чтобы время не отличалось от времени на контроллере домена.
А в вашей сети предоставить возможность WAN интерфейсу pfSense ходить в интернет, а пользователям в локальной сети подключаться на LAN интерфейс, в том числе по порту 7445 и 3128 (в моем случае 8080).
Всё готово? С доменом связь по LDAP для авторизации на pfSense установлена и время синхронизировано? Отлично. Пора приступать к основному процессу.
Установка и предварительная настройка
Squid, SquidGuard и LightSquid установим из менеджера пакетов pfSense в разделе «Система/Менеджер пакетов».
После успешной установки переходим в «Сервисы/Squid Proxy server/» и в первую очередь во вкладке Local Cache настраиваем кеширование, я выставил все по 0, т.к. не вижу особого смысла кешировать сайты, с этим и браузеры прекрасно справляются. После настройки нажимаем клавишу «Сохранить» внизу экрана и это даст нам возможность производить основные настройки прокси.
Основные настройки приводим к следующему виду:
Порт по умолчанию 3128, но я предпочитаю использовать 8080.
Выбранные параметры во вкладке Proxy Interface определяют какие интерфейсы будет слушать наш прокси сервер. Так как этот межсетевой экран построен таким образом, что в интернет он смотрит WAN интерфейсом, даже при том что LAN и WAN могут быть в одной локальной подсети, рекомендую для прокси использовать именно LAN.
Лупбек нужен для работы sqstat.