пара вопросов по PF.conf

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

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
londinium
проходил мимо

пара вопросов по PF.conf

Непрочитанное сообщение londinium » 2009-03-03 23:01:47

Здравствуйте, Господа!

Сочиняю конфиг pf для машины, на которой установил FreeBSD 7.1 (ядро GENERIC). Компьютер будет работать шлюзом и фтп-сервером.
Задача такова - разрешить пользоваться шлюзом только определенным лицам(открыть для них ftp,dns,www,https). Из внешней сети разрешить доступ только к ФТП-серверу
Параметры сетевых карт:

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

fxp0: ip-адрес 192.168.1.181, маска 255.255.255.0 (играет роль внешней сети) 
xl0: ip-адрес 10.10.10.2, маска 255.0.0.0 (играет роль шлюза для сети 10.10.10.х)
В сети 10.10.10.х живет компьютер с адресом 10.10.10.2. С него тестирую

PF.conf

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

int_if="xl0" #internal interface 
ext_if="fxp0"#external interface 
internal_network="10.10.10.0/8" #внутренняя сеть 
prv_hosts="{10.10.10.2,10.10.10.1}"#хосты, которым разрешено работать со шлюзом 

#scrub all packets 
scrub in all 
scrub out all 

#nat rules 
nat_proto="{tcp,udp,icmp}" 
nat on $ext_if proto $nat_proto  from $internal_network  to any ->($ext_if) 

#rdr rules place here 

#filter rules 
ip_proto="{tcp,udp}" 
icmp_allowed="echoreq" 
tcp_services ="{ftp-data,ftp,domain,www,https}" 
udp_services="{domain}" 


#default filter  policy - block all 
block in all 
block out all 

#disable filter on loopback interface 
set skip on lo 

#antispoof 
antispoof quick for $ext_if 
antispoof quick for $int_if 

#allow necessary ports and protocols 
#only for prv_hosts 

#allow SSH only for connect from internal network 
pass in on $int_if proto tcp from $prv_hosts to $int_if port ssh 

#allow ftp 
#allow our  ftp from internal network 
pass in on $int_if proto tcp from $prv_hosts to $int_if port ftp 
pass in on $int_if proto tcp from $prv_hosts to $int_if  port>49151 keep state 

#allow to access our ftp from external  networks 
pass in on $ext_if proto tcp from any to $ext_if port ftp keep state 
pass in on $ext_if proto tcp from any to $ext_if port>49151 keep state 

#allow dns, www, ftp,https 
pass out proto tcp to any port $tcp_services keep state 
pass out proto udp to any port $udp_services keep state 

#allow ping 
pass in inet proto icmp all icmp-type $icmp_allowed keep state 
pass out inet proto icmp all icmp-type $icmp_allowed keep state
Вопросы таковы:
1. все ли я корректно написал. Не пооткрывал ли где лишнего?
2. непонятные моменты:
при таких правилах PF я могу с консоли FreeBSD лазить по сети 192. 168.1.х (внешняя сеть для тестирования), но с компьютера 10.10.10.2 выйти в сеть 192.168.1.х не могу (no route to host ). Где смотреть?
3. Как только я меняю правило

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

   #allow dns, www, ftp,https 
  pass out proto tcp to any port $tcp_services keep state 
  pass out proto udp to any port $udp_services keep state
на

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

#allow dns, www, ftp,https 
pass out proto tcp from $prv_hosts to any port $tcp_services keep state 
pass out proto udp from $prv_hosts to any port $udp_services keep state
перестает вообще работать все, т.е. я не могу даже с консоли шлюза бегать по 192.168.1.х
Вопрос:как сделать правильно, т.е. разрешить только некоторым и только то, что нужно

на всякий случай привожу rc.conf:

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

defaultrouter="192.168.1.4" 
gateway_enable="YES" 
hostname="changer.in.kaskad.ua" 
ifconfig_fxp0="inet 192.168.1.181  netmask 255.255.255.0" 
ifconfig_xl0="inet 10.10.10.1 netmask 255.0.0.0" 
inetd_enable="YES" 
#sshd_enable="YES" 
ftpd_enable="YES" 
ftpd_flags="-D -l" 
pf_enable="YES" 
pf_rules="/etc/pf.conf" 
pf_flags="" 
pflog_enable="YES" 
pflog_logfile="var/log/pflog" 
pflog_flags=""

Хостинговая компания 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/

Аватара пользователя
24rus
мл. сержант
Сообщения: 75
Зарегистрирован: 2008-09-27 16:04:59
Откуда: Красноярск
Контактная информация:

Re: пара вопросов по PF.conf

Непрочитанное сообщение 24rus » 2009-03-04 7:02:13

1) Доступ в инет только избранным
# Macros -------------------------------
ext_if="fxp0" #внешний интерфейс
nat_ip="{ 10.10.10.2, 10.10.10.1 }" #хосты, которым разрешено работать со шлюзом
...
...
...
# Nat -------------------------------------
nat on $ext_if from $nat_ip to any -> $ext_if
___________________
В инет будут иметь доступ только указанные IP адреса в макросе "nat_ip",

2)
block in all
block out all

Это можно сократить до
block all

antispoof quick for $ext_if
antispoof quick for $int_if

поменять на
antispoof quick for { $ext_if, $int_if }

#filter rules
ip_proto="{tcp,udp}"
icmp_allowed="echoreq"
tcp_services ="{ftp-data,ftp,domain,www,https}"
udp_services="{domain}"

это макросы их лучше поместить в верх

а вообще порядок правил PF
# макросы
ext_if="fxp0"
...........

# опции
set skip on lo
..........

# нормализация трафика
scrub in
..........

# nat/rdr
nat on $ext_if from $nat_ip to any -> $ext_if
...........

# Фильтрация
block all
............

3) Добавь доступ к шлюзу из внутренней сети
# LAN in SERVER in LAN ---------------------------------------
pass out on $int_if from any to $internal_network
pass in on $int_if from $internal_network to any

p.s. Это для начало ....
Show must go on !

londinium
проходил мимо

Re: пара вопросов по PF.conf

Непрочитанное сообщение londinium » 2009-03-04 18:09:47

спасибо. На 80% все заработало.
Теперь конфиг такой:

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


int_if="xl0"
ext_if="fxp0"

#internal hosts,alloved to interact with this server

internal_network="10.10.10.0/8" #comment this


prv_hosts="{10.10.10.2,10.10.10.1}"


#scrub all packets
scrub in all
scrub out all

#nat rules
nat_proto="{tcp,udp,icmp}"
nat on $ext_if proto $nat_proto  from $prv_hosts  to any ->($ext_if)

#rdr rules place here

#filter rules
ip_proto="{tcp,udp}"
icmp_allowed="echoreq"
tcp_services ="{ftp-data,ftp,domain,www,https}"
udp_services="{domain}"


#default filter  policy - block all
block all

#disable filter on loopback interface
set skip on lo

#antispoof 

antispoof quick for {$int_if,$ext_if}

#allow necessary ports and protocols
#only for prv_hosts
pass in on $int_if proto tcp  from $prv_hosts to $int_if port ssh keep state

#allow to connect to external servers
#from internal network
pass out on $int_if from any to $internal_network
pass in on $int_if from $internal_network to any 

#allow necessary network services
pass out proto tcp   to any port $tcp_services keep state
pass out proto udp   to any port $udp_services keep state 
pass out proto tcp   to any port>49151 keep state

#allow ping
pass in inet  proto icmp all icmp-type $icmp_allowed keep state
pass out inet proto icmp all icmp-type $icmp_allowed keep state
 
#ftp
pass in on $int_if proto $ip_proto from $prv_hosts to $int_if port ftp
pass in on $int_if proto tcp from $prv_hosts to any port>49151 keep state
pass in on $ext_if proto $ip_proto from any to $ext_if port ftp
pass in on $ext_if proto $ip_proto from any to $ext_if port>49151 

И почти все работает. А не работает вот что: если с тестового компьютера пытаться влезть на ftp-сервер под управлением Windows XP,то ls -l наглухо вешается. На ftp-сервер под управлением UNIX (FreeBSD/OpenBSD) залазит без проблем. Где ковырять?
З.Ы. Портов верхнего диапазона хочется открыть как можно меньше

Аватара пользователя
24rus
мл. сержант
Сообщения: 75
Зарегистрирован: 2008-09-27 16:04:59
Откуда: Красноярск
Контактная информация:

Re: пара вопросов по PF.conf

Непрочитанное сообщение 24rus » 2009-03-05 5:03:54

Для начало за комментируй Block All и посмотри, как будет работать фтп
Show must go on !

londinium
проходил мимо

Re: пара вопросов по PF.conf

Непрочитанное сообщение londinium » 2009-03-05 18:49:19

При открытии портов выше 1024 фтп работает. Но не хочется открывать так много портов. Может, кто знает, где можно найти диапазоны портов, открываемых популярными фтп-серверами?

Niki
проходил мимо

Re: пара вопросов по PF.conf

Непрочитанное сообщение Niki » 2009-05-07 10:35:55

FTP трафик пропускается с помощью ftp-proxy