URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 90226
[ Назад ]

Исходное сообщение
"FreeBsd PF - нстройка правил"

Отправлено Hlf , 06-Ноя-10 19:00 
Приветствую.
Дело в следующем: чтоб долго не расписывать что к чему выкладываю rc.conf и pf.conf

Проблема в том что с данным конфигом всем можно всё (
Подскажите в чем я ошибся - не пойму вроде правила правильно расписал....

Rc.conf

defaultrouter="***.***.***.149"
gateway_enable="YES"
hostname="bsd"
ifconfig_re0="inet ***.***.2.150 netmask 255.255.255.252" # интерфейс  к провайдеру
ifconfig_rl0="inet ***.***.24.17 netmask 255.255.255.240" # смотрит в сеть 1
ifconfig_rl1="inet ***.***.88.241 netmask 255.255.255.248" # смотрит в сеть 2

pf_enable="YES"
pf_rules="/etc/pf.conf"

---------------------------------------------------------------------------------

Pf.conf

ext_if="re0"
lan_if_1="rl0"
lan_if_2="rl1"

inet_proto = "{tcp, udp}"
allowed_ports="{ 443, 1494, 80, 1935, 3128, 8080, 1433, 1104, 2562, 1407 }


Allowed_networks="{ ***.***.***.***/32, ***.***.***.0/24, } #разрешенные Ip и сети

# разрешаем сети подключеной к интерфейсу rl0 доступ к Allowed networks через интерфейс re0

pass in on $ext_if inet proto $inet_proto from $Allowed_networks to ***.***.24.0/28 port $allowed_ports keep state
pass out on $ext_if inet proto $inet_proto from ***.***.24.0/28 to $Allowed_networks port $allowed_ports keep state

#разрешаем одному ip из сети подключеной к интерфейсу rl0 всё

pass in on $ext_if inet proto $inet_proto from any to ***.***.24.18/32 port $allowed_ports keep state
pass out on $ext_if inet proto $inet_proto from ***.***.24.18/32 to any port $allowed_ports keep state

#разрешаем машинке из сети подключеной к интерфейсу rl1 всё

pass in on $ext_if inet proto $inet_proto from any to ***.***.88.243/32 port $allowed_ports keep state
pass out on $ext_if inet proto $inet_proto from ***.***.***.243/32 to any port $allowed_ports keep state


всё

применяем правила - ок
проверяю - все ip из всех сетей имеют полный выход в инет....


Содержание

Сообщения в этом обсуждении
"FreeBsd PF - нстройка правил"
Отправлено Кирилл_Н , 06-Ноя-10 19:27 
>[оверквотинг удален]
> pass out on $ext_if inet proto $inet_proto from ***.***.24.18/32 to any port
> $allowed_ports keep state
> #разрешаем машинке из сети подключеной к интерфейсу rl1 всё
> pass in on $ext_if inet proto $inet_proto from any to ***.***.88.243/32 port
> $allowed_ports keep state
> pass out on $ext_if inet proto $inet_proto from ***.***.***.243/32 to any port
> $allowed_ports keep state
> всё
> применяем правила - ок
> проверяю - все ip из всех сетей имеют полный выход в инет....

добавьте
block in all
block out all
перед первым правилом


"FreeBsd PF - нстройка правил"
Отправлено mef , 06-Ноя-10 19:31 
> добавьте
> block in all
> block out all
> перед первым правилом

порядок правил в данном случае не важен, если не используется конструкция quick.


"FreeBsd PF - нстройка правил"
Отправлено Aquarius , 06-Ноя-10 21:01 
>> добавьте
>> block in all
>> block out all
>> перед первым правилом
> порядок правил в данном случае не важен, если не используется конструкция quick.

как это не важен, если исполняется последнее подходящее правило?


"FreeBsd PF - нстройка правил"
Отправлено Hlf , 06-Ноя-10 22:11 
>>> добавьте
>>> block in all
>>> block out all
>>> перед первым правилом
>> порядок правил в данном случае не важен, если не используется конструкция quick.
> как это не важен, если исполняется последнее подходящее правило?

А вот тут начинается самое интересное
Если я ставлю правила block первыми или последними - инета нет по всем моим сетям


"FreeBsd PF - нстройка правил"
Отправлено mef , 06-Ноя-10 22:27 
> А вот тут начинается самое интересное
> Если я ставлю правила block первыми или последними - инета нет по
> всем моим сетям

pfctl -sr что показывает?
Попробуй временно убрать in и out.


"FreeBsd PF - нстройка правил"
Отправлено Hlf , 06-Ноя-10 22:40 
>> А вот тут начинается самое интересное
>> Если я ставлю правила block первыми или последними - инета нет по
>> всем моим сетям
> pfctl -sr что показывает?
> Попробуй временно убрать in и out.

Если убрать правила block - инет появляется.
Но игнорит акцесслист, у всех есть полный доступ в обе стороны
pfctl показывает, что все правила работают как и должно быть)


"FreeBsd PF - нстройка правил"
Отправлено mef , 06-Ноя-10 22:45 
> Если убрать правила block - инет появляется.
> Но игнорит акцесслист, у всех есть полный доступ в обе стороны
> pfctl показывает, что все правила работают как и должно быть)

А in и out если убрать?


"FreeBsd PF - нстройка правил"
Отправлено Кирилл_Н , 07-Ноя-10 10:39 
>>> А вот тут начинается самое интересное
>>> Если я ставлю правила block первыми или последними - инета нет по
>>> всем моим сетям
>> pfctl -sr что показывает?
>> Попробуй временно убрать in и out.
> Если убрать правила block - инет появляется.
> Но игнорит акцесслист, у всех есть полный доступ в обе стороны
> pfctl показывает, что все правила работают как и должно быть)

А инет у вас пропадает при добавлении блока в начале потому, что не разрешён никакой трафик на lan_if_1 и lan_if_2. Может вы выложили не весь конфиг?


"FreeBsd PF - нстройка правил"
Отправлено Hlf , 07-Ноя-10 13:07 
>[оверквотинг удален]
>>>> Если я ставлю правила block первыми или последними - инета нет по
>>>> всем моим сетям
>>> pfctl -sr что показывает?
>>> Попробуй временно убрать in и out.
>> Если убрать правила block - инет появляется.
>> Но игнорит акцесслист, у всех есть полный доступ в обе стороны
>> pfctl показывает, что все правила работают как и должно быть)
> А инет у вас пропадает при добавлении блока в начале потому, что
> не разрешён никакой трафик на lan_if_1 и lan_if_2. Может вы выложили
> не весь конфиг?

А то что в правилах прописано пропускать через ext_if сеть подключенную к lan_if
разве не должно работать ?

# разрешаем сети подключеной к интерфейсу rl0 доступ к Allowed networks через интерфейс re0

pass in on $ext_if inet proto $inet_proto from $Allowed_networks to ***.***.24.0/28 port $allowed_ports keep state
pass out on $ext_if inet proto $inet_proto from ***.***.24.0/28 to $Allowed_networks port $allowed_ports keep state


"FreeBsd PF - нстройка правил"
Отправлено Кирилл_Н , 07-Ноя-10 13:51 
>[оверквотинг удален]
>> не весь конфиг?
> А то что в правилах прописано пропускать через ext_if сеть подключенную к
> lan_if
> разве не должно работать ?
> # разрешаем сети подключеной к интерфейсу rl0 доступ к Allowed networks через
> интерфейс re0
> pass in on $ext_if inet proto $inet_proto from $Allowed_networks to ***.***.24.0/28 port
> $allowed_ports keep state
> pass out on $ext_if inet proto $inet_proto from ***.***.24.0/28 to $Allowed_networks port
> $allowed_ports keep state

При запросе на соединение из локальной сети пакет сначала появится на локальном интерфейсе сервера как входящий, а только потом уйдёт с внешнего интерфейса сервера. Т.е. как минимум для интернета изнутри вам надо разрешить входящий траф на внутренних интерфейсах и исходящий на внешних. Обратный траф будет попадать под состояения, созданные keep state.


"FreeBsd PF - нстройка правил"
Отправлено Hlf , 07-Ноя-10 14:06 
> При запросе на соединение из локальной сети пакет сначала появится на локальном
> интерфейсе сервера как входящий, а только потом уйдёт с внешнего интерфейса
> сервера. Т.е. как минимум для интернета изнутри вам надо разрешить входящий
> траф на внутренних интерфейсах и исходящий на внешних. Обратный траф будет
> попадать под состояения, созданные keep state.

Если я правильно понял мне надо перед правилом которое я создал для сети
добавить правило которое пропускает весь трафик внутреннего интерфейса на внешний ?
А первой строкой прописать правила block in и out ?



"FreeBsd PF - нстройка правил"
Отправлено Кирилл_Н , 07-Ноя-10 14:16 
>> При запросе на соединение из локальной сети пакет сначала появится на локальном
>> интерфейсе сервера как входящий, а только потом уйдёт с внешнего интерфейса
>> сервера. Т.е. как минимум для интернета изнутри вам надо разрешить входящий
>> траф на внутренних интерфейсах и исходящий на внешних. Обратный траф будет
>> попадать под состояения, созданные keep state.
> Если я правильно понял мне надо перед правилом которое я создал для
> сети
> добавить правило которое пропускает весь трафик внутреннего интерфейса на внешний ?
> А первой строкой прописать правила block in и out ?

В pf выполняется последнее совпавшее правило. Поэтому разрешить внутренний траф вам надо где-нибудь после block all. И трафик из внутренней подсети будет идти не на внешний интерфейс, а куда угодно в интернет. Т.е. вам после блокирующего правила надо добавить правило, разрешающее на внутреннем интерфейсе весь входящий траф из внутренней подсети куда угодно (или куда угодно кроме самого сервера, если вам не надо изнутри попадать на сервер).

pass in on $lan_if_1 inet from ($lan_if_1)  to any keep state

Если вам надо чтобы сам сервер ходил во внутреннюю подсеть, то также надо разрешить исходящий трафик на внутреннем интерфейсе от сервера во внутреннюю подсеть

хороший ман. почитайте:
http://www.opennet.me/base/net/pf_faq.txt.html


"FreeBsd PF - нстройка правил"
Отправлено Aquarius , 07-Ноя-10 09:02 
>>>> добавьте
>>>> block in all
>>>> block out all
>>>> перед первым правилом
>>> порядок правил в данном случае не важен, если не используется конструкция quick.
>> как это не важен, если исполняется последнее подходящее правило?
> А вот тут начинается самое интересное
> Если я ставлю правила block первыми или последними - инета нет по
> всем моим сетям

ну все верно:
когда есть правила block, разрешено только то, что разрешено правилами pass
а когда их нет, разрешено все

предлагаю подумать, к какой стороне относятся указанные порты в ваших правилах (отдельно для правил in и для out)


"FreeBsd PF - нстройка правил"
Отправлено mef , 06-Ноя-10 22:26 
>>> добавьте
>>> block in all
>>> block out all
>>> перед первым правилом
>> порядок правил в данном случае не важен, если не используется конструкция quick.
> как это не важен, если исполняется последнее подходящее правило?

Да, важен. Другое хотел сказать.


"FreeBsd PF - нстройка правил"
Отправлено mef , 06-Ноя-10 19:30 
А где правило block?
keep state кстати можно убрать, сейчас все правила по-умолчанию keep state. Еще можно сделать вместо просто pass - pass quick.

"FreeBsd PF - нстройка правил"
Отправлено Hlf , 07-Ноя-10 13:20 
В связи с тем что сеть должна работать - временно установил cisco 2621, пусть маршрутизит (через циску всё заработало как из пушки).
А FreeBsd буду поднимать на Vmware с аналогичным конфигом, и разбираться детально.
При удачном исходе выложу работающий конфиг - можт кому будет интересно.