LINUX.ORG.RU

iptables + TransparentProxy


0

0

Нашёл TransparetProxy-howto. В нем описывается как настроить прозрачный прокси с локальным Squid (как я понял это прокся). А дальше есть такие строки:

6. Transparent Proxy to a Remote Box

Now, the question naturally arises, if we can do all this nifty stuff redirecting HTTP connections to local ports, could we do the same thing but to a remote box (e.g., the machine with squid running is not the same machine as iptables is running on). The answer is yes....

Первый споссоб, такой:

iptables -t nat -A PREROUTING -i eth0 -s ! squid-box -p tcp --dport 80 -j DNAT --to squid-box:3128

iptables -t nat -A POSTROUTING -o eth0 -s local-network -d squid-box -j SNAT --to iptables-box

iptables -A FORWARD -s local-network -d squid-box -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT

Где squid-box - ip адрес удалённой прокси, local-network - это локальная сеть для которой мы являемся шлюзом, а iptables-box - это ip нашегно шлюза-фаервола.

И я что-то неочень понимаю, как оно работает. Вот например как я понимаю первую запись: у всех пакетов которые приходят на eth0, на 80-й порт tcp соединения, имеют адрес отправителя не = ip(squid-box), необходимо перед решением о роутинге поменять адрес получателя на ip(sqid-box):3128.

И как это так? Например оправляю я запрос на (google.ru) из локалки. Фаервол принимает запрос проверяет: пришёл на eth0, адрес источника - не ip(squid-box), порт 80. Пакт правилу удовлетворяет => надо поменять ip(google.ru) на ip(squid-box). Squid-box (прокся) пакет получит, но откуда она узнает куда его отправлять дальше? Вобщем я чего-то не понимаю, объясните пожалуйста.

то что ты описал, это маскардинг. а в правилах описан прозрачный прокси, т.е. все пакетики идущие на 80 порт, заворачиваются на порт прокси, а прокся уже сама от своего имени делает запрос в инет.

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

Т.е. все клиенты нашего шлюза прежде чем передать сетевой пакет, сначала с помощью браузера заворачивают их в проксёвую обёртку, а мы уже меняем адрес в этой обёртке на адрес другой (внешней) прокси?

Так какая же это прозрачная (transparent proxy). Я думал что прозрачная прокси это когда клиент не подозревает о существовании прокси в сети. А здесь клиент знает что в сети есть прокси но реально использует не ту, которая указана у него в браузере, а ту которую мы захотим. Правильно да?

letopisec
() автор топика
Ответ на: комментарий от letopisec

Так клиенты и не подозревают о существовании прокси, до тех пор, пока не получит отрицательный ответ от сквида :)

Клиенты обращаются к 80 порту, считая, что они напрямую общаются с веб-сервером, на самом деле на шлюзе все пакеты, которые имеют порт назначения 80 переадресуются на проксю, которая взаимодействует с вебом. Прокси получает какой-либо ответ от веб-сервера и отсылает его шлюзу, который переадресует его клиенту.

Кажется ничего не напутал :)

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

Спасибо. Посидел поразминался с iptables многое понял. Одно мне не очень понятно, объясните кто-нибудь. Пишем правило например такое:

iptables -t nat -A OUTPUT -p tcp -dport 80 -j REDIRECT --to-port 100

Пакет должен после прохождения цепочки OUTPUT таблицы nat попасть опять на ту же самую машину. Что это значит? Каковы будут поля адреса источника/приёмника, каким будет считаться входной интерфейс, пойдёт ли этот пакет снова на цепочки input. Мне не понятно почему при таком правиле браузер на этой же машине ходит в инет?

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