Настройка Nat и ipfw во FreeBSD


Взято из handbook
Компилим ядро freebsd http://argo-uln.blogspot.com/2006/07/freebsd-54.html
В файле
/etc/rc.conf

gateway_enable=”YES”
defaultrouter=”xxx.xxx.xxx.xxx”
ifconfig_fxp0=”inet xxx.xxx.xxx.xxx netmask 255.255.255.0”
ifconfig_fxp1=”inet 192.168.10.1 netmask 255.255.255.0”
firewall_enable=”YES”
firewall_quiet=”YES”
natd_enable=”YES”
natd_interface=”fxp0”
natd_flags=”-f /etc/natd.conf”

Файл
/etc/natd.conf
Пример:

redirect_port tcp 192.168.10.2:3389 3389

Перенаправить порт 3389 на 192.168.10.2:3389

Содержимое файла
/etc/rc.firewall


#/bin/sh -
#Изменено 24.10.2007

fwcmd="/sbin/ipfw -q add"
ipfw -q -f flush

wan_if="fxp0" # внешний интерфейс
lan_if="fxp1" # локальный интерфейс
dns_provaidera=”xxx.xxx.xxx.xxx” # ip днс провайдера
terminal_server=”192.168.10.2” # ip windows терминального сервера
good_ip=”192.168.10.100” # ip из локалки которому разрешаем ходить наружу
skip="skipto 500"
ks="keep-state"
good_tcp1="25,53,80,443,110,3389"

# разрешаем все через интерфейс локальной сети
$fwcmd 002 allow all from any to any via $lan_if
# разрешаем все через 127.0.0.1
$fwcmd 003 allow all from any to any via lo0
# разрешаем ssh снаружи
$fwcmd 020 allow tcp from any to me 22 via $wan_if
$fwcmd 021 allow tcp from me 22 to any via $wan_if
#разрешаем подключения с сервера к днс прова
$fwcmd 024 allow tcp from me to $dns_provaidera 53 via $wan_if $ks
$fwcmd 025 allow udp from me to $dns_provaidera 53 via $wan_if $ks
#разрешаем Пинги с сервера
$fwcmd 026 allow icmp from me to any out via $wan_if $ks
#разрешаем порты 80 21 443 3389 с сервера
$fwcmd 027 allow tcp from me to any $good_tcp1 out via $wan_if $ks
#Подменяем у пакетов из вне на внешнем интерфейсе адрес назначения на 192.168.10.1
$fwcmd 100 divert natd ip from any to me in via $wan_if
$fwcmd 101 check-state
#Разрешаем изнутри подключение к ДНС провайдера
$fwcmd 120 $skip tcp from any to $dns_provaidera 53 out via $wan_if $ks
$fwcmd 121 $skip udp from any to $dns_provaidera 53 out via $wan_if $ks
# Разрешаем снаружи подключение к терминал серверу внутри локалки
$fwcmd 122 allow tcp from any to $terminal_server 3389 in via $wan_if
$fwcmd 123 $skip tcp from $terminal_server 3389 to any out via $wan_if
# Разрешаем 192.168.10.100 доступ наружу к портам 25,53,80,443,110,3389
$fwcmd 125 $skip tcp from $good_ip to any $good_tcp1 out via $wan_if setup $ks
# Разрешаем изнутри icmp
$fwcmd 150 $skip icmp from any to any out via $wan_if $ks

$fwcmd 300 deny all from 192.168.0.0/16 to any in via $wan_if
$fwcmd 301 deny all from 172.16.0.0/12 to any in via $wan_if
$fwcmd 302 deny all from 10.0.0.0/8 to any in via $wan_if
$fwcmd 303 deny all from 127.0.0.0/8 to any in via $wan_if
$fwcmd 304 deny all from 0.0.0.0/8 to any in via $wan_if
$fwcmd 305 deny all from 169.254.0.0/16 to any in via $wan_if
$fwcmd 306 deny all from 192.0.2.0/24 to any in via $wan_if
$fwcmd 307 deny all from 204.152.64.0/23 to any in via $wan_if
$fwcmd 308 deny all from 224.0.0.0/3 to any in via $wan_if
# Разрешаем наружу все с самого сервера
$fwcmd 400 allow tcp from me to any via $wan_if $ks
$fwcmd 450 deny log ip from any to any
# Обратная подмена ip адреса из локалки на внешний
$fwcmd 500 divert natd ip from any to any out via $wan_if
$fwcmd 510 allow ip from any to any

Обновлено: 12.03.2015