Вопрос или проблема
На моем 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
).
Применение
-
Проверка сертификатов: Убедитесь, что путь к сертификатам и ключам корректен, и что файлы имеют необходимые права доступа. Это критично, так как Squid должен иметь возможность читать эти файлы.
-
Актуализация конфигурации: Обновите конфигурацию на основе предоставленного примера. Убедитесь, что все директивы синтаксически корректны для данной версии Squid.
-
Тестирование и отладка: Проверьте логи Squid после перезапуска (
sudo systemctl restart squid
) и убедитесь, что там нет критичных ошибок, относящихся к TLS или SSL. Если ошибки продолжают появляться, обратитесь к официальной документации Squid для уточнения других возможных настроек.
Настройка Squid с поддержкой HTTPS требует внимания к деталям, связанных с безопасностью. Попробуйте выполнить предложенные шаги и, следуя методам отладки, устраните ошибки, связанные с обработкой TLS-соединений.