непонятки с PF

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Sayman
ефрейтор
Сообщения: 67
Зарегистрирован: 2008-01-11 17:23:55

непонятки с PF

Непрочитанное сообщение Sayman » 2009-06-04 8:13:19

уважаемые, помогите. никак не могу въехать в логику работы этого ПФ.
значит система FReeBSD 6.2
ядро собирало с опциями:

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

options         ALTQ
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_PRIQ
options         ALTQ_NOPCC
device          pf
device          pflog
device          pfsync
в файле rc.conf так же есть строки:

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

pf_enable="YES"
pf_rules="/etc/rc.mypf"
pflog_enable="YES"
pflog_logfile="/var/pflog"
содержимое файла с правилами такое:


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

wan="nve0"
lan="xl0"
local="192.168.0.0/24"
oip="212.164.1.2"
iip="192.168.0.1"
admin="192.168.0.112"
sibseti="80.64.x.x"
avia_1="192.168.0.113"
private="{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }"
kronos="193.43.x.x"
akadem="{ 85.118.x.x, 85.118.y.y }"
#table <filials> { $akadem, $kronos }
serv="192.168.0.2"
icmp_types="echoreq"

#set limit { frags 5000, states 3500 }
set optimization normal
set block-policy drop
#set state-policy if-bound

scrub in all
#NAT

nat on $wan inet proto tcp from $lan:network to any -> ($wan)
rdr on $lan inet proto tcp from $admin to any port 80 -> 127.0.0.1 port 3128
rdr on $wan inet proto tcp from $kronos to $wan port 3389  -> $serv port 3389

#--
block all
pass in quick on lo0 all

#----------Block private networks---------
block in quick on $wan inet from $private to any
block out quick on $wan inet from any to $private
#-------------END--------------

pass in inet proto icmp all icmp-type $icmp_types keep state

pass quick on $wan inet proto tcp from any to any port 53 keep state
pass quick on $wan inet proto udp from any to any port 53 keep state
pass quick on $lan inet proto { tcp, udp } from any to any port 53 keep state
pass quick on $lan proto tcp from $local to port 5190 tag NAT_PASS keep state
pass out on $wan tagged NAT_PASS keep state
pass in quick on $lan inet proto tcp from $admin to $iip port 2022 keep state
проблема вот в чём:
после применения правил нифига не работает. пинги с серва никуда не идут. на сервак так же. нат не пашет, днс тоже блокируется...вовбщем всё на всё закрыто. почему? тот же нат. согласно статье http://www.opennet.ru/base/net/pf_faq.txt.html нат всяко должен работать.
что я делаю не так? в ipfw собственно логика была попроще, вначале указываю то что должно работать, т.е. разрешено. а потом блокирую то что не надо...например, открываю нат, разрешаю всякие ссх на серв от моего компа, открываю какие надо порты, а потом закрываю всё что не должно приходить с инета на серв. тут такая логика не проходит.
подскажите кто что может и/или знает. очень прошу!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
GRooVE
ст. сержант
Сообщения: 309
Зарегистрирован: 2009-01-04 10:33:43
Откуда: Odessa, UA
Контактная информация:

Re: непонятки с PF

Непрочитанное сообщение GRooVE » 2009-06-04 9:03:53

попробуй закомментить это правило:

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

block in quick on $wan inet from $private to any

Sayman
ефрейтор
Сообщения: 67
Зарегистрирован: 2008-01-11 17:23:55

Re: непонятки с PF

Непрочитанное сообщение Sayman » 2009-06-04 9:23:13

это я уже пробовал...
решил переписать всё по новой..всё правило.
вот текст новых правил:

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

#macros
wan="nve0"
lan="xl0"
local="{ 192.168.0.0/24 }"
iip="192.168.0.1"
oip="212.164.x.x"
avia="{ 192.168.0.113, 192.168.0.139 }"
admin="192.168.0.112"
serv="192.168.0.2"
filials="{ 212.164.x.x, 85.118.x.x, 85.118.y.y, 193.43.x.x }"
no_routs="{ 127.0.0.0/8, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12 }"
pings="echoreq"

#tables

#options
set block-policy drop
set timeout { frag 10, tcp.established 3600 }
scrub in all

#nat
nat on $wan from $lan:network to any -> $wan
rdr on $wan proto tcp from $filials to $wan port 3389 -> $serv port 3389

#firewall
block all

pass on $lan from any to any
antispoof log quick for { lo0, $lan, $wan }
#
#block in quick on $wan inet from $no_routs to any
#block out quick on $wan inet from any to $no_routs
#
pass in quick on $lan proto tcp from $admin to $iip port 2022 keep state
pass in quick on $lan proto tcp from $admin to $iip port 777 keep state
pass in quick on $lan proto tcp from $admin to $iip port 80 keep state
pass in quick on $wan proto tcp from $lan:network to any port 5190 keep state
pass quick on $wan proto udp from any to $wan port 53 keep state
pass quick on $wan proto tcp from $wan port 53 to any keep state
pass quick on $lan proto udp from $local to any port 53 keep state
pass quick on $wan proto tcp from $filials to $serv port 3389 keep state
pass log inet proto icmp all
толку почти нет...заработали пинги внутрь сети от сервака...днс и нат не пашут, аська отваливается. подозреваю правила ната и правила с днс...чтото там напортачил, а что понять не могу...вроде логично всё.
думаю, может прописать для днс правила in и out?,
ещё момент. не могу понять почему не срабатывают правила типа
nat on $wan from $local to any -> $wan
т.е. если указываю именно сеть/маска, то фиг..ошибку не выдаёт, но видно что не проканывает...странно...судя по pf -ss пакеты наружу летят. я вижу что есть соединения причём established по порту 5190, но аська всё ровно не пашет...быть может нехватает правила out?

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: непонятки с PF

Непрочитанное сообщение $Alchemist » 2009-06-04 9:29:44

nat on $wan inet proto tcp from $lan:network to any -> ($wan)
можно так сделать:

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

nat on $wan inet from $local to any -> $oip
А по поводу разруливания выхода можно сделать по разному, в вашем случае рекомендую включить логгирование всего что блокируется:

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

block log all
И начать разбирацца:

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

# tcpdump -n -e -tttt -i pflog0
Machines to Work,
People to Think.

Sayman
ефрейтор
Сообщения: 67
Зарегистрирован: 2008-01-11 17:23:55

Re: непонятки с PF

Непрочитанное сообщение Sayman » 2009-06-04 10:35:57

мда...tcpdump выдал что pflog0 no ipv4 address assigned...
сделал tcpdump -ner /var/log/pflog выдал мне гору всякого всякого...например вижу что есть мой внешний адрес, только судя по всему номер порта идёт не через двоеточее а через точку в итоге вижу обознаение адреса как 1.2.3.4.5 и блокируется почти всё...очень странно, несмотря на то что я указываю в правилах pass...

Аватара пользователя
Zedik
сержант
Сообщения: 283
Зарегистрирован: 2007-01-20 22:30:57
Откуда: 127.0.0.1

Re: непонятки с PF

Непрочитанное сообщение Zedik » 2009-06-04 12:03:03

Достаточно ли правил
pass in all
pass out all
что бы пропустить всех и вся хотя бы на интерфейсы?

:st:
уже пытаюсь ему все разрешить- не хочет даже icmp пропускать - permission denied
ядро пересобрал с поддержкой, в rc.conf запихнул необходмые enable и т.п.

Sayman
ефрейтор
Сообщения: 67
Зарегистрирован: 2008-01-11 17:23:55

Re: непонятки с PF

Непрочитанное сообщение Sayman » 2009-06-04 13:23:13

снова переписал правила, толькол на этот раз добовлял по пунктам...начал дебагнить порты аськи и увидел в чём прочина...
вот как тпеперь всё выглядит.

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

macros
wan="nve0"
lan="xl0"
local="{ 192.168.0.0/24 }"
iip="192.168.0.1"
oip="212.164.x.x"
avia="{ 192.168.0.113, 192.168.0.139 }"
admin="192.168.0.112"
serv="192.168.0.2"
filials="{ 212.164.x.x, 85.118.x.x, 85.118.y.y, 193.43.x.x }"
no_routs="{ 127.0.0.0/8, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12 }"
pings="{ echoreq, unreach }"
d_ports="{ 22, 135, 137 ,139, 445, 3306 }"

#tables

#options
set block-policy drop
set timeout { frag 10, tcp.established 3600 }
set loginterface nve0
scrub in all

#nat
rdr proto tcp from $lan:network to any port 80 -> 127.0.0.1 port 3128
nat on $wan inet from $lan:network to any port { 80, 443, domain } -> $wan
rdr on $wan proto tcp from $filials to $wan port 3389 -> $serv port 3389

#firewall
block log all

pass quick on lo0 all
pass on $lan from any to any
antispoof log quick for { lo0, $lan, $wan }
#
block in quick on $wan inet from $no_routs to any
block out quick on $wan inet from any to $no_routs
block in quick on $wan proto tcp from any to $oip port $d_ports
block out quick on $wan proto tcp from $wan port $d_ports to any
#
#admin
pass in quick on $lan proto tcp from $admin to $iip port 2022 keep state
pass in log quick on $lan proto tcp from $admin to $iip port 777 keep state
pass in quick on $lan proto tcp from $admin to $iip port 80 keep state

#ICQ
pass in log quick on $lan proto tcp from $local to any port 5190 keep state
pass out log quick on $wan proto tcp from $wan to any port 5190 keep state

#DNS
pass in log quick on $lan proto udp from $local to $iip port 53
pass out log quick on $lan proto udp from $iip port 53 to $local
pass in log quick on $wan proto { tcp, udp } from any to $oip port 53
pass out log quick on $wan proto { tcp, udp } from $oip port 53 to any
pass in log quick on $wan proto { tcp, udp } from any port 53 to $oip
pass out log quick on $wan proto { tcp, udp} from $oip to any port 53

#MAIL
pass in log quick on $lan proto tcp from $local to $iip port { 25, 143 } keep state
pass out log quick on $lan proto tcp from $iip port { 25,143 } to $local keep state
pass in log on $wan proto tcp from any to $oip port 25 keep state
pass out log quick on $wan proto tcp from $oip port 25 to any keep state
pass in log quick on $wan proto tcp from any port 25 to $oip keep state
pass out log quick on $wan proto tcp from $oip to any port 25 keep state

#http and https
pass in log quick on $lan proto tcp from $local to any port { 80, 443 }
pass out log quick on $wan proto tcp from $wan to any port { 80, 443 }

#SABRE
pass in log quick on $lan proto tcp from $avia to any port $sabre_ports keep state
pass out log quick on $wan proto tcp from $wan to any port $sabre_ports keep state

#RDP
pass in log quick on $wan proto tcp from $filials to any port 3389 keep state
pass out log quick on $lan proto tcp from $lan to $serv port 3389 keep state

#
pass inet proto icmp all
на мой взгляд не совсем красиво выглядит, потому что для того чтобы работала например аська пришлось сначала пустить с локалки на серв, а потом с серва в инет..
в ipfw немного не так. там одна строчка решает.. а чтобы народ страницы мог глазеть, ообще в Ipfw достаточно было бы простого ната, а тут кроме строки с натом, ещё две строки добавил. такое ощущение что пф не умеет с петлёй работать...
у кого какие мысли есть?

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: непонятки с PF

Непрочитанное сообщение $Alchemist » 2009-06-04 19:58:27

Sayman писал(а): на мой взгляд не совсем красиво выглядит, потому что для того чтобы работала например аська пришлось сначала пустить с локалки на серв, а потом с серва в инет..
в ipfw немного не так.
Именно! Но по-другому не значит плохо.
Я даю с сервера полный выход, а клиентов разруливаю на внутреннем интерфейсе.
Последний раз редактировалось $Alchemist 2009-06-04 20:05:21, всего редактировалось 1 раз.
Machines to Work,
People to Think.

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: непонятки с PF

Непрочитанное сообщение $Alchemist » 2009-06-04 20:04:24

Не вкурил почему сообщения отправленные в личку виснут в папке Исходящие... ))
Вобщем я так делал:
http://www.opennet.ru/base/net/freebsd_gw3.txt.html
Machines to Work,
People to Think.

Sayman
ефрейтор
Сообщения: 67
Зарегистрирован: 2008-01-11 17:23:55

Re: непонятки с PF

Непрочитанное сообщение Sayman » 2009-06-05 9:03:31

т.е. я правлиьно понял, что помимо открытого ната. в пф нужно ещё и 80й и прочие порты разрешать? вот фигн какой...

AzureZ
мл. сержант
Сообщения: 124
Зарегистрирован: 2007-11-06 17:07:27
Откуда: Москва

Re: непонятки с PF

Непрочитанное сообщение AzureZ » 2009-06-05 9:16:46

Sayman писал(а):т.е. я правлиьно понял, что помимо открытого ната. в пф нужно ещё и 80й и прочие порты разрешать? вот фигн какой...
Ну если все блочите сначала. Уберите block log all и кроме ната ничего и не нужно будет

Sayman
ефрейтор
Сообщения: 67
Зарегистрирован: 2008-01-11 17:23:55

Re: непонятки с PF

Непрочитанное сообщение Sayman » 2009-06-05 10:02:14

не...бл0ки убирать не годится! иначе смысл ставить фильтр :cz2:

Sayman
ефрейтор
Сообщения: 67
Зарегистрирован: 2008-01-11 17:23:55

Re: непонятки с PF

Непрочитанное сообщение Sayman » 2009-06-08 7:03:06

вобщем с этим серваком какие то чудеса творятся нереальные.
сегодня вырубился сам...толи питание прыгнуло толи как...включаю и бац..нет инета...есть машинка одна..терминальник. не наш. а левой конторы...они посмтавили его у нас чтобы человек мог работать с базами и выполнять заказы...работает на порту 55777, локальный адрес 192.168.0.250
ранее, т.е. на той неделе, когда смотрел по логам. было так. её терминалд лезит на серв, а потом уже от имени сера. т.е с внешним айпи подрубается к удалённому серваку. сёдня ничего совершенно не менял в правилах. после включения сервака у неё не пашет этот терминал. смотрю в логи и вижу:

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

054368 rule 95/0(match): pass in on xl0: 192.168.0.250.55777 > 80.69.179.66.55777: UDP, length 82
000009 rule 0/0(match): block out on nve0: 192.168.0.250.55777 > 80.69.179.66.55777: UDP, length 82
блок потому, что естественно что я не разрешал от имени локалдьных компов шарить по инету. да и не верно это чтобы на внешнем интерфейсе ворочился локальный айпи!
это как такое может быть? на той неделе было вот так:

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

096833 rule 0/0(match): pass in on xl0: 192.168.0.250.55777 > 80.69.179.66.55777 : UDP, length 113
000034 rule 0/0(match): pass out on nve0: 212.164.х.х.63220 > 80.69.179.66.55777: UDP, length 113
мне каже5тся что именно такая запись более верная, а не то что я увидел сегодня. ка ктакое вообще могло произойти? почему при старых правилах, этот ПФ живёт какой-то своей жизнью и кладёт большой и толстый на файл с парвилами? применяю правила вот так:

pfctl -f /etc/файл
хотя пробовал ещё pfctl -R -f /etc/файл
причём это стало касаться не только одной машины. все теперь пытаются именно так лезть в инет!
что может быть не так? сообщений об ошибках нет.