FreeBSd > Система

Настройка ipfw nat

(1/3) > >>

klaster:
Посмотрет у вас, cтатьи по FreeBSD и не обнаружил ipfw firewall.
Просто в нете очень много описание старого происхождения, и голова кружиться все по разному описывают загркзку в rc.conf :

Вот так вобще не загружаеться firewall, неохото просто ядро перекампилировать.

--- Код: ---firewall_nat_enable="YES"
dummynet_enable="YES"

--- Конец кода ---


Вот так загружаеться :


--- Код: ---firewall_enable="YES"
firewall_type="/etc/firewall"

--- Конец кода ---

Правила firewall :


--- Код: ---# локальный трафик
add allow ip from 127.0.0.0/8 to any via lo0
add allow ip from any to 127.0.0.0/8 via lo0

# разрешить весь исходящий трафик
add allow tcp from me to any keep-state
add allow udp from me to any keep-state
add allow icmp from me to any keep-state

# разрешить провайдер www и https
add allow tcp from 192.168.1.0/24 to me 80,443 keep-state

# разрешить ssh и dns
add allow tcp from 192.168.1.0/24 to me 22,53 keep-state

# запретить остальное
add deny log ip from any to any

--- Конец кода ---

Проблема в том что 53 порт всеравно закрыт :

http://www.intodns.com/gipernet.eu


--- Код: ---t# netstat -an | grep 53
tcp6       0      0 ::1.953                *.*                    LISTEN
tcp4       0      0 127.0.0.1.953          *.*                    LISTEN
tcp4       0      0 127.0.0.1.53           *.*                    LISTEN
tcp4       0      0 192.168.1.9.53         *.*                    LISTEN
tcp4       0      0 192.168.1.4.53         *.*                    LISTEN

--- Конец кода ---

В чем может быть причина ??

muff:
Немножко запутан вопрос....
Так и не понял в чем суть. Толи НАТ, толи файрвол... Итак, по очереди:

Поддержка IPFIREWALL и IPFIREWALL_NAT
Если включить в /boot/loader.conf строку firewall_nat_enable="YES", то НАТ действительно не работает... Модуль не подгружается, необходимо вручную его подгружать. Почему так - не очень заморачивался, поскольку всегда файрвол и его опции компилирую в ядро.

На всякий случай, перечислю опции, которые добавляю в конфиг ядра (те, которые касаются IPFW):

--- Код: ---options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=50
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_FORWARD
options         IPFIREWALL_NAT
options         LIBALIAS
options         DUMMYNET

--- Конец кода ---

Правила firewall
Я так понимаю, что ты хочешь настроить IPFW в режиме STATEFUL FIREWALL.
Советую изменить блок локальный трафик на такие правила (взято из дефолтного rc.firewall):

--- Код: ---# локальный трафик
        ipfw add 100 pass all from any to any via lo0
        ipfw add 110 deny all from any to 127.0.0.0/8
        ipfw add 120 deny ip from 127.0.0.0/8 to any

--- Конец кода ---
После этого блока добавь разрешающее правило для keep-state состояний:

--- Код: ---# Разрешаем keep-state
ipfw add check-state

--- Конец кода ---

Ну, и еще одно замечание. Так понимаю, ты будешь использовать ядерный НАТ. А вот правил в НАТ-а файрволе я не вижу...

klaster:
Помогло для открытия 53 :


--- Код: ---add allow tcp from any to me 53
add allow udp from any to me 53

--- Конец кода ---

Но хотелось бы по интересоваться это же мощный фаерфол, и получаеться если у меня будет стоять в одной локалке dns и майл сервер, мониторинг итд. То портик будет считаться открыт для всех машин, что очень бы не хотелось. Как реализовать такую задачу ?
Пример :


* 192.168.1.5 Freebsd ipfw
* 192.168.1.10 dns только 53 и 22
* 192.168.1.20 Apache 80 22
* 192.168.1.30 Mail 25 110 143

Что ти по такого ??

Да еще если в конфиге для nat прописать вот так rc.conf :

--- Код: ---firewall_nat_enable="YES"
dummynet_enable="YES"

--- Конец кода ---

На возможность конфигурации сильно повлияет ?

muff:
Я так понял, что необходимо дать доступ в Интернет внутренней сети 192.168.1.0/24 и разрешить этой сети доступ на порты 22, 80 и 53. Ядро собрано с поддержкой IPFW (необходимые опции я перечислил в предыдущем посте).
От этого задания и будем отталкиваться.

Небольшое лирическое отступление...
SSH работает на порту 22 по протоколу TCP. Web работает на 80 порту и тоже по TCP. А вот с ДНС не все так просто... Клиентские запросы "бегают" по UDP, порт 53. А по TCP выполняется только трансфер зон между серверами. Кстати, в выводе netstat указано, что открыты только порты TCP, что меня немного смущает. В моем случае, при работающем DNS-сервере вывод netstat получается такой:

--- Код: ---# netstat -an | grep 53
tcp4       0      0 127.0.0.1.953          *.*                    LISTEN
tcp4       0      0 172.20.0.1.53          *.*                    LISTEN
tcp4       0      0 10.200.0.1.53          *.*                    LISTEN
tcp4       0      0 195.3.158.206.53       *.*                    LISTEN
tcp4       0      0 127.0.0.1.53           *.*                    LISTEN
udp4       0      0 172.20.0.1.53          *.*
udp4       0      0 10.200.0.1.53          *.*
udp4       0      0 195.3.158.206.53       *.*
udp4       0      0 127.0.0.1.53           *.*

--- Конец кода ---

Для превращения сервера в роутер, необходимо разрешить пересылку пакетов между сетевыми интерфейсами. Для этого необходимо наличие в rc.conf такой строки:

--- Код: ---gateway_enable="YES"
--- Конец кода ---

Разрешить пересылку пакетов "на ходу", не перезагружая сервер можно через параметр sysctl:

--- Код: ---sysctl net.inet.ip.forwarding=1
--- Конец кода ---

Вернемся к файрволу...
Исходя из задания, в rc.firewall вставим такой блок (простенький файрвол, который клиентской сети и роутеру разрешает сетевой обмен без ограничений, и накладывает ограничения на доступ к роутеру):

--- Код: ---[Rr][Oo][Uu][Tt][Ee][Rr])

net="192.168.1.0/24"

# Allow me
${fwcmd} add pass udp from me to any 53 keep-state
${fwcmd} add pass all from me to any

# Allow ICMP to me
${fwcmd} add pass icmp from any to me icmptypes 0,3,8,11

# Allow incoming setup
${fwcmd} add pass tcp from ${net} to me 22 setup
${fwcmd} add pass tcp from ${net} to me 80 setup

# Allow DNS
${fwcmd} add pass udp from ${net} to me 53

# Allow established TCP
${fwcmd} add pass all from any to me established

# Allow internal network
${fwcmd} add pass all from ${net} to not me
${fwcmd} add pass all from not me to ${net}

# Deny all to me
${fwcmd} add deny all from any to me

--- Конец кода ---

Вроде с правилами нигде не оплошал (не проверял именно эту конфигурацию на тестовой машине). По идее должно все работать...

Далее настраиваем НАТ по этой статье (PF): http://muff.kiev.ua/content/nat-realizatsiya-s-pomoshchyu-pf.

Применяем все правила файрвола, описанные в блоке "ROUTER":

--- Код: ---# sh /etc/rc.firewall ROUTER
--- Конец кода ---

Если файрвол работает нормально, применяем правила при загрузке системі, добавляя следующий блок в rc.conf:


--- Код: ---# Firewall
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_type="ROUTER"

--- Конец кода ---


Теперь комментарии по предыдущему посту...
Так понимаю, была попытка запустить natd... Так вот, выиграш IPFW NAT в том, что он работает только на ресурсах ядра, без запуска natd. Так что о natd советую пока забыть.

По вопросам:
Что необходи поставить rc.conf для ipfw + nat ?
По поводу IPFW уже отписался выше. Если НАТить будете (для начала) с помощью PF, то в статье все описано. Если НАТ-ить хотите с помощью ядерного НАТ-а, то необходимо просто добавить необходимые правила в rc.firewall.

Почему когда я ставлю в свой файл firewall,ipfw вперед он жалуеться и зависает ?
А вот здесь я мало что понял, в основном только догадки... Если у вас отдельный файл с правилами файрвола, то советую вначале файла вставить такой блок:

--- Код: ---#!/bin/sh
setup_loopback () {

        ${fwcmd} add 5 pass all from any to any via lo0
        ${fwcmd} add 5 deny all from any to 127.0.0.0/8
        ${fwcmd} add 5 deny ip from 127.0.0.0/8 to any
}

fwcmd="/sbin/ipfw -q"

--- Конец кода ---

А потом уже все свои правила начинать с ${fwcmd}. Например:

--- Код: ---${fwcmd} add 15 deny all from "table(5)" to any
--- Конец кода ---

Что не хватает правилу чтоб открыть 53 порт? 22 и 80 работают нормально с этими правилами
По ходу я вначале описал разницу. По 53 порту у тебя будет бегать только UDP трафик. Вряд ли, что у тя будет выполняться трансфер зон.

klaster:
По поводу пересборки ядра, не стал пока тратить время включил в rc.conf :


--- Код: ---firewall_enable="YES"
firewall_type="/etc/firewall.conf"
firewall_nat_enable="YES"
dummynet_enable="YES"
gateway_enable="YES"

--- Конец кода ---

IPFW работает, nat  еще не проверял.




--- Цитировать ---А вот здесь я мало что понял, в основном только догадки... Если у вас отдельный файл с правилами файрвола, то советую вначале файла вставить такой блок:


--- Код: ---#!/bin/sh
setup_loopback () {

        ${fwcmd} add 5 pass all from any to any via lo0
        ${fwcmd} add 5 deny all from any to 127.0.0.0/8
        ${fwcmd} add 5 deny ip from 127.0.0.0/8 to any
}

fwcmd="/sbin/ipfw -q"

--- Конец кода ---

А потом уже все свои правила начинать с ${fwcmd}. Например:


--- Код: ---${fwcmd} add 15 deny all from "table(5)" to any

--- Конец кода ---

--- Конец цитаты ---

Так вот если я вставляю в свой файл firewall.conf :

--- Код: ---#!/bin/sh
setup_loopback () {

        ${fwcmd} add 5 pass all from any to any via lo0
        ${fwcmd} add 5 deny all from any to 127.0.0.0/8
        ${fwcmd} add 5 deny ip from 127.0.0.0/8 to any
}

fwcmd="/sbin/ipfw -q"

et="192.168.1.0/24"

# Allow me
${fwcmd} add 10 pass udp from me to any 53 keep-state
${fwcmd} add 20 pass all from me to any

# Allow ICMP to me
${fwcmd} add 30 pass icmp from any to me icmptypes 0,3,8,11

# Allow incoming setup
${fwcmd} add 40 pass tcp from ${net} to me 22 setup
${fwcmd} add 50 pass tcp from ${net} to me 80 setup

# Allow DNS
${fwcmd} add 60 pass udp from ${net} to me 53

# Allow established TCP
${fwcmd} add 70 pass all from any to me established

# Allow internal network
${fwcmd} add 80 pass all from ${net} to not me
${fwcmd} add 90 pass all from not me to ${net}

# Deny all to me
${fwcmd} add deany all from any to me


--- Конец кода ---

То получаю вот это :


--- Код: ---gipernet# /etc/rc.d/ipfw restart
net.inet.ip.fw.enable: 1 -> 0
net.inet6.ip6.fw.enable: 1 -> 0
Flushed all rules.
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
00400 deny ip from any to ::1
00500 deny ip from ::1 to any
Line 2: bad command `setup_loopback'
Firewall rules loaded.

--- Конец кода ---


И зависаю .

Хотел бы у вас узнать как лучше,  в своем файле создовать или редактировать rc.firewall в котором полным полно уже правил ??

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии