LINUX.ORG.RU
ФорумAdmin

iptables для прозрачного squid'а


0

1

Доброго времени суток! Второй раз торможу на настройке прозачного прокси. Как непрозрачный прокси работает. Но прозрачно — нет. Соединение рвётся по таймауту. в squid.conf

http_port 192.168.1.33:3129 intercept
http_port 192.168.1.33:3128
#http_port 192.168.1.33:3129 tproxy
В rc.firewall
$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
#$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE  -p tcp --dport 80 -j REDIRECT --to-port 3129
#$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -p tcp --dport 21 -j REDIRECT --to-port 3129
Версия сквида — 3.1.1 Подскажите, где накосячил! Помню, что в прошлый раз редирект на тпрокси менял и всё работало. А сейчас не получается... С таким конфигом я прозрачный прокси уже поднимал, а вот конфиг iptables потерял.

Заранее благодарю за помощь!

★★★★★

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

где тут в ветке 3.1.* такая опция?

А что выпилили опцию? Папа Карло старенький, 2.7 везде использует.

Papa_Carlo ()

тебе нужна закомментированная строчка(с tproxy). intercept в такой конфиге iptables работать не будет

Pinkbyte ★★★★★ ()
$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

Можно поподробней, что делают эти строки?

$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE  -p tcp --dport 80 -j REDIRECT --to-port 3129
Я бы делал так, но у вас это почему-то закомментировано.

$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -p tcp --dport 21 -j REDIRECT --to-port 3129

емнип бессмысленно. прозрачное проксирование катит только для http.

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

Вроде нат правмльный. Может ты забыл 3129 порт открыть ?

Порт точно открыт. Там вся внутренняя сеть открыта.

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

тебе нужна закомментированная строчка(с tproxy). intercept в такой конфиге iptables работать не будет

С tproxy поведение тоже самое. Увы. Я уже пробовал.

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

Можно поподробней, что делают эти строки?

Преобразуют запросы к веб-серверу в запросы к прокси.

Я бы делал так, но у вас это почему-то закомментировано.

Пробовал и так и так. Не работает. Но помню, что в прошлый раз заработало с TPROXY.

емнип бессмысленно. прозрачное проксирование катит только для http.

Не помню. Как настрою, проверю.

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

3.1 Вроде стабильная версия.
Кажется, я решил проблему, только ещё не понял как. Завтра буду разбираться, сейчас уже засыпаю. Потом отпишусь.

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

Вернул в squid.conf tproxy, хотя и transparent работал.
В rc.firewall сейчас следующее:

-------------- LORCODE почему-то не работает сейчас
$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 nat -A PREROUTING -i $LAN_IFACE -p tcp --dport 80 -j REDIRECT --to-port 3129
$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -p tcp --dport 21 -j REDIRECT --to-port 3129
-----------------
Даже не знаю, почему раньше не работало. Видимо, я не проверял такую комбинацию, т.к. iptables ругается:

iptables: Chain already exists.

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

А, нет, не работает. Видимо, это я подключения перепутал. Вот лог:
# tail -n 20 /var/log/squid/access.log
1336811348.259 0 192.168.1.122 TCP_DENIED/403 4066 GET http://ocsp.verisign.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBQ/xkCfyHfJr7GQ6M658NRZ... - NONE/- text/html
1336811348.312 0 192.168.1.122 TCP_DENIED/403 3637 GET http://csc3-2004-crl.verisign.com/CSC3-2004.crl - NONE/- text/html
1336815233.173 6567 192.168.1.150 TCP_MISS/200 6443 CONNECT easylist-downloads.adblockplus.org:443 - DIRECT/213.239.217.143 -
1336815258.641 25438 192.168.1.150 TCP_MISS/200 200668 CONNECT easylist-downloads.adblockplus.org:443 - DIRECT/213.239.217.143 -
1336815262.329 2505 192.168.1.150 TCP_MISS/302 240 GET http://linux.org.ru/ - DIRECT/217.76.32.61 -
1336815267.791 5431 192.168.1.150 TCP_MISS/200 17250 GET www.linux.org.ru/ - DIRECT/217.76.32.61 text/html
1336815269.665 1762 192.168.1.150 TCP_MISS/000 0 GET http://www.google-analytics.com/__utm.gif - DIRECT/www.google-analytics.com -
1336815272.020 2351 192.168.1.150 TCP_MISS/200 5009 GET www.linux.org.ru/notifications - DIRECT/217.76.32.61 text/html
1336815273.894 1796 192.168.1.150 TCP_MISS/000 0 GET http://www.google-analytics.com/__utm.gif - DIRECT/www.google-analytics.com -
1336815273.971 6123 192.168.1.150 TCP_MISS/200 1446 GET http://d7.c1.b1.a0.top.mail.ru/counter - DIRECT/217.69.134.241 image/gif
1336815274.751 7637 192.168.1.150 TCP_MISS/200 480 GET http://d7.c1.b1.a0.top.mail.ru/counter - DIRECT/217.69.134.241 image/gif
1336815277.151 3253 192.168.1.150 TCP_MISS/302 346 GET www.linux.org.ru/jump-message.jsp - DIRECT/217.76.32.61 -
1336815278.171 10022 192.168.1.150 TCP_MISS/200 548 GET http://counter.rambler.ru/top100.cnt - DIRECT/81.19.88.103 image/gif
1336815279.165 0 192.168.1.150 TCP_IMS_HIT/304 322 GET http://www.gravatar.com/avatar/732d792c060705b651772776fa963d96 - NONE/- image/png
1336815279.191 2025 192.168.1.150 TCP_MISS/200 7729 GET iptables для прозрачного squid'а - DIRECT/217.76.32.61 text/html
1336815280.661 1768 192.168.1.150 TCP_MISS/200 480 GET http://d7.c1.b1.a0.top.mail.ru/counter - DIRECT/217.69.134.241 image/gif
1336815280.811 1534 192.168.1.150 TCP_MISS/200 548 GET http://counter.rambler.ru/top100.cnt - DIRECT/81.19.88.103 image/gif
1336815281.771 2564 192.168.1.150 TCP_MISS/200 1446 GET http://d7.c1.b1.a0.top.mail.ru/counter - DIRECT/217.69.134.241 image/gif
1336815282.520 3278 192.168.1.150 TCP_MISS/200 463 GET http://www.google-analytics.com/__utm.gif - DIRECT/173.194.32.8 image/gif
1336815284.020 1480 192.168.1.150 TCP_MISS/200 4303 GET iptables - DIRECT/217.76.32.61 text/html

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

Сейчас запросил ещё несколько узлов, но в логах ничего не появилось. Не знаю, как ещё найти ошибку. Я где-то неявно туплю.
Вот оба конфига: http://pastebin.com/YxnZNn3n

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

Можно поподробней, что делают эти строки?

Преобразуют запросы к веб-серверу в запросы к прокси

И чем же запросы к прокси отличаются от запроска к веб-серверу?

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

И чем же запросы к прокси отличаются от запроска к веб-серверу?

Как говориться, за что купил, за то продал. Прочитал так в каком-то руководстве. Да и если бы не отличались, достаточно было бы повесить прокси на 80й порт. И инструкции transparent, intercept и tproxy никто бы не изобретал.

fractaler ★★★★★ ()

Как ни странно transparent в 3.1 есть и REDIRECT это лучшее, что у меня получилось. Но теперь магическим способом отвалился NAT. И клиент не получает ответа от DNS. Хотя с сервера всё ок.
Поднял кеширующий DNS, но он тоже не даёт ответа.

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

Да и если бы не отличались, достаточно было бы повесить прокси на 80й порт. И инструкции transparent, intercept и tproxy никто бы не изобретал.

Нет, не достаточно. Клиент в случае прозрачного прокси (т.е. прокси, о котором клиент не знает) пытается установить tcp соединение с неким dstip. Но наша задача перехватить это соединение и направить его на наш proxy:port. Т.е. - подменить dstip (и, возможно, dstport). Эту работу делает запись:

$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE  -p tcp --dport 80 -j REDIRECT --to-port 3129

при условии что прокси-сервер слушает порт 3129 и будет ожидать, что туда поступают хттп запросы от клиентов, которые не знают, что используют прокси

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

И, конечно же, входящий трафик на порт 3129 должен пускаться на сервер

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

вот кусок моих правил iptables, таблица mangle:

*mangle
:TRANSPARENT_PROXY - [0:0]
-A TRANSPARENT_PROXY -j MARK --set-mark 1
-A TRANSPARENT_PROXY -j ACCEPT
:PREROUTING ACCEPT [0:0]
# for TPROXY
-A PREROUTING -p tcp -m socket -j TRANSPARENT_PROXY
-A PREROUTING -i ppp+ -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129
# mark for shaper (200 - SPARK, 100 - AS)
-A PREROUTING -i eth1 -j MARK --set-mark 200
-A PREROUTING -i tun0 -j MARK --set-mark 100
:OUTPUT ACCEPT [0:0]
# traffic from transparent proxy to VPN users
-A OUTPUT -o ppp+ -j MARK --set-mark 100
:FORWARD ACCEPT [0:0]
# fix MSS
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
:POSTROUTING ACCEPT [0:0]
COMMIT

Ну и в цепочке filter такая штука:

# for TPROXY
-A INPUT -i ppp+ -p tcp --dport 80 -j ACCEPT

ip rule:

0:      from all lookup local 
50:     from all fwmark 0x1 lookup tproxy 
32766:  from all lookup main 
32767:  from all lookup default

ip route show table tproxy:

local default dev lo  scope host

Ну и uname -a на закуску:

Linux hostel7-gw 3.0.17-gentoo-r2-HOSTEL7 #2 SMP Mon Apr 16 13:12:28 MSK 2012 x86_64 Intel(R) Pentium(R) Dual CPU E2220 @ 2.40GHz GenuineIntel GNU/Linux

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