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

Squid 3.5: предотвращение петли пересылки в режиме перехвата

Я установил маршрутизатор и перехватывающий прокси-сервер HTTP Squid на разных машинах. Клиенты должны использовать прокси (без ведома) следующим образом:

Клиент -> Маршрутизатор (DNATing для прокси-сервера) -> Прокси-сервер -> Маршрутизатор -> Интернет

Запросы, поступающие на прокси-сервер, имеют следующие атрибуты:

К сожалению, похоже, что squid пытается пересылать пакеты на адрес назначения запроса, который является самим прокси-сервером, и создает бесконечный цикл. Взято из cache.log:

2015/12/18 14:11:50 kid1| WARNING: Forwarding loop detected for:

Как я могу настроить squid, чтобы вместо этого разрешать имя хоста в HTTP-запросе через DNS, а затем перенаправлять запросы на разрешенный IP-адрес на HTTP-порт 80 по умолчанию?

Дополнительная информация:

DNAT выполняется iptables на маршрутизаторе со следующим правилом: iptables -t nat -A PRE_VS_PROXY -p tcp --dport 80 -j DNAT --to-destination 192.168.4.50:3380

Пример записи access.log:

1450444309.741      0 192.168.4.50 TCP_MISS/403 4277 POST http://ocsp.digicert.com/ - HIER_NONE/- text/html
1450444309.742     46 192.168.4.46 TCP_MISS/403 4341 POST http://ocsp.digicert.com/ - ORIGINAL_DST/192.168.4.50 text/html

Эффективная конфигурация кальмара:

http_access allow localhost manager
http_access deny manager

http_access deny to_localhost

cache deny all

http_access allow all
http_access deny all

http_port 3128
http_port 3380 intercept
http_port 3443 intercept

coredump_dir /var/squid/cache/squid
shutdown_lifetime 1 seconds

Глядя на трафик DNS с помощью tcpdump, я вижу, что на самом деле, когда squid обрабатывает HTTP-запросы, выполняются два DNS-запроса: один для разрешения имени хоста в HTTP-запросе, а другой - обратный поиск IP-адреса назначения запроса.

Я встретил подобное требование и сегодня. После некоторого покопания, похоже, что это функция Squid для предотвращения уязвимых http://www.squid-cache.org/Advisories/SQUID-2011_1.txt.

Чтение кода из https://github.com/squid-cache/squid/blob/master/src/peer_select.cc#L287. Он намеренно избегает DNS-поиска хоста в режиме перехвата.

http://lartc.org/lartc.html#LARTC.COOKBOOK.SQUID было бы хорошей отправной точкой.

Не применяйте DNAT к прокси, маршрутизируйте к нему трафик, маркируя пакеты. Трафик от прокси будет использовать другой интерфейс. к которому не применяется эта политика маршрутизации.