Мои требования:
Есть много ответов, но они либо неправильные (утверждают, что для этого нужно расшифровать трафик), либо неполные.
Это можно сделать с помощью функции ssl peek, представленной в Squid 3.5. См. здесь для подробного объяснения. Обратите внимание, что вам нужно будет выполнить компиляцию с --with-gnutls
или--with-openssl
(проверкойsquid -v
). Некоторые дистрибутивы оставляют их.
Вкратце соответствующая конфигурация кальмара выглядит так.
acl denylist_ssl ssl::server_name google.com # NOT dstdomain
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump splice !denylist_ssl # allow everything not in the denylist
ssl_bump terminate all # block everything else
https_port 3129 intercept ssl-bump cert=/etc/squid/dummy.pem
(В сторону:Я не уверен, почему нам нужно заглянуть только на шаг 1, а не на шаг 2, учитывая, что шаг 2 включает только получение сертификата сервера. Документы вообще не проясняют этого. Использование ssl_bump peek all
, как они рекомендуют, полностью перестает работать).
А затем выполните обычный танец перенаправления с 443 на 3129 с помощью iptables (или пусть squid прослушивает 443 напрямую, если хотите).
-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129
В качестве фиктивного можно использовать любой сертификат, мы его никогда не используем (, так как не расшифровываем трафик).
Что-то вроде этого работает.
openssl req -new -newkey rsa:4096 -sha256 -days 365 -nodes -x509 -keyout dummy.pem -out dummy.pem
Источники: