FW: Re: PF keep state

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

FW: Re: PF keep state

Administrator-38


Смотри keep state вообще очень полезная штука допустим у тебя есть роутер с
двумя сетевухами(Nat)

xl0-200.200.200.1 - внешний интерфейс
        |
        |
------------------
|                |
|OpenBSD  |
|                |
------------------
        |
        |
xl1-192.168.0.1/24-внутрений

Ты хочешь сделать так чтобы у тебя был контроль состояний соединений из
внешней сети, то есть чтобы PF впускал на xl0 только те пакеты которые
ухадили из внутреней сетки 192.168.0.1( не важно TCP,UDP,ICMP).

1.Пример
block in quick on xl0 all
pass out quick on xl0 from 200.200.200.1 to any keep state

2.Пример
nat on xl0 from 192.168.0.0/24 to any tag nats -> 200.200.200.1
pass out quick on xl0 from 200.200.200.1 to any tag nats keep state (Это
правило для того чтоб ты мог напрямую с роутера работать)
pass in quick on xl0 from any to 200.200.200.1 tagged nats keep state
block in log-all quick on xl0 from any to any

При данном раскладе все соединения на роутер которые не имеются в таблице
состояния будут блокироватся а все остальное будет пропускатся(включая
traceroute, и все остальное). Можно конечно убрать для keep state такую вещь
как "on xl0" но тогда может возникнуть путаница и я тебе бы не советовал бы
создовать правила не превязаные к конкретному интерфейсу


Reply | Threaded
Open this post in threaded view
|

Re: FW: Re: PF keep state

Grigory Klyuchnikov
Это понятно. Спасибо. Но у меня нет NATa, и хочется, чтобы PF ничего не
принимал,
и отвечал только на ICMP echo и на traceroute давал ICMP time exceeded
(а в идеале
пропускал traceroute на некоторые внутренние хосты). С ICMP echo
понятно, а вот
с traceroute...

Administrator wrote:

>Смотри keep state вообще очень полезная штука допустим у тебя есть роутер с
>двумя сетевухами(Nat)
>
>xl0-200.200.200.1 - внешний интерфейс
>        |
>        |
>------------------
>|                |
>|OpenBSD  |
>|                |
>------------------
>        |
>        |
>xl1-192.168.0.1/24-внутрений
>
>Ты хочешь сделать так чтобы у тебя был контроль состояний соединений из
>внешней сети, то есть чтобы PF впускал на xl0 только те пакеты которые
>ухадили из внутреней сетки 192.168.0.1( не важно TCP,UDP,ICMP).
>
>1.Пример
>block in quick on xl0 all
>pass out quick on xl0 from 200.200.200.1 to any keep state
>
>2.Пример
>nat on xl0 from 192.168.0.0/24 to any tag nats -> 200.200.200.1
>pass out quick on xl0 from 200.200.200.1 to any tag nats keep state (Это
>правило для того чтоб ты мог напрямую с роутера работать)
>pass in quick on xl0 from any to 200.200.200.1 tagged nats keep state
>block in log-all quick on xl0 from any to any
>
>При данном раскладе все соединения на роутер которые не имеются в таблице
>состояния будут блокироватся а все остальное будет пропускатся(включая
>traceroute, и все остальное). Можно конечно убрать для keep state такую вещь
>как "on xl0" но тогда может возникнуть путаница и я тебе бы не советовал бы
>создовать правила не превязаные к конкретному интерфейсу
>
>
>  
>


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


Reply | Threaded
Open this post in threaded view
|

Re[2]: FW: Re: PF keep state

Anton Maksimenkov
Hi, Grigory.

> Это понятно. Спасибо. Но у меня нет NATa, и хочется, чтобы PF ничего не
> принимал,

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

> и отвечал только на ICMP echo и на traceroute давал ICMP time exceeded
> (а в идеале пропускал traceroute на некоторые внутренние хосты). С
> ICMP echo понятно, а вот с traceroute...

traceroute пользует udp, порты его посмотрите и приоткройте. Не помню
в каком мане, но где-то описано.
--
engineer


Reply | Threaded
Open this post in threaded view
|

Pass traceroute via PF (some solution)

Grigory Klyuchnikov
Здравствуй, openbsd.ru!

Всем огромное спасибо за помощь! Кому интересно ниже описание варианта
решения.

Anton Maksimenkov wrote:

>>и отвечал только на ICMP echo и на traceroute давал ICMP time exceeded
>>(а в идеале пропускал traceroute на некоторые внутренние хосты). С
>>ICMP echo понятно, а вот с traceroute...
>>    
>>
>
>traceroute пользует udp, порты его посмотрите и приоткройте. Не помню
>в каком мане, но где-то описано.
>  
>
Задача:

- PF router блокирует все IN пакеты на адереса его интерфейсов,
- но отвечает:
    1) на icmp echo
    2) на проходящие через него traceroute udp сообщениями icmp time
exceeded
       (если PF - конечный пункт для traceroute, он и так ответит
       icmp port unreachable)

- от него разрешено все на OUT.

Описание traceroute:

traceroute посылает по 3 пакета на hop (по умолчанию) udp или icmp echo,
начиная с ttl = 1, и увеличивая ttl на 1 для каждого hopa,
от промежуточных возвращается icmp time exceeded, от конечного - icmp
port unreachable.
По умолчанию при UDP для каждой пробы используется порт начиная от
33435, далее + 1
(для большей гарантии попадания на неиспользуемый порт), типа на 1-й hop
3 пробы на порты 33435, 33436, 33437 и тд. Конечный порт зависит от
количества hop'ов
По умолчанию Linux, FreeBSD и OpenBSD traceroute используют udp,
Windows XP - icmp echo.

Решение:

# PF IFs
ext_if = "fxp0"
int_if = "fxp1"

AllIFs = "{ fxp0 fxp1 fxp2 ... }"

InternalNet = "{ IPs ... }"

#Internal Traceroute IPs
TracerouteIPs = "{ IPs ... }"

block all

# PF router
# Pass IN
# UDP traceroute
pass in log quick inet proto udp from any to $AllIFs \
    port 33434 >< 33700

# ICMP Echo
pass in log quick inet proto icmp from any to $AllIFs \
    icmp-type 8 keep state

# Block all other IN
block in log quick from any to $AllIFs

# Pass all OUT
pass out log quick inet proto { tcp, udp, icmp } from $AllIFs to any \
    flags S/SA keep state

################

# For Traceroute to some Internal hosts
pass in log quick on $ext_if inet proto udp from any to $TracerouteIPs \
    port 33434 >< 33700 keep state
pass in log quick on $ext_if inet proto icmp from any to $TracerouteIPs \
    icmp-type 8 keep state

pass out log quick on $ext_if inet proto { tcp, udp, icmp } \
    from $InternalNet to any flags S/SA keep state

pass in log quick on $int_if inet proto { tcp, udp, icmp } \
    from $InternalNet to any flags S/SA keep state

pass out log quick on $int_if inet proto { tcp, udp, icmp } \
    from any to $InternalNet flags S/SA keep state


Может что не правильно, уж поправьте :)))

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


Reply | Threaded
Open this post in threaded view
|

Re: Pass traceroute via PF (some solution)

Dmitry V. Kustov
> Задача:
>
> - PF router блокирует все IN пакеты на адереса его интерфейсов,
> - но отвечает:
>     1) на icmp echo
>     2) на проходящие через него traceroute udp сообщениями icmp time  
> exceeded
>        (если PF - конечный пункт для traceroute, он и так ответит
>        icmp port unreachable)
>
> - от него разрешено все на OUT.
>
> Решение:
>
Я бы так поправил (Ну, ещё бы таблицы ввести). Что народ скажет?

# PF IFs
ext_if = "fxp0"
int_if = "fxp1"

AllIFs = "{ fxp0 fxp1 fxp2 ... }"

InternalNet = "{ IPs ... }"

#Internal Traceroute IPs
TracerouteIPs = "{ IPs ... }"

block log on $ext_if all

# PF router
# Pass IN UDP traceroute
pass in quick inet proto udp from any to $AllIFs \
      port 33434 >< 33700

# ICMP Echo
pass in quick inet proto icmp from any to $AllIFs \
     icmp-type 8 keep state

# Pass all OUT
pass out quick inet proto tcp from $AllIFs to any \
     flags S/SA modulate state
pass out quick inet proto { udp, icmp } from $AllIFs to any \
     keep state

################

# For Traceroute to some Internal hosts
pass in quick on $ext_if inet proto udp from any to $TracerouteIPs \
     port 33434 >< 33700 keep state
pass in quick on $ext_if inet proto icmp from any to $TracerouteIPs \
     icmp-type 8 keep state

pass out quick on $ext_if inet proto tcp \
     from $InternalNet to any flags S/SA synproxy state
pass out quick on $ext_if inet proto { udp, icmp } \
     from $InternalNet to any keep state


Reply | Threaded
Open this post in threaded view
|

Re: Pass traceroute via PF (some solution)

Oleg Safiullin
> AllIFs = "{ fxp0 fxp1 fxp2 ... }"

> pass in quick inet proto udp from any to $AllIFs \
>      port 33434 >< 33700

не вдаваясь в подробности...

AllIFs -> self