Рабочий вариант Squid transparent proxy с поддержкой SSL без подмены сертификатов
По мотивам https://habr.com/ru/post/267851/
Собираю на Ubuntu 19.04.
Вот пакеты, собранные на Ubuntu 19.04 x64 - squid_4.4_transparent_ssl_ubuntu19.04_x64.tar.gz
Для начала - включаем deb-src репозитории в /etc/apt/sources.list
Ставим запчасти для сборки и исходники squid:
sudo apt-get update sudo apt-get install git fakeroot build-essential devscripts checkinstall sudo apt-get build-dep squid sudo apt-get build-dep libecap sudo apt-get install libssl-dev libgnutls28-dev
Сборка LibreSSL - не обязательно
Скачиваем, собираем и ставим LibreSSL:
wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.9.2.tar.gz tar -xvf ./libressl-2.9.2.tar.gz cd libressl-2.9.2/ ./configure make sudo checkinstall --pkgname libressl --pkgversion 2.9.2 sudo dpkg -i ./libressl_2.9.2-1_amd64.deb sudo ldconfig sudo mv /usr/bin/openssl /usr/bin/openssl-1 sudo update-alternatives --install /usr/bin/openssl openssl /usr/bin/openssl-1 10 sudo update-alternatives --install /usr/bin/openssl openssl /usr/local/bin/openssl 50 sudo update-alternatives --config openssl
Проверяем, что LibreSSL поставился:
$ openssl version LibreSSL 2.9.2
Сборка libecap
cd .. apt-get source libecap cd libecap-1.0.1/ dpkg-buildpackage -us -uc -nc -d cd .. sudo apt-get purge libecap3 sudo dpkg -i ./libecap3_1.0.1-3.2_amd64.deb sudo dpkg -i ./libecap3-dev_1.0.1-3.2_amd64.deb
Сборка Squid с поддержкой ssl_bump
apt-get source squid cd squid-4.4/
внесем в debian/rules следующие опции компиляции:
--enable-ssl --enable-ssl-crtd --with-openssl
Отключаем проверку зависимостей:
export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info
Собираем:
dpkg-buildpackage -us -uc -nc
Установка собранного squid
Удаляем старый squid и squid-common:
sudo apt-get -y purge squid squid-common squid3 squidclient
Устанавливаем свежесобранные пакеты:
sudo apt-get install squid-langpack libdbi-perl sudo dpkg -i ../squid_4.4*.deb ../squidclient*.deb ../squid-common*.deb ../squid3_*_all.deb sudo dpkg -i ../squid_4.4*.deb ../squidclient*.deb ../squid-common*.deb ../squid3_*_all.deb
Запрещаем обновление из репозиториев:
echo "squid hold" | sudo dpkg --set-selections echo "squid-common hold" | sudo dpkg --set-selections echo "squid3 hold" | sudo dpkg --set-selections echo "squidclient hold" | sudo dpkg --set-selections
Настройка squid
Инициализируем базу сертификатов:
sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB
Прописываем в конфигурационный файл squid'а такое:
acl localnet src 192.168.0.0/16 #local Networks acl pvenet src 192.168.122.0/24 #Proxmox local network acl dockernet src 172.0.0.0/8 #Docker containers acl SSL_ports port 443 acl CONNECT method CONNECT dns_nameservers 127.0.0.53 http_access deny CONNECT !SSL_ports #http_access allow localhost manager #http_access deny manager http_access allow localnet http_access allow dockernet http_access allow pvenet http_access allow localhost #http_access allow all #transparent HTTP proxy (option intercept) http_port 3128 intercept visible_hostname 127.0.0.1:80 #transparent HTTPS proxy https_port 3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squid-ca-cert-key.pem sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER # ssl_bump option splice just tunneling connection ssl_bump splice all sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 cache_dir aufs /var/spool/squid 20000 49 256 maximum_object_size 61440 KB minimum_object_size 3 KB cache_swap_low 90 cache_swap_high 95 maximum_object_size_in_memory 512 KB memory_replacement_policy lru logfile_rotate 4 cache_peer 10.77.70.7 parent 3128 0 no-query default login=login:password #login=PASSTHRU #login=username:password never_direct allow all
перезапускаем squid:
sudo service squid restart
настройка iptables
Перенаправляем все локальные исходящие подключения к портам 80 и 443 на локальный squid, за исключением локальных подключений и подключений к локальным сетям:
sudo iptables -t nat -A PREROUTING -d 10.77.0.0/16 -j RETURN sudo iptables -t nat -A PREROUTING -d 0.0.0.0/8 -j RETURN sudo iptables -t nat -A PREROUTING -d 127.0.0.0/8 -j RETURN
sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129
Устанавливаем iptables-persistent для автоматического применения правил после рестара:
sudo apt-get install iptables-persistent
на вопрос о сохранении текущих правил отвечаем положительно. Правила лежат в файлике /etc/iptables/rules.v4.
В дальнейшем сохраняем правила так:
sudo iptables-save | sudo tee /etc/iptables/rules.v4
Discussion