пятница, марта 23, 2007

Настройка 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


4 комментария:

Анонимный комментирует...

Немогу поянть логику работы ipfw... После iptables как-то всё непонятно и сложно....

Сперва ты что-то разрешаешь, а в конце правило которое разрешает всё всем? Зачем так? Получаеца что пакет, не попавший ни под одно правило, всё равно успешно пройдёт дальше!?

Рамиль комментирует...

Внимательно смотри конфиг, 450 строка блокирует все, а до последнего правила надо добраться еще, если смущает отключи.

Анонимный комментирует...

хм... действительно, не заметил.... прошу прощения.

Анонимный комментирует...

еще
$fwcmd 401 allow udp from me to any via $wan_if $ks
а то у мня было
#ping ya.ru
ping: cannot resolve ya.ru: Host name lookup failure
добавил про udp пинг с фряхи пошел