правила PF

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
yumix
проходил мимо
Сообщения: 4
Зарегистрирован: 2012-02-21 14:04:04

правила PF

Непрочитанное сообщение yumix » 2012-02-21 14:17:59

Доброго времени суток!
Что , собственно, имеется:
FreeBSD 9 STABLE c пересобранным ядром для PF+AltQ
На ней mpd5 в качестве vpn server, требуется так же форвардинг нескольких портов в локалку.
Просьба указать на ошибки в правилах фаервола, если таковые имеются.

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

# cat /etc/pf.conf
int_if="fxp1"  # локалка
ext_if_cheap="fxp0"  # inet
vpn_lan="172.16.16.96/27"
icmp_types="{ echoreq, unreach}"
priv_nets = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"

set block-policy drop
set skip on lo0
set skip on $int_if
set timeout { frag 10, tcp.established 3600 }
scrub in all

rdr pass on $ext_if_cheap inet proto tcp from any to port 80 -> 10.0.0.11 port 80
rdr pass on $ext_if_cheap inet proto tcp from any to port 22 -> 10.0.0.11 port 22
nat on $ext_if_cheap from $vpn_lan  -> ($ext_if_cheap)
nat on $ext_if_cheap from 10.0.0.11 -> ($ext_if_cheap)

block all

antispoof log quick for { lo0, $ext_if_cheap, $int_if }
block drop in log quick on $ext_if_cheap from $priv_nets to any

pass out on $ext_if_cheap from $ext_if_cheap to any keep state
pass log inet proto icmp all icmp-type $icmp_types

pass inet  from $vpn_lan
pass quick on $int_if

Хостинговая компания 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/

d.kalinin
рядовой
Сообщения: 20
Зарегистрирован: 2010-07-03 10:02:47

Re: правила PF

Непрочитанное сообщение d.kalinin » 2012-02-21 16:15:11

7-ая строчка снизу (block all), под ней правила уже не сработают.

Заодно - set skip $int_if - фильтрация на этом интерфейсе отключена, поэтому смысл в правилах с этим интерфейсом отпадает.

Так же направление внешнего трафика ... с int_if на ext_if? mpd5 создает динамические интерфейсы ng*, про них в правилах ни слова

yumix
проходил мимо
Сообщения: 4
Зарегистрирован: 2012-02-21 14:04:04

Re: правила PF

Непрочитанное сообщение yumix » 2012-02-21 16:46:59

Спасибо за комментарий, но Вы не поверите - оно работает.
вот пример с закомментированными строчками
#pass out on $ext_if_cheap from $ext_if_cheap to any keep state
#pass log inet proto icmp all icmp-type $icmp_types

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

C:\Documents and Settings\yumi>ping ya.ru

Обмен пакетами с ya.ru [213.180.204.3] по 32 байт:

Превышен интервал ожидания для запроса.

Статистика Ping для 213.180.204.3:
    Пакетов: отправлено = 1, получено = 0, потеряно = 1 (100% потерь),
Control-C
теперь с раскомментированными этими же строками

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

C:\Documents and Settings\yumi>ping ya.ru

Обмен пакетами с ya.ru [213.180.204.3] по 32 байт:

Ответ от 213.180.204.3: число байт=32 время=24мс TTL=56
Ответ от 213.180.204.3: число байт=32 время=25мс TTL=56
Ответ от 213.180.204.3: число байт=32 время=24мс TTL=56
Ответ от 213.180.204.3: число байт=32 время=26мс TTL=56

Статистика Ping для 213.180.204.3:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь)
т.е правила после drop all работают.
Это подтверждается еще и логами pflog
C:\Documents and Settings\yumi>ping ya.ru

Обмен пакетами с ya.ru [213.180.204.3] по 32 байт:

Ответ от 213.180.204.3: число байт=32 время=24мс TTL=56
Ответ от 213.180.204.3: число байт=32 время=25мс TTL=56
Ответ от 213.180.204.3: число байт=32 время=24мс TTL=56
Ответ от 213.180.204.3: число байт=32 время=26мс TTL=56

Статистика Ping для 213.180.204.3:
Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
насколько я понял описание PF-а он просматривает все правила до последней строчки и то правило, которое подходит - срабатывает. в IPFW наоборот.

yumix
проходил мимо
Сообщения: 4
Зарегистрирован: 2012-02-21 14:04:04

Re: правила PF

Непрочитанное сообщение yumix » 2012-02-21 17:09:37

Две последние строчки действительно не работают или до них дело не доходит.
но дело даже не в этом. Переписал так

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

int_if="fxp1"  # локалка
ext_if_cheap="fxp0"  # inet
vpn_lan="172.16.16.96/27"
icmp_types="{ echoreq, unreach}"
priv_nets = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"

set block-policy drop
set skip on lo0
set skip on $int_if
set timeout { frag 10, tcp.established 3600 }
scrub in all

rdr pass on $ext_if_cheap inet proto tcp from any to port 80 -> 10.0.0.11 port 80
rdr pass on $ext_if_cheap inet proto tcp from any to port 22 -> 10.0.0.11 port 22
nat on $ext_if_cheap from $vpn_lan  -> ($ext_if_cheap)
nat on $ext_if_cheap from 10.0.0.11 -> ($ext_if_cheap)

block all

antispoof log quick for { lo0, $ext_if_cheap, $int_if }
block drop in log quick on $ext_if_cheap from $priv_nets to any

pass out on $ext_if_cheap from $ext_if_cheap to any keep state
pass log inet proto icmp all icmp-type $icmp_types
вроде работает, только одно маленькое но ...
Через некоторое время "затыкается" внешний интерфейс. Т.е ни с него ни на него пакеты не идут. Помогает только
ifconfig fxp0 down
ifconfig fxp0 up
Вот я и пытаюсь понять в чем ошибка.

yumix
проходил мимо
Сообщения: 4
Зарегистрирован: 2012-02-21 14:04:04

Re: правила PF

Непрочитанное сообщение yumix » 2012-02-21 17:40:31

обманул немножко для работы ВПН всетаки нужна в конце

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

pass inet  from $vpn_lan

d.kalinin
рядовой
Сообщения: 20
Зарегистрирован: 2010-07-03 10:02:47

Re: правила PF

Непрочитанное сообщение d.kalinin » 2012-02-22 16:36:18

Вы правы, действительно в pf есть оптимизатор правил, который может менять порядок прохождения :)

Сетевая виснет - надо смотреть, что в момент зависания творится:
/var/log/messages
netstat -m

FrIcE
рядовой
Сообщения: 44
Зарегистрирован: 2010-04-05 17:46:51

Re: правила PF

Непрочитанное сообщение FrIcE » 2012-02-24 7:58:19

pf использует последнее подходящее правило, если не задана опция quick, читайте документацию.