LINUX.ORG.RU
ФорумAdmin

Часть 3. squid3, ssl - не работает


2

2

По мотивам раз и два

Собрал на дебиане (7.1) squid с поддержкой ssl (--enable-ssl и --enable-ssl-crtd). Делаем например вот так - не работает. Эксперименты с http_port и https_port, разными портами для http и https ни к чему не ведут. В браузере имеем ERR_SSL_PROTOCOL_ERROR (хром) либо другие подобные ошибки.

У меня уже сил нет его ковырять, и что этой заразе для работы нужно.

п.с. Сертификат свой браузеру не скармливал, вроде как можно без этого обойтись.

★★★★★

Последнее исправление: leg0las (всего исправлений: 1)

Логи подробнее смотри, плюс браузер что-то должен подробнее показывать. И ошибка точно в браузере? Или тебе ее сквид показывает?

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

Ошибко чисто в браузере, это не сквид.

В логах:

1376912670.315      0 10.254.3.253 NONE/400 4054 NONE error:invalid-request - NONE/- text/html
1376912670.319      0 10.254.3.253 NONE/400 4048 NONE error:invalid-request - NONE/- text/html
1376912670.515      0 10.254.3.253 NONE/400 4054 NONE error:invalid-request - NONE/- text/html
1376912670.516      0 10.254.3.253 NONE/400 4054 NONE error:invalid-request - NONE/- text/html
1376912670.522      0 10.254.3.253 NONE/400 4054 NONE error:invalid-request - NONE/- text/html

Такое ощущение, что squid не знает про https

Хотя:

# squid3 -v
Squid Cache: Version 3.1.20
configure options:  '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=${prefix}/lib/squid3' '--srcdir=.' '--disable-maintainer-mode' '--disable-dependency-tracking' '--disable-silent-rules' '--datadir=/usr/share/squid3' '--sysconfdir=/etc/squid3' '--mandir=/usr/share/man' '--with-cppunit-basedir=/usr' '--enable-inline' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-underscores' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-auth=basic,digest,ntlm,negotiate' '--enable-basic-auth-helpers=LDAP,MSNT,NCSA,PAM,SASL,SMB,YP,DB,POP3,getpwnam,squid_radius_auth,multi-domain-NTLM' '--enable-ntlm-auth-helpers=smb_lm,' '--enable-digest-auth-helpers=ldap,password' '--enable-negotiate-auth-helpers=squid_kerb_auth' '--enable-external-acl-helpers=ip_user,ldap_group,session,unix_group,wbinfo_group' '--enable-ssl' '--enable-ssl-crtd' '--enable-arp-acl' '--enable-esi' '--enable-zph-qos' '--enable-wccpv2' '--disable-translation' '--with-logdir=/var/log/squid3' '--with-pidfile=/var/run/squid3.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-linux-netfilter' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall' 'LDFLAGS=-fPIE -pie -Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security' --with-squid=/root/sources/squid3-3.1.20

ssl присутствует.

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

Для http прозрачный, для ssl-bump нет.

http_port 3128 transparent
http_port 3129 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=32MB cert=/etc/ssl/squid/squidCA.pem
ssl_bump allow all
sslproxy_flags DONT_VERIFY_PEER
sslproxy_cert_error allow all
sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/lib/ssl_db -M 64MB
sslcrtd_children 5

В iptables:

iptables -t nat -A PREROUTING -i vlan254 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i vlan254 -p tcp --dport 443 -j REDIRECT --to-port 3129
leg0las ★★★★★
() автор топика
Ответ на: комментарий от leg0las

Ну чего ты тогда хочешь-то? :)

Сквид ожидает от клиента какой-то метод, аля CONNECT, а получает болт.

SSL-Bump не работает в прозрачном режиме, это ограничение самих протоколов.

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

Таак, т.е. нужно _не_использовать_ transparent? Метод connect использовать для всех соединений, или только для SSL?

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

Нужно не использовать переадресацию HTTPS соединений через iptables, только прописыванием прокси в браузере.

Прозрачное проксирование будет работать только для HTTP без шифрования.

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

Тут фишка заблочить некоторые ресурсы, потому прописывание прокси в браузере - не вариант. Меня устроит любое проксирование (в т.ч. непрозрачное), но лишь бы оно проксировало https.

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

Тебе хочется странного. Прозрачное - перенаправление траффика файрволлом в прокси. Непрозрачное - прописывание прокси в броузере.

Третьего не дано собсно.

Чтобы сгенерировать сертификат, сквиду нужен хостнейм, но при прозрачном проксировании он его получить не может. Максимум что можно сделать - на все HTTPS сайты выдавать какой-то один сертификат левый.

Добавь transparent к порту с ssl_bump, как-то заработать должно.

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

Что-то умело подобное 3proxy, но это очень, очень всё сыро и криво. Прозрачно проксировать https я понимаю весьма не тривиальная штуковина...

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

Добавил transparent. В логах та же хрень, что и выше, не заходит.

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

В 3.3 - работает.

http://www.squid-cache.org/Doc/config/ssl_bump/ http://wiki.squid-cache.org/Features/DynamicSslCert http://wiki.squid-cache.org/Features/BumpSslServerFirst

Может еще потребоваться в конфиге прописать сначала порт без transparent (выбрать неиспользуемый). Какую ошибку так обходят уже не вспомню.

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

Да, читал про это, но не проверял.

Девелоперы там же описывают минусы такого подхода

Но у автора в любом случае 3.1, если он соберёт 3.3, то можно что-то забацать.

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

Да.
В 3.2 сделали прозрачное проксирование шифрованных, а в 3.3 - BumpSslServerFirst.

Да и то, стабильность работы с таким конфигом под вопросом.

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

Условия воспроизведения я так и не понял.
Срабатывание

 assert(checklist->conn() && checklist->conn()->clientConnection != NULL);
assert(fd_table[conn->fd].halfClosedReader != NULL);

Там прозрачный прокси, icap задействован.

Соответственно, падает воркер и Главный процесс его перезапускает. В это время клиенты, естественно, не могут ходить в инет

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

Ясно. В общем походу гемор, ставить прозрачный прокси на 80-й порт, а остатки резать на 443-м.

leg0las ★★★★★
() автор топика
Squid 3.1.23
dns_nameservers 127.0.0.1 192.168.1.254
#
# Recommended minimum configuration:
#
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8	# RFC1918 possible internal network
acl localnet src 172.16.0.0/12	# RFC1918 possible internal network
acl localnet src 192.168.0.0/16	# RFC1918 possible internal network
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
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager

# 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

# 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

# Allow localhost always proxy functionality
http_access allow localhost

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

always_direct allow all
sslproxy_flags DONT_VERIFY_PEER
sslproxy_cert_error allow all

ssl_bump client-first all
ssl_bump server-first all
ssl_bump allow all

# Squid normally listens to port 3128
http_port 127.0.0.1:3128
http_port 8080 intercept
https_port 8443 intercept ssl-bump cert=/etc/squid/ssl/squid.pem key=/etc/squid/ssl/squid.key

# Leave coredumps in the first cache dir
coredump_dir /var/cache/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
maxt_t
()
Ответ на: комментарий от maxt_t

Благодарю! Как в Вашем случае работает ssl? Пользователь получает скормленный кальмару сертификат при попытке соединится по https?

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

Да, именно так. Но у нас сертификат от Comodo Security, и браузері не слишком достают пользователей для подтверждения исключения безопасности.

Вообще, я привёл кусок этого конфига в качестве такового, как оно заработало у меня.

Но задача у меня иного рода - просто вести учёт на какие сайты ходили пользователи. Без фильтрации контента и URL. Самое первое что пришло в голову - это прозрачный прокси. Сейчас это работает в тестовом режиме. Не уверен в беспроблемности и полной работоспособности такой конфигурации.

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

Да, кстати, подобную конфигурацию я уже смотрел:

Starting Squid HTTP Proxy 3.x: squid32013/08/20 14:13:15| aclParseAccessLine: squid.conf line 55: ssl_bump client-first all
2013/08/20 14:13:15| aclParseAccessLine: expecting 'allow' or 'deny', got 'client-first'.
2013/08/20 14:13:15| aclParseAccessLine: squid.conf line 56: ssl_bump server-first all
2013/08/20 14:13:15| aclParseAccessLine: expecting 'allow' or 'deny', got 'server-first'.
leg0las ★★★★★
() автор топика
Ответ на: комментарий от maxt_t

Без разницы. Я уже вчера накатил обычный сквид без ssl, после прочтения сообщения накатил с --enable-ssl. Щас пересобираю еще и с --enable-ssl-crtd (на всякий пожарный)

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

У меня тоже 3.1, но вот дистрибутивы у нас отличаются.

У меня openSUSE 12.2, у вас - Debian 7. Возможно набор патчей отличается.

На всякий случай приведу флаги сборки сквида в сюзи:

rifdc-dr:/var/log/squid # squid -v

Squid Cache: Version 3.1.23
configure options:  '--prefix=/usr' '--sysconfdir=/etc/squid' '--bindir=/usr/sbin' '--sbindir=/usr/sbin' '--localstatedir=/var' '--libexecdir=/usr/sbin' '--datadir=/usr/share/squid' '--mandir=/usr/share/man' '--libdir=/usr/lib64' '--sharedstatedir=/var/squid' '--with-logdir=/var/log/squid' '--with-swapdir=/var/cache/squid' '--with-pidfile=/var/run/squid.pid' '--with-dl' '--enable-storeio' '--enable-disk-io=AIO,Blocking,DiskDaemon,DiskThreads' '--enable-removal-policies=heap,lru' '--enable-icmp' '--enable-delay-pools' '--enable-esi' '--enable-icap-client' '--enable-useragent-log' '--enable-referer-log' '--enable-kill-parent-hack' '--enable-arp-acl' '--enable-ssl' '--enable-forw-via-db' '--enable-cache-digests' '--enable-linux-netfilter' '--with-large-files' '--enable-underscores' '--enable-auth=basic,digest,ntlm,negotiate' '--enable-basic-auth-helpers=DB,LDAP,MSNT,NCSA,PAM,POP3,SASL,SMB,YP,getpwnam,multi-domain-NTLM,squid_radius_auth' '--enable-ntlm-auth-helpers=fakeauth,no_check,smb_lm' '--enable-negotiate-auth-helpers=squid_kerb_auth' '--enable-digest-auth-helpers=eDirectory,ldap,password' '--enable-external-acl-helpers=ip_user,ldap_group,session,unix_group,wbinfo_group' '--enable-ntlm-fail-open' '--enable-stacktraces' '--enable-x-accelerator-vary' '--with-default-user=squid' '--disable-ident-lookups' '--enable-follow-x-forwarded-for' 'CFLAGS=-fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fPIE -fPIC -DOPENSSL_LOAD_CONF' 'LDFLAGS=-Wl,-z,relro,-z,now -pie' 'CXXFLAGS=-fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fPIE -fPIC -DOPENSSL_LOAD_CONF' --with-squid=/home/abuild/rpmbuild/BUILD/squid-3.1.23

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

А теперь бы разобрать, что ему не хватает.

С данной конфигурацией браузер орет, что сертификат не является доверенным.

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

Скорее всего, потому, что ваш сертификат самоподписанный.

В моём случае у нас был в наличии купленный сертификат, и подписанный доверенной организацией, которая, по видимому, входит в Trusted CA браузера.

В вашем случае, нужно импортировать ваш сертификат в пользовательские браузеры. Например, как было сделано здесь: http://habrahabr.ru/post/168515/

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

Я читал, там все равно нужно подкладывать сертификат браузерам. Ради этого кстати компилил с --enable-ssl-crtd.

Щас более подробно изучаю вот это: http://ubuntuforums.org/showthread.php?t=2049290 - тут тоже 3.1 (3.1.19).

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

Скормил сертификат браузеру - нихрена. Щас попробую метод, который описан на швабре.

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

Так-с, а можно в студию список файлов squid? Есть подозрение, что собирать-то он собирает, а вот либу в пакет не кладет.

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

3.3 версия слишком много хочет нового. Дома возможно на дебиане и соберу. Просто хочется иметь опакеченую как положено, стандартными средствами.

leg0las ★★★★★
() автор топика

Итак, сообщения вида «NONE/400 4054 NONE error:invalid-request - NONE/- text/html» пропали, после пересборки squid с парметрами --enable-ssl и --enable-ssl-crtd и вот таким куском конфига:

http_port 3128 intercept
https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/ssl/squid/squidCA.pem
always_direct allow all
ssl_bump allow all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/cache/ssl_db -M 4MB
sslcrtd_children 5

Но в логах ни слова про ssl.

Да кстати, сертификат браузеру скормил, результаты смотрел с ним.

Кстати, нашел забавну статейку, из которой следует, что если в логах есть «Accepting SSL bumped HTTP Socket connections at local=[::]:3128 remote=[::] FD 21 flags=9» или что-то вроде такого - то ssl пашет. У меня даже банальный греп ssl ничего не выдает. Так что проблема скорее не в версии, а в том, что где-то что-то не включено.

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

Что она хочет из того, чего нет в стандартном дебиане? У меня она нормально собрана и запакетирована самыми что ни на есть стандартными средствами, как - я уже писал в какой-то из твоих тем вроде.

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

Этот флаг просто указывает местоположение опенссля, у меня он до кучи указан.

В общем, ИМХО, ты какой-то херней страдаешь, пытаешь заставить заведомо неумеющую что-то делать версию вместо того, чтобы собрать заведомо рабочую и протестированную: у меня через него 300 человек ходит, сквид уже 5000 сертификатов навыдавал, ни разу не упало.

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

Да вот дело в том, что валяются в сети мануалы по настройке https на 3.1, потому и топчусь с ним. Сборка 3.3 - это самое последнее, что я буду делать. Тем более если опция включена, а в логах нихрена нет, то возникает вопрос - а нахрена опцию указывать, если нихрена не работает? К тому же, ssl-bump был еще в 2.x версиях, там он правда назывался sslBump. Потому я и не спешу обновляться)

leg0las ★★★★★
() автор топика

На опеннете нашел про 3.3:

Поддержка режима SSL-Bump Server для перехвата содержимого шифрованных HTTPS-сеансов. При поступлении первого перехватываемого HTTPS-запроса, Squid осуществляет (http://wiki.squid-cache.org/Features/BumpSslServerFirst) SSL-соединение с сервером и получает его сертификат. После этого Squid использует имя хоста из реального полученного от сервера сертификата и создаёт фиктивный сертификат, при помощи которого имитирует запрошенный сервер при взаимодействии с клиентом, продолжая при этом использовать SSL-соединение, установленное с сервером. Кроме HTTPS-соединений, указанная схема может использоваться для перехвата большинства HTTP-запросов с методом CONNECT.

Придется компилить 3.3, печалька.

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

Ну собсно про это тебе и талдычат уже давно, если бы ты почитал ссылки на вики сквида которые я или кто-то еще давали выше (про Bump-Server-First, который токмо в 3.3) то сразу бы все понял, а так только баламутил континуум :)))

Что печального в сборке 3.3, когда тебе уже даже debian/rules показали, не понимаю. Две команды и готово.

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

Хе-хе. Я сделал грязный хак - подрубил репу тестинга, и собираю пакет с него - там свежак 3.3.8-1. Пришлось правда две либы стянуть с него, но к счастью они просто стали рядом ничего не требуя обновить, остальные компоненты взяты с визи. Немного подправил rules`ы, вырубил ненужное в аутентифкации, врубил ssl - компилим-с.

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

Собрал. В логах наконец появилось заветное https, пока че-то не заводится, ковыряю дельше) Строка, которую я выше кидал тоже есть, да)

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

Завел таки) Правда часть сайтов не пашет, щас ковыряюсь. ssl_bump allow all является устаревшей, используется либо client-first либо server-first, причем как я понял одна из.

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

Ок. Пример порезаного таблесами вк. Обеими руками за. Ручками айпишники порезать или -m string vk.com не канают.

leg0las ★★★★★
() автор топика
Последнее исправление: leg0las (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.