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

iptables: необычный редирект


0

1

Имеется сервер (192.168.0.1), который раздает интернет в локальную сеть 192.168.0.0/24. На сервере необходимо осуществить перенаправление любых запросов с любых портов из подсети 192.168.0.0/24 на адрес 192.168.0.1:80 (тобишь на локальный сайт). Но при этом для трех mac-адресов следует оставить все без изменений.. (IP раздаются динамически). Подскажите правило (или набор правил) для iptables, с помощью которого можно решить эту задачу.

Гм.. интересная задача. Наверное. как-то так:


iptables -t nat -A PREROUTING -i eth0 -m mac --mac-source XX:XX:XX:XX:XX:X1 -j MARK --set-mark 1
iptables -t nat -A PREROUTING -i eth0 -m mac --mac-source XX:XX:XX:XX:XX:X2 -j MARK --set-mark 1
iptables -t nat -A PREROUTING -i eth0 -m mac --mac-source XX:XX:XX:XX:XX:X3 -j MARK --set-mark 1

iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -j DNAT --to-destination 192.168.0.1:80

eth0 - предположим, что это сетевуха, торчащая в локалку. Маркируем в таблице nat. а не в mangle (чтобы при совпадении дальнейшая обработка цепочки в таблице была прервана и чтобы дело не дошло до правила с -j DNAT)

Пробуйте копать в этом направлении; не обещаю, что мой пример заработает влёт - проверить негде сейчас.

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

Спасибо за ответ - опробую этот способ в ближайщее время. Только возник вопрос: как маркировка пакета влияет на его дальнейшее прохождение? P.s. Читаю теорию по iptables. И здесь сказано, что маркировка

..может выполняться только в пределах таблицы mangle..

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

iptables -t nat -A PREROUTING -i eth0 -m mac --mac-source XX:XX:XX:XX:XX:X1 -j MARK --set-mark 1
iptables -t nat -A PREROUTING -i eth0 -m mac --mac-source XX:XX:XX:XX:XX:X2 -j MARK --set-mark 1
iptables -t nat -A PREROUTING -i eth0 -m mac --mac-source XX:XX:XX:XX:XX:X3 -j MARK --set-mark 1

iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -j DNAT --to-destination 192.168.0.1:80

double_brutal_facepalm.png Это что вообще было? O_o

Для сравнения, правильный ответ:

iptables -t nat -N redir
iptables -t nat -A redir -m mac --mac-source XX:XX:XX:XX:XX:X1 -j RETURN
iptables -t nat -A redir -m mac --mac-source XX:XX:XX:XX:XX:X2 -j RETURN
...
iptables -t nat -A redir -m mac --mac-source XX:XX:XX:XX:XX:XN -j RETURN
iptables -t nat -A redir -p tcp -j DNAT --to-destination 192.168.0.1:80
iptables -t nat -I PREROUTING -p tcp -s 192.168.0.0/24 -j redir

А вообще, имхо, порт назначения все же стоит проверять.

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

>double_brutal_facepalm.png Это что вообще было? O_o

А, понял, откуда это.

Из заблуждения, что действие MARK является терминальным. Нет, оно таким не является, и после применения к пакету этого действия, он проследует по цепочке дальше. А для таких целей применяют ACCEPT или RETURN.

iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -j DNAT --to-destination 192.168.0.1:80


Кстати, DNAT/SNAT/REDIRECT по портам без указания протокола (tcp/udp/sctp/dccp) добавляться не станут.

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

А, понял, откуда это.

Спасибо! Я уж подумал, что я настолько туп, что не понимаю, что ЭТО.

zgen ★★★★★ ()
Ответ на: комментарий от nnz

Да, извиняюсь, затупил некисло :(
Спасибо, что исправили.

Slavaz ★★★★★ ()
Ответ на: комментарий от nnz

> Для сравнения, правильный ответ:
Большое спасибо! Все работает! (happy)

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

> Для сравнения, правильный ответ:
Тема iptables меня очень заинтересовала..:) А можно еще узнать, для общего развития, как изменится вид правил, если делать не редирект, а просто запрещать доступ в интернет?

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

>А можно еще узнать, для общего развития, как изменится вид правил, если делать не редирект, а просто запрещать доступ в интернет?

Уберется -t nat, вместо PREROUTING будет FORWARD, вместо DNAT будет DROP или REJECT (без параметра --to-destination, разумеется). Еще можно цепочку redir переименовать в ban для упрощения понимания.

Тема iptables меня очень заинтересовала..:)

Пользуясь случаем, пропиарю свой бложик: http://ru.wikipedia.org/wiki/Iptables

Правда, статья перманентно не закончена из-за перманентного недостаткая времени, но ценной инфы там уже сейчас довольно много.

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

google://iptables+howto должен тебе всё интересующее рассказать.

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