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

Ограничение HTTPS-трафика с помощью delay_pools в Squid 3

 , , ,


0

1

Имеется сервер на Debian 8.4 (x64) + Squid 3.4.8 (работающий как authentication proxy), стоит задача шейпить трафик пользователям прокси. В squid.conf прописаны нужные delay_pools, но проблема в том, что режется только HTTP трафик, HTTPS идет к пользователю без ограничений. На зарубежных ресурсах есть обрывочная информация о том, что при обработке https-запросов squid использует метод CONNECT, который нельзя обработать при помощи delay_pools. Возможно ли вообще с помощью delay_pools ограничивать HTTPS, либо использовать для этих целей что-то другое вместо squid?


что-то типа

acl SSL proto HTTPS
acl CONNECT method CONNECT

delay_access 1 allow CONNECT
delay_access 1 allow SSL
delay_access 1 deny all
совсем не работает?

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

Добавил строчки в конфиг, но все равно по https ограничения не работают. Вот конфиг сквида:

http_port 3128
icp_port  0
access_log /var/log/squid3/access.log squid
logfile_rotate 12
dns_v4_first on
dns_nameservers 127.0.0.1
positive_dns_ttl 6 hours
negative_dns_ttl 1 minutes
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/ncsa.auth

auth_param basic children 15
auth_param basic realm Proxy
auth_param basic credentialsttl 2 hour

acl ncsa_users proxy_auth REQUIRED
acl localnet src 192.168.0.0/16
acl SSL proto HTTPS
acl CONNECT method CONNECT

delay_pools 1
delay_class 1 1
delay_parameters 1 256000/256000
delay_access 1 allow localnet
delay_access 1 allow CONNECT
delay_access 1 allow SSL
delay_access 1 deny all

acl SSL_ports port 443          # https
acl SSL_ports port 22           # ssh
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 22          # ssh
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

http_access allow ncsa_users
http_access allow Safe_ports
http_access allow CONNECT SSL_ports
http_access allow localnet
http_access deny all

coredump_dir /var/spool/squid3
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

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

работает. version 3.5.13

acl CONNECT method CONNECT
acl spc1 src 10.52.210.96

delay_class 5 3
delay_access 5 allow spc1 CONNECT
delay_access 5 deny all
delay_parameters 5 64000/64000 -1/-1 3000/3000
vel ★★★★★
()
Ответ на: комментарий от vel

Сделал минимальную конфигурацию сквида:

http_port 3128

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/ncsa.auth
auth_param basic realm Proxy

acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users

acl CONNECT method CONNECT
acl localnet src 192.168.0.0/16

delay_pools 1
delay_class 1 1
delay_parameters 1 256000/256000
delay_access 1 allow localnet CONNECT
delay_access 1 deny all

Теперь delay_pools не работает даже для обычного http. В чем ошибка?

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

Судя по конфигу ты для всех из 192.168.0.0/16 идущих через CONNECT даешь 2 мегабита/сек.

Чем скорость проверяешь ?

Я для проверки обычно ставлю типа 32-64 килобита/сек, чтоб сразу было понятно.

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

Да, для всех хостов подсети нужно выделить максимум 2 мбит/с. Скорость на машине со сквидом смотрю с помощью nload, на клиентских в виндовом диспетчере задач. Входящий канал на сервер 75 мбит/с, поэтому разница в скорости видна сразу.

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

wget-ом не пробовал мерить (в .wgetrc прописать настройки на прокси) ?

А обновить версию сквида не пробовал ?

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

Проверить варианты с wget и другой версией squid смогу только в понедельник теперь. Может быть проблема из-за того, что нужен пул другого класса (3-го, например)?

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

Непонятная ситуация. Если запустить скачивание из браузера на клиентской машине - браузер показывает одинаковую скорость скачивания и по http, и по https. Плеер Youtube также показывает скорость в пределах заданного лимита. Однако клиентский диспетчер задач на винде при загрузке по https выдает цифры, далекие от лимита.

Что интересно, при скачивании с помощью wget на машине со сквидом скорость держится в пределах лимита только по http. В чем косяк и куда копать, не пойму... Вот конфиг сквида:

http_port 3128
icp_port  0
access_log /var/log/squid3/access.log squid
logfile_rotate 12
dns_v4_first on
dns_nameservers 127.0.0.1
positive_dns_ttl 6 hours
negative_dns_ttl 1 minutes

#
#auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/ncsa.auth

auth_param basic children 15
auth_param basic realm Proxy
auth_param basic credentialsttl 2 hour

#
#acl ncsa_users proxy_auth REQUIRED
acl localnet src 192.168.0.0/16
acl CONNECT method CONNECT

delay_pools 1
delay_class 1 1
delay_parameters 1 256000/256000
delay_access 1 allow localnet
delay_access 1 deny all

acl SSL_ports port 443          # https
acl SSL_ports port 22           # ssh
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 22          # ssh
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

#
#http_access allow ncsa_users
http_access allow Safe_ports
http_access allow CONNECT SSL_ports
http_access allow localnet
http_access deny all

Скриншот wget

http://imgur.com/6Ak3teJ

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

Однако клиентский диспетчер задач на винде при загрузке по https выдает цифры, далекие от лимита.

А оно не может в несколько потоков тянуть ?

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

wget точно тянет в один поток, youtube тоже вроде как в один, т.к. в плеере видна скорость в пределах ограничения, и в то же время винда показывает скорость в несколько раз больше.

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

Короче говоря, опытным путем выяснилось, что сквид при закачке клиентом по https генерирует большой исходящий к этому клиенту трафик (в локальной сети), причем, чем больше потоков при закачке файла, тем больше исходящий трафик от сквида. При всем при этом, скорость самой закачки (в браузере или качальщике), а также на WAN порту (!) не поднимается выше выставленного в delay_pools ограничения!! Что это за паразитный трафик такой??

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

tcpdump в помощь. Есть подозрение, что клиент пытается качать кусками, а сквид при этом тянет все каждый раз целиком. http/https при этом - без разницы.

Я такое видел на апдейтах оффтопика.

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

Нашел полное описание своей проблемы здесь - https://www.opennet.ru/openforum/vsluhforumID12/6928.html#8 Как оказалось, это кочующая из релиза в релиз проблема сквида ветки 3.x. Он шлет клиенту кучу мелких пакетов, как следствие, лавинообразно возрастает трафик от прокси + загрузка CPU на машине со сквидом под 100%. Поставил squid-2.7.STABLE9 - все работает как по маслу.

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

Вот бы tcpdump-ом эту кучу мелких пакетов посмотреть, да и запросы тоже.

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

Судя по всему нужно апгрейдить версию на 3.5

Проблему лечили в феврале 2015 года и в какую версию оно попало - трудно сказать

Re: [PATCH] Bug 2907: high CPU usage on CONNECT when using delay pools

Merged to trunk as rev.13951.

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

Собрал из исходников с сайта последнюю стабильную 3.5.16 - проблемы больше нет. Тему можно закрывать.

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