Приветствую.
Дело в следующем: чтоб долго не расписывать что к чему выкладываю 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" # смотрит в сеть 2pf_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 из всех сетей имеют полный выход в инет....
>[оверквотинг удален]
> 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
перед первым правилом
> добавьте
> block in all
> block out all
> перед первым правиломпорядок правил в данном случае не важен, если не используется конструкция quick.
>> добавьте
>> block in all
>> block out all
>> перед первым правилом
> порядок правил в данном случае не важен, если не используется конструкция quick.как это не важен, если исполняется последнее подходящее правило?
>>> добавьте
>>> block in all
>>> block out all
>>> перед первым правилом
>> порядок правил в данном случае не важен, если не используется конструкция quick.
> как это не важен, если исполняется последнее подходящее правило?А вот тут начинается самое интересное
Если я ставлю правила block первыми или последними - инета нет по всем моим сетям
> А вот тут начинается самое интересное
> Если я ставлю правила block первыми или последними - инета нет по
> всем моим сетямpfctl -sr что показывает?
Попробуй временно убрать in и out.
>> А вот тут начинается самое интересное
>> Если я ставлю правила block первыми или последними - инета нет по
>> всем моим сетям
> pfctl -sr что показывает?
> Попробуй временно убрать in и out.Если убрать правила block - инет появляется.
Но игнорит акцесслист, у всех есть полный доступ в обе стороны
pfctl показывает, что все правила работают как и должно быть)
> Если убрать правила block - инет появляется.
> Но игнорит акцесслист, у всех есть полный доступ в обе стороны
> pfctl показывает, что все правила работают как и должно быть)А in и out если убрать?
>>> А вот тут начинается самое интересное
>>> Если я ставлю правила block первыми или последними - инета нет по
>>> всем моим сетям
>> pfctl -sr что показывает?
>> Попробуй временно убрать in и out.
> Если убрать правила block - инет появляется.
> Но игнорит акцесслист, у всех есть полный доступ в обе стороны
> pfctl показывает, что все правила работают как и должно быть)А инет у вас пропадает при добавлении блока в начале потому, что не разрешён никакой трафик на lan_if_1 и lan_if_2. Может вы выложили не весь конфиг?
>[оверквотинг удален]
>>>> Если я ставлю правила 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
>[оверквотинг удален]
>> не весь конфиг?
> А то что в правилах прописано пропускать через 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.
> При запросе на соединение из локальной сети пакет сначала появится на локальном
> интерфейсе сервера как входящий, а только потом уйдёт с внешнего интерфейса
> сервера. Т.е. как минимум для интернета изнутри вам надо разрешить входящий
> траф на внутренних интерфейсах и исходящий на внешних. Обратный траф будет
> попадать под состояения, созданные keep state.Если я правильно понял мне надо перед правилом которое я создал для сети
добавить правило которое пропускает весь трафик внутреннего интерфейса на внешний ?
А первой строкой прописать правила block in и out ?
>> При запросе на соединение из локальной сети пакет сначала появится на локальном
>> интерфейсе сервера как входящий, а только потом уйдёт с внешнего интерфейса
>> сервера. Т.е. как минимум для интернета изнутри вам надо разрешить входящий
>> траф на внутренних интерфейсах и исходящий на внешних. Обратный траф будет
>> попадать под состояения, созданные 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
>>>> добавьте
>>>> block in all
>>>> block out all
>>>> перед первым правилом
>>> порядок правил в данном случае не важен, если не используется конструкция quick.
>> как это не важен, если исполняется последнее подходящее правило?
> А вот тут начинается самое интересное
> Если я ставлю правила block первыми или последними - инета нет по
> всем моим сетямну все верно:
когда есть правила block, разрешено только то, что разрешено правилами pass
а когда их нет, разрешено всепредлагаю подумать, к какой стороне относятся указанные порты в ваших правилах (отдельно для правил in и для out)
>>> добавьте
>>> block in all
>>> block out all
>>> перед первым правилом
>> порядок правил в данном случае не важен, если не используется конструкция quick.
> как это не важен, если исполняется последнее подходящее правило?Да, важен. Другое хотел сказать.
А где правило block?
keep state кстати можно убрать, сейчас все правила по-умолчанию keep state. Еще можно сделать вместо просто pass - pass quick.
В связи с тем что сеть должна работать - временно установил cisco 2621, пусть маршрутизит (через циску всё заработало как из пушки).
А FreeBsd буду поднимать на Vmware с аналогичным конфигом, и разбираться детально.
При удачном исходе выложу работающий конфиг - можт кому будет интересно.