BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: pf пропускает любой траффик
СообщениеДобавлено: Ср 08 дек, 2010 12:21 am 
Не в сети

Зарегистрирован: Вс 21 ноя, 2010 12:15 am
Сообщения: 46
Ребята сильно не пинайте начинающего.

Вообщем сделал такой конфиг:

Код:
int_if="em1"  #внутренний интерфейс в мою локальную сеть
ext_if="tun0" # виртульный интерфейс после поднятия pptp
lannet="192.168.0.0/24" #внутренняя  моя локалка
comp="192.168.0.10"

allow_service="{http,https,smtp,pop3,domain}"

set skip on lo0
set skip on $int_if

scrub in all

nat on $ext_if from $int_if:network to any -> ($ext_if)
#rdr pass on $ext_if proto tcp from any to ($ext_if) port rdp -> $comp port rdp
#rdr pass on $ext_if proto tcp from any to ($ext_if) port rdp -> $comp

block all

pass quick proto tcp from any to any port 1723
pass quick proto gre all

pass out on $ext_if proto {tcp,udp} from (self) to any port domain keep state
pass out on $ext_if proto tcp from (self) to any port http keep state

#pass out on $ext_if proto {tcp,udp} from $lannet to any port $allow_service kee
pass inet proto icmp all


В чем смысл, а точнее в чем его нет.

Данный конфиг пропускает пакеты от все клиентов моей локалки.
Хотя по конфигу он должен пропускать исходящие пакеты непосредственно с машины - шлюза.

Что не так можете пояснить?
Да еще читал что такая роблема может иметь место когда интерфейс внешний виртуальный и IP адрес динамический - у меня все именно так. Для этого внешний интерфейс $ext_if я поставил в скобки


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 12:24 am 
Не в сети

Зарегистрирован: Ср 02 апр, 2008 9:59 pm
Сообщения: 2127
Откуда: Москва
Цитата:
Данный конфиг пропускает пакеты от все клиентов моей локалки.


Код:
set skip on $int_if


Цитата:
set skip on <ifspec>
List interfaces for which packets should not be filtered.
Packets passing in or out on such interfaces are passed as if pf
was disabled, i.e. pf does not process them in any way. This can
be useful on loopback and other virtual interfaces, when packet
filtering is not desired and can have unexpected effects.

отсюда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 12:42 am 
Не в сети

Зарегистрирован: Вс 21 ноя, 2010 12:15 am
Сообщения: 46
Dimonuch писал(а):
Цитата:
Данный конфиг пропускает пакеты от все клиентов моей локалки.


Код:
set skip on $int_if


Цитата:
set skip on <ifspec>
List interfaces for which packets should not be filtered.
Packets passing in or out on such interfaces are passed as if pf
was disabled, i.e. pf does not process them in any way. This can
be useful on loopback and other virtual interfaces, when packet
filtering is not desired and can have unexpected effects.



хм, но правилом set skip on $int_if я лишь открыл для входящих со стороны моей локалки во внутренний интерфейс и исходящих с внутреннего интерфейса шлюза в локалку прохождение пакетов, но доступ на исходящие пакеты на внешнем интерфейсе у меня же закрыт.
Он открыть только для шлюза самого, то есть на машине - шлюзе только там я хочу чтобы были доступны протоколы http и dns что и приведено в моем конфиге:
Код:
pass out on $ext_if proto {tcp,udp} from (self) to any port domain keep state
pass out on $ext_if proto tcp from (self) to any port http keep state


Помогите разобраться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 12:47 am 
Не в сети

Зарегистрирован: Ср 02 апр, 2008 9:59 pm
Сообщения: 2127
Откуда: Москва
тогда я не понял что значит
Цитата:
Данный конфиг пропускает пакеты от все клиентов моей локалки.

как и куда он их пропускает?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 12:52 am 
Не в сети

Зарегистрирован: Вс 21 ноя, 2010 12:15 am
Сообщения: 46
да видимо топику я не самое удачное название подобрал, поторопился с названием.

Я имел ввиду что данный конфиг должен пропускать только от моей машины-шлюз протоколы http и dns в интернет
Так оно и есть, но машинам из локалки я этого права не давал, а они все равно ходят в интернет, почему вот только я не понимаю!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 1:13 am 
Не в сети

Зарегистрирован: Ср 02 апр, 2008 9:59 pm
Сообщения: 2127
Откуда: Москва
Цитата:
Я имел ввиду что данный конфиг должен пропускать только от моей машины-шлюз протоколы http и dns в интернет
Так оно и есть, но машинам из локалки я этого права не давал, а они все равно ходят в интернет, почему вот только я не понимаю!


так, стало чуть более понятно. Надеюсь что понятно (мне). Я понял так:
локальные машины НЕ должны через шлюз ходить куда-либо в Инет. Сам шлюз должен ходить в Инет по неким портам. Получилось, что локальные машины таки ходят через шлюз в Инет по этим портам. Так я понял?

Тогда смотри:

идет пакет с локалки на вход $int_if. Попадает на
set skip on $int_if
пакет пропускается "внутрь шлюза". Потому что так указано.

Дальше шлюз смотрит "куда пакет идет". Идет он наружу. Если стоит соответствующая sysctl (или в rc.conf стоит gateway_enable="YES"), то пакет передается на выход интерфейса $ext_if. Точнее там смотрится таблица маршрутизации, но это сейчас оффтопик.

А что у нас на выходе $ext_if? А там
nat on $ext_if from $int_if:network to any -> ($ext_if)

пакету подменяется адрес отправителя на внешний ИП шлюза. Дальше срабатывает например
pass out on $ext_if proto {tcp,udp} from (self) to any port domain keep state
и пакет уходит в инет

обратную схему расписывать не буду, но она примерно такая же, только наоборот.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 1:17 am 
Не в сети

Зарегистрирован: Чт 29 янв, 2009 6:37 pm
Сообщения: 64
Убери "set skip on $int_if ". И что такое "(self)"?

После чего наблюдай за блоками с помощью команды "tcpdump -qn -e -i pflog0", и добавляй необходимые правила.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 1:26 am 
Не в сети

Зарегистрирован: Вс 21 ноя, 2010 12:15 am
Сообщения: 46
Dimonuch огромное спасибо за то что рассудил меня в этом отношении.


А все же как сделать тогда чтобы на шлюзе был интернет, а на компах локалки допустим нет. как тогда сделать ? не подскажешь ?

Подразумеваю что-то типа этого:



Код:
frw="192.168.0.5"
............................................
pass out on $ext_if proto {tcp,udp} from $frw to any port domain keep state


Так будет правильно ?
Неужели в pf нет заранее зарезервированного слова, соответствующего внутреннему IP адресу шлюза ?


Насчет того чтобы убрать set skip on $int_if я это делать не хочу, локалке я доверяю (пока).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 1:32 am 
Не в сети

Зарегистрирован: Ср 02 апр, 2008 9:59 pm
Сообщения: 2127
Откуда: Москва
Цитата:
А все же как сделать тогда чтобы на шлюзе был интернет, а на компах локалки допустим нет. как тогда сделать ? не подскажешь ?

ну у тебя совершенно непонятно зачем сделан skip на внутренний интерфейс. С него и идут проблемы. Не знаю зачем он тебе, но он там явно не к месту.
и не понятно зачем тебе nat на внешнем интерфейсе. Ты же не собираешься никого выпускать.

Цитата:
Так будет правильно ?

нет

Цитата:
Неужели в pf нет заранее зарезервированного слова, соответствующего внутреннему IP адресу шлюза ?

есть и оно называется self. Но ты не понял смысла. У тебя сделан nat. И пакеты от локальных юзеров выходят с адресом как-раз таки шлюза уже.

Цитата:
Насчет того чтобы убрать set skip on $int_if я это делать не хочу, локалке я доверяю (пока).

при чем тут доверие? Ты не понимаешь что такое skip?
доверяешь? ну и сделай правило pass ..... to self


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 1:43 am 
Не в сети

Зарегистрирован: Вс 21 ноя, 2010 12:15 am
Сообщения: 46
нет я понял смысл почему нет, согласен смысла делать нат нет - если юзеры локалки не ходят в интернет.
А на врутреннем интерфейсе я пока ничего ограничивать не буду, хочу ограничивать пока только на внешнем интерфейсе.

Просто я пока только пытаюсь настраивать pf раньше настраивал ISA Server и все правила взяты по аналогии с него. Поэтому наверное такая путанница у меня сейчас.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 1:49 am 
Не в сети

Зарегистрирован: Ср 02 апр, 2008 9:59 pm
Сообщения: 2127
Откуда: Москва
Цитата:
согласен смысла делать нат нет - если юзеры локалки не ходят в интернет.

да, смысла в nat нету.

Цитата:
А на врутреннем интерфейсе я пока ничего ограничивать не буду, хочу ограничивать пока только на внешнем интерфейсе.

ты не "не ограничиваешь", ты пропускаешь мимо фильтрации. Вообще. Что непонятно для меня. "Разрешить доступ на сервер" и "пусть мимо фильтра" это две разные вещи.
Про твое доверие локалке я вообще молчу. Тут уж каждый сам набивает себе шишек. Это вопрос идеологический больше.

вот скажи мне: ты хочешь пропускать пакеты от локальных юзеров на сервера в Интернете? Вроде как не хочешь. Но ты сам пишешь правило, которое их туда будет пропускать. Зачем?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 11:51 am 
Не в сети

Зарегистрирован: Вс 21 ноя, 2010 12:15 am
Сообщения: 46
Dimonuch писал(а):
Цитата:
согласен смысла делать нат нет - если юзеры локалки не ходят в интернет.

да, смысла в nat нету.

Цитата:
А на врутреннем интерфейсе я пока ничего ограничивать не буду, хочу ограничивать пока только на внешнем интерфейсе.

ты не "не ограничиваешь", ты пропускаешь мимо фильтрации. Вообще. Что непонятно для меня. "Разрешить доступ на сервер" и "пусть мимо фильтра" это две разные вещи.
Про твое доверие локалке я вообще молчу. Тут уж каждый сам набивает себе шишек. Это вопрос идеологический больше.

вот скажи мне: ты хочешь пропускать пакеты от локальных юзеров на сервера в Интернете? Вроде как не хочешь. Но ты сам пишешь правило, которое их туда будет пропускать. Зачем?


Согласен, просто в конечном счете что я хотел ?
Я хотел чтобы пользователи локалки ходил по http а шлюз - машина с pf имел доступ только во внешний мир по smtp
Это моя локальная задача. Как теперь ее решить я запутался - то есть основное как разделить доступ во внешний мир между шлюзом и локальными машинами в сети по разным протоколам, но если можно отключив фильтрацию на внутреннем интерфейсе ?



Может покажите как это реализовывается ?
Тогда смысл в нат - конечно появится!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 12:35 pm 
Не в сети

Зарегистрирован: Ср 02 апр, 2008 9:59 pm
Сообщения: 2127
Откуда: Москва
Цитата:
но если можно отключив фильтрацию на внутреннем интерфейсе ?

вот объясни мне пожалуйста - ЗАЧЕМ это нужно? Откуда это упорное желание? И как ты хочешь заниматься фильтрацией, отключив ее?
Либо я чего-то не знаю\понимаю, либо ты. Давай с этим уже как-то разберемся.

Цитата:
Я хотел чтобы пользователи локалки ходил по http

куда ходили? в Инет (через внешний интерфейс шлюза) или только на сам шлюз?

Цитата:
Может покажите как это реализовывается ?

тут надо в первую очередь понять "как оно все работает". Тогда реализовать любые задумки будет просто.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 1:15 pm 
Не в сети

Зарегистрирован: Вс 21 ноя, 2010 12:15 am
Сообщения: 46
А какой смысл мне фильтровать внутренний интерфейс шлюза, если в локалке у меня одни десктопы Linux

Да хочется чтобы со шлюза был доступен smtp в интернет ну и конечно dns туда же а из локалки чтобы http и dns в интернет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 1:30 pm 
Не в сети

Зарегистрирован: Ср 02 апр, 2008 9:59 pm
Сообщения: 2127
Откуда: Москва
Цитата:
А какой смысл мне фильтровать внутренний интерфейс шлюза, если в локалке у меня одни десктопы Linux

ну это же не значит, что их надо совсем мимо фильтрации пускать? Не нужно фильтровать - не делай особых правил на них. Но зачем пускать их в открытую калитку. Ты банально закладываешь себе лишнюю дырку. В чем мы убедились на примере выше. Из-за этого skip тебе остальные правила надо писать с учетом того, что локалка у тебя не фильтрует. Например вешать доп. ограничения в NAT (которых у тебя не было и юзверя с локалки гуляли в Инете там, где не положено).

Зачем себе изобретать этот геморой? skip не для этих целей. И Пингвин на десктопах тут не при чем. Так что забудь ты про этот skip и выкинь его. Он не нужен тут.

Цитата:
Да хочется чтобы со шлюза был доступен smtp в интернет ну и конечно dns туда же а из локалки чтобы http и dns в интернет


насчет ДНС - рекомендую поднять хотя бы кеширующий ДНС на самом шлюзе. Или, на крайняк, сделать проброс УДП порта 53 с внутреннего адреса шлюза на внешний ДНС. И клиентам указывать ДНСом сам шлюз. Потом рулить проще будет.

ну а в целом задача-то тревиальная. На внешнем интерфейсе делаешь nat. Он у тебя уже был в примере выше. skip свой убираешь нафиг :)
в начале вешаешь
block all
а потом резрешающие правила на то, что тебе нужно. Учти, что есть http, а есть https - который на другом порту. По-хорошему стоит разрешить оба.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 4:03 pm 
Не в сети

Зарегистрирован: Вс 20 янв, 2008 6:47 am
Сообщения: 1330
wsnet писал(а):
Я хотел чтобы пользователи локалки ходил по http а шлюз - машина с pf имел доступ только во внешний мир по smtp
Это моя локальная задача. Как теперь ее решить я запутался - то есть основное как разделить доступ во внешний мир между шлюзом и локальными машинами в сети по разным протоколам, но если можно отключив фильтрацию на внутреннем интерфейсе ?

не уверен, но данный конфиг должен помочь
Код:
vnesh_if="tun0" # внешняя сеть
vnutr_if="xl0"  # внутренняя сеть

set block-policy return
set skip on lo0

scrub in all

nat on $vnesh_if from $vnutr_if:network to any -> ($vnesh_if)

block in  all
block out all

pass proto icmp all keep state

pass in  on $vnutr_if proto tcp from $vnutr_if:network to any port http keep state
pass in  on $vnutr_if proto udp from $vnutr_if:network to any port dns keep state

pass out on $vnesh_if proto udp from any to any port dns keep state
pass out on $vnesh_if proto tcp from $vnesh_if to any port {smtp pop3} keep state
pass out on $vnesh_if proto tcp from !$vnesh_if to any port {http} keep state


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 4:26 pm 
Не в сети

Зарегистрирован: Ср 02 апр, 2008 9:59 pm
Сообщения: 2127
Откуда: Москва
Цитата:
не уверен, но данный конфиг должен помочь

один облом уже вижу

Цитата:
pass in on $vnutr_if proto tcp from $vnutr_if:network to any port http keep state

https нету. Но дело не в этом. Пакет по правилу зашел на шлюз.
Ему подменяют адрес отправителя на шлюзовый внешний:
Цитата:
nat on $vnesh_if from $vnutr_if:network to any -> ($vnesh_if)

Теперь пакету надо выйти по внешнему интерфейсу, но
Цитата:
pass out on $vnesh_if proto tcp from !$vnesh_if to any port {http} keep state

в это правило он не попадет, потому что адрес у него внешний шлюзовой, а тут указано from !$vnesh_if


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 4:53 pm 
Не в сети

Зарегистрирован: Ср 02 апр, 2008 9:59 pm
Сообщения: 2127
Откуда: Москва
хитрость задумки автора заключается в том, что ему надо одновременно две вещи соблюсти:
1. шлюз не должен выходить вовне на http порт
2. локальные юзеры через шлюз и NAT должны выходить вовне на http
фигня в том, что после NAT выходящие вовне пакеты будут иметь IP адрес шлюза. И фактически ничем не будут отличаться от его собственных. Потому как обойтись простым pass и block я не знаю.

Тут надо метить пакеты, идущие от юзеров. Про теги читаем тут. Там и примеры есть, похожие. Т.е. входящий из локалки пакет от юзера метится тегом. А на выходе со шлюза разрешаются только пакеты на http, имеющие определенный тег. Пакеты от самого шлюза теги иметь не будут и в правило не попадут.

другой вопрос - стоит ли автору с этим заморачиваться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 5:10 pm 
Не в сети

Зарегистрирован: Вс 20 янв, 2008 6:47 am
Сообщения: 1330
http://www.openbsd.org/faq/pf/ru/nat.html#works

значит в pf трансляция сетевых адресов выполняется до фильтрации (анализа правил).

То есть при прохождении пакета из локальной сети в Интернет по правилам pf будут анализироваться уже оттранслированные (прошедшие нат) пакеты.

Также при прохождении пакета из интернет в локальную сеть.

Хм. Тогда в полной мере задачу автора не решить. Я бы попробовал ipfw.

В ipfw можно сделать так, что пакеты из локальной сети в Интернет будут транслироваться в последнюю очередь после прохождения фильтрации. А поведение входящих пакетов из Интернет будет аналогично pf, то есть они будут проходить обратное преобразование сразу после входа, а затем фильтроваться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср 08 дек, 2010 5:20 pm 
Не в сети

Зарегистрирован: Ср 02 апр, 2008 9:59 pm
Сообщения: 2127
Откуда: Москва
Цитата:
значит в pf трансляция сетевых адресов выполняется до фильтрации (анализа правил).

разумеется.

Цитата:
То есть при прохождении пакета из локальной сети в Интернет по правилам pf будут анализироваться уже оттранслированные (прошедшие нат) пакеты.

на выходе - разумеется

Цитата:
Хм. Тогда в полной мере задачу автора не решить. Я бы попробовал ipfw.

"я не знаю как" не означает "не решить". Я выше уже написал, как она решается. Причем это один из вариантов. И зачем тут "советовать попробовать"?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: AMDmi3, Bing [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика