PF keep state

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

PF keep state

Grigory Klyuchnikov
Здравствуйте,

Подскажите, в таблице состояний сохраняется привязка к интерфейсу?
Т.е. если соединение запомнилось в таблице для одного интерфейса на IN,
на другом (выходном) надо ли сохранять состояние на OUT, чтобы ответ
смог пройти?

Например,

$int_if
$ext_if

0) block in all
1) block out all

2) pass in log quick on $int_if inet proto tcp from $InternalNet to any \
        flags S/SA keep state
3) pass out log quick on $ext_if inet proto tcp from $InternalNet to any

В этом случае начальный пакет от $InternalNet проходит на in on $int_if
и на out on $ext_if,а обратный ответ блокируется на in on $ext_if:

rule 2/(match) pass in on $int_if:
rule 3/(match) pass out on $ext_if:
rule 0/(match) block in on $ext_if:

Как обходить такие систуации? Добавить keep state для 3)? но тогда
получается
на одно соединение хранится два состояния?

И еще, может кто подскажет ссылки на примеры pf.conf с несколькими
интерфейсами
(3 и более) или рекомендации по составлению правил при более 2-х интерфесов.

Спасибо.

--
С уважением,
Григорий Ключников


Reply | Threaded
Open this post in threaded view
|

Re: PF keep state

Dmitry V. Kustov
> И еще, может кто подскажет ссылки на примеры pf.conf с несколькими  
> интерфейсами
> (3 и более) или рекомендации по составлению правил при более 2-х  
> интерфесов.
>
http://www.openbsd.ru/files/index.html

https://solarflux.org/pf/


Reply | Threaded
Open this post in threaded view
|

Re: PF keep state

Eldar N. Novruzov
In reply to this post by Grigory Klyuchnikov
Grigory Klyuchnikov wrote:

> Здравствуйте,
>
> Подскажите, в таблице состояний сохраняется привязка к интерфейсу?
> Т.е. если соединение запомнилось в таблице для одного интерфейса на IN,
> на другом (выходном) надо ли сохранять состояние на OUT, чтобы ответ
> смог пройти?
>
> Например,
>
> $int_if
> $ext_if
>
> 0) block in all
> 1) block out all
>
> 2) pass in log quick on $int_if inet proto tcp from $InternalNet to any \
>        flags S/SA keep state
> 3) pass out log quick on $ext_if inet proto tcp from $InternalNet to any
>
> В этом случае начальный пакет от $InternalNet проходит на in on $int_if
> и на out on $ext_if,а обратный ответ блокируется на in on $ext_if:
>
> rule 2/(match) pass in on $int_if:
> rule 3/(match) pass out on $ext_if:
> rule 0/(match) block in on $ext_if:
>
> Как обходить такие систуации? Добавить keep state для 3)? но тогда
> получается
> на одно соединение хранится два состояния?
>
> И еще, может кто подскажет ссылки на примеры pf.conf с несколькими
> интерфейсами
> (3 и более) или рекомендации по составлению правил при более 2-х
> интерфесов.
>
> Спасибо.
>
нада писать keep state на внешнем интерфейсе.


Reply | Threaded
Open this post in threaded view
|

Re: PF keep state

Grigory Klyuchnikov
Eldar N. Novruzov wrote:

> Grigory Klyuchnikov wrote:
>
>> Здравствуйте,
>>
>> Подскажите, в таблице состояний сохраняется привязка к интерфейсу?
>> Т.е. если соединение запомнилось в таблице для одного интерфейса на IN,
>> на другом (выходном) надо ли сохранять состояние на OUT, чтобы ответ
>> смог пройти?
>>
>> Например,
>>
>> $int_if
>> $ext_if
>>
>> 0) block in all
>> 1) block out all
>>
>> 2) pass in log quick on $int_if inet proto tcp from $InternalNet to
>> any \
>>        flags S/SA keep state
>> 3) pass out log quick on $ext_if inet proto tcp from $InternalNet to any
>>
>> В этом случае начальный пакет от $InternalNet проходит на in on $int_if
>> и на out on $ext_if,а обратный ответ блокируется на in on $ext_if:
>>
>> rule 2/(match) pass in on $int_if:
>> rule 3/(match) pass out on $ext_if:
>> rule 0/(match) block in on $ext_if:
>>
>> Как обходить такие систуации? Добавить keep state для 3)? но тогда
>> получается
>> на одно соединение хранится два состояния?
>>
>> И еще, может кто подскажет ссылки на примеры pf.conf с несколькими
>> интерфейсами
>> (3 и более) или рекомендации по составлению правил при более 2-х
>> интерфесов.
>>
>> Спасибо.
>>
> нада писать keep state на внешнем интерфейсе.

ОК, keep state на внешнем интерфейсе на OUT, а на внутреннем то надо
keep state?

--
С уважением,
Григорий Ключников, Ведущий инженер,
Институт Системного Программирования РАН
+7 095 912-56-59
[hidden email]

Regards,
Grigory Klyuchnikov, System Engineer,
Institute for System Programming
Russian Academy of Sciences
+7 095 912-56-59
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: PF keep state

Eldar N. Novruzov
Grigory Klyuchnikov wrote:

> Eldar N. Novruzov wrote:
>
>> Grigory Klyuchnikov wrote:
>>
>>> Здравствуйте,
>>>
>>> Подскажите, в таблице состояний сохраняется привязка к интерфейсу?
>>> Т.е. если соединение запомнилось в таблице для одного интерфейса на IN,
>>> на другом (выходном) надо ли сохранять состояние на OUT, чтобы ответ
>>> смог пройти?
>>>
>>> Например,
>>>
>>> $int_if
>>> $ext_if
>>>
>>> 0) block in all
>>> 1) block out all
>>>
>>> 2) pass in log quick on $int_if inet proto tcp from $InternalNet to
>>> any \
>>>        flags S/SA keep state
>>> 3) pass out log quick on $ext_if inet proto tcp from $InternalNet to
>>> any
>>>
>>> В этом случае начальный пакет от $InternalNet проходит на in on $int_if
>>> и на out on $ext_if,а обратный ответ блокируется на in on $ext_if:
>>>
>>> rule 2/(match) pass in on $int_if:
>>> rule 3/(match) pass out on $ext_if:
>>> rule 0/(match) block in on $ext_if:
>>>
>>> Как обходить такие систуации? Добавить keep state для 3)? но тогда
>>> получается
>>> на одно соединение хранится два состояния?
>>>
>>> И еще, может кто подскажет ссылки на примеры pf.conf с несколькими
>>> интерфейсами
>>> (3 и более) или рекомендации по составлению правил при более 2-х
>>> интерфесов.
>>>
>>> Спасибо.
>>>
>> нада писать keep state на внешнем интерфейсе.
>
>
> ОК, keep state на внешнем интерфейсе на OUT, а на внутреннем то надо
> keep state?
>
да, и там и там нада ...
можно немного облегчить ... успользовать метки. tag но keep state нада
будет одназначна ;-)


Reply | Threaded
Open this post in threaded view
|

Re: PF keep state

Grigory Klyuchnikov
Eldar N. Novruzov wrote:

> да, и там и там нада ...
> можно немного облегчить ... успользовать метки. tag но keep state нада
> будет одназначна ;-)

понял, спасибо

А как traceroute через PF разрешить?


Reply | Threaded
Open this post in threaded view
|

Re: PF keep state

Dmitry V. Kustov
> А как traceroute через PF разрешить?
>
>
man traceroute

Там описан механизм работы.


Reply | Threaded
Open this post in threaded view
|

Re: PF keep state

Grigory Klyuchnikov
Dmitry V. Kustov wrote:

>> А как traceroute через PF разрешить?
>>
>>
> man traceroute
>
> Там описан механизм работы.

очень полезный ответ :) только не на тот вопрос


Reply | Threaded
Open this post in threaded view
|

Re: PF keep state

Pavel Labushev


Grigory Klyuchnikov wrote:

>
> Dmitry V. Kustov wrote:
>
> >> А как traceroute через PF разрешить?
> >>
> >>
> > man traceroute
> >
> > Там описан механизм работы.
>
> очень полезный ответ :) только не на тот вопрос

Оттуда нужно начинать смотреть. Какой трейс нужен: по udp или icmp; с
постоянным дст-портом пакетов или изменяющимся в диапазоне. Можно
сориентироваться на конкретный icmp/тип или udp/порт, настроить
соответственно PF и использовать traceroute с ключами.

Все работает с proto udp/icmp + keep state.