Установка Squid с HTTPS фильтрацией на Ubuntu Server 20.04

Этот мануал был написан в связи производственной необходимостью мониторить трафик (http и https) пользователей, а также распределения доступа по белым и черным спискам. За основу были взяты статьи: эта и вот эта , в которых использовалась технология peek-n-splice. В данных статьях конфигурация предполагает использование хоста со squid как шлюз, после доработки конфига, получился полноценный прокси-сервер с возможностью распределения прав доступа по группам из Active Directory. По завершению конфигурирования встал вопрос передачи настроек прокси-сервера для пользователей. В виду того, что в офисе часто ноутбуки берут домой — вся затея зашла в тупик. Изначально рассматривался вариант выдачи настроек прокси-сервера через DHCP, но он не самый лучший, т. к. офисы в разных подсетях, и разное оборудование, выходом из данной ситуации стал WPAD. Вкратце о данной технологии можно сказать так, клиентские машины на OS Windows ищут хост с именем wpad.example.ru (вплоть до доменов третьего уровня), чтобы запросить файл настроек для работы в сети. Исходя из такого принципа, нужно поднять веб-сервер, который просто бы отдавал файл wpad.pac Можно на самом хосте с прокси-сервером поднять веб-сервер (что и было сделано), а в DNS-сервере создать cname wpad на прокси-сервер. Прокси-сервер лучше использовать с возможностью сбора и просмотра статистики, благо выбор предостаточный. В виду некоторых консервативных соображений, было решено выбрать SARG. Он легкий в настройке, достаточно приемлемая статистика для офиса со штатом до 100 сотрудников.

1 Упрощенная схема работы WPAD

— Клиент на ОС Windows обращается к DNS-серверу с запросом на хост wpad.example.ru, и DNS-сервер имя соответствующую запись указывает куда обратиться. Далее, клиент обращается к wpad.example.ru с запросом на файл настроек. Получив его, начинает действовать соответственно инструкций в нём.

2 Чем хороша данная технология

— нет необходимости через GPO прописывать всем клиентам адрес-прокси
— Мобильность сотрудников (доступ к интернету вне офиса)
— Чтобы отключить использование данной технологии, достаточно отключить в «Свойствах браузера» — «Автоматическое получение настроек»

— «Автоматическое получение настроек» можно отключить любому пользователю, поэтому данную функцию лучше оставить включенной и запретить ее изменение через GPO

3 Squid Peek-n-splice — how to it works

Сотрудник пытается зайти на сайт с https через прокси. При установке зашифрованного соединие происходит «приветствие», которое передается в открытом виде, прокси-сервер его перехватывает, и исходя из конфигурации, squid разрешает или запрещает соединение. Т.е. перехватили на посмотреть «приветствие», разрешили или дропнули соединение.

4 Плюсы и минусы Peek-n-splice

— Это не MITM-атака, и не будет проблем с банк-клиентами
— Отображение доменных имен в статитстике сайтов запрашиваемых по https

— К сожалению, нельзя полностью просмотреть какая именно интернет-страница была открыта как при MITM-атаке
— Данная конфигурация хорошо себя показала только на CentOS (на Debian были проблемы, через некоторое время случался kernel-panic)

5 И так, теперь стоит отметить что дано

— Хост с Active Directory 2012R2 (метод авторизация пользователей — Kerberos)10.0.0.9
— Хост с CentOS 7 (x64) (он же веб-сервер для отдачи wpad.pac, он же прокси-сервер) 10.0.0.10
— Тестовый хост с ОС Windows для проверки работы 10.0.0.11

«Поехали» Гагарин Ю.А.

2 Конфигурирование операционной системы и установка Squid

Процесс установки CentOS описывать нет смысла. Так что будем иметь в виду, что у нас свежеустановленный CentOS 7 x64. Итак, чтобы Squid работал одинаково хорошо с http и https трафиком, необходимо следующее:

1 Squid должен быть собран с такими параметрами

Стоит отметить, что для установки кальмара нужны некоторые зависимости. К сожалению, у CentOS довольно скудные официальные репозитории, поэтому некоторые пакеты надо качать с неофициальных. Установка необходимых пакетов из оф.репозиториев:

# yum install -y libtool-ltdl perl-DBI perl-Digest-MD5 cyrus-sasl-gssapi krb5-workstation

3 Ручная установка Squid и дополнительных пакетов

# rmp -Uvh squid-3.5.8-4.el7.centos.x86_64.rpm libecap-1.0.0-3.el7.centos.x86_64.rpm squid-helpers-3.5.8-4.el7.centos.x86_64.rpm perl-Crypt-OpenSSL-X509-1.803-4.el7.x86_64.rpm

Если что-то не так, в терминале отобразится чего не хватает.

4 Для корректной работы squid с применением peek-n-splice, необходимо сгенерировать сертификат

# cd /etc/squid
# openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem

5 Установка прав доступа для каталога swap

# chown squid:squid /var/spool/squid

6 конфигурационный файл /etc/squid/squid. conf

acl localnet src 10.0.0.0/24
acl localnet src 192.168.0.0/24

acl my_full external inet_full
acl my_medium external inet_medium
acl my_low external inet_low
acl auth proxy_auth REQUIRED

# помимо дефолтного 443, для себра бизнес онлайн нуже доп. порт 9443
acl SSL_ports port 443 9443
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 CONNECT method CONNECT

# access rule

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access deny !auth

#http_access allow my_low white_list
#http_access deny my_low
#http_access deny my_medium black_list
#http_access allow my_medium
#http_access allow my_full

#http_access allow my_full
http_access deny my_medium black_list
http_access allow my_medium
http_access allow my_low white_list
http_access deny my_low all
http_access allow my_full
# Разрешаем локалхост
http_access allow localhost

# Запрещаем все остальное
http_access deny all

#прозрачный порт указывается опцией intercept
http_port 10.0.0.10:3128 intercept options=NO_SSLv3:NO_SSLv2

#Непрозрачный порт, через который происходит взаимодействие клиентских хостов с прокси-сервером

http_port 10.0.0.10:3130 options=NO_SSLv3:NO_SSLv2

#HTTPS порт
https_port 10.0.0.10: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

sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB

cache_dir aufs /var/spool/squid 20000 49 256
maximum_object_size 61440 KB
minimum_object_size 3 KB

Читать также:  Перенос сертификатов КриптоПРО на другой компьютер, за минуту

#httpd_suppress_version_string on
#visible_hostname PROXYSERVER

cache_swap_low 90
cache_swap_high 95
maximum_object_size_in_memory 512 KB
memory_replacement_policy lru
logfile_rotate 4

7 Предварительно необходимо привести файл /etc/hosts к такому содержанию

127.0.0.1 localohost
10.0.0.10 sq.example.ru sq

8 Выключаем selinux

В файле /etc/selinux/config устанавливаем значение:

9 генерация swap

# squid -z

10 Включение демона squid, проверка конфигурационного файла

# systemctl enable squid
# squid -k parse

Варнингов и эрроров не должно быть. Если же что-то есть — необходимо проверить настройки.

3 Интеграция с контроллером домена Active Directory 2012R2

Конфигурационный файл /etc/krb5.conf необходимо привести к следующему виду:

; for Windows 2008 with AES
default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

1 Создание DNS-записи

Генерация krb5.keytab. В командной строке на контроллере домена с правами администратора необходимо выполнить данную команду:

Сам файлик krb5.keytab переместить (Можно при помощи WinSCP) на sq.example.ru в каталог /etc.

4 Рекомендуемые права на файл krb5. keytab

После перемещения krb5.keytab, рекомендуется понизить права доступа к файлу

# chown squid:squid /etc/krb5.keytab && chmod 644 /etc/krb5.keytab

5 Группы доступа AD

Проверка авторизации в Active Directory при помощи файла /etc/krb5.keytab

Вывод команды должен быть примерно такой:

А klist должен отобразить следующее:

4 WPAD

# yum install -y httpd

После установки включаем в автозагрузку:

# systemctl enable httpd

# systemctl start httpd

Если попробовать открыть в браузере доменное имя sq.example.ru, должна открыться тестовая страница apache2.

Далее необходимо создать /var/www/html/wpad.pac файл со следующим содержанием:

2 Описание файла wpad. pac

По дефолту в каталоге /var/www/html/wpad.pac файл отдается всем без дополнительных настроек apache2, а это как раз необходимо для корректного взаимодействия с клиентскими машинами на ОС Windows.

Обозначают, что обращения к хостам в подсетях 192.168.0.0/24, 10.0.0.0/24 и 127.0.0.0/8 (последнее нужно для корректной работы сервисов при обращении к localhost) передаются напрямую, а также напрямую происходит соединение с домеными хостами .example.ru:

Обозначают, что при обращении к доменным именам .inet-example.ru происходит напрямую

Если запрашиваемый ресурс не попадает под вышеперечисленные условия, выполняется следующее:

3 Создание CNAME

На DNS-сервере Active Directory необходимо создать cname wpad (FQDN wpad.example.ru) на sq.example.ru.

5 Статистика

Если не был установлен gcc ранее, сейчас самое время:

# yum install -y gcc gd gd-devel make wget

# wget http://liquidtelecom.dl.sourceforge.net/project/sarg/sarg/sarg-2.3.10/sarg-2.3.10.tar.gz
# tar -xvzf sarg-2.3.10.tar.gz
# cd sarg-2.3.10
# ./configure
# make

В файле po/Makefile.in.in указана версия gettext как 0.18, чтобы не было ошибки при make install, необходимо изменить на 0.19:

# make install

2 Конфигурирование SARG

Стандартный файл конфигурации /usr/local/etc/sarg.conf лучше забекапить:

# mv /usr/local/etc/sarg.conf /usr/local/etc/sarg.conf.default

Теперь создаем файл sarg.conf со следующим содержанием:

3 Расписание генерации отчетов при помощи cron

# crontab -e

55 23 * * * /usr/local/bin/sarg -xd day-0

Данная строчка указывает, что отчеты будут генерироваться каждый день и за текущий день в 23:55

4 Конфигурация web-сервера

Alias /reports /var/www/html/squid-reports/

5 Авторизация на сайте со статистикой

# systemctl restart httpd

6 Групповые политики

Здесь все неоднозначно и может зависит, от каких-то особенностей. В текущей задаче было разумным решением исключить возможность установки прокси-сервера пользователя, или же отключения «Автоматического определения параметров».

1 Редактирование GPO

Для запрета ввода прокси-сервера или изменения настроек по автоматическому определению параметров, можно воспользоваться групповой политикой. Создаем и связываем групповую политику с OU например, office.

Редактируем групповую политику:

В данном каталоге найти параметры и перевести в статус «Включено»:

«Запретить изменение параметров прокси»
«Отключить изменение параметров автоматической»

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

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

Итак, для начала немного теории. Как мы все знаем, Tor — это не HTTP-прокси, его нельзя сделать прямым peer для нижележащего Squid’а. Он предоставляет SOCKS-проксирование (конечно же, не только, но нам нужно именно это). Чтобы нам поженить Tor со Squid, нужно что-то, что могло бы играть роль проводника от Tor к Squid и обратно. И конечно же, дамы и господа, это Privoxy. Как раз таки он способен быть прямым peer, и отправлять все далее в Tor.
Было, как я уже говорил, прочтено куча статей, но ни одна не подходила мне. Попалась вот эта статья, но и она мне не совсем подходила, так как мне не нужен bump. Вообще, все имеющиеся статьи, практически все, подразумевают либо бамп, либо только http, а в моем случае нужно и HTTPS, и splice, и прозрачность.
Я уже ранее писал о том, как сделать прозрачный Squid с проксированием HTTPS без подмены сертификатов. И конечно же, я попробовал реализовать идею на нем. Но меня ждало разочарование. HTTP запросы прекрасно уходили в TOR, а вот HTTPS нет. Проблема не очень-то и известная, и я узнал у одного из разработчиков, что это недостаток старых версий Squid. Но в ходе экспериментов было найдено решение — Squid 3.5.27, в котором исправлен данный баг + красивые доменные имена в логах (https), вместо ip адресов. Но и тут меня ждали несколько разочарований, о которых речь пойдет ниже. Но всё, как говорится, допиливается напильником.
Итак, исходные данные:

  • Debian Stretch (9) x86 (в х64 не пробовал)
  • Сорцы Squid 3.5.23 из репозитория
  • Свеженькие сорцы Squid с оф.сайта
  • OpenSSL
  • Libecap3
  • Tor
  • Privoxy
  • Прямые руки и много кофе с печеньками

apt-get install fakeroot build-essential devscripts
apt-get build-dep squid3
apt-get build-dep libecap2
apt-get install libssl1.0-dev
apt-get install libgnutls28-dev

Очень важно ставить именно libssl1.0-dev, а не другую версию, иначе Squid будет либо лагать, либо не соберется вовсе из-за непонятных ошибок

Читать также:  Силовой кабель с медными жилами и ПВХ-изоляцией показан на рисунке

Далее на время добавим в sources.list дистрибутив Buster:

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

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

Скачаем из Buster нужные исходники для сборки libecap3:

apt-get source libecap3/buster

Далее соберем libecap:

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

Удалим старье (если оно вдруг есть), и установим новье:

apt-get purge libecap2
dpkg -i libecap_1.0.1-3.2_i386.deb
libecap3-dev_1.0.1-3.2_i386.deb

apt-get source squid3

Качаем именно этот архив с исходниками Squid:

wget -O squid-3.5.27-2018.tar.gz http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.27-20180318-r1330042.tar.gz

Переходим в каталог исходников Squid и обновляем исходники до новоскаченных сорцов:

cd squid3-3.5.23/
uupdate -v 3.5.27-2018 ../squid-3.5.27-2018.tar.gz

Переходим в новоиспеченный каталог с обновленными исходниками:

Добавляем в debian/rules опции для компиляции:

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

Можете, кстати, вырубить ненужные вам опции, это ускорит компиляцию

Дальше нужно пропатчить исходники вот таким патчем:

Для чего он нужен? Я объясню. Когда я писал первую статью про peek and splice, я говорил что более новые версии не работают, и это было так, и вот как раз таки этот патч исправляет ту самую проблему, которая заключалась в том, что Squid выборочно рвет HTTPS соединения, с интересным сообщением в cache.log:

Дело в том, что на одном хосте что-то резолвится в один IP, на соседнем иногда в другой, на самом Squid в третий, т.к. существует кеш DNS и обновляется он не синхронно. Squid не находит соответствия ip-домен в своём кеше (потому что обновил свой кеш немного раньше или позже) и прерывает соединение. Вроде как, защита, но в наше время это считается нормальным (round-robin DNS). Разработчики перестраховались. И нам это не нужно совершенно! Тем, кто скажет, что данный патч, возможно, несет в себе угрозу безопасности, я отвечу, что по поводу этого патча я консультировался с Юрием Войновым, который имеет непосредственное отношение к команде разработчиков Squid. Никакой угрозы здесь нет!
Итак, файлик для патча создали, код кинули, надо пропатчить:

patch -p0 -i client_side_request.patch

Далее необходимо отменить применение одного патча при компиляции (иначе получите ошибку, что этот патч применить невозможно, так как он уже применен). Идем в debian/patches/series и закомментим там 0003-SQUID-2018_1.patch, поставив перед ним знак #:

Ну а дальше — компиляция и сборка пакетов!

apt-get install squid-langpack

и установим свеженькие пакеты

dpkg -i squid-common_3.5.27-2018-1_all.deb
dpkg -i squid_3.5.27-2018-1_i386.deb
dpkg -i squid3_3.5.27-2018-1_all.deb

Если apt матерится на зависимости, сделайте

apt-get -f install

Далее нужно выключить Squid из автозагрузки (по умолчанию используется init файл, Squid жалуется на недоступность PID файла)

systemctl disable squid

и создать systemd сервис в директории /etc/systemd/system (файл сервиса есть в исходниках, и полностью скопирован сюда)

systemctl enable squid3.service

Установим tor, privoxy

apt-get install tor privoxy

Конфиг Tor я лично вообще не трогал, а вот конфиг Privoxy можно привести к такому виду:

listen-address 127.0.0.1:8118
toggle 0
enable-remote-toggle 0
enable-remote-http-toggle 0
enable-edit-actions 0
forward-socks5t / 127.0.0.1:9050 .
max-client-connections 500

Почти готово. Перейдем в каталог /etc/squid, кое-что там изменим. Создадим pem файлик, необходимый для splice:

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

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

Список url_regex имеет примерно такой вид:

Более подробно про этот формат списка читайте в оф документации. Результат себя долго ждать не заставил — все заработало, как и было запланировано. И работает по сей день. Возможно, со статьей опоздал, но она, вероятно, пригодится в будущем)
Тему буду пополнять по возможности.
Готовые пакеты Squid и Libecap (.deb x86)
Огромное спасибо Юрию Войнову, который помогал в решении проблем с работой данной связки!

Всем привет. В поиске гугла  как-то резануло глаза упоминание бывшего моего сайта.

В общем, если для школ настраиваете фильтрацию, то полная печаль ждет впереди.У нас отказ от ЕСПД написан, но все-таки видимо додавят. Министру образования региона на проблемы школ глубоко фиолетово.Зам.министра с вебинара с Ростелекомом свалила в первые 4 минуты. Выступающих в трансляции было практически не слышно.Как выразился представитель технической поддержки Ростелекома — сеть построенная с одними роутерами — это сеть на костылях, и из-за костылей в школах они не могут завершить подключение школ к ЕСПД.

Тут кратенько проблемы ЕСПДя разделил проблемы по двум большим группам:1.Реализация.

ФильтрацияОтсутствие управления фильтрамиЭто очень серьезная проблема, поскольку при обнаружении недопустимых ресурсов, нет возможности оперативно включить ограничение доступа. Так же и для обратной ситуации при ложной блокировке нет возможности разблокировать необходимый ресурс. К тому же количество профилей фильтрации очень мало — на данный момент всего два — административный (без всякой фильтрации) и фильтр с вскрытием трафика посредством MITM-атаки.Отсутствие просмотра статистических данныхНевозможно просмотреть данные по блокировкам, объему данных, скорости и т. д. И даже при предоставлении подобной возможности, данные будут некорректны из-за подключения локальной сети через NAT роутеров.Недоработки фильтра.Увы, но даже с вскрытием защищенного трафика MITM-атакой, все равно есть возможность получить доступ к закрытым сайтам и ресурсам. По конкретной реализации подсказывать я не буду, пусть работают соответствующие специалисты, но за долгое время пока администрировал собственную систему фильтрации на основе СПО (Linux, Squid, Dansguardian, OpenSSL) я уже насмотрелся на очень извращенные способы обхода фильтров.Mitm-atakaКак же все хотят залезть в защищенный трафик, но одно дело когда подобное делается на своем местном сервере с полностью отключенными журналами и с сервером стоящем в недоступном месте и другое дело — когда сервер где-то и непонятно с каким доступом и с кого потом спрашивать за уплывшие пароли.Нет возможности использовать DNS-фильтрацию на административных машинах. И прописать хотя бы ЯндексДНС на роутере не представляется возможным, так как доменные имена резолвятся на прокси, а роутер упорно твердит, что сервис DNS не доступен, так как не работает через прокси.Ширина канала.В фиксированных цифрах выглядит замечательно, а по факту в одном здании 100 компьютеров на 50 мбит/с, а в другом 4 компьютера на 50 мбит/с. Понятно, что с учетом фильтрации интернет будет гораздо быстрее в сети с 4 компьютерами.А в здании с  100 компьютерами превратится в улитку, поскольку встроенные средства QoS в роутер просто не работают в совокупности с ЕСПД, хотя до этого интернет стабильно работал на 30мбит/с.На коммерческом соединении школа может выбирать провайдера по качеству предоставления услуги, скорость по тарифу, дополнительные опции.  Не в обиду сказано, но Ростелеком хоть и крупный провайдер, но по качеству далеко не первый, к тому же поддержка превратилась в эшелонированную оборону голосовых ботов, через которую невозможно прорваться в разумное время, чтобы оставить заявку на ремонт.

Читать также:  Граждане России получат справки о коронавирусе. Это сделает их пригодными для поездок за границу

Итоги.Все вышесказанное  и вызвало наш отказ от подключения к ЕСПД.И только с отказом начались какие-то подвижки в сторону  признания проблем и недоработки ЕСПД.На моей памяти это уже не первый проект подключения школ по госпрограммам к сети Интернет, и все до этого оказались провальными. Причин провала было две — низкие скорости и неуправляемая фильтрация трафика, но даже там до такого (доступ только через прокси-сервер) не доходило. Тут точно также, невозможность выбрать скорость, опции подключения и неуправляемый фильтр настроенный с «синдромом вахтера».

И это вас ждет.Если у нас останется нормальный интернет, то я просто подключу SKYDNS на платной основе 16000р за 50 компьютеров и не буду ломать голову фильтрацией, сейчас они хорошо подтянули фильтрацию, в том числе и контекстную, вдобавок входят в реестр российского ПО.Сейчас же рассматриваю и готовлюсь к худшему развитию событий, т.е. внедрению ЕСПД, а прописывать прокси на каждой машине мне не упало, поэтому рассматриваю возможность шлюза на прозрачном прокси с указанным родительским и возможность использования программ типа proxifier или чего-нибудь самобытного.

Смотря на то, по каким ресурсам проверятся работоспособность ЕСПД, так и мелькает мысль, что у какой-то шишки танкист из WOT жену увел.В общем, дожили до железного занавеса, обходится конечно, дети сильно старались по обходу dansguardian, так что наработки есть.

А и качество фильтра ЕСПД говно, выдает и самострелы и много чего еще, так что прокуратуре можно и не напрягаться, а если сесть за административную машину, то там вообще шоколад — вся фильтрация отключена, а доступ только через прокси, Вопрос: «Почему бы не оставить доступ через шлюз в административной сети?» остается открытым.

Так что держитесь, хотя из несколько сотен школ в регионе только 11 написали отказ, т.е остальные сотни школ пошли как кролики на убой.

Установка Squid с HTTPS фильтрацией на Ubuntu Server 20.04

Хочу поделиться информацией по поднятию прозрачного HTTP и HTTPS прокси сервера Squid с фильтрацией сайтов и без подмены сертификатов на FreeBSD 13.0 RELEASE. На Хабре уже есть похожая статья по настройке прозрачного прокси сервера Squid с фильтрацией ресурсов и без подмены сертификатов на Linux. Решил актуализировать информацию на свежо установленной ОС FreeBSD 13.0 и поделиться с вами.

При использовании действий «peek-and-splice», сквид выдергивает имя ресурса с помощью SNI и клиент дальше работает с ресурсом. Т.е. не происходит подмена сертификата. Этот режим подходит для нашего прозрачного прокси.

Ставить Squid мы будем из портов, так как необходимо включить некоторые параметры в сборку, также для заворачивания трафика на порт прокси мы будем использовать пакетный фильтр PF.

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

portsnap fetch extract

Если порты уже установлены в системе (/usr/ports), то выполняем обновление:

portsnap fetch update

Ставим пакет libressl — форк openssl:

pkg install -y libressl
rehash

После установки выполняем подмену OpenSSL на LibreSSL:

mv /usr/bin/openssl /usr/bin/openssl.old
ln -s /usr/local/bin/openssl /usr/bin/openssl
openssl version

В файле /etc/make.conf определим параметры для сборки нашего сквида:

Переходим в директорию порта:

Выполняем установку порта:

make install clean BATCH=yes

Создадим сертификат для SSL-bump’инга:

cd /usr/local/etc/squid
/usr/local/bin/openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem

Инициализируем файл базы SSL:

/usr/local/libexec/squid/security_file_certgen -c -s /var/log/squid/ssl_db -M 4MB

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

Далее создадим файл со списком запрещенных сайтов:

vi /usr/local/etc/squid/blocked_urls.acl
.youtube.com
.instagram.com

Проверяем конфиг на наличие ошибок:

Пробуем запустить прокси сервер:

Проверяем статус запущенной службы:

Подгружаем пакетный фильтр PF как модуль ядра:

Включаем пакетный фильтр PF:

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

Проверяем и применяем правила:

pfctl -nvf /etc/pf.conf
pfctl -f /etc/pf.conf

Так как мы используем пакетный фильтр PF для заворачивания трафика на порт сквида, необходимо предоставить пользователю squid доступ на чтение /dev/pf, иначе получите ошибку в логе:

PfInterception PF open failed: (13) Permission denied.

Открываем /etc/devfs.conf  и добавляем в конец следующее:

Не забываем включить пересылку пакетов между интерфейсами:

Настраиваем автозапуск в файле /etc/rc.conf:

gateway_enable=»YES» # параметр sysctl net.inet.ip.forwarding=1
squid_enable=»YES» # запускать прокси сервер Squid
pf_enable=»YES» # запускать пакетный фильтр PF
pflog_enable=»YES» # возможность логирования трафика через интерфейс pflog

Иногда сквид может прерывать HTTPS соединения на некоторых ресурсах и в логах могут сыпаться ошибки вида:

Как решение можно использовать локальный кэширующий DNS резолвер, который будут использовать клиенты и сам сквид в том числе.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *