How-To Squid dynamic SSL на Ubuntu Server 20.04
Ubuntu 20.04
Squid Cache: Version 4.10
Теория
https://wiki.squid-cache.org/Features/DynamicSslCert
Для контроля HTTPS трафика, Squid'y нужно перехватывать SSL соединение.
Squid будет генерировать самоподписанный сертификат на лету, для посещаемого сайта и подставлять его для клиента.
Сборка Squid
Сборка Squid с поддержкой dynamic ssl.
«Из коробки» этой поддержки нету, поэтому можно увидеть ошибку:
FATAL: Bungled /etc/squid/squid.conf line 30: http_port 3128 ssl-bump
Подключение репозитория с исходными кодами
/etc/apt/sources.list
deb-src http://ru.archive.ubuntu.com/ubuntu/ focal main restricted
Необходимые утилиты
apt-get update apt-get install devscripts build-essential fakeroot libssl-dev
Установка исходных кодов
mkdir /usr/src/squid chown _apt:root /usr/src/squid cd /usr/src/squid apt-get source squid # Пакеты, необходимые для компиляции apt-get build-dep squid
Добавить поддержку SSL Bump и генерации сертификатов.
/usr/src/squid/squid-4.10/debian/rules
... --with-default-user=proxy \ - --with-gnutls + --with-gnutls \ + --enable-ssl \ + --enable-ssl-crtd \ + --with-openssl ...
Сборка пакетов
cd /usr/src/squid/squid-4.10 debuild -d
Now signing changes and any dsc files... signfile dsc squid_4.10-1ubuntu1.dsc Andreas Hasenack <andreas@canonical.com> gpg: directory '/root/.gnupg' created gpg: keybox '/root/.gnupg/pubring.kbx' created gpg: skipped "Andreas Hasenack <andreas@canonical.com>": No secret key gpg: /tmp/debsign.YiTaKCMO/squid_4.10-1ubuntu1.dsc: clear-sign failed: No secret key debsign: gpg error occurred! Aborting.... debuild: fatal error at line 1112: running debsign failed
Такая ошибка это нормально, у нас нет закрытого ключа разработчика.
Установка
cd /usr/src/squid dpkg -i squid_4.10-1ubuntu1_amd64.deb squid-common_4.10-1ubuntu1_all.deb squidclient_4.10-1ubuntu1_amd64.deb # Доставим зависимости apt-get --fix-broken install # Фиксируем apt-mark hold squid squidclient squid-common
Остановка
systemctl status squid systemctl stop squid
Настройка
mkdir /etc/squid/ssl chmod 700 /etc/squid/ssl
Генерируем корневой сертификат собственного CA (Центра сертификации), на основе которого будут подписываться сертификаты для сайтов:
openssl genrsa -out /etc/squid/ssl/squid.key openssl req -new -key /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.csr openssl x509 -req -days 999 -in /etc/squid/ssl/squid.csr -signkey /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.pem
Генерируем корневой сертификат который затем нужно будет добавить в браузер:
openssl x509 -in /etc/squid/ssl/squid.pem -outform DER -out /etc/squid/ssl/squid.der
/etc/squid/squid.conf
+ dns_v4_first on # опционально - http_port 3128 + http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=8MB cert=/etc/squid/ssl/squid.pem key=/etc/squid/ssl/squid.key # sslproxy_flags DONT_VERIFY_PEER + sslproxy_cert_error allow all + always_direct allow all + ssl_bump client-first all + ssl_bump server-first all + ssl_bump none all + sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/spool/squid/ssl_db -M 4MB
Проверка
squid -k parse; echo $?
Старт
systemctl start squid; systemctl status squid;
Обсуждение