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

Исходное сообщение
"pf с поднятым NAT, огр. доступа по внутр. IP "

Отправлено reinover , 09-Окт-08 09:41 
Здравствуйте, я задался целью сделать на 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 имени?


Содержание

Сообщения в этом обсуждении
"pf с поднятым NAT, огр. доступа по внутр. IP "
Отправлено Stalker , 09-Окт-08 16:36 
>[оверквотинг удален]
>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 блокируется весь входящий трафик на внутренний интерфейс и весь траффик на внешнем интерфейсе.


"pf с поднятым NAT, огр. доступа по внутр. IP "
Отправлено reinover , 09-Окт-08 19:39 
>Если это весь набор правил то работать вообще не будет, потому что
>правилом 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 any

pass 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: конфигурация сети простая, один интерфейс смотрит во внешнюю, другой во внутреннюю сеть.


"pf с поднятым NAT, огр. доступа по внутр. IP "
Отправлено Stalker , 10-Окт-08 08:16 
>[оверквотинг удален]
>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.