Минимальная рабочая конфигурация Squid 6.10 с поддержкой HTTPS

Вопрос или проблема

На моем Ubuntu 16.04 у меня установлен Squid 3.5.12 со следующей конфигурацией

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/squid-password
acl guests proxy_auth REQUIRED

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl CONNECT method CONNECT

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
#http_access allow localhost
#http_access deny all
http_access allow guests

#http_port 3128

https_port 3129 connection-auth=off cert=/etc/letsencrypt/live/mywebsite.com/fullchain.pem key=/etc/letsencrypt/live/mywebsite.com/privkey.pem

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 (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320

которая работает через HTTPS, по крайней мере, я могу использовать свой прокси с браузером Google Chrome следующим образом:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --proxy-server=https://mywebsite.com:3129

При переходе на Ubuntu 24.04 я установил squid с помощью следующей команды:

sudo apt install squid-openssl

и он начал работать с конфигурацией по умолчанию через HTTP:

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/squid-password
acl guests proxy_auth REQUIRED

acl localnet src 0.0.0.1-0.255.255.255  # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8             # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10          # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16         # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12          # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16         # RFC 1918 local private network (LAN)
acl localnet src fc00::/7               # RFC 4193 local private network range
acl localnet src fe80::/10              # RFC 4291 link-local (directly plugged) machines

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

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny to_localhost
http_access deny to_linklocal
http_access allow guests

include /etc/squid/conf.d/*.conf

#http_access deny all
http_port 3128

coredump_dir /var/spool/squid

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern .               0       20%     4320

чтобы заставить его работать через HTTPS я попытался добавить следующее:

https_port 3129 tls-cert=/etc/letsencrypt/live/mywebsite.com/fullchain.pem tls-key=/etc/letsencrypt/live/mywebsite.com/privkey.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
sslcrtd_program /lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB

или

https_port 3129 connection-auth=off tls-cert=/etc/letsencrypt/live/mywebsite.com/fullchain.pem tls-key=/etc/letsencrypt/live/mywebsite.com/privkey.pem

но безуспешно. Когда я попытался подключиться через HTTPS, я получил следующие логи:

2025/01/15 08:43:34 kid1| ERROR: failure while accepting a TLS connection on conn23 local=172.236.29.157:3129 remote=91.122.37.167:50191 FD 12 flags=1: SQUID_TLS_ERR_ACCEPT+TLS_LIB_ERR=A00009B+TLS_IO_ERR=1
    connection: conn23 local=172.236.29.157:3129 remote=91.122.37.167:50191 FD 12 flags=1
2025/01/15 08:43:39 kid1| ERROR: failure while accepting a TLS connection on conn24 local=172.236.29.157:3129 remote=91.122.37.167:50281 FD 12 flags=1: SQUID_TLS_ERR_ACCEPT+TLS_LIB_ERR=A00009B+TLS_IO_ERR=1
    connection: conn24 local=172.236.29.157:3129 remote=91.122.37.167:50281 FD 12 flags=1
2025/01/15 08:43:39 kid1| ERROR: failure while accepting a TLS connection on conn25 local=172.236.29.157:3129 remote=91.122.37.167:50282 FD 12 flags=1: SQUID_TLS_ERR_ACCEPT+TLS_LIB_ERR=A00009B+TLS_IO_ERR=1
    connection: conn25 local=172.236.29.157:3129 remote=91.122.37.167:50282 FD 12 flags=1

Что я сделал не так?

Ответ или решение

Для решения вопроса настройки Squid с поддержкой HTTPS на Ubuntu 24.04, важно обратить внимание на несколько ключевых аспектов. Давайте разберём их детально, используя структуру TEA (Theory, Example, Application).

Теория

Squid — это популярный прокси-сервер, который поддерживает работу через HTTP и HTTPS. Для работы через HTTPS необходимо правильно сконфигурировать сертификаты TLS и удостовериться, что установка OpenSSL интегрирована корректно. Ваша задача заключается в том, чтобы настроить Squid таким образом, чтобы он мог принимать подключения через безопасный порт (в вашем случае — 3129).

При миграции на новую версию Ubuntu и Squid важно учесть возможные изменения в конфигурации и требованиях к TLS. Ваша ошибка может быть связана с неверной конфигурацией сертификатов или недостаточными правами доступа к ним.

Пример

Ваш изначальный конфигурационный файл работал на базе Squid 3.5.12, и вы использовали директивы connection-auth и cert, которые были подходящими для этой версии. В новой установке Squid версии 6.10 может потребоваться обновленный синтаксис или дополнительные параметры.

Пример настройки:

http_access allow guests

https_port 3129 tls-cert=/etc/letsencrypt/live/mywebsite.com/fullchain.pem tls-key=/etc/letsencrypt/live/mywebsite.com/privkey.pem tls-dh=/path/to/dhparam.pem

# Включение кеширования сертификатов
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 4MB
sslcrtd_children 5

Важные моменты:

  • Убедитесь, что у вас есть доступ к сертификатам и ключам, и что они правильно настроены.
  • Сгенерируйте параметры диффи-Хеллмана, если они требуются вашим конфигурациям безопасности (openssl dhparam -out /path/to/dhparam.pem 2048).

Применение

  1. Проверка сертификатов: Убедитесь, что путь к сертификатам и ключам корректен, и что файлы имеют необходимые права доступа. Это критично, так как Squid должен иметь возможность читать эти файлы.

  2. Актуализация конфигурации: Обновите конфигурацию на основе предоставленного примера. Убедитесь, что все директивы синтаксически корректны для данной версии Squid.

  3. Тестирование и отладка: Проверьте логи Squid после перезапуска (sudo systemctl restart squid) и убедитесь, что там нет критичных ошибок, относящихся к TLS или SSL. Если ошибки продолжают появляться, обратитесь к официальной документации Squid для уточнения других возможных настроек.

Настройка Squid с поддержкой HTTPS требует внимания к деталям, связанных с безопасностью. Попробуйте выполнить предложенные шаги и, следуя методам отладки, устраните ошибки, связанные с обработкой TLS-соединений.

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

Капча загружается...