LINUX.ORG.RU
ФорумAdmin

вопрос по iptables


0

0

Вообщем такая вот есть ситуация - я сам не админ, а простой разработчик (под *nix - поэтому особых с админством проблем нет), но сделать это надо по сколько обещал помочь очень хорошему человеку.

Есть у меня типа рутер, есть у него два физических интерфейса - один eth0 смотрит в локальную сеть, другой eth2 смотрит в мир. Соотвественно есть несколько внешних ip адресов.

Делаю я NAT и виртуальные интерфейсы на eth2 - все у всех с инетом ok - но мне нужна такая штука - допустим идет пакет на xxx.xxx.xx.12 из мира - и попадает он на некий eth2:12 откуда ему б неплохо отправится на 192.168.0.12 - ну и в обратную сторону чтобы также ходило - внимание вопрос - как так сделать ??? Я на 99% уверен что теоритически так делать можно.

Помогите пожалуйста, заранее спасибо.

Ответ на: комментарий от MiracleMan

как ?

мне тут подсказали - что то типа

iptables -t nat -A PREROUTING -d xxx.xxx.xxx.18 -j DNAT --to-destination 192.168.0.18
iptables -t nat -A POSTROUTING -s 192.168.0.18 -j SNAT --to-destination xxx.xxx.xxx.18

на что пишет

iptables v1.3.6: Unknown arg `--to-destination'
Try `iptables -h' or 'iptables --help' for more information.

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

Ну и?

Верно пишет..
Не - iptables -t nat -A POSTROUTING -s 192.168.0.18 -j SNAT --to-destination xxx.xxx.xxx.18

а - iptables -t nat -A POSTROUTING -s 192.168.0.18 -j SNAT --to-source xxx.xxx.xxx.18

Можно указать протокол и интерфейсы для ясности..

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

SNAT лишний, он нужен только если компы в локалке не знают о раутере, а в данном случае он (раутер) у них и так default gateway (в инет они через него ходят)

Что в FORWARD?

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

>Попробуй привязывать правила к сетевым интерфейсам..

оно ругается ;((( ничего не понимаю в этом синтаксисе ;((

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

#!/bin/sh

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

#clear exiting routes
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F

#set nat
iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth2 -j ACCEPT
iptables -t nat -A PREROUTING -d xxx.xxx.xxx.18 -j DNAT --to-destination 192.168.0.18 
iptables -t nat -A POSTROUTING -s 192.168.0.18 -j SNAT --to-source xxx.xxx.xxx.18 
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

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

Просто описываешь для каждого сетевого интерфейса свои правила.. input, output, forward, prerouting, postrouting.. Можно напрямую, можно создавая свои цепочки правил и, затем, цепляя их на интерфейсы..

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

Нет.. ну, так не пойдёт..

Вот, к примеру, краткий фрагмент - 

  #create new INPUT chain for local 1 ethernet interface
  iptables -N $localif"-i"

  #flush all rules in chain (sanity flush)
  iptables -F $localif"-i"

  #deny fragmented packets
  iptables -A $localif"-i" --fragment -i $localif -j DROP

  for net in $ALLOWED_NET; do

        #DROP anything not coming from the internal 1 network.
        #iptables -A $localif"-i" -i $localif -s ! $net -j DROP

        #Check TCP packets coming in on the internal 1 interface for wierd flags.
        iptables -A $localif"-i" -p TCP -i $localif -s $net -d 0/0 -j CHECK_FLAGS

        #some personal rules for some ip's
        iptables -A $localif"-i" -p TCP -i $localif -s $net -d $staticnet/$staticmask -j ACCEPT
        iptables -A $localif"-i" -p UDP -i $localif -s $net -d $staticnet/$staticmask -j ACCEPT

        #local interface, local machines, going anywhere is valid
        iptables -A $localif"-i" -j ACCEPT -i $localif -s $net -d 0/0

  done

  #For internet cafe printing
  iptables -A $localif"-i" -i $localif -s 10.x.x.x -d $localnet1/$localmask1 -j ACCEPT

  #all other incoming is denied and logged
  iptables -A $localif"-i" -j DROP -s 0/0 -d 0/0

в данном фрагменте создаётся цепочка правил для входящих пакетов на внутреннем интерфейсе..

А вот, для исходящих -

 #create new OUTPUT chain for local 1 ethernet interface
  iptables -N $localif"-out"

  #flush all rules in chain (sanity flush)
  iptables -F $localif"-out"

  for net in $ALLOWED_NET; do

        #DROP anything not going from the internal 1 network.
        #iptables -A $localif"-out" -o $localif -d ! $net -j DROP

        #Check TCP packets goint out on the internal 1 interface for wierd flags.
        iptables -A $localif"-out" -p TCP -o $localif -s 0/0 -d $net -j CHECK_FLAGS

        #local interface, any source going to local net is valid
        iptables -A $localif"-out" -j ACCEPT -o $localif -s 0/0 -d $net

  done

  #For internet cafe printing
  iptables -A $localif"-out" -o $localif -s $localnet1/$localmask1 -d 10.x.x.x -j ACCEPT

  #all other outgoing is denied and logged
  iptables -A $localif"-out" -j DROP -s 0/0 -d 0/0

Разумеется, в данном случае, используются свои цепочки с последующей привязкой.. И переменные, разумеется, свои.. Надеюсь нет необходимости обьяснять, что ALLOWED_NET как раз и содержит список сетей, к которым разрешено обращение через данный интерфейс.. Ну и о forward  тоже забывать не стоит..

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

Ну, не стоит слишком буквально следовать переменным из данного примера. Всё-таки, скрипт, откуда взяты данные вырезки, достаточно специфичен..

$staticnet/$staticmask - в оригинале означала внешнюю сеть..

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

ну вообщем суть вопроса остается - никак не побороть, а настроить сам по себе firewall то я еще разберусь кое как - когда то делал, а вот эту фитчу с пересылкой пакетов мне пока никак не осилить ;(

не понятно почему происходит такая вот фигня.

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

Зачем сбиваете человека с толку своими локальными/специализированными скриптами ? По-моему у него и так с правилами было все ok (все, что надо, ничего лишнего).
Советую для отладки воспользоваться tcpdump-ом.

P.S. Иногда сталкивался с глюками MASQUERADE модуля: подставлял неверный адрес, в то время как SNAT работал отлично.

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

> никак не побороть
Можно увидеть окончательный вариант правил (то, что выводит iptables-save) ?
Что говорит tcpdump (в каком месте происходит затык) ?

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

>Можно увидеть окончательный вариант правил (то, что выводит iptables-save) ? Что говорит tcpdump (в каком месте происходит затык) ?

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

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

Да, согласен.. Для человека незнакомого, мои вырезки могут показаться излишне специфичными.. И с правилами для DNAT и SNAT у него всё было в порядке..

Только одна деталь - 

iptables -t nat -A PREROUTING -d xxx.xxx.xxx.18 -j DNAT --to-destination 192.168.0.18 
iptables -t nat -A POSTROUTING -s 192.168.0.18 -j SNAT --to-source xxx.xxx.xxx.18 

>только из внутренней сетки теперь не пингуется ;(

Оно и понятно.. Пакеты прекрасно направляются к шлюзу по умолчанию и от него и снатятся и днатятся.. Только где же в правилах присутствует открытие доступа для пакетов в локальной сети?

В моём примере, если сильно вкратце, то вот они: 
входящие - 

#local interface, local machines, going anywhere is valid
iptables -A $localif"-i" -j ACCEPT -i $localif -s $net -d 0/0 

где $net - локальная сеть,

и выходящие -

#local interface, any source going to local net is valid
iptables -A $localif"-out" -j ACCEPT -o $localif -s 0/0 -d $net

соответственно..

$ALLOWED_NET - список доступных локальных сетей..

Ну, и, примерно в том же духе по каждому интерфейсу.. входящие, выходящие, перенаправляемые и разные проверочные правила.. 

Совсем не обязательно делать нечто по образу и подобию, достаточно просто урегулировать в правилах обмен пакетами между тем хостом и остальной локальной сетью..

Вообщем, я полагал, что достаточно понятно выразил свою мысль..

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