FreeBSd > Система
Настройка ipfw nat
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 в котором полным полно уже правил ??
Навигация
Перейти к полной версии