[Iptables] Нужно фильтровать несколько ip, посдскажите. [Решено]

На роутере установлен Squid в режиме теневого прокси. Для него соответственно в цепочке PREROUTING делается редирект:

iptables -t nat -A PREROUTING -i ${LAN} -s 192.168.0.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-ports 3128

Чтобы фильтровать нужные ip, цепочек в FORWARD не достаточно, так как обращения на 80 порт после этого редиректа уходят на INPUT. Чтоб сработали правила для дропа пакета в FORWARD на нужные ip и на 80 порт, создал цепочку в начале PREROUTING:

iptables -N "prerouting_check"
iptables -F "prerouting_check"
iptables -t nat -A PREROUTING -i ${LAN} -s 192.168.25.0/255.255.255.0 -j prerouting_check

iptables -A prerouting_check -i ${LAN} -s 192.168.0.0/255.255.255.0 -d ${IP1} -j ACCEPT
iptables -A prerouting_check -i ${LAN} -s 192.168.0.0/255.255.255.0 -d ${IP2} -j ACCEPT
iptables -A prerouting_check -j RETURN

Как я понял, пакет по принятию ACCEPT должен выскочить из PREROUTING не доходя до REDIRECT, и быть отловленным в FORWARD а не пойти на прокси в INPUT, но пакеты почему-то все равно попадают на прокси.

Подскажите, где я ошибся?

Решение:
В начале PREROUTING, до строк с REDIRECT:

iptables -A PREROUTING -i ${LAN} -s 192.168.0.0/255.255.255.0 -d ${IP1} -j RETURN
iptables -A PREROUTING -i ${LAN} -s 192.168.0.0/255.255.255.0 -d ${IP2} -j RETURN

>Как я понял, пакет по

>Как я понял, пакет по принятию ACCEPT должен выскочить из PREROUTING не доходя до REDIRECT
Не совсем, правило формируется в цепочке prerouting_check поэтому оно скорее будет звучать так:
пакет по принятию ACCEPT должен выскочить из prerouting_check и пойти дальше (так как у именованных цепочек нет правила по умолчанию:default policy, поэтому и обязано)

ИМХО лучше сделать так:
iptables -A PREROUTING -i ${LAN} -s 192.168.0.0/255.255.255.0 -d ${IP1} -j RETURN
iptables -A PREROUTING -i ${LAN} -s 192.168.0.0/255.255.255.0 -d ${IP2} -j RETURN
iptables with redirect

Спасибо! То есть я ошибся с

Спасибо! То есть я ошибся с действием ACCEPT, которая выкидывает пакет только из prerouting_check, но не из PREROUTING. А если выполнится RETURN в PREROUTING, то пакет пойдет в FORWARD?

Да, только учти что если ты

Да, только учти что если ты его засунешь в новую цепочку он будет просто возвращать пакет из этой именнованной цепочки, то есть ставить это правило в конец именованной цепочки - все равно что мазать масло маслом

Еще раз спасибо! Ваше решение

Еще раз спасибо! Ваше решение максимально простое и работает! Без всяких дополнительных веток и строк.

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

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