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

squid-logo

Сегодня в статье рассмотрим Установку и настройку прокси сервера 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

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

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

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

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

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

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

Также можете вступить в Телеграм канал, ВК или подписаться на Twitter. Ссылки в шапки страницы.
Заранее всем спасибо!!!

RSS

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

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

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

34 комментариев
новее
старее большинство голосов
Inline Feedbacks
Просмотреть все комментарии
Прокопий
Прокопий
07.12.2021 07:33

sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB ругается, что такого файла нет. Зато есть security_fake_certverify Если выполнять такую команду: sudo /usr/lib/squid/security_fake_certverify -c -s /var/lib/squid/ssl_db -M 4MB То получаю ошибку: Can’t locate Crypt/OpenSSL/X509.pm in @INC (you may need to install the Crypt::OpenSSL::X509 module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.30.0 /usr/local/share/perl/5.30.0 /usr/lib/x86_64-linux-gnu/perl5/5.30 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.30… Подробнее »

Прокопий
Прокопий
Ответить на  Прокопий
07.12.2021 07:39

обзор директории ls -la /usr/lib/squid/ выдаёт следующие файлы: total 904 drwxr-xr-x  2 root root 4096 дек 7 09:32 . drwxr-xr-x 113 root root 4096 дек 4 11:50 .. -rwxr-xr-x  1 root root 5611 окт 4 17:31 basic_db_auth -rwxr-xr-x  1 root root 14576 окт 4 17:31 basic_fake_auth -rwxr-xr-x  1 root root 14488 окт 4 17:31 basic_getpwnam_auth -rwxr-xr-x  1 root root 30888 окт 4 17:31 basic_ldap_auth… Подробнее »

Прокопий
Прокопий
Ответить на  Прокопий
07.12.2021 08:38

версия: lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description:  Ubuntu 20.04.3 LTS
Release:    20.04
Codename:    focal

Прокопий
Прокопий
Ответить на  oleg
07.12.2021 11:22

При выполнении команды:
sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB
Такая ошибка:
sudo: /usr/lib/squid/security_file_certgen: command not found

Прокопий
Прокопий
Ответить на  Прокопий
07.12.2021 13:30

Решил!
Проблема была в пробелах вместо табов в файле debian\rules, будьте внимательнее.
Теперь другая проблема.
После применения конфигурации: squid -k reconfigure
Выводится сообщение:
FATAL: failed to open /var/run/squid.pid: (2) No such file or directory exception location: File.cc(190) open

Права на директории /var/spool/squid/ и /var/log/squid/ выдавал, владельцем является текущий пользователь

Последний раз редактировалось 1 месяц назад by Прокопий
Прокопий
Прокопий
Ответить на  Прокопий
07.12.2021 14:07

Тоже решил.
Теперь другая проблема.
После применения конфигурации: squid -k reconfigure
Выводится сообщение:
2021/12/07 16:04:10| FATAL: No valid signing certificate configured for HTTPS_port [::]:3130
2021/12/07 16:04:10| Squid Cache (Version 4.10): Terminated abnormally.

Прокопий
Прокопий
Ответить на  oleg
08.12.2021 06:49

создал данный файл, теперь ошибка:
FATAL: failed to send signal 1 to Squid instance with PID 4295: (1) Operation not permitted
  exception location: main.cc(1739) sendSignal

Прокопий
Прокопий
Ответить на  oleg
08.12.2021 06:51

Без порта 3130 SQUID запускается и работает, но так как порт 443 не прослушивается, то от него нет толка

Прокопий
Прокопий
Ответить на  webmaster С.
08.12.2021 13:21

понял, попробую, возможно проблема из-за виртуальной машины

Прокопий
Прокопий
Ответить на  webmaster С.
10.12.2021 14:05

Разобрался.
У вас опечатка в описании пути кэша в файле /etc/squid/squid.conf, путь должен выглядеть так:
sslcrtd_program /usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB
теперь после перезагрузки службы squid ошибок нет. Но команда squid -k parse всё равно выдаёт ошибки.
Помогите пожалуйста разобраться, скрин ошибки прилагаю.

squid_parse.png
Прокопий
Прокопий
02.12.2021 15:54

Ещё важный момент при создании сертификата, чтобы у вас на сервере был актуальный часовой пояс, а лучше заранее установить службу NTP

Прокопий
Прокопий
02.12.2021 14:47

А есть вариант без подмены сертификата?

Прокопий
Прокопий
Ответить на  webmaster С.
02.12.2021 15:49

есть видео где это работает без подмены https://www.youtube.com/watch?v=DmJ2fQLKWiU , но скорее всего такое прокатывало только со старыми версиями squid-а..

Евгений
Евгений
03.11.2021 22:12

Здравствуйте. Не могу найти новый конфигурационный файл?

Алексей
Алексей
07.10.2021 15:48

Здравствуйте.
Сделал по вашей инструкции настройку. Выводит сообщение:
FATAL: failed to open /var/run/squid.pid: (2) No such file or directory exception location: File.cc(190) open

Алексей
Алексей
Ответить на  Алексей
12.10.2021 16:02

Здравствуйте.
С файлом разобрался. Теперь другая ошибка.
После применения конфигурации: squid -k reconfigure
Выводится сообщение: unrecognized: options=NO_TLSv1,NO_SSLv3,SINGLE_DH_USE,SINGLE_ECDH_USE

Роман
Роман
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
Ответить на  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

Александр
Александр
Ответить на  webmaster С.
23.11.2021 12:09

Действительно в файле squid.conf путь отличался:

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

при запуске команды: service sqiud status
появлялась ошибка: FATAL: /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB helpers are crashing too rapidly, need help!

после правки пути, проблема ушла

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов cookie) с использованием трекеров "Google Analytics" и "Yandex.Metrics". Порядок обработки Ваших персональных данных, а также реализуемые требования к их защите, содержатся в Политике конфиденциальности.
Принять