ext_if="bge0" # интерфейс на выход
int_if="bge1" # интерфейс на вход
tun_if="ng0" # PPPD-интерфейс
lo0="127.0.0.1" # Loopback
vlan1="192.168.2.0/24" # на всякий случай описываем сеть VLAN 1 (1)
vlan2="192.168.1.0/24" # на всякий случай описываем сеть VLAN 10 (2)
wserver="192.168.1.100" # Наш сервер, нуждающийся в пробросе портов# Settings
set debug urgent # Выводим только серьёзные ошибки
set block-policy return # Возвращаем плохие пакеты
set state-policy floating # Развязка пакета от интерфейса
set limit { states 250000, frags 175000 } # А чего мелочиться?
set optimization normal # Обыкновенная оптимизация
set ruleset-optimization none # Не будем оптимизировать правила
set skip on lo0 # Пропускаем все попытки обработать loopback
set skip on $int_if # on bge1
scrub in all # Отсылаем только собранные пакеты
tcp_services="{ 22, 25, 37, 43, 53, 80, 443, 110, 119 }" # Открытые порты для всех
tcpo_services="{ 20, 21, 22, 25, 80 }" # Открытые порты для серверов
icmp_types="{ echoreq, unreach }" # какие типы icmp запросов можно использовать
# NAT
#nat on $tun_if from !($tun_if) -> ($tun_if:0) # Не работает
nat on $tun_if from {$vlan1 $vlan2} -> {$tun_if} # попытка переделать правило
# Форвардим
rdr on $ext_if proto tcp from any to any port 80 -> $wserver port 80
rdr on $ext_if proto tcp from any to any port 20 -> $wserver port 20
rdr on $ext_if proto tcp from any to any port 21 -> $wserver port 21
rdr on $ext_if proto tcp from any to any port 135 -> $wserver port 22
rdr on $ext_if proto tcp from any to any port 3000:3500 -> $wserver
# Фильтрация
antispoof quick for $ext_if # Антиспуфинг для внешнего интерфейса bge0
# Сами правила
# На выход
pass out on { $ext_if $tun_if } from $ext_if to any keep state # Разрешаем выход маршрутизатору
pass out on { $ext_if $tun_if } proto { tcp udp icmp } all modulate state # Разрешаем выход всем изнутри
# На вход
pass in log on $ext_if proto { tcp, udp } from any to $vlan2 port $tcp_services keep state # Открываем вход всем на втором влане
pass in log on $ext_if proto { tcp, udp } from any to $vlan1 port $tcpo_services keep state # Открываем вход всем на первом влане
# ICMP-секция
pass inet proto icmp icmp-type { echoreq, unreach } # Разрешаем пинги