Здравствуй, openbsd.ru!
Благодарю всех за участие в моем просвещении! Не сочтите за навязчивость, но для меня остался неясен один более общий вопрос по составлению правил PF. Боюсь, что я все же "извращаюсь" в своей писанине. По моему разумению лучше блокировать нежелательный трафик на входе, т.е. в правилах на IN, чтобы не вызывать обработки таких пакетов на IP стеке и повторную обработку на OUT. Но тогда, если интерфейсов 3 и более и хочется разграничить доступ между ними, то приходится писать дополнительные правила блокировки. Далее длинный пример, не знаю как объяснить словами: - три интерфейса, три сети: внешняя, внутренняя и dmz - из внешней - в DMZ разрешено только - SMTP, HTTP, DNS - во внутреннюю только - SSH - из DMZ - во внутреннюю только - SMTP - во внешнюю - все - из внутренней разрешено все Если не сложно, скажите, что не так может быть... # PF IFs ext_if = "fxp0" int_if = "fxp1" dmz_if = "fxp2" dmz_smtp_server = "IP" dmz_http_server = "IP" dmz_dns_server = "IP" int_ssh_server = "IP" int_smtp_server = "IP" table <InternalNet> { IPs } block in all block out all #### IN ext_if ## -> dmz-if pass in quick on $ext_if proto tcp from any to $dmz_http_server \ port http flags S/SA synproxy state pass in quick on $ext_if proto tcp from any to $dmz_smtp_server port smtp flags S/SA synproxy state pass in quick on $ext_if proto udp from any to $dmz_dns_server \ port dns keep state ## -> int_if pass in quick on $ext_if proto tcp from any to $int_ssh_server \ port ssh flags S/SA synproxy state block in quick on $ext_if all #### OUT ext_if pass out quick on $ext_if proto tcp from any to any \ flags S/SA synproxy state pass out quick on $ext_if proto { udp, icmp } from any to any \ keep state #### IN dmz-if ##-> int_if pass in quick on $dmz_if proto tcp from any to $int_smtp_server \ flags S/SA synproxy state block in quick on $dmz_if from any to <InternalNet> ## -> ext_if pass in quick on $dmz_if proto tcp from any to any \ flags S/SA synproxy state pass in quick on $dmz_if proto { udp, icmp } from any to any \ keep state block in quick on $dmz_if all #### OUT dmz_if pass out quick on $dmz_if proto tcp from any to any \ flags S/SA synproxy state pass out quick on $dmz_if proto { udp, icmp } from any to any \ keep state #### IN int_if pass in quick on $int_if proto tcp from any to any \ flags S/SA synproxy state pass in quick on $int_if proto { udp, icmp } from any to any \ keep state #### OUT int_if pass out quick on $int_if proto tcp from any to any \ flags S/SA synproxy state pass out quick on $int_if proto { udp, icmp } from any to any \ keep state -- С уважением, Григорий Ключников |
On Fri, 23 Dec 2005 14:28:36 +0300, Grigory Klyuchnikov <[hidden email]>
wrote: > Далее длинный пример, не знаю как объяснить словами: > - три интерфейса, три сети: внешняя, внутренняя и dmz > - из внешней - в DMZ разрешено только - SMTP, HTTP, DNS > - во внутреннюю только - SSH > - из DMZ - во внутреннюю только - SMTP > - во внешнюю - все > - из внутренней разрешено все > > Если не сложно, скажите, что не так может быть... > > block in all > block out all > block all > #### IN ext_if > ## -> dmz-if > pass in quick on $ext_if proto tcp from any to $dmz_http_server \ > port http flags S/SA synproxy state > pass in quick on $ext_if proto tcp from any to $dmz_smtp_server > port smtp flags S/SA synproxy state > pass in quick on $ext_if proto udp from any to $dmz_dns_server \ > port dns keep state > > ## -> int_if > pass in quick on $ext_if proto tcp from any to $int_ssh_server \ > port ssh flags S/SA synproxy state > > block in quick on $ext_if all > т.к стоит quick. Но это надо у народа уточнить. А если без quick, то первое правило вверху сработает. > #### OUT ext_if > pass out quick on $ext_if proto tcp from any to any \ > flags S/SA synproxy state > pass out quick on $ext_if proto { udp, icmp } from any to any \ > keep state > Здесь и далее from any to any можно заменить просто на all. > #### IN dmz-if > ##-> int_if > pass in quick on $dmz_if proto tcp from any to $int_smtp_server \ > flags S/SA synproxy state > > block in quick on $dmz_if from any to <InternalNet> > > ## -> ext_if > pass in quick on $dmz_if proto tcp from any to any \ > flags S/SA synproxy state > pass in quick on $dmz_if proto { udp, icmp } from any to any \ > keep state > > block in quick on $dmz_if all > Ниже правила не понятны. Зачем они? > #### OUT dmz_if > pass out quick on $dmz_if proto tcp from any to any \ > flags S/SA synproxy state > pass out quick on $dmz_if proto { udp, icmp } from any to any \ > keep state > Если на внутренней всё разрешено, то и не делайте там ничего, зачем? Сделайте первое block правило только для ext и dmz. --------------------------------- > #### IN int_if > > pass in quick on $int_if proto tcp from any to any \ > flags S/SA synproxy state > pass in quick on $int_if proto { udp, icmp } from any to any \ > keep state > > #### OUT int_if > pass out quick on $int_if proto tcp from any to any \ > flags S/SA synproxy state > pass out quick on $int_if proto { udp, icmp } from any to any \ > keep state > |
In reply to this post by Grigory Klyuchnikov
Grigory Klyuchnikov wrote: > Если не сложно, скажите, что не так может быть... Прочитайте pf-faq. Еще, на www.openbsd.ru есть примеры конфигов. Вам подойдет вариант с block in по умолчанию + pass in на раздачу всего, что не запрещено. quick'ом желательно не пользоваться. Из-за него, например, пакеты не проходят через antispoof и прочие проверочные правила, находящиеся в самом низу. Которые, вообще-то, нужны. :) |
Pavel Labushev пишет:
> не запрещено. quick'ом желательно не пользоваться. Из-за него, например, > пакеты не проходят через antispoof и прочие проверочные правила, > находящиеся в самом низу. Которые, вообще-то, нужны. :) А что мешает поместить "antispoof и прочие проверочные правила" в самом начале? |
Hi,
On Mon, 26 Dec 2005, BSW wrote: B> Pavel Labushev пишет: B> > не запрещено. quick'ом желательно не пользоваться. Из-за него, например, B> > пакеты не проходят через antispoof и прочие проверочные правила, B> > находящиеся в самом низу. Которые, вообще-то, нужны. :) B> B> А что мешает поместить "antispoof и прочие проверочные правила" в самом B> начале? Речь идет о том, что если встречается pass (in/out) quick, то пакет пропускается и до "antispoof и прочих проверочных правил" дело не дойдет внизу они или вверху, т.к. после quick обработка прекращается. -- Grigory Klyuchnikov, System Engineer, Institute for System Programming Russian Academy of Sciences |
In reply to this post by Pavel Labushev
Hi,
On Fri, 23 Dec 2005, Pavel Labushev wrote: PL> Grigory Klyuchnikov wrote: PL> PL> > Если не сложно, скажите, что не так может быть... PL> PL> Прочитайте pf-faq. Еще, на www.openbsd.ru есть примеры конфигов. Вам PL> подойдет вариант с block in по умолчанию + pass in на раздачу всего, что PL> не запрещено. quick'ом желательно не пользоваться. Из-за него, например, PL> пакеты не проходят через antispoof и прочие проверочные правила, PL> находящиеся в самом низу. Которые, вообще-то, нужны. :) Реальное спасибо. Перечитал faq, переписал правила без quick'ов (только в исключениях с block), отладил, запустил. Зациклился на quick'ах, т.к. пришлось переписывать старые правила ipfilter'а на PF, а они были построены на quick'ах и настолько запутанные, что я голову сломал, подтверждая правило, что проще написать заново, чем переписывать чужую работу :)) Еще раз всем спасибо за помощь! -- Grigory Klyuchnikov, System Engineer, Institute for System Programming Russian Academy of Sciences |
In reply to this post by BSW-2
BSW wrote: > А что мешает поместить "antispoof и прочие проверочные правила" в самом > начале? Antispoof-правила автоматически помещаются в самом конце и с quick быть не могут. А в самом начале, если что-то делать, нужен будет quick в каждом проверочном правиле, чтобы они оказались последними при совпадении. Не вижу, зачем такие сложности, когда правила, стоящие в конце, говорят сами за себя. |
> Antispoof-правила автоматически помещаются в самом конце и с quick быть
> не могут. А в самом начале, если что-то делать, нужен будет quick в antispoof правина никуда автоматически не помещаются и quick быть могут... Собственно antispoof это обычное правило, только сокращенно написанное. Например antispoof quick for lo0 на самом деле является правилом block in quick on ! lo0 from lo0:network |
Oleg Safiullin wrote: > > > Antispoof-правила автоматически помещаются в самом конце и с quick быть > > не могут. А в самом начале, если что-то делать, нужен будет quick в > > antispoof правина никуда автоматически не помещаются и quick быть могут... > Собственно antispoof это обычное правило, только сокращенно написанное. Например Мда. У меня они на всех файрволах (руками) внизу и без quick. Привык, и казаться начало всякое. Ошибся, звиняйте. :) |
Free forum by Nabble | Edit this page |