LINUX.ORG.RU
ФорумAdmin

Некорректно работает фильтрация HTTPS в Squid

 , ,


0

1

Добрый день.

Настроил squid 4 под ubuntu. Все вроде хорошо, правила фильтрации работают, но есть небольшая проблема. Когда я пытаюсь открыть HTTPS страницу из списка запрещенных, то получаю вот такое сообщение в Chrome:

Не удается получить доступ к сайту Веб-страница по адресу https://vk.com/, возможно, временно недоступна или постоянно перемещена по новому адресу. ERR_TUNNEL_CONNECTION_FAILED

Либо HTTP 403 Forbidden в IE.

Если пытаться открыть HTTP страницу из списка заблокированных, то картинка squid и его же сообщение об ошибке появляются без проблем.

Подскажите пожалуйста, в сторону каких настроек смотреть чтобы при попытке открыть HTTPS появлялись такие же сообщения, как и для HTTP?

Ни в какую. Браузер не установит соединение с прокси, т.к. не будет ему доверять

Возможно, ты хочешь MITM ( ssl-bump ), но обычно это неудачная мысль

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

То есть при блокировке HTTPS сайтов никакое информативное сообщени вывести нельзя?

Про ssl-bump читаю прямо сейчас, но не до конца понял описание. На оф.сайте написано что эта функция используется для обработки HTTP как HTTPS, если включен ssl_bump. Но в этом случае получается у меня все страницы будут сваливаться в HTTP 403 Forbidden, так? Если я ошибся и это то, что нужно, то почему это неудачная мысль?

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

Попробовал ввести в конфиг ssl_bump, добавив строчки

acl social123 ssl::server_name .vk.com
ssl_bump peek social123

Пробовал менять на ssl:server_name, но при проверке конфига все равно выдает

FATAL: Invalid ACL type 'ssl::server_name'
FATAL: Bungled /etc/squid/squid.conf line 64: acl social123 ssl::server_name .vk.com

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

То есть при блокировке HTTPS сайтов никакое информативное сообщени вывести нельзя?

Представь если можно бы ло бы. Если каждый вася может тебе по https вместо внетаклика выдать фишинговую станицу.

Deleted ()

Когда я пытаюсь открыть HTTPS страницу из списка запрещенных, то получаю вот такое сообщение
...
чтобы при попытке открыть HTTPS появлялись такие же сообщения, как и для HTTP?

Подмена ответа сервера — это MitM атака, от чего и придумали SSL.
Вы сможете показать в ответ свою заглушку, только если сможете её подписать сертификатом, которому доверяет браузер.
А в случае с certificate pinning — вообще никак.

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

Даже если сделать заглушку, подписанную доверенным сертификатом, настроить её через squid все равно нельзя, верно?

Хм, выходит придется оставить все как есть. Спасибо всем за ответы.

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

Если у тебя будет сертификат vk, то конечно же можешь.

Опять сертификат... Ну сколько можно! Сертификат он у всех есть, вот ключа от него — нет.

vodz ★★★★★ ()

Господа,кто в курсе, устраивать в организации ssl_bump это вообще законно ? Тот же касперский в 11 версии своего kes убрал проверку ssl трафика.

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

Тот же касперский в 11 версии своего kes убрал проверку ssl трафика.

Интересно что он до этого делал с этой проверкой? Рандомные байтики считал? Или внедрял свои CA на компы юзверей? Если второе, то за это и лопатой по морде получить можно. А первое бессмысленно.

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

Господа,кто в курсе, устраивать в организации ssl_bump это вообще законно ?

И при чем тут ssl_bump и закон? Вы бы ещё спросили, а законно ли при работе в компании читать корп. переписку.

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

Как выяснилось, squid действительно можно настроить на редирект HTTPS через ssl_bump. А чтобы он работал нужно вручную собрать пакет squid с поддержкой ssl.

У меня пока не получилось все запустить на версии 4.1.

После добавления в конфиг строчек

http_port 3128
https_port 3129 intercept ssl-bump connection-auth=off cert=/etc/squid/squidCA.pem
tls_outgoing_options min-version=1.0
tls_outgoing_options flags=DONT_VERIFY_PEER
always_direct allow all
ssl_bump server-first all
sslproxy_cert_error allow all

Squid падает с ошибкой

FATAL: Ipc::Mem::Segment::open failed to shm_open(/squid-tls_session_cache.shm): (2) No such file or directory
squid[11290]: Squid Cache (Version 4.1): Terminated abnormally.

Ошибка где-то в

https_port 3129 intercept ssl-bump connection-auth=off cert=/etc/squid/squidCA.pem

Но не могу понять где именно.

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

Распространить сертификат очень просто через GPO. А не поделитесь своим конфигом? Уже посмотрел несколько статей, но так и не понимаю почему после добавления

https_port 10.0.215.26:3129 intercept ssl-bump cert=/etc/squid/squidCA.pem

squid падает с ошибкой

● squid.service - Squid Web Proxy Server
Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2019-07-29 22:23:46 MSK; 1s ago
Docs: man:squid(8)
Process: 15570 ExecStart=/usr/sbin/squid -sYC (code=exited, status=0/SUCCESS)
Process: 15553 ExecStartPre=/usr/sbin/squid --foreground -z (code=exited, status=0/SUCCESS)
Main PID: 15571 (code=exited, status=1/FAILURE)

Jul 29 22:23:46 test-squid-01 systemd[1]: squid.service: Killing process 16420 (ntlm_auth) with signal SIGKILL.
Jul 29 22:23:46 test-squid-01 systemd[1]: squid.service: Killing process 16433 (negotiate_kerbe) with signal SIGKILL.
Jul 29 22:23:46 test-squid-01 systemd[1]: squid.service: Killing process 16440 (ntlm_auth) with signal SIGKILL.
Jul 29 22:23:46 test-squid-01 systemd[1]: squid.service: Killing process 16476 (ntlm_auth) with signal SIGKILL.
Jul 29 22:23:46 test-squid-01 systemd[1]: squid.service: Killing process 16478 (ntlm_auth) with signal SIGKILL.
Jul 29 22:23:46 test-squid-01 systemd[1]: squid.service: Killing process 16479 (ntlm_auth) with signal SIGKILL.
Jul 29 22:23:46 test-squid-01 systemd[1]: squid.service: Killing process 16480 (ntlm_auth) with signal SIGKILL.
Jul 29 22:23:46 test-squid-01 systemd[1]: squid.service: Killing process 16481 (ntlm_auth) with signal SIGKILL.
Jul 29 22:23:46 test-squid-01 systemd[1]: squid.service: Killing process 16483 (squid) with signal SIGKILL.
Jul 29 22:23:46 test-squid-01 systemd[1]: squid.service: Failed with result 'exit-code'.

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

Спасибо. У меня ошибка оказалась в том, что я не выполнил

/usr/lib/squid/security_file_certgen -c -s /var/spool/squid/ssl_db -M 4MB

В конфиге добавил

http_port 10.0.5.26:3129 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB connection-auth=off cert=/etc/squid/squidCA.pem key=/etc/squid/squidCA.pem

Теперь осталось только настроить заглушку для определенных сайтов и групп юзеров.

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

Пытаюсь настроить подмену сертификатов для всех HTTPS сайтов. Конфиг вот такой

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 blocksoc external ldap_group InternetDenySoc
acl social url_regex -i "/etc/squid/db/social.acl"

# Запрещаем соц. сети для группы
http_access deny blocksoc social

# Все что не попало под правила выше разрешено
http_access allow proxy_authorized

# Все остальное запрещено
http_access deny all 

# Закрыть доступ по небезопасным портам
http_access deny !Safe_ports
# Отклонять подключения по не SSL портам
http_access deny CONNECT !SSL_ports


http_port 10.0.215.26:3128
https_port 10.0.215.26:3129 intercept  ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB  tls-cert=/etc/squid/squidCA.pem


acl step1 at_step SslBump1
ssl_bump bump step1
ssl_bump bump all

Сейчас пользователи из группы InternetDenySocial не могут зайти на сайты из «/etc/squid/db/social.acl». Все остальное открывается, но подмены сертификата не происходит. Если убрать intercept и https_port, то при запуске squid появляется ошибка

FATAL: ssl-bump on https_port requires tproxy/intercept which is missing.
KOTOXJle6 ()
Ответ на: комментарий от Deleted

В общем, получилось настроить все как хотелось. И с подменой всех сертификатов и с подменой и перенаправлением на страницу ошибки доступа только для запрещенных ресурсов, но не до конца понял как это работает.

Приведу свой конфиг. Основная часть:

#Первый ACL нужен для объявления в дальнейшем в некоторых правилах обязательного требования аутентификации пользователя.
acl proxy_authorized proxy_auth REQUIRED 


#Затем идёт ряд ALC используемых в конфигурации по умолчанию, важным из которых для нас является ALC описывающий диапазон локальной сети, клиенты из которого будут иметь возможность подключаться к нашему прокси серверу. ACL описывающие разрешённые для проксирования порты вполне можно принять в предлагаемом по умолчанию составе.

#Первый ACL нужен для объявления в дальнейшем в некоторых правилах обязательного требования аутентификации пользователя.
acl proxy_authorized proxy_auth REQUIRED 

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 blocksoc external ldap_group InternetDenySoc
acl social url_regex -i "/etc/squid/db/social.acl"

# Запрещаем соц. сети для группы 
http_access allow blocksoc social 

# Все что не попало под правила выше разрешено 
http_access allow proxy_authorized

# Закрыть доступ по небезопасным портам
http_access deny !Safe_ports
# Отклонять подключения по не SSL портам
http_access deny CONNECT !SSL_ports

# Доступ к кэшу от localhost 
http_access allow localhost manager
http_access deny manager

Дальше конфиг меняется в зависимости от того, нужно ли менять все сертификаты или только для сайтов из ACL.

Подмена сертификатов для всех HTTPS соединений:

http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/squidCA.pem
ssl_bump client-first all                          #Сначала устанавливает соединение с клиентом, а потом с сервером. 
client-first можно поменять на server-first или bump. В моей конфигурации эти действия выполняются на шаге SslBump1 и получается подходит любой вариант.

Подмена сертификата только для сайтов из ACL:

http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/squidCA.pem
ssl_bump splice all                          #Создает туннель без дешифрации проксируемого трафика. Действие по умолчанию.

Splice можно поменять на Peek.

Непонятно вот что: 1) Почему настройка http_port, а не https_port? 2) Шаги Ssl_Bump проиллюстрированы тут - https://wiki.squid-cache.org/Features/SslPeekAndSplice ? 3) Сложно сформулировать что именно непонятно. Почему во втором случае сертификат меняется только при запросе на страницу из ACL? В этом случае squid проходит шаги SslBump1 и 2, TCP Connect/Accept (1), TLS ClientHello/ServerHello (2) и, при совпадении с ACL, меняет сертификат на свой? Как он понимает что можно и нужно менять сертификат? 4) В моем случае же не нужны параметры always_direct, sslproxy_cert_errors, tls_outgoing_options, верно?

KOTOXJle6 ()