«Прозрачный» Squid С Фильтрацией Ресурсов Https Без Подмены Сертификата (X86)

Ни для кого не секрет, что тема интернет-фильтрации весьма актуальна в крупных офисах.

Существует множество программных и аппаратных решений, справляющихся с этой задачей.

Но в настоящее время все те сайты, которые мы вырезали ранее, работают по протоколу HTTPS, т.е.

порту 443. Как известно, этот протокол нельзя мониторить, прослушивать и т. д. И любой кэширующий фильтрующий прокси-сервер, редиректор и т. д. фильтрует только HTTP, то есть порт 80. Как вырезать ВКонтакте, Одноклассники, iphide.info и многие другие подобные сайты? Как заблокировать доступ к личной почте в организации, если ее использование запрещено правилами организации? Да, фильтровать по IP-адресам можно, но они часто меняются, и многие ресурсы имеют несколько IP-адресов.

Блокировать их на уровне фаервола - это как-то совсем не православное решение, да и не совсем удобное.

И вот совсем недавно друг рассказал мне, что настраивает у себя в офисе кеширующий прокси с HTTPS-фильтрацией, и я заинтересовался.

И он поднял Кальмар 3.5.8 .

Как оказалось, была переработана организация перехвата зашифрованных HTTPS-сессий (ssl_bump), вместо режимов перехвата («режимов») были введены действия («actions»), которые также можно использовать в ACL. Режим «сначала сервер», при котором сначала подключается к целевому серверу, а затем создается безопасное соединение между клиентом и прокси-сервером, теперь доступен как действие «bump».

Режим «нет», создающий TCP-туннель без расшифровки трафика, теперь доступен как действие «сращивания».

Для обеспечения обратной совместимости добавлено действие «peek-and-splice», в котором решение о типе соединения, которое будет создано в первую очередь (клиент-прокси или прокси-сервер), принимается на основе сообщений SSL hello. Добавлены действия «просмотреть» и «взглянуть» для получения сертификата клиента или сервера, сохранив при этом возможность дальнейшего использования режимов «сращивания» и «bump» для соединений.

Добавлено действие «завершить» для закрытия соединений с клиентом или сервером.

Это именно то, что нам нужно SSL BUMP, PEEK-and-SPLICE и Terminate. В целом схема работы на самом деле довольно проста.

Squid подключается к HTTPS-ресурсу, получает его сертификат и может «посмотреть» некоторые данные о ресурсе, в частности имя сервера, а это именно то, что нам нужно для блокировки! Во всех мануалах, которые есть в Интернете, то и дело описывается атака Man in the middle (MITM) с подменой сертификатов, при которой некоторые сайты и банковские клиенты принципиально не работают, а пользователи четко видят, что за ними следят. Мы с другом совместными усилиями добились способа фильтровать и отслеживать HTTPS без замены сертификатов, без MITM и прочего, и все это в прозрачном режиме без настройки браузеров! Впоследствии я столкнулся с некоторыми трудностями, в частности, Squid начал глючить при большой нагрузке.

Но проблема была решена.

Дело в том, что в Опенссл В библиотеке Libressl исправлены некоторые ошибки.

Поэтому необходимо сначала интегрироваться в систему Либрессль , затем после добавления патча в файл bio.cc в исходном коде Squid приступайте к компиляции последнего.

Идти! Оговорюсь, что я использую дистрибутив Debian Jessie x86, и в итоге я собрал версию Squid 3.5.9 (последнюю на данный момент версию), а статья рассчитана на более-менее опытного пользователя Linux, так как некоторые пункты опущены, и самое главное сказано только самое главное, потому что мне лень все разжевывать.

Для начала подготовимся к сборке пакетов:

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

apt-get install git fakeroot build-essential devscripts apt-cache policy squid3 apt-get build-dep squid3 apt-get build-dep libecap2 apt-get install libssl-dev libgnutls28-dev

Не забудьте зайти в папку, в которой будете собирать исходники, чтобы не засорить Home. Далее скачайте, скомпилируйте и установите Libressl:

wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.1.6.tar.gz tar -xzvf libressl-2.1.6.tar.gz cd libressl-2.1.6

Компилируем и устанавливаем, после чего перечитываем хеши библиотеки:

.

/configure make checkinstall --pkgname libressl --pkgversion 2.1.6 dpkg -i libressl_2.1.6-1_i386.deb ldconfig

Что ж, вам нужно настроить использование LibreSSL по умолчанию:

mv /usr/bin/openssl /usr/bin/openssl-1 update-alternatives --install /usr/bin/openssl openssl /usr/bin/openssl-1 10 update-alternatives --install /usr/bin/openssl openssl /usr/local/bin/openssl 50 update-alternatives --config openssl

Проверим, удалось ли установить Libressl:

openssl version LibreSSL 2.1.6

Случилось! После выполнения этих шагов вам необходимо отредактировать source.list, включив в него исходники из тестовой ветки (это необходимо, поскольку нам нужно скомпилировать новый libecap, который, в свою очередь, необходим для сборки Squid):

deb-src http://ftp.de.debian.org/debian/ testing main contrib non-free

Давайте обновим кеш пакетов:

apt-get update

Теперь скачаем необходимые исходники из Testing:

apt-get source squid3/testing apt-get source libecap3/testing

Далее давайте соберем libecap:

cd libecap-1.0.1/ dpkg-buildpackage -us -uc -nc -d

Удалим старую и установим новую:

apt-get purge libecap2 dpkg -i libecap3_1.0.1-2_i386.deb dpkg -i libecap3-dev_1.0.1-2_i386.deb

Загрузите последнюю, самую последнюю и работающую версию Squid:

wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.8.tar.gz

Обновим полученные ранее исходные коды Squid на новые, а затем будем работать в каталоге с вновь созданными исходными кодами:

cd squid3-3.5.7/ uupdate -v 3.5.8 .

/squid-3.5.8.tar.gz cd .

/squid3-3.5.8/

Чтобы все необходимые нам вкусности заработали, нам нужно скомпилировать Squid с необходимыми опциями, поэтому добавим в debian/rules следующие опции компиляции:

--enable-ssl --enable-ssl-crtd --with-openssl

Скачать патч для bio.cc, необходимый для корректной работы с Libressl, можно здесь.

bugs.squid-cache.org/attachment.cgiЭid=3216 и применить его

patch -p0 -i bug-4330-put_cipher_by_char-t1.patch

Теперь вы можете приступить к компиляции и сборке Squid. Но не так быстро! Все скомпилируется без проблем, по крайней мере на архитектуре x86, но в самом конце, на этапе сборки deb-пакетов, вам в консоли любезно скажут: «ой ой ой, я не могу понять какие зависимости нужны для libssl.so.32» (это версия библиотеки от Libressl).

Понятно, откуда Debian об этом знает. Мы обманем систему, указав опцию «не проверять зависимости» следующим образом:

export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info

Теперь приступим к компиляции и сборке:

dpkg-buildpackage -us -uc -nc

После сборки устанавливаем пакет с языками для Squid:

apt-get install squid-langpack

Далее установите новые пакеты:

dpkg -i squid-common_3.5.8-1_all.deb dpkg -i squid_3.5.8-1_i386.deb dpkg -i squid3_3.5.8-1_all.deb dpkg -i squidclient_3.5.8-1_i386.deb

Если система ругается на неудовлетворенные зависимости, давайте сделаем:

apt-get -f install

Почти готово.

Давайте перейдем в каталог /etc/squid и кое-что изменим там.

Давайте создадим пем файл, необходимый для SSL-бампинга:

openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem

И приведем squid.conf к следующему виду:

acl localnet src 192.168.1.0/24

Теги: #linux #Системное администрирование #Конфигурация Linux #squid

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.