LINUX.ORG.RU
решено ФорумAdmin

squid, iptables, destination


0

0

В общем, проблема вот такая. Имеется локальная сеть.В ее центре сервер (192.168.0.1), все запросы ходят через этот сервер. На сервере маскарадинг (правила iptables приведу ниже). Так же на сервере есть squid, висящий на 3128 порту. Вот сетевые интерфейсы:

[code]ppp0 (someaddr) — pppoe в интернет eth0 (anotheraddr) — путь в локалку прова br0 (192.168.0.0/24) — моя домашняя локалка[/code]

В iptables есть правило, заворачивающее все запросы, проходящие через сервер для 80 порта на порт 3128 (прозрачный прокси). Вот оно:

[code]B="iptables" A="ACCEPT"

LAN="br0" LAN_ADDR="192.168.0.1" WAN_ADDR="myserveraddr"

SQUID_EXCLUDE=( "$LAN_ADDR" "$WAN_ADDR" "127.0.0.1" )

for ADDR in ${SQUID_EXCLUDE[@]}; do $B -t nat -A PREROUTING -p tcp -i $LAN --dport http ! -d $ADDR -j REDIRECT --to-ports squid_proxy; done $B -A INPUT -i $LAN -p tcp --dport squid_proxy -j $A[/code]

Проблема в том, что этом же сервере на 80-ом порту крутится apache. Когда заходишь на него, то трафик, несмотря на "! -d $ADDR", все равно заворачивается на 3128 порт. Что я делаю не так, ребята?

Вот все правила iptables: http://dpaste.com/94194/

Re: squid, iptables, destination

Лор блин испортил текст :(

cheerfulboy ()

Re: squid, iptables, destination

Надо не так

# Если что-то идет не на первый адрес из спикса — редиректим
# Если что-то идет не на второй адрес из спикса — редиректим
# ...
for ADDR in ${SQUID_EXCLUDE[@]}; do $B -t nat -A PREROUTING -p tcp -i $LAN --dport http ! -d $ADDR -j REDIRECT --to-ports squid_proxy; done
а так
# Если что-то идет на первый адрес из списка — выходим
# Если что-то идет на второй адрес из списка — выходим
# ...
for ADDR in ${SQUID_EXCLUDE[@]}; do $B -t nat -I PREROUTING -p tcp -i $LAN --dport http -d $ADDR -j RETURN; done
# Все, что осталось — редиректим
$B -t nat -A PREROUTING -p tcp -i $LAN --dport http -j REDIRECT --to-ports squid_proxy

Из литературы я бы посоветовал учебник логики ;)

nnz ★★★★ ()
Ответ на: Re: squid, iptables, destination от nnz

Re: squid, iptables, destination

спасибо за помощь, все работает! :) но вот только я все равно не воткнул, почему мой вариант не работает :(

cheerfulboy ()
Ответ на: Re: squid, iptables, destination от cheerfulboy

Re: squid, iptables, destination

>но вот только я все равно не воткнул, почему мой вариант не работает

Допустим, у тебя первым в списке идет айпишник 127.0.0.1, а клиент обращается по внутреннему. В первом же правиле прописано: редиректить все, что идет не на 127.0.0.1. Ну, клиента и редиректит. А при обращении на 127.0.0.1 сработает второе правило, потому что айпишник там другой. Простая логика.

nnz ★★★★ ()
Ответ на: Re: squid, iptables, destination от nnz

Re: squid, iptables, destination

хорошо. а можно ли как-то все переделать не для ip-адресов, а для ifaces? в prerouting нельзя пихать --out-interface. :(

cheerfulboy ()
Ответ на: Re: squid, iptables, destination от cheerfulboy

Re: squid, iptables, destination

>хорошо. а можно ли как-то все переделать не для ip-адресов, а для ifaces? в prerouting нельзя пихать --out-interface. :(

Когда пакет попадает в цепочку PREROUTING, система еще не знает, предназначен он конкретно этому хосту или пойдет дальше. Собственно, это в ней и можно изменить. Выходной интерфейс определяется в том числе и на основании правил, заданных в этой цепочке. Поэтому информация о выходном интерфейсе на данном этапе отсутствует.

Но более простой вариант сделать можно.
$B -t nat -A PREROUTING -p tcp -i $LAN --dport http -m addrtype ! --dst-type LOCAL -j REDIRECT --to-ports squid_proxy

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