LINUX.ORG.RU
ФорумAdmin

Не работает squid в режиме intercept

 


0

1

В конфиге squid выставляю http_port 3129 intercept. На машине со squid-ом выполняю команду curl -I -vvv http://ya.ru --connect-to ya.ru:80:127.0.0.1:3129 и получаю ошибку 403.

Проверил настройки selinux и firewalld - ничего не блочит запросы. Убрал intercept, сделал запрос http_proxy=http://127.0.0.1:3128 curl -I -vvv http://ya.ru - все работает как надо.

Включил debug-логи squid-а, вижу следующее:

2022/08/15 17:17:30.937 kid1| WARNING: Forwarding loop detected for:
HEAD / HTTP/1.1
User-Agent: curl/7.61.1
Accept: */*
X-Forwarded-For: 127.0.0.1
Cache-Control: max-age=259200
Connection: keep-alive
Host: ya.ru

Не могу понять в чем проблема. Если я правильно понимаю принцип работы squid в режиме intercept, то должно произойти следующее:

  • запрос приходит в squid (чаще всего через dnat)
  • squid извлекает из запроса заголовок Host, резолвит имя хоста и делает к нему запрос

Если все так, то не могу понять почему возникает цикл.

Где я ошибаюсь?

★★

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

Ответ на: комментарий от serg002

Там ничего интересного, но ок

* Rebuilt URL to: http://ya.ru/
* Connecting to hostname: 127.0.0.1
* Connecting to port: 3129
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 3129 (#0)
> HEAD / HTTP/1.1
> Host: ya.ru
> User-Agent: curl/7.61.1
> Accept: */*
> 
< HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
< Server: squid/4.15
Server: squid/4.15
< Mime-Version: 1.0
Mime-Version: 1.0
< Date: Mon, 15 Aug 2022 14:39:07 GMT
Date: Mon, 15 Aug 2022 14:39:07 GMT
< Content-Type: text/html;charset=utf-8
Content-Type: text/html;charset=utf-8
< Content-Length: 3457
Content-Length: 3457
< X-Squid-Error: ERR_ACCESS_DENIED 0
X-Squid-Error: ERR_ACCESS_DENIED 0
< Vary: Accept-Language
Vary: Accept-Language
< Content-Language: en
Content-Language: en
< X-Cache: MISS from my-server
X-Cache: MISS from my-server
< X-Cache-Lookup: NONE from my-server:3128
X-Cache-Lookup: NONE from my-server:3128
< Via: 1.1 my-server (squid/4.15)
Via: 1.1 my-server (squid/4.15)
< Connection: keep-alive
Connection: keep-alive

< 
* Connection #0 to host 127.0.0.1 left intact
Goganchic ★★
() автор топика
Ответ на: комментарий от serg002

Спасибо! Нашел https://serverfault.com/questions/371850/centos-6-squid-proxy-error/371858. Вроде завелось, но не до конца понял как. Если я правильно понимаю, то accel - это режим реверс прокси, т.е. режим в котором squid проксирует все запросы на указанный сервер (прямо как nginx). Если добавить опцию vhost, то squid будет вытаскивает из запроса заголовок Host и проксировать запросы по этому адресу. Но вот что значит allow-direct - нигде не могу найти. В доках есть какое-то очень мимолетное упоминание того, что существует опция кеша always_direct, которая позволяет некоторые запросы пускать всегда без кеширования, но тут, видимо, это что-то другое (или нет?). Если эту опцию убрать - то squid всегда отдает ошибку 500.

Собственно, осталось 2 вопроса:

  1. почему не работает intercept?
  2. что за опция allow-direct?
Goganchic ★★
() автор топика
Ответ на: комментарий от Goganchic

Здесь про опцию allow-direct. http://www.squid-cache.org/Doc/config/http_port/

Здесь https://squidproxy.wordpress.com/2014/12/19/squid-3-2-mythbusting-nat/ про то, что вы ошибаетесь с утверждением:

(чаще всего через dnat)

теперь обязательно через nat, иначе проверки не проходят.

И здесь немного про обход same_address http://www.squid-cache.org/Doc/config/host_verify_strict/ https://medium.com/swlh/hacking-the-same-origin-policy-f9f49ad592fc когда одна вкладка браузера «дотягивается» до данных другой вкладки...

mky ★★★★★
()