Ни для кого не секрет, что тема интернет-фильтрации весьма актуальна в крупных офисах.
Существует множество программных и аппаратных решений, справляющихся с этой задачей.
Но в настоящее время все те сайты, которые мы вырезали ранее, работают по протоколу 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, так как некоторые пункты опущены, и самое главное сказано только самое главное, потому что мне лень все разжевывать.
Для начала подготовимся к сборке пакетов:
Не забудьте зайти в папку, в которой будете собирать исходники, чтобы не засорить Home. Далее скачайте, скомпилируйте и установите Libressl: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
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
-
Понимание Возможностей Flash
19 Oct, 24 -
Хабрафорум
19 Oct, 24 -
Переход На Dvcs, Mercurial
19 Oct, 24