«Прозрачный» HTTPS прокси для обхода блокировок Роскомнадзора / Хабр

«Прозрачный» HTTPS прокси для обхода блокировок Роскомнадзора / Хабр Сертификаты

Описание

В данной статье будет описан способ настройки прокси-сервера Squid.

Для авторизации пользователей будет использоваться Kerberos.


Для фильтрации по доменным группам будет использоваться SquidGuard.

Для мониторинга будет использован Lightsquid, sqstat и внутренние системы мониторинга pfSense.Также будет решена частая проблема, связанная с внедрением технологии единого входа (SSO), а именно приложения, пытающиеся ходить в интернет под учеткой компасвоей системной учеткой.

«прозрачный» squid с разграничением доступа

«Прозрачный» HTTPS прокси для обхода блокировок Роскомнадзора / Хабр

Как готовить кальмара, думаю что не я один сталкивался с задачей настройки 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,

Внутри которого мы организуем аутентификацию на сам межсетевой экран с помощью доменных учеток. Инструкция.

Про сертификаты:  Keystore в Java | dev64

Очень важно!

Перед началом установки 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.

Оцените статью
Мой сертификат
Добавить комментарий