>Извините за сумбур, пытаюсь все переварить.Сумбур, ага, есть немного.
>И еще один момент, подскажите по правилу прохождения цепочки правил IPFW, продолжается ли >прохождение в случае:
>1) для пакета найдено блокирующее правило
>2) для пакета найдено разрешающее правило
Ээээ, вот откуда могла возникнуть мысль, что с пакетом после этого ещё что то нужно делать?
Конечно, обработка на командах allow, deny(drop), unreach, fwd завершается. nat, netgraph, ngtee - в зависимости от one_pass. skipto, call, count - всегда продолжается. reass - продолжается, если пакет не фрагментирован, иначе откладывает пакет до поступления всех частей, когда придут - собирает его в кучу и продолжается
man ipfw вроде бы об этом хорошо говорит.
>$fwcmd 00002 allow icmp from 192.168.30.10 to any out via re1 setup keep-state
1. icmp и setup? серьёэно?
2. allow = "всё, пропуск верный, беги по коридору". До NAT-а этот пакет не дойдёт, уйдёт в канал. Потому tcpdump и показывает такое - правило с NAT обойдено.
3. keep-state коварен. Избегайте, если структура правил не проектировалась для его использования. А в данном случае - вообще не нужен.
Ещё мелочи - via и указанное направление out - бессмысленная трата тактов, ибо внутри ipfw "via re1" = "(out xmit re1) or (in recv re1)"
также from any to me - красиво, понятно, но это me - долго, так как перебирает все интерфейсы и их адреса. Как концепция - самое то. Но потом - выпиливать в угоду скорости.
А в чём сакральный смысл one_pass=1 ?
Как раз без него, ИМХО, лучше.
Да, добавится ещё правило, типа
$fwcmd 00110 allow ip from any to any via re1
А вообще рекомендую сразу разделять потоки на группы правил, например:
#!/bin/shlan='re0'
inet='re1'
ipfw nat 1 config log if $inet reset same_ports deny_in
$fwcmd 10 reass all from any to any //
# separate IN and OUT
$fwcmd 100 skipto 1000 all from any to any in
$fwcmd 110 skipto 2000 all from any to any out
# IN. Seperate interfaces
$fwcmd 1000 skipto 3000 all from any to any recv $inet
$fwcmd 1010 skipto 4000 all from any to any recv $lan
$fwcmd 1997 allow all from any to any recv lo
$fwcmd 1998 deny all fron any to 127.0.0.0/8 // protection
$fwcmd 1999 deny all from any to any
# OUT. Seperate interfaces
$fwcmd 2000 skipto 5000 all from any to any xmit $inet
$fwcmd 2010 skipto 6000 all from any to any xmit $lan
$fwcmd 2997 allow all from any to any xmit lo
$fwcmd 2998 allow all from 127.0.0.0/8 to any // protection
$fwcmd 2999 deny all from any to any
# inet in
# icmp for router
# filter some of them
$fwcmd 3000 deny icmp from any to me icmptypes 5 // strange
$fwcmd 3001 deny log icmp from any to me icmptypes 9,10,13,15,17 // danger
$fwcmd 3002 allow icmp from any to me icmptypes 8 // usual in ping, NO NAT
$fwcmd 3100 nat 1 all from any to any // inet in
# place for filters to me
$fwcmd 3110 allow tcp from any to me dst-port 80 // my web, also setup NAT rule
$fwcmd 3130 deny tcp from any to me dst-port 1-1023
$fwcmd 3140 deny udp from any to me dst-port 1-1023
$fwcmd 3500 allow all from any to me // inet in to this gate
# place for filters to LAN clients
$fwcmd 3999 allow all from any to any // inet in transit
# lan in
$fwcmd 4000 allow all from any to any // lan in
# inet out
$fwcmd 5000 nat 1 all from any to any // inet out
$fwcmd 5010 allow all from any to any // inet out
$ lan out
$fwcmd 6000 allow all from any to any // lan out
Это пример без keep-state. Этот keep-state в такой структуре можно применять очень ограниченно.
Если нужно тотально, то структура правил должна быть совсем другой.
Вопрос на понимание - какое правило 100 или 110 лишнее, но с ним нагляднее?