[РЕШЕНО] squid, iptables, destination

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

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

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

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

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

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

Добавь в начало:$B -A INPUT

Добавь в начало:

$B -A INPUT -i $LAN -p tcp --dport http -d $LAN_ADDR -j $A

вроде так. Была такая же проблема. Как решил, уже не помню...

Я не смог понять твой комментарий...
И по этому поводу решил подарить тебе запятую: ",". Используй её с умом!

Youshi написал(а):Добавь в

Youshi написал(а):
Добавь в начало:

$B -A INPUT -i $LAN -p tcp --dport http -d $LAN_ADDR -j $A

вроде так. Была такая же проблема. Как решил, уже не помню...

Не то... проблема, думаю в неправильном положении воскл. знака (!):
Попробуй так:

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

Я не смог понять твой комментарий...
И по этому поводу решил подарить тебе запятую: ",". Используй её с умом!

Не решает проблемы

# firewall.sh 
Using intrapositioned negation (`--option ! this`) is deprecated in favor of extrapositioned (`! --option this`).
Using intrapositioned negation (`--option ! this`) is deprecated in favor of extrapositioned (`! --option this`).
Using intrapositioned negation (`--option ! this`) is deprecated in favor of extrapositioned (`! --option this`).
# grep REDIRECT /usr/local/sbin/firewall.sh 
for ADDR in ${SQUID_EXCLUDE[@]}; do $B -t nat -A PREROUTING -p tcp --dport http  -d ! $ADDR -j REDIRECT --to-ports squid_proxy; done

вы 80-й хотите сделать

вы 80-й хотите сделать доступным извне и\или из локалки?

вариантов много, поясните зачем апач, зачем сквид

что-то добрый я сегодня ....

Я хочу, чтобы все запросы,

Я хочу, чтобы все запросы, прихоящие на сервер, прекратили заворачиваться в сквид.

Сквид мне нужен, чтобы кэшировать трафик, а апач, чтобы держать на нем некоторые свои проекты.

если не хотите геморроя, то

если не хотите геморроя, то уберите правило "заворота" и настройте клиентские броузеры на работу через прокси ip_сервера:port_сквида

если не хотите беготни по клиентам, то настройте апач 400 и 502 на вывод инструкции по настройке на стороне клиентов

если клиенты тупые и им не нужен местный "сайт", то ваше правило "заворота" должно исключать завороты с 127.0.0.1 и ip_сервера, тогда до апача можно будет достучаться по имени (настроив resolv'инг)

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

если все вышеизложенное слишком заумное, то настройте апач на "левый" порт (9080 к примеру), поднимите havp и пусть он разруливает запросы на местные (порт 9080) и внешние (сквид) (конфиг у havp'a элэмэнтарный)

зы
заворачивать весь 80-й на сквид (и далее в инет) не есть хорошо (имхо)
например my_ip:80 слушает отнюдь не апач

зызы
не забудьте "заворачивать" 443 и 8080 и 8081 как минимум

зызызы
как вариант поставить havp выше сквида (настроить сквид на работу через havp, а havp'y прикрутить еще и антивирус)

что-то добрый я сегодня ....

мамочки, спросил конкретный

мамочки, спросил конкретный вопрос. а получил слишком много советов. :)
мне совсем не охота ничего настраивать, ставить какой-то еще софт. думаю, squid, iptables, apache достаточно. и нет ничего плохого в том, чтобы заворачивать в сквид, все проходящее через 80 порт.

в общем, пошел логи tcpdump изучать.

Душа программиста негодует!

Это не скрипт, это сплошной быдлокод какой-то =(

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

Пункт 1)
Для пакетов протокола tcp приходящих с локальной сети на порт http, и НЕ НА адреса 127.0.0.1, LAN/WAN-ip, редирект на порт сквида, еще до того, как роутинг был произведен.

Т.е. правило, если кто сомневался, верное. Рекомендую включить tcpdump и посмотреть куда-же таки приходят пакеты на локальный апач, на какой ип, возможно он выпадает из LAN/WAN?

почему быдлокод? ну, не умею

почему быдлокод? ну, не умею я на баше скрипты писать, что тут сделать :)
щас привезу пакет травы. ой. то есть логи tcmpdump.

Если сами не программист,

Если сами не программист, есть ferm, очень ничего штука, посмотрите, может понравится.

А тут дело не в программировании на баше, а дело в стиле =)

Например B=iptables - вам лень написать IPT хотя бы? Ну и забить туда /sbin/iptables? Ну и вообщем все в том же стиле - опции короткие, комманды длинные и невнятные =)

Проблема решена. Никто не

Проблема решена. Никто не помог :)

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

Всем чмоки :)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".