Правила РF для Frox

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

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
slbond86
проходил мимо
Сообщения: 7
Зарегистрирован: 2009-03-23 17:10:17

Правила РF для Frox

Непрочитанное сообщение slbond86 » 2009-07-10 1:01:11

У меня стоит машина по FreeBSD 7.0 служащая шлюзом для локальной сети.
И вот потребовалась работа машин за шлюзом с внешним ftp-сервером. Установил frox завернул на него трафик идущий на 21 порт внутреннего интерфейса. Все работает. Осталось написать правила для pf.
Попытался разобраться с работой frox и pf и вот что примерно у меня получилось.
Тут $net_if=ng0 - интерфейс смотрящий в интернет, $int_if=rl1 - интерфейс смотрящий в локалку. 192.168.1.1 - IP адрес внутреннего интерфейса, 192.168.1.2 - компьютер локальной сети, 192.168.2.1 - alias на локальном интерфейсе - адрес который слушает frox, 94.24.180.230 - динамический IP на интернет интерфейсе.
Кто подскажет? После того как frox откорректирует пакет на отправку в интернет (строка 70,280), он примет вид как в (строке 80,290). Какой порт поставит frox в место xxxx? Будет ли пакет снова проходить по правилам pf до того как он будет отправлен через gateway на интернет интерфейс? Если да, то каким должно быть правило 300, 410? Да и правило 340 я тоже считаю не корректным так как оно разрешает весь исходящий трафик в интернет. Как его можно заменить? Для обеспечения должной безопасности?

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

10    Пакет приходит из локальной сети на внутрений интерфейс 
20    IN 192.168.1.2 port 13123 > 87.51.34.132 port 21	             |  rl1	
30    pass in on $int_if  proto tcp from 192.168.1.2 to any port 21 modulate state
40    rdr on $int if proto tcp from any to any port 21 -> 192.168.2.1 port 2121 
50    IN 192.168.1.2 port 13123 > 192.168.2.1 port 2121		|   rl1
60    pass in on $int_if  proto tcp from 192.168.1.2 to 192.168.2.1 modulate state
70                               <-<-< frox >->->
80    IN 192.168.1.2 port xxxx > 87.51.34.132 port 21 		|   rl1
90    pass in on $int_if  proto tcp from 192.168.1.2 to any port 21 modulate state
100   			<-<-< gateway >->->->
110                            <-<-< NAT >->->->
120  OUT 94.24.180.230 port 58532 > 87.51.34.132 port 21	|   ng0
130  pass out on $net if  proto tcp from ($net if) to any port 21 modulate state
140                             <-<-< Internet >->->
150   IN 87.51.34.132 port 21 > 94.24.180.230 port 58532	|   ng0
160   modulate state  правило 130
170    		             <-<-< NAT >->->->
180                          <-<-< Gateway >->->
190   OUT 87.51.34.132 port 21 > 192.168.1.2 port xxxx	|   rl1
200    modulate state правило 90
210   			      <-<-< frox >->->
220   OUT 192.168.2.1 port 41826 > 192.168.1.2 port 13132	|   rl1
230   modulate state  правило 60
240   Уходит обратно в локальную сеть 

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

250   Пакет приходит из локальной сети на внутрений интерфейс 
260   IN 192.168.1.2 port 13132 > 192.168.2.1 port 41826	|   rl1
270   pass in on $int_if  proto tcp from 192.168.1.2 to 192.168.2.1 modulate state
280				<-<-< frox >->->
290   IN 192.168.1.2 port xxxx > 87.51.34.132 port zzzz(61893)  |  rl1
300   ????
310			        <-<-< gateway >->->->
320			           <-<-< NAT >->->->
330   OUT 94.24.180.230 port 58532 > 87.51.34.132 port zzzz(61893)  |   ng0
340   pass out on $net_if  proto tcp from ($net_if) to any modulate state
350                             <-<-< Internet >->->
360   IN 87.51.34.132 port zzzz(61893) > 94.24.180.230 port 58532	|   ng0
160   modulate state  правило 340
170    		                 <-<-< NAT >->->->
180                               <-<-< Gateway >->->
190   OUT 87.51.34.132 port zzzz(61893) > 192.168.1.2 port xxxx	|   rl1
200    ????
210   			         <-<-< frox >->->
220   OUT 192.168.2.1 port 41826 > 192.168.1.2 port 13132	|   rl1
230   modulate state  правило 270
240   Уходит обратно в локальную сеть

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Правила РF для Frox

Непрочитанное сообщение Alex Keda » 2009-08-27 12:36:31

непонятно чё на листингах изображено =(
Убей их всех! Бог потом рассортирует...

reLax
лейтенант
Сообщения: 638
Зарегистрирован: 2007-04-08 5:50:16

Re: Правила РF для Frox

Непрочитанное сообщение reLax » 2009-08-27 20:24:12

А чем в случае pf не устраивает ftp-proxy ?

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

 ExtIf="msk1"
 IntIf="msk0"
 SynState="flags S/SAFR synproxy state"
 TcpState="flags S/SAFR modulate state"
 UdpState="keep state"
 ExtIfSTO  ="(max 9000, source-track rule, max-src-conn 2000, max-src-nodes 254)"
 IntIfSTO  ="(max 250,  source-track rule, max-src-conn 100,  max-src-nodes 254, max-src-conn-rate 75/20)"
 table <INTFTP>          persist file "/etc/pf/intftp"
 set debug urgent
 set require-order yes
 set block-policy drop
 set loginterface $ExtIf
 set state-policy if-bound
 set fingerprints "/etc/pf.os"
 set ruleset-optimization none
 set skip on lo0
 set optimization aggressive
 set timeout { frag 10, tcp.established 3600 }
 set timeout { tcp.first 30, tcp.closing 30, tcp.closed 30, tcp.finwait 30 }
 set timeout { udp.first 30, udp.single 30, udp.multiple 30 }
 set timeout { other.first 30, other.single 30, other.multiple 30 }
 set timeout { adaptive.start 5000, adaptive.end 10000 }
 scrub log on $ExtIf all random-id min-ttl 254 max-mss 1452 reassemble tcp fragment reassemble
 nat on $ExtIf from $IntIf:network to any tag EGRESS -> ($ExtIf:0)  port 1024:65535
 no rdr on lo0 from any to any
 rdr on $IntIf inet proto tcp from $IntIf:network to !(self)  port 21 -> lo0 port 8021
 nat-anchor "ftp-proxy/*"
 rdr-anchor "ftp-proxy/*"
 no rdr
 anchor "ftp-proxy/*"
 pass out log on $IntIf inet proto tcp  from $IntIf to $IntIf:network                    
 pass in log on $IntIf inet proto tcp  from <INTFTP> to  127.0.0.1 port 8021 $TcpState $IntIfSTO
 pass out log on $ExtIf inet proto tcp  from ($ExtIf:0) to any port 21 $TcpState $ExtIfSTO
 pass out log on $ExtIf inet proto tcp  from ($ExtIf:0) to any $TcpState $ExtIfSTO tagged EGRESS
 
надеюсь все выдрал из общего фаерволла. что касается FTP. Если пропустил что-то, то:

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

tcpdump -netttvvvi pflog0 | grep block
:)