#!/bin/sh

#### Переменные ####

wan="hn0"
wan_ip="192.168.1.21"
lan="hn1"
lan_ip="10.20.30.1"

cmd="ipfw -q"

#### Правила ####

$cmd -f flush

# Разрешаем весь траффик по внутреннему интерфейсу
$cmd add 100 allow ip from any to any via lo0

# Запрещаем доступ из вне к нутреннему интерфейсу
$cmd add 200 deny ip from any to 127.0.0.0/8
$cmd add 300 deny ip from 127.0.0.0/8 to any

# Разрешаем подключение по ssh
$cmd add 400 allow tcp from any to $wan_ip 22 in via $wan
$cmd add 410 allow tcp from $wan_ip 22 to any out via $wan established

# Разрешаем DNS запросы
$cmd add 500 allow udp from any to $wan_ip 53 in via $wan
$cmd add 510 allow udp from $wan_ip 53 to any out via $wan established

# Разрешаем UDP (для синхронизации времени - 123 порт)
$cmd add 600 allow udp from any to $wan_ip 123 in via $wan
$cmd add 610 allow udp from $wan_ip 123 to any out via $wan established

# Разрешаем ftp снаружи (если необходимо)
#$cmd add 700 allow tcp from any to $wan_ip 20,21 in via $wan
#$cmd add 710 allow tcp from $wan_ip 20,21 to any out via $wan established
#$cmd add 720 allow tcp from any to $wan_ip 49000-55000 in via $wan

# Разрешаем некоторые типы ICMP траффика - эхо-запрос, эхо-ответ и время жизни пакета истекло
$cmd add 800  allow icmp from any to any icmptypes 0,8,11

# Разрешаем все соединения на локальном интерфейсе
$cmd add 900 allow all from any to any via $lan

# Пример проброса портов 3389 и 80 в локальную сеть на два разных компьютера
$cmd nat 1 config log if $wan reset same_ports deny_in redirect_port tcp 10.20.30.2:3389 3389 redirect_port tcp 10.20.30.55:80 80

# Включаем NAT
$cmd add 1000 nat 1 log ip from any to any via $wan

# Запрещаем все, что не разрешено
$cmd add 65534 deny log all from any to any
