Страница 1 из 1

PF FreeBSD 8.2

Добавлено: 2012-04-18 13:43:13
Sung
Добрый день господа! Взялся за изучение packet filter на FreeBSD 8.2. Материалов по данному пакету полно на просторах интернета. Собственно приступил. Провайдер дает интернет с белым IP адресом.
В rc.conf:

Код: Выделить всё

#Network internet
ifconfig_bge0="inet 1.1.1.1 netmask 255.255.255.252"
defaultrouter="1.1.1.2"

#Network local
ifconfig_em0="192.168.1.17 netmask 255.255.255.240"

gateway_enable="YES"

#Packet Filter
pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""
/etc/resolv.conf отсутствовал, создаем и прописываем DNS сервера провайдера 222.222.222.222 и т.д.
Еще и ядро откомпилировал:

Код: Выделить всё

device pf
device pflog
device pfsync
Наконец сеть проверена, шлюз провайдера пингуется, nslookup запросы идут.
Один из самых простых примеров который можно найти в интернете:

Код: Выделить всё

ext_if = "ep0" # macro for external interface - use tun0 for PPPoE
        int_if = "ep1"  # macro for internal interface
        localnet = $int_if:network

        # ext_if IP address could be dynamic, hence ($ext_if)

        nat on $ext_if from $localnet to any -> ($ext_if)
        block all
        pass inet proto tcp from { lo0, $localnet } to any keep state
Пробуем, создаем конфиг /etc/pf.conf:

Код: Выделить всё

ext_if=”bge0”	# смотрит в инет
int_if=”em0”	# смотрит в локалку
lan_net=”192.168.1.16/28”

set skip on $int_if
set block-policy return

nat on $exit_if from $lan_net to any ? $ext_if
block all
pass inet from $lan_net to any keep state
На клиенте, прописываем (например ip 192.168.1.18 маска 255.255.255.240, шлюз и dns 192.168.1.17 ) пробуем интернет,

Код: Выделить всё

Ошибка 105 (net::ERR_NAME_NOT_RESOLVED): Не удается преобразовать DNS-адрес сервера
Надо запустить на шлюзе named.
named.conf:

Код: Выделить всё

listen-on	{ 192.168.1.17; };


forwarders {
	222.222.222.222;
	dns сервер провайдера;
};
forward only;
Вообще пробовал и только с такой записью

Код: Выделить всё

listen-on { any; }
В rc.conf добавляем

Код: Выделить всё

named_enable="YES"
Запускаем демон named
В pf.conf добавляем

Код: Выделить всё

pass proto { tcp, udp } from $ext_if to any port domain keep state
Запросы пошли, но

Код: Выделить всё

Ошибка 101 (net::ERR_CONNECTION_RESET): Соединение сброшено
хм блокирует.
Стоит изменить на

Код: Выделить всё

pass proto { tcp, udp } from $ext_if to any port { domain, http, и т.д. } keep state
Дело пошло.
Получается запись вида

Код: Выделить всё

pass inet from $lan_net to any keep state
бесполезна, трафик обрабатывается не как от локального клиента, а не посредственно от шлюза.

Но раз чуть ли не в каждой статье подобные примеры

Код: Выделить всё

ext_if = "ep0" # macro for external interface - use tun0 for PPPoE
        int_if = "ep1"  # macro for internal interface
        localnet = $int_if:network

        # ext_if IP address could be dynamic, hence ($ext_if)

        nat on $ext_if from $localnet to any -> ($ext_if)
        block all
        pass inet proto tcp from { lo0, $localnet } to any keep state
значит должно работать. Кто может подсказать по данному вопросу? Может где недочет.

Re: PF FreeBSD 8.2

Добавлено: 2012-04-19 10:16:41
Sung
Разобрался, просьба удалить тему!

Re: PF FreeBSD 8.2

Добавлено: 2012-04-19 10:43:11
hizel
просьба удалить тему
с какого перепугу?

Re: PF FreeBSD 8.2

Добавлено: 2012-04-19 19:50:41
rayder
Sung писал(а):Разобрался, просьба удалить тему!
лучше отпиши что было, потом кому-нибудь пригодится

Re: PF FreeBSD 8.2

Добавлено: 2012-04-20 9:59:39
Sung
Исходя из этого конфига

Код: Выделить всё

ext_if = "ep0" # macro for external interface - use tun0 for PPPoE
        int_if = "ep1"  # macro for internal interface
        localnet = $int_if:network

        # ext_if IP address could be dynamic, hence ($ext_if)

        nat on $ext_if from $localnet to any -> ($ext_if)
        block all
        pass inet proto tcp from { lo0, $localnet } to any keep state
предполагалась возможность закрыть исходящий трафик на самом шлюзе и открыть для клиентов.
Но все же на шлюзе приходится открывать как минимум те протоколы и порты которые необходимы. Минимальный конфиг получился такой:

Код: Выделить всё

ext_if=”bge0”   # смотрит в инет
int_if=”em0”   # смотрит в локалку
lan_net=”192.168.1.16/28”

set block-policy return

nat on $exit_if from $lan_net to any ? $ext_if
block in all
pass out keep state
pass inet proto { tcp, udp } from $lan_net to any port { domain, http, https } keep state
И что бы управлять трафиком клиентов данная запись не нужна

Код: Выделить всё

set skip on $int_if
которая опускает фильтрацию на указанном интерфейсе.