Назад | Перейти на главную страницу

Прокси-сервер перехвата Squid застрял в цикле пересылки

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

Наша сетевая настройка выглядит так:

[Клиентское устройство / браузер] - [прокси, только общедоступный IP-адрес] - [целевые веб-сайты, например Google, Facebook и т. Д.]

При тестировании настройки, выполнение этого из клиента Linux работает нормально (поскольку порт 8991 не настроен с перехватом):

$ curl --proxy http://<squidserverip>:8991 http://www.example.com/

Однако эта версия выдает страницу ошибки Access Denied от Squid (поскольку порт 8990 настроен с перехватом):

$ curl --proxy http://<squidserverip>:8990 http://www.example.com/

На сервере Squid я вижу в cache.log следующее:

2015/03/11 20:10:44 kid1| WARNING: Forwarding loop detected for:
GET / HTTP/1.1
User-Agent: curl/7.26.0
Host: www.example.com
Accept: */*
Via: 1.1 <servername> (squid/3.4.8)
X-Forwarded-For: <client-source-ip>
Cache-Control: max-age=259200
Connection: keep-alive

В этих примерах я запутал фактические запросы (с именами / заголовками заполнителей) из соображений безопасности.

Мой squid.conf в настоящее время выглядит так (без комментариев и пустых строк):

acl SSL_ports port 443
acl SSL_ports port 8443
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 Safe_ports port 8443
acl CONNECT method CONNECT
acl SSL method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow localhost
http_access allow all
http_reply_access allow all
http_port 8990 intercept   ssl-bump cert=/etc/squid3/certificate.pem generate-host-certificates=on
http_port 8991
https_port 8443 cert=/etc/squid3/certificate.pem key=/etc/squid3/certificate.pem ssl-bump intercept generate-host-certificates=on  dynamic_cert_mem_cache_size=4MB options=ALL
ssl_bump none localhost
ssl_bump client-first all
sslproxy_flags DONT_VERIFY_PEER
sslproxy_cert_error allow all
sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/lib/ssl_db -M 4MB
sslcrtd_children 5
netdb_filename none
coredump_dir /var/spool/squid3
pinger_enable off
cache deny all
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
query_icmp off
always_direct allow all
never_direct allow all

Основываясь на своих поисках через Google, я пришел к выводу, что функция перехвата требует, чтобы я настроил некоторую настраиваемую маршрутизацию с помощью iptables, но ни одна из различных конфигураций, которые я пробовал, не дала никаких результатов.

Кажется, мы можем нормально подключиться к Squid от клиента (на всех трех портах, включая квитирование SSL для https_port), но я не могу успешно выполнять запросы на двух портах, которые осуществляют перехват.

Приветствуется любая помощь, будь то правильная настройка iptables для нашей сетевой конфигурации или необходимые изменения в squid.conf (или других файлах конфигурации на сервере).