Здравствуйте, я задался целью сделать на FreeBSD 7.0 PF с поднятым NAT с ограничением доступа ко внешним ресурсам используя для этого внутренние IP адреса. Т.е. правила фильтра будут строятся по примерно следующему принципу:$ext_if="de0" (1)
$int_if="de1"$trusted_lan="192.168.1.0/24" (3)
table <web> {213.180.204.8 и тд.}
nat on $ext_if from $trusted_lan to any (5)
block all
pass out on $int_if proto {tcp,udp} from 192.168.1.5 to <web> (7)
Основная проблема заключается в том что pf сначала обрабатывает правила NAT (5), а только затем правила фильтра (7), поэтому последнее правило (7) не справедливо т.к. пакет уже обработан и его заголовок заменён с адреса 192.168.1.5 на адрес внешнего интерфейса, а именно на то что назначено de0 (1).
Собственно, как можно организовать используя pf доступ ко внешним ресурсам ориентируясь по внутреннему ip или внутреннему dns имени?
>[оверквотинг удален]
>pass out on $int_if proto {tcp,udp} from 192.168.1.5 to <web> (7)
>
>Основная проблема заключается в том что pf сначала обрабатывает правила NAT (5),
>а только затем правила фильтра (7), поэтому последнее правило (7) не
>справедливо т.к. пакет уже обработан и его заголовок заменён с адреса
>192.168.1.5 на адрес внешнего интерфейса, а именно на то что назначено
>de0 (1).
>
>Собственно, как можно организовать используя pf доступ ко внешним ресурсам ориентируясь по
>внутреннему ip или внутреннему dns имени?Если это весь набор правил то работать вообще не будет, потому что правилом block all блокируется весь входящий трафик на внутренний интерфейс и весь траффик на внешнем интерфейсе.
>Если это весь набор правил то работать вообще не будет, потому что
>правилом block all блокируется весь входящий трафик на внутренний интерфейс и
>весь траффик на внешнем интерфейсе.Я рассматривал такую возможность ещё до того как задать вопрос на форуме, применял различные подробно расписанные конфиги вроде этого:
$ext_if="de0" (1)
$int_if="de1"
$trusted_lan="192.168.1.0/24" (3)
table <web> {213.180.204.8 и тд.}
nat on $ext_if from $trusted_lan to any (5)block out on $int_if to any
block in on $int_if to any
block out on $ext_if to any
block in on $ext_if to anypass in on $ext_if proto icmp from <web> to 192.168.1.5
pass out on $ext_if proto icmp from 192.168.1.5 to <web>
pass in on $int_if proto icmp from <web> to 192.168.1.5
pass out on $int_if proto icmp from 192.168.1.5 to <web>И ничего... пинг с узла 192.168.1.5 на узлы <web> не идёт (естественно с узла 192.168.1.5 вводится ip адрес,а не имя хоста т.к. dns в данном примере не разрешён.)
PS: этот конфиг конечно упрощенный, но и с ним не работает так как мне нужно. Поэтому, я повторю вопрос:
Как можно организовать, используя pf c NAT, доступ ко внешним ресурсам ориентируясь по внутреннему ip или внутреннему dns имени?
PSS: конфигурация сети простая, один интерфейс смотрит во внешнюю, другой во внутреннюю сеть.
>[оверквотинг удален]
>pass in on $int_if proto icmp from <web> to 192.168.1.5
>pass out on $int_if proto icmp from 192.168.1.5 to <web>
>
>И ничего... пинг с узла 192.168.1.5 на узлы <web> не идёт (естественно с узла 192.168.1.5 вводится ip адрес,а не имя хоста т.к. dns в данном примере не разрешён.)
>PS: этот конфиг конечно упрощенный, но и с ним не работает так
>как мне нужно. Поэтому, я повторю вопрос:
>Как можно организовать, используя pf c NAT, доступ ко внешним ресурсам ориентируясь
>по внутреннему ip или внутреннему dns имени?
>PSS: конфигурация сети простая, один интерфейс смотрит во внешнюю, другой во внутреннюю
>сеть.Конфиг у Вас не работает потому что написан неправильно. Нужно понять логику работы pf и как пакеты ходят.
Например когда Вы хотите пингануть что-нибудь во вне пакет из внутренней сети приходит на внутренний интерфейс ( т.е. он входящий на внутреннем интерфейсе ) потом к нему применяется правило nat, и затем он он должен уйти с внешнего интерфейса ( если правила фильтра ему позволяют ). А у Вас пакеты блокируются уже на входе во внутренний интерфейс.
Советую почитать хотя бы pf FAQ на OpenBSD.org. Обратите внимание на statefull filtering.