LINUX.ORG.RU
ФорумAdmin

HTTPS на прозрачном squid без установки сертификатов в браузере

 


1

1

Добрый день! Пытаюсь настроить Squid для корпоративной сети. Нужно работать в двух режимах непрозрачный с авторизацией по группам в АД, и прозрачный для разного рода устройств, которые либо не поддерживают WPAD, либо нет возможности указывать прокси в браузере вручную (гостевые android телефоны, ноутбуки, ПК и т.д). С первым вариантом все в порядке. Со вторым - затык. HTTP работает, HTTPS как бы тоже, но браузер ругается на поддельный сертификат. Устанавливать сертификаты на каждое новое устройство желания нет. Поэтому вопрос: Есть ли возможность настроить Сквид в прозрачном(!) режиме для работы с https без установки сквидовского сертификата на клиенты? В гугле искал, оф. документацию читал, ответа пока не нашел. Достаточно чтобы Сквид просто смотрел SNI в Client Hello, и пропускал (то есть splice) или делал terminate, в зависимости от SNI, ну и писал логи по этим сайтам. То есть можно обойтись без дешифровки (bump) Спасибо

Ответ на: комментарий от Kuzz

Изучал и эту статью тоже. Хотелось бы знать единственный ли это вариант, потому как хотелось штатными способом все сделать, без LibreSSL. Плюс я не особо понимаю, почему при такой конфигурации браузер ругается на сертификат: ssl_bump peek step1 ssl_bump splice all Ведь согласно оф. документации, если я правильно понял, в первой строчке берется SNI с TLS Client Hello (для будущего блокирования, если нужно будет), а во второй просто пропускает все https пакеты без подмены сертификата сервера. На какой же тогда сертификат браузер ругается?

hudsucker ()
Ответ на: комментарий от Kuzz

Нет, он ругается вообще на все https сайты без исключения. Без Сквида все нормально Да вот и Сквид пересобирать желания нет)) (ну если конечно решения не найдется, то придется). Поставил CentOS 7, у него в репозиториях Squid 3.5.20. Думал получится и его заставить работать, судя с документации. Хотя вполне возможен вариант, что я не до конца понял принцип работы Сквида и ssl_bump с https, и в конце меня ждет боль и разочарование :)

hudsucker ()
Ответ на: комментарий от blind_oracle

Вот:

#	kerberos auth:
auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -s HTTP/srv-m29-prx-04.balt.local
auth_param negotiate children 10
auth_param negotiate keep_alive on


external_acl_type SQUID-INTERNET-BLOCKED ttl=300 negative_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -a -m 20 -S srv-m29-dc-03 -g SQUID-INTERNET-BLOCKED -D BALT.LOCAL
external_acl_type SQUID-INTERNET-FULL_ACCESS ttl=300 negative_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -a -m 20 -S srv-m29-dc-03 -g SQUID-INTERNET-FULL_ACCESS -D BALT.LOCAL
external_acl_type SQUID-INTERNET-RESTRICTED ttl=300 negative_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -a -m 20 -S srv-m29-dc-03 -g SQUID-INTERNET-RESTRICTED -D BALT.LOCAL
external_acl_type SQUID-INTERNET-STANDART ttl=300 negative_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -a -m 20 -S srv-m29-dc-03 -g SQUID-INTERNET-STANDART -D BALT.LOCAL

acl SQUID-INTERNET-BLOCKED external SQUID-INTERNET-BLOCKED
acl SQUID-INTERNET-FULL_ACCESS external SQUID-INTERNET-FULL_ACCESS
acl SQUID-INTERNET-RESTRICTED external SQUID-INTERNET-RESTRICTED
acl SQUID-INTERNET-STANDART external SQUID-INTERNET-STANDART

acl localnet src 192.168.0.0/16	# RFC1918 possible internal network
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
acl CONNECT method CONNECT
#acl kerb_auth proxy_auth REQUIRED
acl mac_auth arp "/etc/squid/mac-adresses.acl"


acl sites_blocked url_regex -i "/etc/squid/sites_blocked.txt"
acl sites_allowed url_regex -i "/etc/squid/sites_allowed.txt"
acl sites_always_allowed url_regex -i "/etc/squid/sites_always_allowed.txt"

acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3

#	Main configuration
# http_access allow kerb_auth

# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
#http_access allow mac_auth

http_access allow SQUID-INTERNET-FULL_ACCESS
http_access allow SQUID-INTERNET-STANDART !sites_blocked
http_access deny SQUID-INTERNET-RESTRICTED !sites_allowed
http_access deny SQUID-INTERNET-RESTRICTED !sites_always_allowed
http_access deny SQUID-INTERNET-BLOCKED !sites_always_allowed

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 192.168.1.146:3128
http_port 192.168.1.146:3129 intercept
https_port 192.168.1.146:3127 intercept ssl-bump cert=/etc/squid/ssl_cert/myCA.pem options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off
sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/spool/squid_ssldb -M 4MB

always_direct allow all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER

ssl_bump peek step1
#ssl_bump peek step2
ssl_bump splice all

dns_nameservers 192.168.1.2 192.168.0.18
#dns_nameservers 8.8.8.8
dns_v4_first on
#tcp_outgoing_address 85.143.184.190

# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

#
# Add any of your own refresh_pattern entries above these.
#
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

hudsucker ()
Ответ на: комментарий от blind_oracle

Ага, тоже не работает. Браузер ругается : «Сертификат безопасности этого веб-сайта был выпущен для веб-сайта с другим адресом.»

hudsucker ()
Ответ на: комментарий от Kuzz

Поставил squid 3.5.8 (вместо 3.5.20), https без подмены заработал с полпинка, и без libressl, на CentOS 7. Стабильность работы еще конечно нужно будет проверять, но уже есть хоть что-то...

hudsucker ()
Ответ на: комментарий от hudsucker

интересно в какой версии оно сломалось ?

3.5.24 на дворе.

vel ★★★★★ ()
Ответ на: комментарий от hudsucker

Я сейчас использую 4.0.18-20170209-r14986
Теперь, похоже, вебсокеты нормально работают.

Там же на хабре в апдейтах

ВНИМАНИЕ!!! Во избежание недоразумений, ставьте версию 3.5.8! На ней нет никаких проблем, и если сделано все точно по статье, то все будет работать! Если ставите версию выше, то я не гарантирую правильной работы прозрачной фильтрации!

И только для 4.0.Х есть отчет о работоспособности.

Kuzz ★★★ ()
Последнее исправление: Kuzz (всего исправлений: 1)
Ответ на: комментарий от vel

Со средины ноября

Воркеры:

workers 4
cpu_affinity_map process_numbers=1,2,3,4 cores=1,2,3,4
if ${process_number} = 1
https_port 3130 intercept ssl-bump cert=/etc/squid/ssl/squid-cert.cer key=/etc/squid/ssl/squid-privkey.pem generate-host-certificates=on dynamic_cert_mem_cache_size=16MB dhparams=/etc/squid/ssl/squid.dhp tls-min-version=1.1
ftp_port 2120 intercept
endif
if ${process_number} = 2
https_port 3131 intercept ssl-bump cert=/etc/squid/ssl/squid-cert.cer key=/etc/squid/ssl/squid-privkey.pem generate-host-certificates=on dynamic_cert_mem_cache_size=16MB dhparams=/etc/squid/ssl/squid.dhp tls-min-version=1.1
ftp_port   2121 intercept
endif
if ${process_number} = 3
https_port 3132 intercept ssl-bump cert=/etc/squid/ssl/squid-cert.cer key=/etc/squid/ssl/squid-privkey.pem generate-host-certificates=on dynamic_cert_mem_cache_size=16MB dhparams=/etc/squid/ssl/squid.dhp tls-min-version=1.1
ftp_port   2122 intercept
endif
if ${process_number} = 4
http_port  3127
http_port  3128 intercept
http_port  3129 intercept
endif

Kuzz ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.