20.09.2024

Как установить и настроить Squid 4/5 с поддержкой HTTPS

Готовый пакет Squid 4 можно установить на Debian 8, 9, 10 и 11, а пакет Squid 5 можно установить на Debian 12 и новее.

Можно скомпилировать 5ю версия под старую версию Debian, но что делать потом?

Подготовка

Добавляем ключ для авторизации по ssh без пароля

mkdir /root/.ssh
echo "ssh-rsa AAAA-KEY==">>/root/.ssh/authorized_keys

Устанавливаем необходимые приложения

У каждого свой набор, данный шаг можно пропустить

apt update && apt install -y mc nftables hyperv-daemons dnsutils htop net-tools iperf3

Установить корректное имя сервера

Указываем FQDN (Fully Qualified Domain Name) имя системы, в файлах

Отредактируйте nano /etc/hostname

proxy

Так же файл hosts приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP:

Отредактируйте nano /etc/hosts

127.0.0.1 localhost
192.168.10.10 proxy.notdev.local proxy

Проверка

hostname -f
#proxy.notdev.local

Установка Squid c поддержкой HTTPS

Нет необходимости больше самостоятельно собирать пакеты, достаточно поставить squid-openssl включающий опции enable-ssl-crtd  и with-openssl, в некоторых случаях встречалась несколько раз и обычная версия squid из стандартных репозиториев с включенными опциями

apt install -y squid-openssl

Проверяем что поддержка SSL есть

squid -v | grep -c "enable-ssl-crtd" && squid -v | grep -c "with-openssl"
#1
#1

Делаем резервную копию конфигурации, создаем рабочий конфиг из дефолтного без комментариев

cp /etc/squid/squid.conf{,.bak}
cat /etc/squid/squid.conf.bak | grep -v '^#' | sed '/^$/d' > /etc/squid/squid.conf

Настройка SSL Bumping в сервисе Squid

SSL Bumping в сервисе Squid используется для обработки шифрованных соединений. Если SSL Bumping не настроен, то прокси-сервер не может вмешаться в процесс установки шифрованного соединения.

Использование SSL Bumping может привести к неработоспособности некоторых программ или сервисов, использующих прокси-сервер. Для корректной работы требуется добавить их в исключения SSL Bumping или выделить отдельный порт без SSL Bumping.

Создание самоподписанного SSL-сертификата и приватного ключа

Сгенерируйте SSL-сертификат, приватный ключ в формате PEM в файл /etc/squid/ssl/squid.pem и файл параметров для алгоритма Diffie-Hellman /etc/squid/ssl/dhparam.pem. Настройте права на использование файла SSL-сертификата.

Ключ -subj заполняет ответы /C=Страна/ST=Край/Область/Республика/L=Город/O=Компания/OU=Подразделение/CN=Полное имя

mkdir /etc/squid/ssl
cd /etc/squid/ssl/

openssl req -new -newkey rsa:2048 -sha256 -days 3650 -nodes -x509 \
-extensions v3_ca -keyout squid.pem -out squid.pem \
-subj "/C=RU/ST=KRM/L=SEV/O=NOTDEV.LTD/OU=IT/CN=proxy.notdev.local"

openssl dhparam -outform PEM -out dhparam.pem 2048

chown -R proxy:proxy /etc/squid/ssl
chmod -R 0640 /etc/squid/ssl

Конвертируйте файл сертификата в доверенный сертификат формата DER для импорта в корневые доверенные центры сертификации или браузер.

openssl x509 -in squid.pem -outform DER -out squid.der

Скопируйте и импортируйте файл squid.der в список доверенных корневых центров сертификации на рабочих станциях (например используя GPO). При использовании Mozilla Firefox требуется также добавить сертификат в хранилище браузера.

Создание базы данных сертификатов

Создайте каталог для базы данных сертификатов, инициализируйте базу данных и назначьте необходимые права

mkdir -p /var/lib/squid
rm -rf /var/lib/squid/ssl_db
/usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 20MB
chown -R proxy:proxy /var/lib/squid

Конфигурация Squid

Отредактируйте nano /etc/squid/squid.conf

Squid не может загружать сертификаты, кроме предоставляемых веб-сайтом. Некоторые сайты не предоставляют промежуточный сертификат. Это приводит к тому, что Squid препятствует получению страницы для клиента

Решение http://lists.squid-cache.org/pipermail/squid-users/2020-July/022425.html

Добавьте перед первой директивой http_access:

#FIX: sites do not deliver intermediate certificate: certificate issuer (CA) not known
#allow fetching of missing intermediate certificates
acl intermediate_fetching transaction_initiator certificate-fetching
http_access allow intermediate_fetching

Замените директиву http_port 3128. Включайте порты 8443 без подмены сертификатов и 3128 с подменой сертификатов (SSL Bump)

# not bump
http_port 8443 tcpkeepalive=60,30,3

#tls-cert & tls-key in one file - squid.pem, tls-dh 2048 bit - dhparam.pem
#STRONG SECURITY: don't work IE (TLS Error: dh key too small) cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS
#MEDIUM SECURITY:FIX: dh key too small:cipher=DEFAULT:@SECLEVEL=1

http_port 3128 tcpkeepalive=60,30,3 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB tls-cert=/etc/squid/ssl/squid.pem cipher=DEFAULT:@SECLEVEL=1 options=NO_TLSv1,NO_SSLv3 tls-dh=prime256v1:/etc/squid/ssl/dhparam.pem

tls_outgoing_options min-version=1.1 cipher=DEFAULT:@SECLEVEL=1 options=NO_TLSv1,NO_SSLv3 flags=DONT_VERIFY_PEER
#allow connection even with certificate validation errors
sslproxy_cert_error allow all
acl step1 at_step SslBump1
ssl_bump splice localhost ssl_bump peek step1 ssl_bump bump all ssl_bump stare all
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 20MB sslcrtd_children 5

Флаг flags=DONT_VERIFY_PEER – позволяет принимать сертификаты, не прошедшие проверку, устанавливается флаг в параметре tls_outgoing_options

Проверьте конфиг и переконфигурируйте

squid -k parse

Либо перезапустите Squid

service squid restart

Настройка завершена и в текущей конфигурации уже можно пользоваться.

Текущая конфигурация

Итоговый конфигурационный файл squid.conf должен выглядеть примерно так

acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)

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

#FIX: sites do not deliver intermediate certificate: certificate issuer (CA) not known
#allow fetching of missing intermediate certificates
acl intermediate_fetching transaction_initiator certificate-fetching
http_access allow intermediate_fetching

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager

include /etc/squid/conf.d/*.conf
http_access allow localhost
http_access allow localnet
http_access deny all

# not bump
http_port 8443 tcpkeepalive=60,30,3

http_port 3128 tcpkeepalive=60,30,3 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB tls-cert=/etc/squid/ssl/squid.pem cipher=DEFAULT:@SECLEVEL=1 options=NO_TLSv1,NO_SSLv3 tls-dh=prime256v1:/etc/squid/ssl/dhparam.pem

tls_outgoing_options min-version=1.1 cipher=DEFAULT:@SECLEVEL=1 options=NO_TLSv1,NO_SSLv3 flags=DONT_VERIFY_PEER

#allow connection even with certificate validation errors
sslproxy_cert_error allow all

acl step1 at_step SslBump1

ssl_bump peek step1
ssl_bump splice localhost
ssl_bump bump all
ssl_bump stare all

sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 20MB
sslcrtd_children 5

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

Возможные проблемы

  • Прокси-аутентификация не работает при использовании прозрачного режима, подробнее тут и тут

Дополнительные настройки


Дополнительная информация

2 комментария для “Как установить и настроить Squid 4/5 с поддержкой HTTPS

  1. Добрый день!
    Всё настроил как в статье. Перед запуском сквида проверяю конфиг на ошибки, и он ругается:
    # sudo squid -k parse

    2023/05/04 16:05:24| Processing: http_port 3128 tcpkeepalive=60,30,3 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB tls-cert=/etc/squid/ssl/squid.pem cipher=DEFAULT:@SECLEVEL=1 options=NO_TLSv1,NO_SSLv3 tls-dh=prime256v1:/etc/squid/ssl/dhparam.pem
    2023/05/04 16:05:24| WARNING: Failed to decode DH parameters ‘/etc/squid/ssl/dhparam.pem’

    2023/05/04 16:05:24| SECURITY WARNING: Peer certificates are not verified for validity!
    2023/05/04 16:05:24| UPGRADE NOTICE: The DONT_VERIFY_PEER flag is deprecated. Remove the clientca= option to disable client certificates.
    2023/05/04 16:05:24| Initializing http_port [::]:3128 TLS contexts
    2023/05/04 16:05:24| Using certificate in /etc/squid/ssl/squid.pem
    2023/05/04 16:05:24| Using certificate chain in /etc/squid/ssl/squid.pem
    2023/05/04 16:05:24| Adding issuer CA: /C=RU/ST=MSK/L=MSK/O=GS/OU=IT/CN=squid.golutvino.local
    2023/05/04 16:05:24| Using key in /etc/squid/ssl/squid.pem
    2023/05/04 16:05:24| ERROR: Unable to configure Ephemeral ECDH: error:0480006C:PEM routines::no start line
    2023/05/04 16:05:24| Not requiring any client certificates

    При этом, если запустить сквид, то он стартует. Но не может перечитать конфигурацию (sudo squid -k reconfigure)

    1. Насколько понимаю либо у вас Squid 5 либо OpenSSL 3.0.X?
      если, да то у него есть такая проблема.

      Со Squid 4.XX и Openssl v 1.1.X все работает
      Со Squid v. 5.X.X и Openssl v. 3.0.X есть предупреждение указанное вами.

      Проблема связана с тем что OpenSSL 3.0 не может обработать параметры etc/squid/ssl/dhparam.pem

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *