Способ сделать это — использовать функцию просмотра ssl, представленную в Squid 3.5. Видеть здесь для подробного объяснения. Обратите внимание, что вам нужно будет скомпилировать либо --with-gnutls
или же --with-openssl
(проверять кальмар -v
). Некоторые дистрибутивы оставляют их.
Вкратце соответствующая конфигурация squid выглядит так.
acl denylist_ssl ssl::server_name google.com # НЕ dstdomain
acl step1 at_step SslBump1
ssl_bump заглянуть шаг 1
ssl_bump splice !denylist_ssl # разрешить все, что не входит в список запрещенных
ssl_bump завершить все # заблокировать все остальное
https_port 3129 перехват ssl-bump cert=/etc/squid/dummy.pem
(Кроме того: я не уверен, почему нам нужно заглянуть только на шаг 1, а не на шаг 2, учитывая, что шаг 2 включает только получение сертификата сервера. В документации это вообще не проясняется. Использование ssl_bump просмотреть все
как они рекомендуют, это полностью перестает работать).
А затем выполните обычный танец перенаправления с порта 443 на 3129 с помощью iptables (или, если хотите, напрямую попросите squid прослушивать порт 443).
-A ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -p tcp -m tcp --dport 443 -j ПЕРЕНАПРАВЛЕНИЕ --to-ports 3129
Вы можете использовать любой сертификат для пустышки, мы его никогда не используем (потому что мы не расшифровываем трафик).
Что-то вроде этого работает.
openssl req -new -newkey rsa:4096 -sha256 -days 365 -nodes -x509 -keyout dummy.pem -out dummy.pem
Источники:
[1] https://unix.stackexchange.com/questions/613359/setting-up-squid-transparent-proxy-with-ssl-bumping-on-debian-10
[2] https://web.archive.org/web/20210128152111/https://www.cammckenzie.com/blog/index.php/2018/07/19/squid-https-interception-and-filtering-without-client- сертификаты/
[3] https://wiki.squid-cache.org/Features/SslPeekAndSplice