LINUX.ORG.RU
решено ФорумAdmin

Squid Help!

 


0

1

Уважаемые форумчане, кто работает с прокси сервером Squid. Прошу помогите, сил больше нет. На данный момент установлен Squid 4.10 на 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

https://github.com/squid-cache/squid/pull/351

Я бы попробовал применить https://github.com/chtsanti/squid/commit/af6f9f64c616d8efca2ea35ca70f274c42d0...

Если падать перестанет, то ждать исправления в официальной ветке.

патчи в сквид быстро не принимают :) Однострочный патч исправлявший падение сквида при ротации логов появился в 4.7 (2019.06), а появилась проблема в 4.0.22 (2018.07).

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

не очень представляю как именно их применять

Я на центоси просто скачал src.rpm, распаковал его и добавил патч в spec-файл.
Так можно собрать пакет со своим патчем и не захламлять систему.
Для дебиана поступить подобным образом тоже должно быть просто.

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

Я вроде с этим собирал. Все работает нормально: https://bugs.squid-cache.org/show_bug.cgi?id=4864 (long-term fix for v4, take2 (unofficial))

Уважаемые форумчане, спасибо Вам огромное. Приятно осознавать, что есть специалисты, которым не все равно. Пересобрал squid 4.10 c применением патча (long-term fix for v4, take2 (unofficial)). По итогу squid работает 24ч в режиме «SSL Bump all» без единого падения.

unix_day ()