[Iptables] Нужно фильтровать несколько ip, посдскажите. [Решено]
micbal 6 июля, 2011 - 15:04
На роутере установлен 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?
Да, только учти что если ты
Да, только учти что если ты его засунешь в новую цепочку он будет просто возвращать пакет из этой именнованной цепочки, то есть ставить это правило в конец именованной цепочки - все равно что мазать масло маслом
Еще раз спасибо! Ваше решение
Еще раз спасибо! Ваше решение максимально простое и работает! Без всяких дополнительных веток и строк.