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

Сегодня в статье рассмотрим Установку и настройку прокси сервера squid на операционной системе Ubuntu Server 20.04 LTS. Сразу предупреждаю, что данная инструкция справедлива только для Ubuntu 20.04. Если у вас более ранняя версия, то вам необходимо обновится до 20.04, вот инструкция как это сделать.

Squid (прокси-сервер) — промежуточный сервер (комплекс программ) в компьютерных сетях, выполняющий роль посредника между пользователем и целевым сервером (при этом о посредничестве могут как знать, так и не знать обе стороны), позволяющий клиентам как выполнять косвенные запросы (принимая и передавая их через прокси-сервер) к другим сетевым службам, так и получать ответы.

В настоящее время сайтов с поддержкой протокола http становится все меньше и меньше, а вот на протоколе https количество доменов непрерывно растет, причем гигантскими шагами. В связи с этим фильтрация squid`ом http трафика бессмыслена. Но в репозитории Ubuntu находится squid без поддержки SSL. До сих пор не понимаю почему не залить squid с поддержкой SSL, но до ладно, зато есть исходники из которых мы сами можем собрать пакет с поддержкой HTTPS. И так поехали:

Обновление системы

Первым делом обновим наш сервер:

sudo apt update && sudo apt dist-upgrade -y

Сборка squid из исходников.

Включим возможность использования исходников, для этого необходимо отредактировать файл /etc/apt/sources.list. Раскомментируем строки, которые начинаются на «deb-src»

sudo nano /etc/apt/sources.list

Посмотреть полный default source.list можно в данной статье.

После редактирования обновляемся еще раз:

sudo apt update

Далее установим необходимые для сборки пакеты:

sudo apt install openssl devscripts build-essential dpkg-dev libssl-dev libsasl2-modules-gssapi-mit

Чтобы не засорять систему, всю сборку я буду проводить из под новой директории. Для этого создадим её и перейдем в нашу директорию следующими командами:

mkdir /home/squid
cd /home/squid

Скачиваем все необходимое для SQUID:

sudo apt build-dep squid -y

Скачиваем сами исходники нашего прокси-сервера:

sudo apt source squid

В случае если появится предупреждение о прав, устанавливаем их на скачанный файл и повторяем предыдущее действие:

sudo chmod 777 squid_4.10-1ubuntu1.3.dsc
sudo apt source squid

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

cd squid-4.10/

Открываем файл rules на редактирование, в котором укажем что наш прокси будет собираться с поддержкой SSL (HTTPS):

sudo nano debian/rules

Для этого в разделе с устанавливаемыми модулями добавим сроки:

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

Обращаем внимание на символ «\» в конце строк, должен быть везде кроме последней, вот примерно так:

Начинаем собирать DEB пакет. Процесс очень долгий, поэтому наберитесь терпения.

sudo dpkg-buildpackage -d

После сборки, если все прошло удачно, идем к собранным пакетам, на уровень повыше

cd ..

И начинаем установку пакетов, установка завершится с ошибкой:

sudo dpkg -i *.deb

Следующей командой доставляем недостающие зависимости:

sudo apt install -f

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

sudo dpkg -i *.deb

Проверяем версию установленного SQUID и проверим наличие упоминаний SSL

squid -v | grep ssl

Настройка прокси-сервера Squid

Сделаем копию конфигурационного файла squid на всякий случай:

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.save

Очистим файл от дефолтной конфигурации

cp /dev/null /etc/squid/squid.conf

И поправим наш файл squid :

sudo nano /etc/squid/squid.conf
access_log /var/log/squid/access.log squid
acl blacklist url_regex -i "/etc/squid/blacklist"
acl whitelist url_regex -i "/etc/squid/whitelist"
acl localnet src 10.5.1.0/24            # RFC 1918 local private network (LAN1)
acl localnet src 10.1.1.0/24            # RFC 1918 local private network (LAN2)
acl manager proto cache_object
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 CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access allow whitelist
http_access deny blacklist
http_access deny manager
include /etc/squid/conf.d/*
http_access allow localnet
http_access allow localhost
http_access deny all
# Порт для HTTP трафика (если указываем вручную)
http_port 3128
# Прозрачный порт для HTTP трафика
http_port 3129 intercept
# Порт для HTTPS трафика (если указать intercept, то будет прозрачным)
https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB tls-cert=/etc/squid/proxyCA.pem tls-key=/etc/squid/proxyCA.pem cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS options=NO_TLSv1,NO_SSLv3,SINGLE_DH_USE,SINGLE_ECDH_USE tls-dh=prime256v1:/etc/squid/bump_dhparam.pem
sslproxy_cert_error allow all
always_direct allow all
ssl_bump server-first all
ssl_bump none all
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
# example pattern for deb packages
#refresh_pattern (\.deb|\.udeb)$   129600 100% 129600
refresh_pattern .               0       20%     4320

Создадим файлы черного и белого списков

sudo touch /etc/squid/blacklist
sudo touch /etc/squid/whitelist

Подмена сертификатов

Сгенерируем свой сертификат… лет так на 10 :)

proxyCA.pem — и сертификат и ключ в одном файле

cd /etc/squid/
sudo openssl req -new -newkey rsa:2048 -sha256 -days 3650 -nodes -x509 -extensions v3_ca -keyout proxyCA.pem  -out proxyCA.pem

Создадим сертификат для установки его на компьютеры пользователей (корневой)

sudo openssl x509 -in proxyCA.pem -outform DER -out squid.der

Скопируем squid.der на свой компьютер, это сертификат для установки его на клиентские компьютеры… Установим его либо руками, либо групповой политикой. Как это сделать будет описано далее.

Генерируем файл параметров

sudo openssl dhparam -outform PEM -out /etc/squid/bump_dhparam.pem 2048

Настроим права на использование файла SSL-сертификата и файла параметров

sudo chown proxy:proxy /etc/squid/bump_dhparam.pem
sudo chmod 400 /etc/squid/bump_dhparam.pem
sudo chown proxy:proxy /etc/squid/proxyCA.pem
sudo chmod 400 /etc/squid/proxyCA.pem

Выставляем права на /var/spool/squid/ и /var/log/squid/

sudo chown proxy:proxy -R /var/spool/squid
sudo chown proxy:proxy -R /var/log/squid/

Создаем каталог для базы данных сертификатов и инициализируем базу данных

sudo mkdir -p /var/lib/squid
sudo rm -rf /var/lib/squid/ssl_db
sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB
sudo chown -R proxy:proxy /var/lib/squid

Следующим шагом включаем ip_forwarding для разрешения проходящего трафика через сервер:

sudo echo 1 >> /proc/sys/net/ipv4/ip_forward

Применяем конфигурацию

squid -k reconfigure

Затем можно перезапускать Squid:

sudo systemctl restart squid

Осталось настроить редирект и браузер.

Настройка IPTABLES

Перенаправляем весь проходящий через узел трафик с целевыми портами http и https на squid:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130

Настройка сертификатов в браузере

firefox

Сейчас большинство сайтов используют технологию HSTS для предотвращения MiTM атак, поэтому если вы хотите настроить Squid для фильтрации трафика в своей организации, вам следует добавить сертификат squid.der сгенерированный на предыдущем шаге в браузер. Рассмотрим на примере Firefox. Откройте Настройки -> Защита и приватность -> Просмотр сертификатов -> Центры сертификации.

Затем нажмите кнопку Импортировать и выберите файл squid.der. Отметьте галочки, что следует доверять этому сертификату.

Yandex Browser

Откройте Настройки -> Системные -> Управление сертификатами -> Центры сертификации.

Затем нажмите кнопку Импорт и выберите файл squid.der. Отметьте галочки, что следует доверять этому сертификату.

Настройка сертификата в Windows 7

Щелкаем два раза на сертификате и в появившемся окне нажимаем Установить сертификат.

Выбираем пункт Поместить все сертификаты в следующее хранилище.

Далее выбираем Доверенные центры сертификации

На предупреждение отвечаем Да

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

Если есть вопросы, то пишем в комментариях.

Также можете помочь проекту, заранее всем СПАСИБО!!!

.

RSS

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

5 1 vote
Рейтинг статьи
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

9 комментариев
новее
старее большинство голосов
Inline Feedbacks
Просмотреть все комментарии
Роман
Роман
20.06.2021 19:15

В линуксе совсем новичок, а дали задание по прокси. Все по статье пошагово сделал, но вылезло это

sslproxy-2021-06-20-23-14-33.png
Дмитрий
Дмитрий
08.06.2021 10:59

Здравствуйте после перезапуска squid появляется предупреждение FATAL: No valid signing certificate configured for HTTP_port [::]:3130
А на клиентской машине появляется ошибка SSL_ERROR_RX_RECORD_TOO_LONG это как то связан? Выполнял все по инструкции…

Support Support
Support Support
Reply to  webmaster С.
10.06.2021 03:01

Спасибо, все работает

Олег
Олег
02.06.2021 13:59

Ошибка в конфиге:

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

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