squid + iptables = не понимаю!

Всем привет!
Есть задача настроить squid в прозрачном режиме.

1) добавляю в squid.conf

http_port 3129 tproxy 

2) Настраиваю iptables
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables  -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables  -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129

3) Делаю следующее:
 ip -f inet rule add fwmark 1 lookup 100
ip -f inet route add local default dev eth1 table 100
(где eth1 есть мой активный сетевой интерфейс)

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
Ну и все это добро сохраняю, перезапускаю в итоге получаю что весь трафик идет напрямую (не через прокси)
curl -I4 http://version6.ru/
HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.3-7+squeeze14
Set-Cookie: DokuWiki=kefdjai034aifjfrbvpu2365s0; path=/; HttpOnly
Set-Cookie: DW68700bfd16c2027de7de74a5a8202a6f=deleted; expires=Mon, 07-Nov-2011 20:22:34 GMT; path=/; httponly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Date: Tue, 06 Nov 2012 20:22:35 GMT
Server: lighttpd/1.4.28



Понимаю что нужно iptables вертеть, но я в нем слабоват! прошу помощи
Попробуйте в п.3 поменять маршрут в маршруте “ip -f inet route add local default dev eth1 table 100” eth1 на lo.
Если не заработает, то вывод команд
sudo iptables -S -v -t mangle
sudo ss -npl | grep squid
когда я тягался с кальмаром, для прозрачного режима надо было гдето дописать transparent чтото в это роде. Правила фаера не глядел, торопился…
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
kurych
Попробуйте в п.3 поменять маршрут в маршруте “ip -f inet route add local default dev eth1 table 100” eth1 на lo.
Если не заработает, то вывод команд
sudo iptables -S -v -t mangle
sudo ss -npl | grep squid

Не помогло:
sudo iptables -S -v -t mangle
[sudo] password for vovan: 
-P PREROUTING ACCEPT -c 275 40777
-P INPUT ACCEPT -c 743 304174
-P FORWARD ACCEPT -c 0 0
-P OUTPUT ACCEPT -c 735 194966
-P POSTROUTING ACCEPT -c 735 194966
-N DIVERT
-N prevent_tproxy_loop
-A PREROUTING -p tcp -m socket -c 4072 946519 -j prevent_tproxy_loop
-A PREROUTING -p tcp -m tcp --dport 80 -c 0 0 -j TPROXY --on-port 3129 --on-ip 0.0.0.0 --tproxy-mark 0x1/0xffffffff
-A PREROUTING -p tcp -m socket -c 0 0 -j DIVERT
-A PREROUTING -p tcp -m tcp --dport 80 -c 0 0 -j TPROXY --on-port 3129 --on-ip 0.0.0.0 --tproxy-mark 0x1/0x1
-A DIVERT -c 0 0 -j MARK --set-xmark 0x1/0xffffffff
-A DIVERT -c 0 0 -j ACCEPT
-A prevent_tproxy_loop -c 4072 946519 -j MARK --set-xmark 0x1/0xffffffff
-A prevent_tproxy_loop -c 4072 946519 -j ACCEPT

sudo ss -npl | grep squid
LISTEN     0      128                      :::3129                    :::*      users:(("squid",1970,17))

sleepycat
когда я тягался с кальмаром, для прозрачного режима надо было гдето дописать transparent чтото в это роде. Правила фаера не глядел, торопился…

На сколько мне известно это актуально в версии squid 2* у меня же 3.2 в нем такой опции нет вообще, есть только tproxy
понятно, ну да я подозревал , что может опция уже устарела.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
вот со старых конфигов висящих на дебиане, в вашем колдунстве еще не разобрался, как разберусь, уточню… больше помочь не чем, на данный момент.
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
А что это у Вас за цепочка "prevent_tproxy_loop"? Вы ее сами создавали где-нибудь? Все пакеты (смотрим значения счетчиков в ) уходят через эту цепочку. Может, сначала очистить все таблицы в iptables, а потом уже заново попробовать прописать правила?
И еще такой вопрос: обрисуйте поконкретнее схему подключения и кого надо пропускать через прокси прозрачно. То есть, компьютер со squid-ом является шлюзом для клиентов локальной сети или весь трафик генерируется на нем? Сколько интерфейсов на этом компьютере и какой куда смотрит?
kurych
А что это у Вас за цепочка "prevent_tproxy_loop"? Вы ее сами создавали где-нибудь? Все пакеты (смотрим значения счетчиков в ) уходят через эту цепочку. Может, сначала очистить все таблицы в iptables, а потом уже заново попробовать прописать правила?
И еще такой вопрос: обрисуйте поконкретнее схему подключения и кого надо пропускать через прокси прозрачно. То есть, компьютер со squid-ом является шлюзом для клиентов локальной сети или весь трафик генерируется на нем? Сколько интерфейсов на этом компьютере и какой куда смотрит?


Почистил, удалил, заного прописал:
P PREROUTING ACCEPT -c 73 26203
-P INPUT ACCEPT -c 228 39315
-P FORWARD ACCEPT -c 0 0
-P OUTPUT ACCEPT -c 176 14032
-P POSTROUTING ACCEPT -c 176 14032
-N DIVERT
-A PREROUTING -p tcp -m socket -c 167 13859 -j DIVERT
-A PREROUTING -p tcp -m tcp --dport 80 -c 0 0 -j TPROXY --on-port 3129 --on-ip 0.0.0.0 --tproxy-mark 0x1/0x1
-A DIVERT -c 167 13859 -j MARK --set-xmark 0x1/0xffffffff
-A DIVERT -c 167 13859 -j ACCEPT
Проверка:
curl -I4 http://version6.ru/
curl: (7) couldn't connect to host

Подключение упростил банально до простого:
1) Squid = ничего не запрещает (только кеширует) всем все разрешает (пока не разберусь в чем проблема, в не прозрачном режиме проблем нет, все работает)
2) Iptables = ничего кроме перенаправления на squid не выполняет.
3) Да трафик генерируется на компе где все это добро установлено (рабочий ноут, на нем все оттестирую, после пойду уже на серв ставить).
4) Интерфейс 1.
А Вы так на одном компьютере и не разберетесь. В крайнем случае, можно попробовать клиентов в виртуалке создать.
В рассматриваемой конфигурации все правила срабатывают исключительно для пакетов, приходящих из-вне (PREROUTING mangle). Поэтому в цепочку DIVERT попадают только входящие пакеты, для которых соединение установил Ваш компьютер, а в правило с “–dport 80” никто не попадает. Можете с какого-нибудь компьютера попробовать открыть http соединение к этому хосту, тогда увидите и на нем “попадание”.
Можете попробовать для тестирования заменить правило “-A PREROUTING -p tcp -m tcp –dport 80 -c 0 0 -j TPROXY …” на правило "iptables -t mangle -A OUTPUT -p tcp -m tcp –dport 80 -c 0 0 -j TPROXY …" Правила для цепочки DIVERT отставить без изменений. Вероятно, это заработает для трафика на данном компьютере.
Для того, что бы tproxy работало на сервере, надо учесть, что весь трафик, предназначенный для проксирования, должен проходить через этот сервер в обе стороны. То есть, он должен быть либо шлюзом для клиентов локальной сети, либо необходимый трафик должен на него перенаправляться другими способами.
 
Зарегистрироваться или войдите чтобы оставить сообщение.