Страница 1 из 1

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

Добавлено: 2009-04-27 9:41:11
Archi
Добрый день, первый раз в жизни настраиваю PF, в связи с этим возникли некоторые вопросы, буду премного благодарен за помощь. Сразу приведу конфиг PF и упрощу его немного чтобы не загромождать...

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

#########
#Макросы#
#########
        ext_if="ngeth0"
        int_if="ngeth1"
        IpOut="внешний ИП шлюза"
        MailSRV="ИП сервака в инете"
        m9="ещё 1 ИП сервака в инете"
        lo_if="lo0"
        NetIn="10.20.0.0/16"
        DenyLan="{ 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 }"
        icmp_types="{ echoreq, unreach }"
#########
#Таблицы#
#########
        table <good_hosts> persist

#######
#Опции#
#######
        set skip on lo0
        set block-policy drop
        set loginterface ngeth0

########################
#Параметры нормализации#
########################
        scrub in all

##################
#Очереди или AltQ#
##################

###########
#NAT и RDR#
###########
        #RDR
                #Mail
                rdr inet proto tcp from $NetIn to $MailSRV port 25 -> $MailSRV port 26

                #Servers
                rdr on $ext_if proto tcp from any to $IpOut port 50000 -> 10.20.3.110 port 5550
                rdr on $ext_if proto tcp from any to $IpOut port 50001 -> 10.20.3.110 port 5550

                #Cars
                rdr on $ext_if proto tcp from $MailSRV to $IpOut port 3341 -> 10.20.3.30 port 1433

        #NAT
                nat pass on $ext_if from any to any -> ($ext_if)

####################
#Правила фильтрации#
####################
        #Deny
        block all
        block drop in quick on $ext_if from $DenyLan to any
        antispoof quick for { $lo_if, $int_if, $ext_if }

        #Pass lo
        pass on $lo_if

        #allow internal
        pass in on $int_if from any to $NetIn keep state
        pass out on $int_if from $NetIn to any keep state

        #Allow GW inet
        pass out on $ext_if proto { tcp,udp,icmp } from $IpOut to any keep state

        #pass from m9
        pass in on $ext_if from $m9 to $IpOut keep state
        pass in on $ext_if from $MailSRV to $IpOut  keep state

        #DNS
        pass on $int_if proto udp from any to any port 53 keep state
        pass on $int_if proto udp from any port 53 to any keep state
        pass on $ext_if proto udp from any port 53 to any keep state

        #Time
        pass on $int_if proto udp from $NetIn to any port 123 keep state

        #Inet
        pass in on $ext_if proto tcp from any port 80 to $IpOut keep state
        pass on $int_if from 10.20.3.200 to any keep state

        #Without Proxy
        pass on $int_if proto { tcp,udp } from $NetIn to any port { 1100,5550 } keep state
        pass on $int_if from any to $MailSRV keep state
        pass on $int_if from any to $m9 keep state
        pass on $int_if from 10.20.1.10 to any keep state
        pass on $int_if from 10.20.0.15 to any keep state
        pass on $int_if from $NetIn to $portsnap keep state
        #Pass rdr to servers
        pass in on $ext_if proto tcp from any to $IpOut port 50000
        pass in on $ext_if proto tcp from any to $IpOut port 50001

        #TEMP
        pass in on $ext_if proto tcp from any to $IpOut port 3307


        #ICMP
        pass log inet proto icmp all icmp-type $icmp_types
        pass on $int_if proto icmp from $NetIn to any

        #Table knock
        pass in on $ext_if proto tcp from any to $IpOut port { 60000:65000 }
        pass in on $ext_if proto tcp from <good_hosts> to $ext_if port 1723 keep state

        #VPN_IF
        pass on { ng0, ng1, ng2, ng3, ng4, ng5, ng6, ng7, ng8, ng9, ng10, ng11, ng12, ng13, ng14, ng15, ng16, ng17, ng18, ng19, ng20, ng21, ng22, ng23, ng24 }

Собственно проблема при загрузке этого конфига
1)Не работают редиректы(если убрать block all то работают)
2)не работает пинг изнутри сети наружу - хотя он вроде как прописан
3)не работает Tracert из сети наружу

И всячески преветствую любую критику как сделать фаер лучше, заранее спасибо огромное.

Re: Помогите разобратся с PF

Добавлено: 2009-04-27 12:37:52
skeletor
Насчёт пинга и трассировки - попробуй сделать как здесь описано
http://skeletor.ho.ua/index.php?name=ar ... t=17&cat=1
и поубирайте лишние посылания на icmp, а то у вас оно мало того, что 2-ды описано, так ещё и только 2 типа описано. Что касается редиректов, дык у вас block all находится ниже, чем редиректы. Поставьте block all в самом начале файла.

Re: Помогите разобратся с PF

Добавлено: 2009-04-27 12:55:48
Archi
Так по идее нельзя перемешывать команды из разных секций - а в своей секции он у меня находится в самом верху равзе не так?

Re: Помогите разобратся с PF

Добавлено: 2009-04-27 13:19:32
rnd
Что касается редиректов сделайте так:

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

#RDR
                #Mail
                rdr inet proto tcp from $NetIn to $MailSRV port 25 -> $MailSRV port 26

                #Servers
                rdr pass on $ext_if proto tcp from any to $IpOut port 50000 -> 10.20.3.110 port 5550
                rdr pass on $ext_if proto tcp from any to $IpOut port 50001 -> 10.20.3.110 port 5550

                #Cars
                rdr pass on $ext_if proto tcp from $MailSRV to $IpOut port 3341 -> 10.20.3.30 port 1433

Re: Помогите разобратся с PF

Добавлено: 2009-04-27 13:34:32
Archi
Я правильно понял что эти 4 строчки которые у меня сейчас

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

rdr on $ext_if proto tcp from any to $IpOut port 50000 -> 10.20.3.110 port 5550                
rdr on $ext_if proto tcp from any to $IpOut port 50001 -> 10.20.3.110 port 5550
pass in on $ext_if proto tcp from any to $IpOut port 50000        
pass in on $ext_if proto tcp from any to $IpOut port 50001
можно заменить двумя?

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

rdr pass on $ext_if proto tcp from any to $IpOut port 50000 -> 10.20.3.110 port 5550                
rdr pass on $ext_if proto tcp from any to $IpOut port 50001 -> 10.20.3.110 port 5550
Или же нужно оставить моих 4 строчки, а просто написание строчек rdr не правильное?

Re: Помогите разобратся с PF

Добавлено: 2009-04-27 13:42:25
rnd
да можно оставить только эти две строки

Re: Помогите разобратся с PF

Добавлено: 2009-04-27 13:43:43
Archi
Ок спасибо, завтра пока юзеров нету грузану новый фаер :)

Re: Помогите разобратся с PF

Добавлено: 2009-04-27 13:47:16
skeletor
Archi писал(а):Так по идее нельзя перемешывать команды из разных секций - а в своей секции он у меня находится в самом верху равзе не так?
Подождите, какие секции? Где вы определяете начало\конец секции? Разве в pf есть секции? :shock:

Re: Помогите разобратся с PF

Добавлено: 2009-04-27 13:56:42
Archi
гм
Вообще говоря, конфиг делится на несколько секций, которые должны иметь строгий порядок и не должны
пересекаться. Порядок следующий :



1) макросы

2) таблицы

3) опции

4) параметры нормализации

5) приоретизация и очереди ALTQ

6) правила трансляции

7) правила фильтра
http://www.lissyara.su/?id=1671


в соседней статье по PF тоже правла поделены на секции, у меня в конфиги названия секций вынесены в ###

Re: Помогите разобратся с PF

Добавлено: 2009-04-27 15:23:22
skeletor
Не знал. Теперь буду знать :)

Re: Помогите разобратся с PF

Добавлено: 2009-04-28 8:07:52
Archi

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

rdr pass on $ext_if proto tcp from any to $IpOut port 50000 -> 10.20.3.110 port 5550                
rdr pass on $ext_if proto tcp from any to $IpOut port 50001 -> 10.20.3.110 port 5550
не пашет вместе с block all :( проверял телнетом снаружи...

Re: Помогите разобратся с PF

Добавлено: 2009-04-28 10:37:12
Archi
Вот что самое странное что если в rdr включить слово pass то пакет не должен попадать в секцию фильтрации...почему же тогда с включенным block all редирект не работает а без него работает?)))

Re: Помогите разобратся с PF

Добавлено: 2009-04-28 14:14:44
Гость
Archi
попробуй включить журналирование в rdr, может в логах что-то толковое нарисуется

раз уж пошла тема последовательности записи правил.... попробуй поставить rdr после nat

Re: Помогите разобратся с PF

Добавлено: 2009-04-28 14:30:51
Archi
Перестановка ниже НАТа не помогла, подскажите как включить журналирование rdr?

Re: Помогите разобратся с PF

Добавлено: 2009-04-28 14:41:10
Роберт Полсон
какбуд-то так:

правило:
rdr pass log (all) on $ext_if proto tcp from any to $IpOut port 50000 -> 10.20.3.110 port 5550
для просмотра журнала:
tcpdump -n -e -ttt -r /var/log/pflog

если не получится, то почитай про журналирование в pf

Re: Помогите разобратся с PF

Добавлено: 2009-04-28 15:20:31
Archi
Честно говоря прочитав мануалы на опеннете и ещё в паре мест не нашёл как же правильно логгировать rdr, rdr log pass и rdr pass log не пашут...

Re: Помогите разобратся с PF

Добавлено: 2009-04-28 15:54:25
Роберт Полсон
Archi, здесь хорошо написано про pf http://house.hcn-strela.ru/BSDCert/BSDA-course/apc.html

Re: Помогите разобратся с PF

Добавлено: 2009-04-28 16:11:40
Archi
Посмотрел этот мануал а имено параграф 2.3.1
Там упоминается вскользь про логирование rdr, но синтаксис не описан
как я уже писал rdr pass log и rdr log pass считается неверным синтаксисом.

Re: Помогите разобратся с PF

Добавлено: 2009-05-01 19:03:58
Ocr
Такая же история с правилом блокировки.... Поступил по другому, а именно создал все разрешающие правила через quick после поставил блок правило, как в ipfw блок все по умолчанию последнее правило. Quick правильнее использовать так, как экономятся ресурсы.