It-e.RU
Цифровой двигатель вашего бизнеса.

Policy Based Routing средствами PF

Policy Based Routing средствами PF

Policy Based Routing средствами PF


Сегодня полностью переписал свои правила фаирвола с ipfw+ipnat на pf. Вкрадце опишу зачем такой скрипт нужен:

  •  По-умолчанию все запрещено с уведомлением
  • Юзеры локалки лазиют только на разрешенные сервисы tcp_services
  • Юзеры инета видят на только по портам tcp_public (udp, icmp, gre трафик без ограничений)
  • На запрос, пришедший на определенный ип , будет отправлен ответ через нужный гейт
  • поднят нат и переадресация напрозрачный прокси
  • Закомментированное правило 1 позволит сделать балансировку между двумя (в моем случае) каналами
  • Закомментированное правило 2 позволит запросы на определенный порт (в моем случае 443) отправить через определенный мой гейт
lan_net = "192.168.5.0/24"
int_if = "fxp1"
ext_if1 = "vlan10"
ext_if2 = "vlan20"
ext_gw1 = "GW1"
ext_gw2 = "GW2"
ip0 = "IP0"
ip1 = "IP1"
ip2 = "IP2"
ip3 = "IP3"
ip4 = "IP4"
ip5 = "IP5"
icmp_types = "echoreq, unreach"
tcp_services="21,22,25,80,87,110,143,443,465,995,1501,1778,1863,2802,3306,3389,4000,5190,5222,5999,6000,7011,3233,8181,9090,9999,37710,60177,60178"
tcp_public="22,1723,3389"

set block-policy return
set skip on lo
#может понадобится
#int_service = "{ int_ip1, int_ip2, int_ip3 }"
#rdr on $ext_if proto tcp to port XX -> $int_service round-robin sticky-address
#nat outgoing connections on each internet interface
rdr on $ext_if2 proto tcp from any to $ip1 port 3389 -> 192.168.5.105 port 3389
rdr on $ext_if2 proto tcp from any to $ip4 port 3389 -> 192.168.5.144 port 3389
rdr on $int_if proto tcp from $lan_net to any port 80 -> 192.168.5.1 port 8080
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
#nat on $ext_if2 from $lan_net -> ($ext_if2)
antispoof quick for { lo $int_if $ext_if1 $ext_if2} default deny
block in all
block return-rst in proto tcp all
block return-icmp in proto udp all
block out all
block return-rst out proto tcp all
block return-icmp out proto udp all
#block drop in quick on $ext_if from $martians to any
#block drop out quick on $ext_if from any to $martians
#--- Allow outgoing traffic
pass out on $ext_if1 all
pass out on $ext_if2 all
#-------------------
#--- PBR out
#1
# pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin from $lan_net
#2
#pass in on $int_if route-to ($ext_if1 $ext_gw1) proto tcp from $lan_net to port https
pass in quick on $int_if route-to { ($ext_if1 $ext_gw1) } proto tcp from $lan_net to any port { $tcp_services } flags S/SA keep state
#--- PBR in
pass in quick on $ext_if1 reply-to ($ext_if1 $ext_gw1) inet proto { tcp } from any to { $ip0 } port { $tcp_public }
pass in quick on $ext_if1 reply-to ($ext_if1 $ext_gw1) inet proto { tcp } from { $ip0 } port { $tcp_public } to any
pass in quick on $ext_if1 reply-to ($ext_if1 $ext_gw1) inet proto { icmp,udp,gre } from any to { $ip0 }
pass in quick on $ext_if1 reply-to ($ext_if1 $ext_gw1) inet proto { icmp,udp,gre } from { $ip0 } to any
pass in quick on $ext_if2 reply-to ($ext_if2 $ext_gw2) inet proto { tcp } from any to { $ip1, $ip2, $ip3, $ip4, $ip5 } port { $tcp_public }
pass in quick on $ext_if2 reply-to ($ext_if2 $ext_gw2) inet proto { tcp } from { $ip1, $ip2, $ip3, $ip4, $ip5 } port { $tcp_public } to any
pass in quick on $ext_if2 reply-to ($ext_if2 $ext_gw2) inet proto { icmp,udp,gre } from any to { $ip1, $ip2, $ip3, $ip4, $ip5 }
pass in quick on $ext_if2 reply-to ($ext_if2 $ext_gw2) inet proto { icmp,udp,gre } from { $ip1, $ip2, $ip3, $ip4, $ip5 } to any
pass proto tcp from any to { 192.168.5.105, 192.168.5.144 } port 3389 flags S/SA synproxy state

#--- Allow all on local interface
pass quick on $int_if all
#-------------------
В целом ощущения от нового для меня фаирвола - положительные, конечно придется привыкнуть к чтению логов и чтению статистики. Но неделя мучений с ipfw для реалиции такого же функционала - это серьезный показатель. Следующая статья будет посвящена анализу статистики и логов PF.

Комментарии можно оставлять pltcm,а вот обсуждать заметку лучше всего тут


Пожалуйста, уважайте труд автора, при копировании материалов сохраняйте ссылку на источник!

Комментарии (0)







Разрешённые теги: <b><i><br>Добавить новый комментарий: