URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 40632
[ Назад ]

Исходное сообщение
"Не понимаю работу divert в IPFW"

Отправлено stnik , 16-Фев-04 19:00 
Объясните пожайлуста работу divert.
Есть строчки в правилах IPFW:
intnet - внутренняя сеть,
extnet - внешняя сеть,
ifout - карта смотрящая в инет,
divert natd ip from ${intnet} to any out via ${ifout}
divert natd ip from any to ${extnet} in via ${ifout}
эти строчки у меня стоят первыми.
Вообще-то сам NAT у меня работает, вопрос в другом.
Никак не могу никак понять, что происходит с пакетом при попадании на любую из этих строчек?
Не в принципе саму их запись понимаю следующим образом, при попадании на первое правило, пакет, пришедший из внутренней сети, перебрасывается с адресом NAT во внешнюю сеть. А вот далее, что происходит, если брать во внимание man ipfw("Дальнейший поиск прекращается."), то как бы выбрасывается и все. Следовательно, пакеты должны спокойно пробегать, не подвергаясь ни каким проверкам ниже, но этого не происходит. Наверное потому, что в том же man ipfw написано, что для gateway они проверяются дважды. Вот здесь и вся загвоздка, т.е. после переброски натом пакет проверяется второй раз, но какой и с какого места не понятно совсем. Если со второго правила и уже с подставленным адресом получателя ${extnet}, то как я себе представляю, произойдет зацикливание.
Помогите разобраться, мне тогда намного будет проще писать следующие правила и тем самым спокойнее спать.

Содержание

Сообщения в этом обсуждении
"Не понимаю работу divert в IPFW"
Отправлено alexkid , 17-Фев-04 10:39 
Пакет проверяется дальше следующими правилами под условие которых он попадает.
Т.е. если у тебя ниже прописано правило что IP1 разрешено принимать пакеты  из внешней сети, а с остальным запрещено, то только IP1 пакеты дойдут от  второго правилом divert.

"Не понимаю работу divert в IPFW"
Отправлено A Clockwork Orange , 17-Фев-04 10:46 
диверт
диверт натд
тем и отличаются, что при втором пакет проверятся дальше после правила с нат.

"Не понимаю работу divert в IPFW"
Отправлено stnik , 17-Фев-04 11:45 
>диверт
>диверт натд
>тем и отличаются, что при втором пакет проверятся дальше после правила с
>нат.
Огромное спасибо за ответы.
В принципе я так и предпологал, но дока меня запутала.
И последний вопрос, дальнейшая проверка идет с перевернутым адресом?


"Не понимаю работу divert в IPFW"
Отправлено A Clockwork Orange , 17-Фев-04 11:53 
А это когда, где и что проверяешь

"Не понимаю работу divert в IPFW"
Отправлено stnik , 17-Фев-04 12:32 
>А это когда, где и что проверяешь
Когда срабатывает первый divert natd, во внешнюю сеть. Он дальше будет проверять, можно его выкинуть или нет. Просто не хочется проверать это опытным путем.


"Не понимаю работу divert в IPFW"
Отправлено A Clockwork Orange , 17-Фев-04 12:35 
Когда срабатывает
divert natd ip from ${intnet} to any out via ${ifout}
пакет имеет
адрес источника = адресу на который нитишь
адрес назначения = не изменился,
Пакетов с такими адресами и идет дальнейшая проверка.

"Не понимаю работу divert в IPFW"
Отправлено stnik , 17-Фев-04 12:48 
Пока вроде все понял(хотя в принципе и догадывался).
Всем ответившим, огромное спасибо.

"Не понимаю работу divert в IPFW"
Отправлено СергейКа , 17-Фев-04 13:39 
>Пока вроде все понял(хотя в принципе и догадывался).
>Всем ответившим, огромное спасибо.

Эх опоздал однако :)
Напоследок приведу цитату из man natd:

After translation by natd, packets re-enter the firewall at the rule number following the rule number that caused the diversion (not the next rule if there are several at the same number).

После трансляции natd, пакеты возвращаются в систему сетевой защиты и проверяются начиная с номера после номера правила, который вызвал divert natd (не следующее правило, что примечательно, а следующий номер).

Исходя из последнего возникает вопрос - если
${fwcmd} add 1000 divert natd ip from any to any via ${LanOut}
${fwcmd} add 1000 pass all from any to any

Будут ли пакеты проверятся вторым правилом с номером 1000?


"Не понимаю работу divert в IPFW"
Отправлено stnik , 17-Фев-04 18:18 
>Эх опоздал однако :)
>Напоследок приведу цитату из man natd:
>
>After translation by natd, packets re-enter the firewall at the rule number
>following the rule number that caused the diversion (not the next
>rule if there are several at the same number).
>
>После трансляции natd, пакеты возвращаются в систему сетевой защиты и проверяются начиная
>с номера после номера правила, который вызвал divert natd (не следующее
>правило, что примечательно, а следующий номер).
>
>Исходя из последнего возникает вопрос - если
>${fwcmd} add 1000 divert natd ip from any to any via ${LanOut}
>
>${fwcmd} add 1000 pass all from any to any
>
>Будут ли пакеты проверятся вторым правилом с номером 1000?
Спасибо за цитату из man natd. Если честно, то ее я и не заметил.
Мое понимание цитаты таково: что любой следующий номер, который строго > номера с правилом divert natd( т.е. в приведенном примере следующая проверка будет идти с номера >=1001).
Интересно вообще как работатет в таких ситуациях IPFW?


"Не понимаю работу divert в IPFW"
Отправлено СергейКа , 17-Фев-04 19:09 
Вставил в живые правила строчку
00600  88  58356 divert 8668 ip from any to <внешний ИП> in recv rl0
00600 598 347108 allow log logamount 30 ip from any to any

192.168.10.10 - Локальная машина
195.195.195.195 - Внешний ИП natd
192.168.10.1 - Внутрений ИП

Feb 17 19:00:06 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.1:22 192.168.10.10:2692 out via rl1
Feb 17 19:00:06 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2692 192.168.10.1:22 in via rl1
Feb 17 19:00:08 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2715 194.85.34.226:80 in via rl1
Feb 17 19:00:08 mydomin /kernel: ipfw: 600 Accept TCP 195.195.195.195:2715 194.85.34.226:80 out via rl0
Feb 17 19:00:08 mydomin /kernel: ipfw: 600 Accept TCP 194.85.34.226:80 192.168.10.10:2715 out via rl1
Feb 17 19:00:08 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2715 194.85.34.226:80 in via rl1
Feb 17 19:00:08 mydomin /kernel: ipfw: 600 Accept TCP 195.195.195.195:2715 194.85.34.226:80 out via rl0
Feb 17 19:00:08 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2715 194.85.34.226:80 in via rl1
Feb 17 19:00:08 mydomin /kernel: ipfw: 600 Accept TCP 195.195.195.195:2715 194.85.34.226:80 out via rl0
Feb 17 19:00:08 mydomin /kernel: ipfw: 600 Accept TCP 194.85.34.226:80 192.168.10.10:2715 out via rl1
Feb 17 19:00:10 mydomin last message repeated 2 times
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2715 194.85.34.226:80 in via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 195.195.195.195:2715 194.85.34.226:80 out via rl0
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 194.85.34.226:80 192.168.10.10:2715 out via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2715 194.85.34.226:80 in via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 195.195.195.195:2715 194.85.34.226:80 out via rl0
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 194.85.34.226:80 192.168.10.10:2715 out via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2715 194.85.34.226:80 in via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 195.195.195.195:2715 194.85.34.226:80 out via rl0
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2716 194.85.34.226:80 in via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 195.195.195.195:2716 194.85.34.226:80 out via rl0
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 194.85.34.226:80 192.168.10.10:2715 out via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 194.85.34.226:80 192.168.10.10:2715 out via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2715 194.85.34.226:80 in via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 195.195.195.195:2715 194.85.34.226:80 out via rl0
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 194.85.34.226:80 192.168.10.10:2716 out via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2716 194.85.34.226:80 in via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 195.195.195.195:2716 194.85.34.226:80 out via rl0
Feb 17 19:00:10 mydomin /kernel: ipfw: 600 Accept TCP 192.168.10.10:2716 194.85.34.226:80 in via rl1
Feb 17 19:00:10 mydomin /kernel: ipfw: limit 30 reached on entry 600

Меняю на 00601

Feb 17 18:58:33 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.1:22 192.168.10.10:2692 out via rl1
Feb 17 18:58:33 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.10:2692 192.168.10.1:22 in via rl1
Feb 17 18:58:34 mydomin /kernel: ipfw: 601 Accept UDP 192.168.10.10:138 192.168.10.255:138 in via rl1
Feb 17 18:58:39 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.10:2712 194.85.34.226:80 in via rl1
Feb 17 18:58:39 mydomin /kernel: ipfw: 601 Accept TCP 195.195.195.195:2712 194.85.34.226:80 out via rl0
Feb 17 18:58:39 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 in via rl0
Feb 17 18:58:39 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 out via rl1
Feb 17 18:58:39 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.10:2712 194.85.34.226:80 in via rl1
Feb 17 18:58:39 mydomin /kernel: ipfw: 601 Accept TCP 195.195.195.195:2712 194.85.34.226:80 out via rl0
Feb 17 18:58:39 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.10:2712 194.85.34.226:80 in via rl1
Feb 17 18:58:39 mydomin /kernel: ipfw: 601 Accept TCP 195.195.195.195:2712 194.85.34.226:80 out via rl0
Feb 17 18:58:39 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 in via rl0
Feb 17 18:58:39 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 out via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 in via rl0
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 out via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 in via rl0
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 out via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.10:2712 194.85.34.226:80 in via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 195.195.195.195:2712 194.85.34.226:80 out via rl0
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 in via rl0
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 out via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 in via rl0
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 out via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.10:2712 194.85.34.226:80 in via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 195.195.195.195:2712 194.85.34.226:80 out via rl0
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.54:2341 192.168.10.1:110 in via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.1:110 192.168.10.54:2341 out via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.54:2341 192.168.10.1:110 in via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.1:110 192.168.10.54:2341 out via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 192.168.10.54:2341 192.168.10.1:110 in via rl1
Feb 17 18:58:40 mydomin /kernel: ipfw: limit 30 reached on entry 601


Вывод - ничего не изменилось...

Может кто знает более правильный перевод мана...


"Не понимаю работу divert в IPFW"
Отправлено Rippy , 25-Фев-04 13:40 
>Вставил в живые правила строчку
>00600  88  58356 divert 8668 ip from any to <внешний ИП> in recv rl0
>00600 598 347108 allow log logamount 30 ip from any to any

Покажи в первом варианте строчку из лога, которая бы удовлетворяла правилу
00600  88  58356 divert 8668 ip from any to <внешний ИП> in recv rl0
и
правилу
00600 598 347108 allow log logamount 30 ip from any to any
???  Я не увидел
А вот во втором случае после диверта 600 правилом, правило 601 кинуло в лог
Feb 17 18:58:40 mydomin /kernel: ipfw: 601 Accept TCP 194.85.34.226:80 192.168.10.10:2712 in via rl0

так что все правильно написано в мане