А вот что говорит man:
- Код: Выделить всё
. . .
deny_in
Deny any incoming connection from outside world.
. . .
unreg_only
Traffic on the local network not originating from an unregistered
address spaces will be ignored.
Оно?
PS: Например вот так:
- Код: Выделить всё
${ipfw} nat 10000 config if rl0 log unreg_only reset
${ipfw} add 10010 nat 10 log ip4 from any to any via rl0
Можно действовать и как ребята сверху написали. Я собственно тоже так поступал, а потом на ipnat перешел. Перешел, потому что мне очень понравилось смотреть активные соединения, удобный конфиг.
Добавлю небольшой пример:
- Код: Выделить всё
#!/bin/sh
out_ip="ext_ip"
out_iface="rl0"
local_iface="rl1"
localnet="x.x.x.x/24"
#порты, которые разрешаем натить
tcp_services="21,22,25,80,110,143,443,1863,3389,5190"
ipfw="/sbin/ipfw"
#### flush rules ####
${ipfw} -f flush
${ipfw} -f pipe flush
${ipfw} -f queue flush
${ipfw} table 1 flush
#################
#разрешим ssh кому надо, можно целым подсетям
${ipfw} table 1 y.y.y.y
${ipfw} add 00300 pass all from "table(1)" to ${out_ip} 22 via rl0
${ipfw} add 00310 pass all from ${out_ip} 22 to "table(1)" via rl0
#пингу вечная свобода
${ipfw} add 01200 allow icmp from any to any
# разрешаем только соединения, которые уже установлены от нас (можно пользоваться keep-state)
${ipfw} add 1600 pass tcp from ${localnet} 1024-65535 to not ${localnet} ${tcp_services} via ${local_iface}
${ipfw} add 1700 pass tcp from not ${localnet} ${tcp_services} to ${localnet} 1024-65535 via ${local_iface} established
#тут прибиваем все что не натим действием "reset", чтобы клиент сразу обламывался и не рвал соединение по там-ауту
${ipfw} add 1800 reset log tcp from ${localnet} 1024-65535 to not ${localnet} via ${local_iface}
${ipfw} add 1900 reset log tcp from not ${localnet} to ${localnet} 1024-65535 via ${local_iface}
# тут даем доступ к внешним сервисам, в данном случае впн-сервер
${ipfw} add 5000 pass log tcp from any to ${out_ip} 1723 via ${out_iface}
${ipfw} add 5010 pass log tcp from ${out_ip} 1723 to any via ${out_iface}
#вот собственно нат
${ipfw} nat 10000 config if rl0 log unreg_only reset
${ipfw} add 10010 nat 10 log ip4 from any to any via rl0
# разрешим любые соединения от сервера
${ipfw} add 15050 pass log tcp from ${out_ip} 1024-65535 to any via ${out_iface}
${ipfw} add 15060 pass log tcp from any to ${out_ip} 1024-65535 via ${out_iface} established
#и дропнем все что не описано.
${ipfw} add 60000 reset log ip from any to any via rl0
Если надо сделать проброс порта внуть сети, то надо сделать его на нат и поставить разрешающие правила. На идеальность решения не претендую, но это, как мне кажется, работает вполне нормально.
Хотите могу выгрузить сюда мои записи из вики, касающиеся технологии нат. Там невесть что, но может что-то поможет разъяснить некоторые вещи.