Страница 1 из 1

Как окрыть портики на IPFW

Добавлено: 2011-02-20 15:02:06
klaster
Как открыть портики без проброса. Не подскажите как это сделать.
Допустим :

Код: Выделить всё

nat 1 config log ip xx.xx.xx.101 reset same_ports deny_in redirect_port tcp 1.2.3.4:6881 6881
add 10100 nat 1 ip from any to any via nfe0 
add 10200 allow all from any to any
Я хочу не пробрасывать с одного на другой, а просто открывать локальный Ip 192.168.1.10 :443
Что то ввиде такого : // Но так не работает

Код: Выделить всё

add 10300 allow tcp from any 80,443 to 192.168.1.10
add 10301 allow from 192.168.1.10 to any 80,443 
Помогите разобраться ???

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 15:53:39
rmn
если у тебя один белый ip, то так сделать нельзя

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 16:07:57
klaster
Статический у меня, один. Может можно как то маскировать, а потом демаскировать обратно divertom???

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 19:30:36
rmn
klaster писал(а):Может можно как то маскировать, а потом демаскировать обратно divertom???
именно это и делает:

Код: Выделить всё

nat 1 config log ip xx.xx.xx.101 reset same_ports deny_in redirect_port tcp 1.2.3.4:6881 6881
add 10100 nat 1 ip from any to any via nfe0 

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 20:13:48
klaster
rmn писал(а):
klaster писал(а):Может можно как то маскировать, а потом демаскировать обратно divertom???
именно это и делает:

Код: Выделить всё

nat 1 config log ip xx.xx.xx.101 reset same_ports deny_in redirect_port tcp 1.2.3.4:6881 6881
add 10100 nat 1 ip from any to any via nfe0 
Ну это же больше к пробросу относиться, а я имею ввиду чтото такое :

Код: Выделить всё

add 10200 pass all from xx.xx.227.101 to any 443 out via nfe0
add 10210 pass all from any 443 to 192.168.1.0/24 in via nfe0

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 20:29:26
rmn
rmn писал(а):если у тебя один белый ip, то так сделать нельзя

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 20:44:54
klaster
rmn писал(а):
rmn писал(а):если у тебя один белый ip, то так сделать нельзя
Ну а если у меня допустим в сети стоит mail server, web server, monitoring и все на разных локальных машин с разнами Ip.
Разве нельзя сделать чтоб divert маскировал
Пример :
Mail server - 192.168.1.6 и необходимо открыть только 25 порт.
Я так понемаю открыт будет 25 для всей локальной сети. Точно нельзя, чтоб мне голову не ломать ???

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 21:14:46
rmn
точно нельзя. Если ты открываешь, к примеру, порт 25, он будет открыт только для шлюза. Чтобы разрешить юзерам подключаться снаружи на определенный порт машины внутри твоей сети, делается проброс порта.

divert, по сути - тот же nat

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 21:23:38
klaster
rmn писал(а):точно нельзя. Если ты открываешь, к примеру, порт 25, он будет открыт только для шлюза. Чтобы разрешить юзерам подключаться снаружи на определенный порт машины внутри твоей сети, делается проброс порта.

divert, по сути - тот же nat
За это спасибо, понял.

У меня такой вопрос, вот мне ненравиться что надо писать после nat в версии 8.1 :

Код: Выделить всё

nat 1 config log ip xx.xx.xx.101 reset same_ports deny_in
add 10100 nat 1 ip from any to any via nfe0
add 10200 allow all from any to any  
Это же не безопасно allow all from any .... есть какие инварианты ???

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 21:35:37
rmn
klaster писал(а): У меня такой вопрос, вот мне ненравиться что надо писать после nat в версии 8.1 :

Код: Выделить всё

nat 1 config log ip xx.xx.xx.101 reset same_ports deny_in
add 10100 nat 1 ip from any to any via nfe0
add 10200 allow all from any to any  
Это же не безопасно allow all from any .... есть какие инварианты ???
канешн :)

в файле /usr/src/sys/netinet/ipfw/ip_fw_pfil.c изменить:

Код: Выделить всё

        case IP_FW_NAT:
        case IP_FW_REASS:
                goto again;             /* continue with packet */
на:

Код: Выделить всё

        case IP_FW_NAT:
                if (V_fw_one_pass)
                        break;
                goto again;
 
        case IP_FW_REASS:
                goto again;             /* continue with packet */
затем пересобрать ядро:

Код: Выделить всё

cd /usr/src
make buildkernel && make installkernel
и ребутнуться

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 22:37:07
klaster
Спасибо компилем.

Ну есть вопросик, а чем отличаеться :
/etc/sysctl.conf

Код: Выделить всё

net.inet.ip.fw.one_pass=1
от

Код: Выделить всё

allow all from any to any  

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-20 22:43:24
rmn
klaster писал(а): Ну есть вопросик, а чем отличаеться :
/etc/sysctl.conf

Код: Выделить всё

net.inet.ip.fw.one_pass=1
от

Код: Выделить всё

allow all from any to any  
тем, что первое - это опция (переменная) ядра, которая будет влиять на работу фаервола (конкретнее - порядок прохождения правил), а второе - правило фаервола ipfw разрешающее пакеты по любому протоколу с любого хоста на любой

не нужно сравнивать теплое с мягким :)

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-21 14:18:57
klaster
Спасибо с компилел, как написали все зароботала.

Единственное что хотел узнать, можно открывать порты таким способом ?

Код: Выделить всё

add 10200 pass all from xx.xx.xxx.101 to any 110 out via nfe0
add 10210 pass all from any 110 to 192.168.1.0/24 in via nfe0
а

то когда пробрасываешь в одну строчку неудобно потом искать какой порт, открыт :

Код: Выделить всё

nat 1 config log ip 94.101.227.101 reset same_ports deny_in redirect_port tcp 192.168.1.1:53 53 redirect_port udp 192.168.1.1:53 53 . итд.
Пример :
Но хотелось чтоб был проброс привиденный вверху для порта redirect_port tcp 192.168.1.1:143 10943.
А такие портики допустим как 22 я бы не хотел пробрасывать, а просто чтоб он был открыт на 22.
Как это реализовать ???

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-21 14:28:48
rmn

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-21 15:35:47
klaster
я по эти примерам и делал у себя, только там показаны пробросы, для небольшого количества портов, а если надо открыть 30-40 портов (в одну строчку) запутаешься в поиски, когда искать будешь, вот я хотел узнать более гибкий вариант ???

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-21 20:52:02
klaster
Люди добрые объясните пожалуйста, как в ядерном нате просто портики открывать, а то я уже совсем запутался.
У меня только такой вариант :

Код: Выделить всё

nat 1 config log ip xx.xx.xx.101 reset same_ports deny_in redirect_port tcp 192.168.1.1:53 53 redirect_port udp 192.168.1.1:53 53 redirect_port tcp 192.168.1.1:110 110 redirect_port tcp 192.168.1.1 143 143
add 10100 nat 1 ip from any to any via nfe0
Попробывал так не прокатило :

Код: Выделить всё

nat 1 config log ip xx.xx.xx.101 reset same_ports deny_in redirect_port tcp 192.168.1.1:53 53 redirect_port udp 192.168.1.1:53 53
add 10100 nat 1 ip from any to any via nfe0
nat 2 config log ip xx.xx.xx.101 reset same_ports deny_in redirect_port tcp 192.168.1.1:110 110 redirect_port tcp 192.168.1.1:80 80
add 10110 nat 2 ip from any to any via nfe0
Правило 10110 не пременилось по отношению к портам.

Поэтому очень тяжело когда много портов необходимо открыть, таким методом.
Предложите более эффективное решение ???

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-22 23:26:04
klaster
Помогите запутался с правилами, вообщем хочу открыть порт для веб сервера с Ip 192.168.1.2:80.
Я не хочу открывать для всей сети 192.168.1.0/24, только для одной машины.
Пример :

Код: Выделить всё

add 1012 pass tcp from 192.168.1.2 to xx.xx.xx.101 80
add 1013 pass tcp from xx.xx.xx.101 to 192.168.1.2 80
Подправьте пожалуйста ???

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-23 20:26:16
klaster
Кому интересно, что было что не работало правило, для открытия портов.
Ошибка в том что я после этого правила вставлял допустим :

Код: Выделить всё

nat 1 config log ip $pif reset same_ports deny_in redirect_port tcp $loc:53 53 redirect_port udp $loc:53 53 
$cmd 10100 nat 1 ip from any to any via $pif
вот это
$cmd 10101 pass tcp from any to $pif 80 
$cmd 10102 pass tcp from $pif to any 80 
Так мне никто и не подскозал пока сам не поставил правило по выше, перед тем как пробрасывать порты, и все заработало. Портики стали доступными.
Вот так надо было :

Код: Выделить всё

$cmd 1091 pass tcp from any to $pif 80 
$cmd 1092 pass tcp from $pif to any 80 
nat 1 config log ip $pif reset same_ports deny_in redirect_port tcp $loc:53 53 redirect_port udp $loc:53 53 redirect_port tcp
$cmd 10100 nat 1 ip from any to any via $pif
$cmd 65534 deny log all from any to any
Все работает.

Но к уважаемым формульчанинам, хочу обратиться и покозать лог который мне не очень нравиться, приведу небольшое написание ipfw

Код: Выделить всё


$cmd 1020 deny ip from any to 192.168.0.0/16 in recv $pif
$cmd 1030 deny ip from 192.168.0.0/16 to any in recv $pif
$cmd 1040 deny ip from any to 172.16.0.0/12 in recv $pif
$cmd 1050 deny ip from 172.16.0.0/12 to any in recv $pif
$cmd 1060 deny ip from any to 10.0.0.0/8 in recv $pif
$cmd 1070 deny ip from 10.0.0.0/8 to any in recv $pif
$cmd 1080 deny ip from any to 169.254.0.0/16 in recv $pif
$cmd 1090 deny ip from 169.254.0.0/16 to any in recv $pif
$cmd 1091 pass tcp from any to $pif 80 
$cmd 1092 pass tcp from $pif to any 80 
nat 1 config log ip $pif reset same_ports deny_in redirect_port tcp $loc:53 53 redirect_port udp $loc:53 53 redirect_port tcp
$cmd 10100 nat 1 ip from any to any via $pif
Проблема в том что когда я делаю /etc/netstart выдаёт ошибку(лог) :

Код: Выделить всё

nat: not found
Ругаясь на строчку

Код: Выделить всё

nat 1 config log ip $pif reset same_ports deny_in redirect_port tcp $loc:53 53 redirect_port udp $loc:53 53 redirect_port tcp
Если добавляю к этому правилу (cmd="ipfw -q add")

Код: Выделить всё

$cmd 1093 nat 1 config log ip $pif reset same_ports deny_in redirect_port tcp $loc:53 53 redirect_port udp $loc:53 53 redirect_port tcp
ошибка

Код: Выделить всё

ipfw: unrecognised option [-1] config
Как быть ???

Re: Как окрыть портики на IPFW

Добавлено: 2011-02-23 20:51:42
klaster
Добовил переменную :

Код: Выделить всё

ipfw="ipfw -q"
$ipfw nat 1 config log ip $pif reset same_ports deny_in redirect_port tcp $loc:53 53 redirect_port udp $loc:53 53 redirect_port tcp
Ошибка ушла но правильно делать так ???