Статья о PF. Пинайте

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.

Ответить


Этот вопрос предназначен для предотвращения автоматической отправки форм спам-ботами.
Смайлики
:smile: :( ;-) :roll: :pardon: 8) :x :oops: :shock: :cz2: :-D :ROFL: :Yahoo!: :cry: :Search: :Bravo: :good: :bad: :sorry: :no: :unknown: :evil: :crazy: :"": :fool: :-o :drinks: :st: :bn:
Ещё смайлики…

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[flash] ОТКЛЮЧЕН
[url] ВКЛЮЧЁН
Смайлики ВКЛЮЧЕНЫ

Обзор темы
   

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Развернуть Обзор темы: Статья о PF. Пинайте

Re: Статья о PF. Пинайте

Сообщение Игорь Фролов » 2014-12-12 19:27:53

Здравствуйте!

Конструкцию вроде
nat on $ext_if from !($ext_if) -> ($ext_if)

встречал во многих местах. И она действительно работает. Я же умудрился наступить на грабли. Причем сначала даже не понял куда копать.

Симптомы: В некоторых веб-сервисах с авторизацией (личные кабинеты магазинов, Интернет-банки и т. д.) как водится все идет через SSL. Пользователи стали не сильно настойчиво жаловаться что авторизация слетает. Никто сильно не переживал, но меня тревожило возрастающее количество обращений, а главное непонятно откуда копать. SSL соединения сомнений не вызывали, сертификаты правильные. Пакеты не теряются, но личные кабинеты упорно выкидывали всех на авторизацию. И, что самое противное, иногда можно было побродить по кабинету на несколько страниц, а иногда выбивало сразу же.

Обращения в банк, чтобы они посмотрели почему их сервис прерывает авторизацию, результатов не дали. Убрал сервер из цепочки, подключившись напрямую к провайдеру - все нормально. Пришла мысль посмотреть на состояния pf (pfctl -s state). И вот тут обнаружилось, что я идиот. Мануалы читать надо всегда :)

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

self tcp 192.168.0.100:2025 -> xxx.xxx.xxx.10:62978 -> yyy.yyy.yyy.yyy:443       ESTABLISHED:ESTABLISHED
self tcp 192.168.0.100:2021 -> xxx.xxx.xxx.11:61768 -> yyy.yyy.yyy.yyy:443       ESTABLISHED:ESTABLISHED


На внешнем интерфейсе несколько IP адресов. Конструкция "-> ($ext_if)" говорит: "отправлять с адреса интерфейса $ext_if"
- А тут их несколько. С какого?
- А какой в прошлый раз был?
- xxx.xxx.xxx.10
- Ну тогда пусть будет xxx.xxx.xxx.11

А веб-сервисы частенько открытую сессию пользователя привязывают к IP. И, в таком случае, требуют авторизации при каждом обращении с другого адреса.

ИМХО лучше что-нибудь типа

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

nat on $ext_if from !($ext_if) -> ($ext_if) sticky-address

Re: Статья о PF. Пинайте

Сообщение Дмитрий Уфа » 2011-05-26 9:01:14

wilful писал(а):Добрый день!

Вопрос совершенно простой, но покоя не дает:

установил минимальную конфигурацию FBSD-8.2, уже крутятся несколько сервисов и по этом понадобилось мне сделать связку squid+pf.
После первой загрузки я обнаружил init-скрипты (/etc/rc.d/pf, утилиты pfctl). Будучи злостным дебианщиком меня немного смутило тот факт, что уже какая-то часть фильтра есть и видимо как то работает.
Первым делом я пошел на этот сайт, мною очень уважаемый. Нашел установку pf с помощью пересборки ядра и включением сего продукта в его само. Вопрос:
Собственно как PF мог работать без пересборки ядра (подгрузки модулей не нашел в скрипте, да и в ядре ничего не появлялось, см. через kldstatus)?
Что изменится после пересборки, т.е. как именно этот мистический pf, доступный после установки, будет взаимодействовать с вкомпиленным в ядро?
И еще не помешало бы узнать как проверить работает ли PF с модуля или с ядра, работает ли вообще.

Спасибо.


Для работы pf в вре-8,2 достаточно в rc.conf прописать его автозапуск. Ну, форвардинг надо будет включить еще. После установки в ядро начнет работать ALTQ и все на этом, конфликтов не должно быть.

Re: Статья о PF. Пинайте

Сообщение wilful » 2011-03-23 9:48:11

Добрый день!

Вопрос совершенно простой, но покоя не дает:

установил минимальную конфигурацию FBSD-8.2, уже крутятся несколько сервисов и по этом понадобилось мне сделать связку squid+pf.
После первой загрузки я обнаружил init-скрипты (/etc/rc.d/pf, утилиты pfctl). Будучи злостным дебианщиком меня немного смутило тот факт, что уже какая-то часть фильтра есть и видимо как то работает.
Первым делом я пошел на этот сайт, мною очень уважаемый. Нашел установку pf с помощью пересборки ядра и включением сего продукта в его само. Вопрос:
Собственно как PF мог работать без пересборки ядра (подгрузки модулей не нашел в скрипте, да и в ядре ничего не появлялось, см. через kldstatus)?
Что изменится после пересборки, т.е. как именно этот мистический pf, доступный после установки, будет взаимодействовать с вкомпиленным в ядро?
И еще не помешало бы узнать как проверить работает ли PF с модуля или с ядра, работает ли вообще.

Спасибо.

Re: Статья о PF. Пинайте

Сообщение korg80 » 2011-01-22 15:07:00

pf enable в процессе загрузки пишет. Добавил pf_rules="/etc/pf.conf" в rc.conf ничего не изменилось

Re: Статья о PF. Пинайте

Сообщение korg80 » 2011-01-22 14:53:46

Добрый день возник вот такой вопрос упустил какуюто мелочь, что не так не пойму..
Поставил PF c ALTQ настроил шейпирование все работает, но после перегрузки или включения компа pf не запускается на команды:
pfctl –s rules
pfctl –sq -vv
не реагирует, ввожу pfctl -f /etc/pf.conf и все в порядке все работает.
В /etc/pf.conf строчки pf_enable="YES" и pflog_enable="YES" есть

Re: Статья о PF. Пинайте

Сообщение korg80 » 2011-01-12 7:44:15

to BlackCat
огромное человеческое спасибо все работает, теперь можно начать эксперементировать с правилами pf

Re: Статья о PF. Пинайте

Сообщение BlackCat » 2011-01-11 0:48:07

korg80 писал(а):Скопировал в pf.conf предложенную выше вами конфигурацию, бьет ошибку: /etc/pf.conf:5: syntax error судя по всему на эту строку:

Моя ошибка. Это была конфигурация с OpenBSD - синтаксис немного отличается. Попробуйте в предложенной конфигурации заменить строку:

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

match out on $ext_if from !($ext_if) nat-to ($ext_if)
вот такой конструкцией:

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

nat on $ext_if from !($ext_if) -> ($ext_if)

Re: Статья о PF. Пинайте

Сообщение korg80 » 2011-01-10 22:48:03

Скопировал в pf.conf предложенную выше вами конфигурацию, бьет ошибку: /etc/pf.conf:5: syntax error судя по всему на эту строку:
match out on $ext_if from !($ext_if) nat-to ($ext_if)
Подскажите что не так? Заранее спасибо.

Re: Статья о PF. Пинайте

Сообщение BlackCat » 2011-01-10 0:18:36

korg80, ошибка в вашем первоначальном конфиге простая: вы разрешаете своими правилами трафик на внешнем интерфейсе с внутренних адресов на выход, но сначала пакеты проходят NAT и только потом правила фильтрации, следовательно, пакеты проходящие фильтрацию уже имеют обратным адресом адрес внешнего интерфейса и не попадают под разрешающие правила и блокируются. tcpdump(8) должен был показать это.
=====
И зачем начинать со сложных конфигураций со множеством условий? Начните с чего нибудь простого, на подобии такой конфигурации:

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

# Interfaces
ext_if="tun0"
int_if="xl0"

# NAT rule
match out on $ext_if from !($ext_if) nat-to ($ext_if)

# Default - block all
block all

# Allow all outgoing traffic
pass out quick keep state

# Allow all local traffic
pass in quick on $int_if keep state
А потом добавляйте себе в удовольствие дополнительные условия и правила.
=====
И последнее, но не в последнюю очередь: пожалуйста, используйте тег/кнопку [code][/code] при оформлении сообщений, подробности в FAQ (http://forum.lissyara.su/viewtopic.php?f=53&t=28751).

Re: Статья о PF. Пинайте

Сообщение korg80 » 2011-01-08 11:49:30

Поменял:
pass out on $ext_if from $ext_if to any keep state на:
pass out on $ext_if from ($int_if) to any keep state
ошибка ушла но интенет так и не появился в локальной сети

Re: Статья о PF. Пинайте

Сообщение korg80 » 2011-01-08 11:39:19

Поменял:
pass out on $ext_if from $ext_if to any keep state
pass out on $ext_if from $int_if to any keep state
А в ответ - no ip address found for x10
/etc/pf.conf:20:could not parse host specification

Re: Статья о PF. Пинайте

Сообщение Dark_ASU » 2011-01-07 21:52:21

Для начала не pass out on $ext_if from $ext_if to any keep state
а pass out on $ext_if from $int_if to any keep state
а то у Вас получается запрет на выход внутреннему интерфейсу в нет, а через него все проходит.

Re: Статья о PF. Пинайте

Сообщение korg80 » 2011-01-06 14:06:25

Похоже что моя проблема в том что pf перекрывает внутренний интерфейс который смотрит в локалку, т.к. с включением правила block all на компе в локальной сети пропадает не только интернет но и доступ с samba серверу, правда пинг идет. Пробовал:
pass in on $int_if from $lan_net to any
pass out on $int_if from any to $lan_net
и
pass quick on $int_if
ничего не получилось, почему то правила не работают, куда копать?

Re: Статья о PF. Пинайте

Сообщение korg80 » 2011-01-05 18:09:03

Подскажите пожалуйста, начал разбираться с pf столкнулся с такой же проблемой как и Игорь : “ делаю все по статье, но при block all блокируется доступ в интернет для локалки, даже если разрешено ниже. Естественно если закомментировать block all, то интернет доступен из локалки. У меня FreeBSD 8.0-RELEASE, что то в этой версии может отличается в работе pf?”
Вот мой pf.conf :

ext_if="tun0"
int_if="x10"
lan_net="192.168.0.0/24"
localnet="127.0.0.0/8"
icmp_types="{echoreq, unreach}"

set block-policy return
set skip on lo0
set skip on $int_if

scrub in all

nat on $ext_if from $lan_net to any -> ($ext_if)

antispoof quick for $ext_if

block all

pass out on $ext_if from $ext_if to any keep state
pass out on $ext_if from $lan_net to any keep state

pass log inet proto icmp all icmp-type $icmp_types

Va_ советовал Игорю: “Игорь, вижу что в конфиге нету правил pass in. Входящий трафик отбрасывается.” Я добавил в конце строку:

pass in on $ext_if proto { tcp, udp } from any to $lan_net

но инета в локальной сети так и не появилось, пршлось опять закомментировать block all, подскажите пожалуйста где туплю буду очень благодарен.

Re: Статья о PF. Пинайте

Сообщение BlackCat » 2010-12-12 18:57:18

balamut писал(а):у меня щас так работает на вингейте(достал меня уже слетать) все пингуется и так далее.
Вы так и не рассказали, как "так" у вас работает. Ничего, кроме утверждения, что оно работает.
balamut писал(а):я думаю дело в маршрутизации..
Тогда зачем задавать вопрос в теме, посвящённой настройке МСЭ?

Re: Статья о PF. Пинайте

Сообщение balamut » 2010-12-11 21:08:33

пожалуйста, создайте новую тему, например в форуме NETWORKS (viewforum.php?f=4) и в ней опишите сложившуюся ситуацию. Ваш вопрос относится больше к теме построения сетей, чем к теме конкретной настройке pf.
В ней подробнее опишите как построена сеть (комутаторы, подсети) и какие имена имеются в виду (NetBIOS или DNS).

у меня щас так работает на вингейте(достал меня уже слетать) все пингуется и так далее. я думаю дело в маршрутизации..

Re: Статья о PF. Пинайте

Сообщение BlackCat » 2010-12-11 3:39:56

balamut, пожалуйста, создайте новую тему, например в форуме NETWORKS (viewforum.php?f=4) и в ней опишите сложившуюся ситуацию. Ваш вопрос относится больше к теме построения сетей, чем к теме конкретной настройке pf.
В ней подробнее опишите как построена сеть (комутаторы, подсети) и какие имена имеются в виду (NetBIOS или DNS).

Re: Статья о PF. Пинайте

Сообщение balamut » 2010-12-11 2:15:05

вот сейчас так происходит.
Не разрешаются имена в адреса?


я пытался писать какие то правила и при пинге имени сервера покзывался ипишник но не пинговался...
Или после удачного и правильного разрешения имён ICMP-пакеты перестают ходить?


какое правило дописать чтоб пинг шел на имена?

Re: Статья о PF. Пинайте

Сообщение BlackCat » 2010-12-09 21:34:50

balamut писал(а):пинг с локалки 10.10 на 192.168 идет и наоборот если указывать ИПИШНИК
Так и должно быть, если правильно настроена маршрутизация IP-пакетов.
balamut писал(а):пинга нет если пинговать с сети 10.10 и указывать имя сервера который в сети 192.168 и наоборот
Не разрешаются имена в адреса? Или после удачного и правильного разрешения имён ICMP-пакеты перестают ходить?
balamut писал(а):кароч над сделать так чтоб сеть 10.10 видела сеть 192.168 и наоборот без всяких ограничений
подскажите что нужно для этого сделать?
Объясните, что вы понимаете под словом "видела"? Самый простой вариант: если у вас сети разделены условно (нет физического разделения по коммутаторам или VLAN'ам), то перенести адреса всех узлов в одну подсеть.

Re: Статья о PF. Пинайте

Сообщение balamut » 2010-12-09 1:25:44

Здравствуйте, помогите решить вопрос
на внешнем интерфейсе($ext_if) инет
на внутреннем($int_if) две локалки 10.10.1.0 и 192.168.0.0 = $trusted_lan
у внутреннего интерфейса 2 ипишника 10.10.1.132 и 192.168.0.132
при правиле nat on $ext_if from $trusted_lan to any -> ($ext_if)
пинг с локалки 10.10 на 192.168 идет и наоборот если указывать ИПИШНИК
пинга нет если пинговать с сети 10.10 и указывать имя сервера который в сети 192.168 и наоборот
кароч над сделать так чтоб сеть 10.10 видела сеть 192.168 и наоборот без всяких ограничений
подскажите что нужно для этого сделать?

Re: Статья о PF. Пинайте

Сообщение BlackCat » 2010-10-13 13:57:41

QweЯty писал(а):кому 4м из 5ти надо по мягкому месту надавать за дизинформацию?
Всем. Если бы было единственно верное решение, остальные бы просто не использовались. Точно сформулируйте для себя цель, задачи и просто решите их.
Мой довод за пользование одного МСЭ: чем меньше элементов, тем ниже вероятность того, что выйдет из строя вся система. Но это не больше, чем моё скромное мнение.

Re: Статья о PF. Пинайте

Сообщение QweЯty » 2010-10-13 13:46:27

я уже запутался...
1. некоторые советуют использовать pf для ната и рулить им же
2. некоторые для ната pf остальное ipfw
3. сделать на natd и ipfw? хоть и сами ругаются на то что это не выход из положения
4. сделать все на ipfw nat + dumminet (что частичноу меня и реализовано)
5. сделать на ipnat и не маяться с трубами, рано еще:) но надо очень...

кому 4м из 5ти надо по мягкому месту надавать за дизинформацию?

p.s. а про ipfw я пока еще читаю статью... уж очень она большая и непонятная в некоторых местах....

Re: Статья о PF. Пинайте

Сообщение BlackCat » 2010-10-13 12:15:30

QweЯty, я в ipfw не разбираюсь.
=====
Зачем вам использовать один МСЭ для трансляции адресов, а второй для ограничения полосы? Не проще всё настроить на одном и не разводить зоопарк? Для ipfw есть статья на сайте по настройке NAT. Настройка ограничения трафика средствами pf уже обсуждалась на форуме (парой сообщений выше в этой теме).

Re: Статья о PF. Пинайте

Сообщение QweЯty » 2010-10-12 16:36:53

BlackCat писал(а):
Radist писал(а):а можете подсказать как сделать 2 NATA?

есть stge0 - выход в инет через adsl модем
есть fxp0 - локалка 10/8
есть:
re0 - локалка_1 192.168.50/24
dc0 - локалка_2 192.168.60/24

как сделать два NAT'a для локалки 10/8 и интернерта в re0 и dc0

NAT ставиться на выходе интерфейса и количество сетей которые находятся за NAT'ом в большенстве случаев роли не играет.
Если нет каких-то особых условий и вам нужет NAT для выхода в интернет и в 10.0.0.0/8, то попробуйте вот такие правила:

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

nat on stge0 from !(stge0) -> (stge0)
nat on fxp0 from !(fxp0) -> (fxp0)


а такой вопрос..
я смогу резать траф через ipfw pipe

вот такая конфигурация примерно будет:
NAT:

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

nat on stge0 from !(stge0) -> (stge0)
nat on fxp0 from !(fxp0) -> (fxp0)

а ipfw pipe тогда такой будет?:

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

${fw} add pipe 7 ip from 192.168.1.241 to 192.168.60/24
${fw} pipe 7 config bw 128kbit/s

${fw} add pipe8 ip from 192.168.50/24 to 192.168.1.241
${fw} pipe 8 config bw 128kbit/s


в инет смотрит карточка stge0 ip 192.168.1.241

в существующем вариенте с ipnat резать не получается:( трафик не попадает в ipfw из ipnat

Re: Статья о PF. Пинайте

Сообщение BlackCat » 2010-10-11 1:50:01

Radist писал(а):а можете подсказать как сделать 2 NATA?

есть stge0 - выход в инет через adsl модем
есть fxp0 - локалка 10/8
есть:
re0 - локалка_1 192.168.50/24
dc0 - локалка_2 192.168.60/24

как сделать два NAT'a для локалки 10/8 и интернерта в re0 и dc0

NAT ставиться на выходе интерфейса и количество сетей которые находятся за NAT'ом в большенстве случаев роли не играет.
Если нет каких-то особых условий и вам нужет NAT для выхода в интернет и в 10.0.0.0/8, то попробуйте вот такие правила:

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

nat on stge0 from !(stge0) -> (stge0)
nat on fxp0 from !(fxp0) -> (fxp0)

Вернуться к началу