Подготовка
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_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.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