PF FreeBSD 8.2

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Sung
проходил мимо
Сообщения: 3
Зарегистрирован: 2012-04-18 13:05:24

PF FreeBSD 8.2

Непрочитанное сообщение Sung » 2012-04-18 13:43:13

Добрый день господа! Взялся за изучение 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
значит должно работать. Кто может подсказать по данному вопросу? Может где недочет.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Sung
проходил мимо
Сообщения: 3
Зарегистрирован: 2012-04-18 13:05:24

Re: PF FreeBSD 8.2

Непрочитанное сообщение Sung » 2012-04-19 10:16:41

Разобрался, просьба удалить тему!

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: PF FreeBSD 8.2

Непрочитанное сообщение hizel » 2012-04-19 10:43:11

просьба удалить тему
с какого перепугу?
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

rayder
лейтенант
Сообщения: 661
Зарегистрирован: 2008-12-18 16:29:43
Откуда: Ukraine/Kiev
Контактная информация:

Re: PF FreeBSD 8.2

Непрочитанное сообщение rayder » 2012-04-19 19:50:41

Sung писал(а):Разобрался, просьба удалить тему!
лучше отпиши что было, потом кому-нибудь пригодится
Человеку свойственно ошибаться, но для нечеловеческих ляпов нужен компьютер.

Sung
проходил мимо
Сообщения: 3
Зарегистрирован: 2012-04-18 13:05:24

Re: PF FreeBSD 8.2

Непрочитанное сообщение Sung » 2012-04-20 9:59:39

Исходя из этого конфига

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

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
которая опускает фильтрацию на указанном интерфейсе.