Перехват и просмотр HTTPS трафика на прокси-сервере Squid 4.9
Рассмотрим как реализовать перехват пользовательских HTTPS-запросов в сеть интернет для дальнейшего анализа и учета их. Все ниже описанные действия производятся на Debian 9 Stretch с установленным прокси-сервером Squid 4.9.
Для работы с HTTPS трафиком необходимо, чтобы Squid был собран с следующими параметрами — --enable-ssl-crtd --with-openssl
Для просмотра HTTPS трафика, прокси-сервер Squid должен иметь свой собственный СА сертификат, который используется для подписывания динамически генерируемых сертификатов для серверов, к которым пользователи посылают запросы.
Выполним генерацию CA сертификата и назначим права доступа для него, выполним команды:
cd /usr/local/etc/squid/ssl
openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -keyout squidca.pem -out squidca.pem
chown proxy:proxy squidca.pem
chmod 640 squidca.pem
Конвертируем сертификат в формат для импорта на пользовательские системы:
openssl x509 -outform der -in squidca.pem -out squidca.crt
Доверенные корневые сертификаты
» на все пользовательские компьютеры, которые будут работать через прокси-сервер Squid. В доменной среде это проще всего сделать при помощи GPO (Group Policy objects)
.Далее необходимо инициализировать каталог для хранения кэша имитированных сертификатов и указать разрешения на этот каталог для прокси-сервера Squid, выполним команды:
/usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB
chown proxy:proxy -R /var/lib/ssl_db
В файле конфигурации /etc/squid/squid.conf
указываем следующие параметры:
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/squidca.pem
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB
Выше описанные параметры предполагают перехват всех запросов к HTTPS сайтам. Но как показала практика такой вариант настройки может наложить некие сложности в работе некоторых сайтов и для реализации возможности указания сайтов исключения из перехвата HTTPS трафика, зададим следующие параметры:
acl nosslintercept ssl::server_name "/etc/squid/sites_nossl.txt"
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump splice nosslintercept
ssl_bump bump all
Указываем ACL (nosslintercept
) с указанием списка сайтов исключений (прим. /etc/squid/sites_nossl.txt
) и затем в обработке ssl_bump
ничего не делаем с указанными в списке сайтами, а запросы к всем остальными сайтам мы перехватываем.
Перезапускаем squid и проверяем работу:
/etc/init.d/squid restart
На скриншоте выше видим что запрос к сайту https://yandex.ru был успешно перехвачен прокси-сервером, о чем свидетельствует имитированный сертификат и в лог-файле /var/log/access.log
будут фиксироваться все действия на данном сайте.
В случае блокирования доступа какого либо сайта средствами прокси-сервера, будет корректно отрабатывать директива DENY_INFO
. Пользователь при входе на заблокированный сайт будет видеть заглушку прокси-сервера, вместо не информативного сообщения о разрыве соединения…
Здравствуйте.
Помогите пожалуйста с конфигом для squid-a, мучаюсь второй день, информации на эту тему в сети очень мало, а работающих примеров так и не нашёл.
Нужен минимальный работающий конфиг чтобы работало проксирование для веб-сокетов через https (wss://).
Заранее благодарен за любую помощь.
Добрый день,
Можете прекратить мучаться, сокеты не поддерживаются в Squid, по крайней мере в 4.9 точно не поддерживаются.
Приветствую! После того, как создал сертификат, поправил конф. файл и рестартанул сквид вылезла следующая ошибка:
FATAL: No valid signing certificate configured for HTTP_port [::]:3128
FATAL: No valid signing certificate configured for HTTP_port [::]:3128
Failed to start LSB: Squid HTTP Proxy version 4.x.
В чём может быть беда? Заранее благодарю!
Доброго дня! А не существует разве реальных, а не самоподписных сертификатов для таких задач?
И второе. WCCP не пощупали?
Да я думаю что можно с реальным сертификатом, я просто не задавался таким вопросом.
WCCP щупал, но мне не подошло, я PBR заруливал трафик.
Как вы себе такое представляете? Один сервер, удостоверяет все веб сайты интернета? Какой тогда смыл в сертификатах? Любой тов. майор будет делать mitm и в шифровании смысла не будет. Это чисто моё мнение, не утверждение.
Что значит как я себе это представляю. Я представляю это так что я как системный администратор должен контролировать куда кто ходит из корпоративной сети.
Извините, а как это проделать в системе wbnlows? Возможно, я запутался, но всё же хотелось получить ответ. Буду благодарен
Без понятия, не задавался таким вопросом и не разбирал.
Существует ли возможность расшифровать трафик только для указанных пользователей, если известен только его логин(IP меняется постоянно)?
Добавь в конфиг pinger_enable off — это отключит ICMP pinger. Он так же нужен для настройки связки прокси серверов.
Насколько мне известно netdb нужен для настройки работы нескольких прокси серверов, у меня он отключен. Отключается в конфиге строчкой netdb_filename none, у меня она в самом вверху. После этого эти ошибки не появляются. Но думаю тормоза не из-за этих ошибок.
Рестартанул сквид,netdb ошибки пропали,но еще были вот эти они так и остались.Но тоже думаю проблема в задержках не в этом
2020/03/03 18:54:45| pinger: Initialising ICMP pinger …
2020/03/03 18:54:45| Open icmp_sock: (1) Operation not permitted
2020/03/03 18:54:45| pinger: Unable to start ICMP pinger.
2020/03/03 18:54:45| Open icmp_sock: (1) Operation not permitted
2020/03/03 18:54:45| pinger: Unable to start ICMPv6 pinger.
2020/03/03 18:54:45| FATAL: pinger: Unable to open any ICMP sockets.
2020/03/03 18:54:46 kid1| storeLateRelease: released 0 objects
2020/03/03 18:54:59 kid1| Recv recv: (111) Connection refused
2020/03/03 18:54:59 kid1| Closing Pinger socket on FD 26
#####################
Думаю может в конфиге slice/bump
вот как у меня выглядит
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump splice all
Самое интересное оно ж блин работает.Acceslog пишет правда изредка с ошибками HIER NONE,на сайты заходит сертификат не требует,но оч долго.Попробую завтра скормлю сертификат отпишу как работает
В логах /var/log/squid/cache все в порядке? Попробуйте для теста исключить микротик, перевести режим работы сквида на непрозрачный, будет так же тормозить? Если нет то коппйте в сторону микротика.
Спасибо,за ответ.Дело в том что хочется именно прозрачный для мониторинга посещения сайтов и трафика.Нет не в порядке:
2020/03/03 19:40:10 kid1| Logfile: opening log stdio:/var/cache/squid/netdb.state
2020/03/03 19:40:10 kid1| logfile_mod_stdio_open ERROR: stdio:/var/cache/squid/netdb.state: (13) Permission denied
2020/03/03 19:40:10 kid1| logfileOpen: stdio:/var/cache/squid/netdb.state: couldn’t open!
2020/03/03 19:40:10 kid1| netdbSaveState stdio:/var/cache/squid/netdb.state: (13) Permission denied
По непрозрачному не помню уже,давно тестировал вроде как все ок было
Доброго времени,есть проблема в очень медленной работе.Первое открытие сайта 5-10 секунд на http и 10-15с https сайт.Может подскажете что может быть…Squid работает внутри(прим) сети 192.168.10.0/24 имея ip 192.168.10.30. Роутер микрот с правилами
/ip firewall mangle
add action=mark-routing chain=prerouting dst-address=!192.168.10.0/24 \
dst-port=80,443,8080 new-routing-mark=squid passthrough=yes protocol=tcp \
src-address=!192.168.10.30 src-address-list=squid
/ip route
add distance=1 gateway=192.168.10.30 routing-mark=squid
——Конфиг squi.conf
# Recommended minimum configuration:
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
acl CONNECT method CONNECT
#
# Recommended minimum Access Permission configuration:
#
# 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
# And finally deny all other access to this proxy
http_access deny all
# Squid normally listens to port 3128
http_port 3128
http_port 3129 intercept
https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/squidca.pem
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump splice all
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/cache/squid 100 16 256
# Leave coredumps in the first cache dir
coredump_dir /var/cache/squid
error_directory /usr/share/squid/errors/ru
#
# 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
На сервере в PREROUTING redirect 80 to 3129 и 443 на 3130
Также в логах часто NONE/200 0 CONENCT «какие-то ip» — HIER_NONE/- —
Забыл написать,но по конфигу понятно,работаю в прозрачном режиме без установки серта в браузеры.Помогите пожалуйста!
Помогли найти патчи, которые возможно помогут, буду пробывать применять:
https://github.com/chtsanti/squid/commit/af6f9f64c616d8efca2ea35ca70f274c42d0281c
Опишите действия если поможет. Добавлю информацию в статью, вдруг кому еще тоже пригодится. Спасибо!
Пересобрал squid все по вашей статье только версию использовал 4.10, c применением патча (long-term fix for v4, take2 (unofficial)). По итогу squid работает 24ч в режиме «SSL Bump all» без единого падения.
Порядок действий:
1. Скачиваем исходники Squid
2. Распаковываем скаченный архив Squid
3. Скачиваем патч long-term fix for v4, take2 (unofficial)
https://bugs.squid-cache.org/show_bug.cgi?id=4864
4. Переходим в распакованную директорию Squid «cd /squid-4.10/src/»
5. Применяем патч командой. В команде указываем путь до патча.
patch < /root/sqd/squid-4.10/SQUID-385-Comm_MonitorRead-assertion-simple-v4-t2.patch
должен быть следующий вывод:
patching file FwdState.cc
patching file FwdState.h
patching file peer_select.cc
6. После собираем и устанавливаем наш Squid.
Спасибо. Если не против то данный мануал оформлю как статью.
Вопрос а почему выбор пал именно на версию 4.10 ?
Конечно, только за, здорово если это поможет кому нибудь.4.10 выбрал потому как сейчас это последняя версия на момент 06.03.20, которая годиться для использования в pruduction среде. Только поэтому.
Да конечно будет полезна кому нибудь данная информация!
Еще раз спасибо за вклад в общее дело ! 🙂
Прошу помогите, сил больше нет. На данный момент установлен Squid 4.9 на Debian 9 x64. Собирал из исходников для работы с HTTPS трафиком со следующими параметрами:
./configure –prefix=/usr –localstatedir=/var –libexecdir=/usr/lib/squid –datadir=/usr/share/squid –sysconfdir=/etc/squid –enable-ssl-crtd –with-openssl –enable-translation –enable-cpu-profiling –disable-dependency-tracking —
enable-delay-pools –enable-icmp –enable-linux-netfilter –with-large-files –enable-auth-negotiate=kerberos –with-default-user=proxy –with-logdir=/var/log/squid –with-pidfile=/var/run/squid.pid
На прокси работают 160 пользователей. Настроена доменная авторизации по kerberos, доступ разграничен на основе групп в AD. Авторизация работает, по группам из AD squid доступ в интернет предоставляет, https трафик фильтрует. Но стабильно раз в час, а бывает и по 5 раз за час Squid перезапускается, в логах /var/log/squid/cache появляется всегда одна и та же ошибка:
assertion failed: http.cc:1533: «!Comm::MonitorsRead(serverConnection->fd)»
Эмпирическим путем выявил что ошибка кроется в работе SSL Bumpa, конкретно в режиме «bump all». Убирал «bump all», ставил «splice all» и ошибка не появлялась, но при таком режиме работы squid не может фильтровать https трафик. Что очень важно.Скорее всего я как то не так его сконфигурировал.
Помогите пожалуйста, кто сталкивался с подобной проблемой, как ее решить. Посоветуйте пожалуйста какие еще существуют режимы работы ssl bumpa при которых возможна фильтрация https трафика. Возможно что при другом режиме работы ssl bumpa не будет данной ошибки. Или что можно поправить или добавить в существующую конфигурацию. Поделитесь опытом. До этого был squid 4.6 на Ubuntu 18 и была точно такая же проблема и думал это из-за бага в версии squid или о.с., но как выяснилось нет, тогда была такая же ошибка…
Заранее прошу прощения если где-то туплю, со squidом работаю нетак давно Прошу Вашей помощи. Буду признателен если укажите на ошибки.
сам конфиг:
$ Recommended minimum configuration:
pinger_enable off
cache deny all
netdb_filename none
$ Example rule allowing access from your local networks.
$ Adapt to list your (internal) IP networks from where browsing
$ should be allowed
$acl all src 0.0.0.0/0.0.0.0
$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
acl CONNECT method CONNECT
$ LDAP Kerb Groups from DC
external_acl_type DL-ACCESSALL ttl=300 negative_ttl=60 children-startup=30 children-max=80 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -a -g DL-ACCESSALL -D domain.ru
external_acl_type DL-STANDART ttl=300 negative_ttl=60 children-startup=30 children-max=80 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -a -g DL-STANDART -D domain.ru
external_acl_type DL-STUDENT ttl=300 negative_ttl=60 children-startup=30 children-max=80 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -a -g DL-STUDENT -D domain.ru
$ ACTIVE DIRECTORY AUTH (KERBEROS)
auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -s HTTP/srvproxy.domain.ru
auth_param negotiate children 80 startup=20 idle=2
auth_param negotiate keep_alive on
$Domain groups ACL
acl DL-ACCESSALL external DL-ACCESSALL
acl DL-STANDART external DL-STANDART
acl DL-STUDENT external DL-STUDENT
$acl upload_limit1 req_header Content-Length [0-9]{6,}
$acl auth proxy_auth REQUIRED
$Список облачных ресурсов
acl cloud url_regex -i «/etc/squid/accesses/cloud»
$список запрещенных доменов для группы «standart»
acl standart_block dst «/etc/squid/accesses/standart_block»
$список запрещенных доменов для группы «student»
acl student dst «/etc/squid/accesses/studentblock»
$список запрещенных доменов для всех
acl blockDOMAINall dst «/etc/squid/accesses/domain_block_for_all»
$список запрещенных ip для всех
acl blockIPall dst «/etc/squid/accesses/ip_block_for_all»
$список разрешенных доменов для всех
acl white_list dst «/etc/squid/accesses/white_list»
$список разрешенных ip для всех
acl allowIPall dst «/etc/squid/accesses/ip_allow_for_all»
$список запрещенных HTTPS сайтов
acl ssl_black_domain ssl::server_name_regex «/etc/squid/accesses/ssl_black_domain_reg»
$Список сайтов для которых не будет подменяться сертификат по регулярным выражениям.
acl NoSSLIntercept ssl::server_name_regex «/etc/squid/accesses/ssl_white_domain_reg»
$Список сайтов для которых не будет подменяться сертификат
acl domainwhite dst «/etc/squid/accesses/ssl_white_domain_dst»
$Список ip сайтов для которых не будет подменяться сертификат
acl white_ip dst «/etc/squid/accesses/ssl_white_ip»
$acl upload_limit1 req_header Content-Length [0-9]{6,}
$ ACL for method POST
acl upload_method method post
$Запрет POST на облачные ресурсы
http_access deny cloud upload_method
http_access deny blockIPall
http_access deny blockDOMAINall
http_access allow allowIPall
http_access allow white_list
$SSL Bump ACL
acl DiscoverSNIHost at_step SslBump1
$ Recommended minimum Access Permission configuration:
$ 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
$ ACTIVE DIRECTORY AUTH USERS
$http_access allow auth
$ Access rules for Domain groups
http_access allow DL-ACCESSALL
http_access deny DL-STUDENT student
http_access allow DL-STUDENT
http_access deny DL-STANDART standart_block
http_access allow DL-STANDART
$http_access allow localnet
http_access allow localhost
$ And finally deny all other access to this proxy
http_access deny all
$принимаем даже ошибочные ssl сертификаты
tls_outgoing_options flags=DONT_VERIFY_PEER
sslproxy_cert_error allow all
$HTTPS filter ON
http_port 10.168.60.18:3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/sq4.pem
$ SSL bump rules
ssl_bump peek DiscoverSNIHost
ssl_bump splice NoSSLIntercept
ssl_bump splice white_ip
ssl_bump splice domainwhite
ssl_bump terminate ssl_black_domain
$ssl_bump peek all
$ssl_bump splice all
ssl_bump bump all
$ Certs generate ON
sslcrtd_program /usr/lib/squid/security_file_certgen -s /etc/squid/ssl/ssl_db -M 4MB
sslcrtd_children 30 startup=10 idle=1
$ HEADERS in logs
strip_query_terms off
$log_mime_hdrs on
$ Запрещаем отображение версии прокси-сервера и имени
httpd_suppress_version_string on
visible_hostname PROXYSERVER
$ DNS settings
dns_nameservers 10.168.60.100
dns_nameservers 10.168.60.200
$ Uncomment and adjust the following to add a disk cache directory.
$cache_dir ufs /var/cache/squid 100 16 256
$ Leave coredumps in the first cache dir
coredump_dir /var/cache/squid
error_directory /usr/share/squid/errors/ru
$
$ 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
Попробуйте больше памяти выделить модуль генерации сертификатов.
sslcrtd_program /usr/lib/squid/security_file_certgen -s /etc/squid/ssl/ssl_db -M 16MB
А в целом нагрузка какая на сервер в момент когда squid перезапускается ?
Так же чисто мое ИМХО, я бы убрал
И вместо них указал бы (пример)
В этом случае при входе на заблокированный HTTPS сайт, пользователю будет показана информационная страница SQUID (из директивы DENY_INFO), вместо не информативного EER_CONNECTION_CLOSED.. пользователь может подумать что тупо не работает интернет..
Squid работает на виртуальной машине Hyper-V. ОЗУ выделено 4gb, всего потребляется от 650 до 800мб и 4 виртуальных процессора. Нагрузка на ядра не превышает 10-15%, но в момент перед падением нагрузка на все ядра подскакивает раза в 3-4. Сегодня переустановил squid с применением патча, завтра буду тестировать и тогда отпишусь. Идея с acl для ssl была в том, что бы блокировать определенные ресурсы в домене, а не весь домен целиком, но это у меня пока не получилось =)
Уважаемый автор, спасибо за статью, непременно попытаюсь повторить всё у себя, но сразу же вопрос в развитие темы кэширования: как можно дополнительно настроить Squid чтобы он стал выполнять ещё и функции AdBlock вырезая с веб-страниц рекламу или заменять некоторые сочетания на другие? Просто оказалось недостаточно установить pi-hole, много рекламы продолжает прорываться, особенно от Яндекса.
К сожалению в данный вопрос не вникал, поэтому не могу показать практического метода решения задачи.. Но если решите, то поделитесь, размещу, может еще кому то пригодится
Выполнил все по Вашей статье .Пока полет нормальный, тех ошибок больше нет. Вопрос, насчет размера кэша для имитированных сертификатов, тут рекомендовано 4MB. Как Вы считаете будет ли этого достаточно для 170 пользователей или есть смысл увеличивать этот кэш или оставить как есть.
/usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB
Огромное Вам спасибо. Приятно осознавать, что есть специалисты готовые помочь в непонятных ситуациях.
Еще один интересный момент, если прокси включен и я пытаюсь отправить сюда коммент, то появляется страница Forbidden
You don’t have permission to access /wp-comments-post.php on this server.
Спасибо!
По размеру кеша, я бы посмотрел как оно будет работать, если будут проблемы, то увеличить, делается благо это быстро.
По поводу второго, так бывает что некоторые сайты некорректно работать начинают когда происходит подмена сертификата, в моем случае я столкнулся с работой личных кабинетов некоторых банковских сайтов, их пришлось добавить в исключение от просмотра https трафика.
вот с такими параметрами создавал сертификат:
openssl req -new -newkey rsa:2048 -sha256 -days 36500 -nodes -x509 -extensions v3_ca -keyout squidCA4.pem -out squidCA4.pem
1 — Рекомендую выполнить все как у меня в статье написано, это точно рабочий вариант.
2 — С правами на /etc/squid/ssl/ssl_db (создана ли она вообще) и на сертификат у вас все в порядке ?
Error negotiating SSL connection on FD 41: error:00000001:lib(0):func(0):reason(1) (1/-1) kid1| ERROR: negotiating TLS on FD 43: error:00000000:lib(0):func(0):reason(0) (5/-1/104
Нашел, что эти ошибки возможно вызваны не squida, а OPENSSL, но как их исправить пока не ясно, никто не сталкивался с этими ошибками?
Покажите полный конфиг, может что прояснит ситуацию.
#
# Recommended minimum configuration:
#
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
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
acl CONNECT method CONNECT
#HTTPS filter ON
sslcrtd_program /usr/lib/squid/security_file_certgen -s /etc/squid/ssl/ssl_db -M 16MB
sslcrtd_children 50 startup=10 idle=10
#QUICK ACL
acl NoSSLIntercept ssl::server_name_regex «/etc/squid/accesses/ssl_white_domain_reg»
acl DiscoverSNIHost at_step SslBump1
#
# Recommended minimum Access Permission configuration:
#
# 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
# And finally deny all other access to this proxy
http_access deny all
#sslproxy_cert_error allow allow_certs
always_direct allow all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
# Squid normally listens to port 3128
# SSL bump rules
ssl_bump peek DiscoverSNIHost
ssl_bump splice NoSSLIntercept
ssl_bump bump all
http_port 10.168.70.119:3129 ssl-bump \
cert=/etc/squid/ssl/squidCA4.pem \
generate-host-certificates=on \
dynamic_cert_mem_cache_size=16MB
# HEADERS in logs
strip_query_terms off
#log_mime_hdrs on
# Запрещаем отображение версии прокси-сервера и имени
httpd_suppress_version_string on
visible_hostname PROXYSERVER
# DNS settings
dns_nameservers 10.168.71.12
dns_nameservers 10.168.71.2
# DEBUG
#debug_options 10,11
#debug_options ALL,1 33,2 28,9
forwarded_for off
header_access Via deny all
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/cache/squid 100 16 256
# Leave coredumps in the first cache dir
coredump_dir /var/cache/squid
error_directory /usr/share/squid/errors/ru
#
# 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
Подскажите пожалуйста. Настроил squid4 на работу с «HTTPS». Создал ключ для debiana и открытый ключ, установил его в браузер и сайты открываются, но в логах /var/log/squid/cache сыпятся вот такие ошибки, подскажите пожалуйста куда копать:
Error negotiating SSL connection on FD 41: error:00000001:lib(0):func(0):reason(1) (1/-1)
kid1| ERROR: negotiating TLS on FD 43: error:00000000:lib(0):func(0):reason(0) (5/-1/104
SSL bump rules
ssl_bump peek DiscoverSNIHost
ssl_bump splice NoSSLIntercept
ssl_bump bump all
в конфиге squid установлен следующий параметр:
http_port 10.168.70.119:3129 ssl-bump
cert=/etc/squid/ssl/squidCA4.pem
generate-host-certificates=on
dynamic_cert_mem_cache_size=16MB
поторопился я (
как только включаю intercept сразу все падает (
error:invalid-request в логах пишет
Ох сложно сказать, по идее должно работать. На днях буду разбирать WCCP, соответственно он предполагает прозрачный режим работы. Проверю на себе прозрачный режим работы.
а вот этот сертификат в windows добавляем в доверенные корневые центры сертификации, а как быть если в компании есть Linux станции, как быть в этой ситуации?
Заранее спасибо!
Debian по идее так:
cp certuficate.crt /usr/local/share/ca-certificate
update-ca-certificates
Спасибо большое!!!!
ты супер!!!!
Вопрос только один остался, получается прокси сервер не работает в прозрачном режиме и нужно на всех компах прописывать в браузере прокси?
Не за что 🙂
Прописывать нужно только в том случае если используется Kerberos SSO аутентификация.
у меня AD 2012 по поводу Kerberos SSO аутентификация честно не могу сказать ((((((
но у меня работает инет по твоей инструкции только через принудительное прописывание в браузере (
может что то упустил из еще каких то настроек?
У меня сквид стоит ни как роутер, а как машина внутри сети но настроенная как роутер (форвординг пакетов) + с заворотом портов 80 и 443 на 3128 и 3129
Тогда надо в Squid пропиши:
А почему не заворачивать с 80,443 на один 3128 !?
супер ) получилось!
Спасибо большое!
Вопрос, позвольте, коль тема свеженькая.
Кеширование некоторых объектов (тех же картинок с одноклассников и прочей ахинеи) приходящих по https реализованы в последних версиях сквида?
Спасибо.
Так как ssl-bump делает https видимым как http, то да кеширование картинок и всего там вам еще надо будет осуществлятся.
что то ругается все равно (
NONE/400 3620 NONE error:invalid-request — HIER_NONE/- text/html
а можете показать полностью конфиг как у вас выглядит?
А в логах /var/log/squid/cache.log что пишут !?
Полностью выкладывать нет смысла, т.к. там дефолтный с описанием работы с HTTPS трафика:
Где в ACL у меня описываются сайты которые не нужно перехватывать..
все заработало, но только когда я прописал прокси сервер у настройках браузера.
почему так или так оно и должно было работать?
Сложно сказать не зная что и как вы там у себя реализовываете.. Но заработало и слава богу 🙂
Четко по инструкции))) и больше ничего не делал.
а у вас работает как прозрачный прокси или тоже ручками настраивали в браузере?
Ну у меня так же реализована Kerberos аутентификация пользователей, а такой метод не поддерживает прозрачное подключение.
Поэтому я так же как и вы прописывал подключение к прокси на клиентских машинах.
Потому что нет опции intercept, она как раз и заставляет работать прокси на порту 3128 в прозрачном режиме, а у тебя в конфиге нет этой опции