не понимаю я этот kernel nat

Обсуждаем OS FreeBSD и сервисы на ней.

не понимаю я этот kernel nat

Сообщение orachimary » 06 июл 2009, 12:55

Народ! Объясните, может я чего не понимаю. Решил на новом шлюзе заюзать kernel nat. Собрал ядро с опциями:

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


Собрал, настроил ipfw по такому принципу:
Код: Выделить всё
NatIP="111.111.111.111"
ipfw nat 123 config ip ${NatIP} log
ipfw add 10 nat 123 ip from 192.168.0.0/16 to any
ipfw add 20 nat 123 ip from any to ${NatIP}


Но при таком раскладе получается, что не только разрешено натиться, но и весь доступ к внешнему ip. Как же тогда защититься?

P.S. До этого юзал IPdivert. не пинайте сильно. Может сам чего не догоняю.
orachimary
новичок
 
Сообщения: 23
Зарегистрирован: 26 мар 2009, 09:44

Re: не понимаю я этот kernel nat

Сообщение makky » 06 июл 2009, 13:39

orachimary писал(а):Народ! Объясните, может я чего не понимаю. Решил на новом шлюзе заюзать kernel nat. Собрал ядро с опциями:


Собрал, настроил ipfw по такому принципу:
Код: Выделить всё
....
ipfw add 20 nat 123 ip from any to ${NatIP}


Но при таком раскладе получается, что не только разрешено натиться, но и весь доступ к внешнему ip. Как же тогда защититься?

P.S. До этого юзал IPdivert. не пинайте сильно. Может сам чего не догоняю.


ты ж сам это пишешь в правиле 20.. что ты хочешь получить?
А что ты сделал ради эксперимента?
Аватара пользователя
makky
посетитель
 
Сообщения: 119
Зарегистрирован: 19 окт 2008, 20:42
Откуда: msk

Re: не понимаю я этот kernel nat

Сообщение orachimary » 06 июл 2009, 14:32

Ну так нат только так и работает.
orachimary
новичок
 
Сообщения: 23
Зарегистрирован: 26 мар 2009, 09:44

Re: не понимаю я этот kernel nat

Сообщение buryanov » 06 июл 2009, 15:32

а что мешает перез этим поставить запрещающие правила?
Аватара пользователя
buryanov
новичок
 
Сообщения: 25
Зарегистрирован: 29 апр 2009, 18:32

Re: не понимаю я этот kernel nat

Сообщение root » 06 июл 2009, 15:42

buryanov писал(а):а что мешает перез этим поставить запрещающие правила?

+1

orachimary
запрети все что нужно тебе ДО правил NAT`а
я так понимаю что ты хочешь прибить тот же SSH ?
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: не понимаю я этот kernel nat

Сообщение makky » 06 июл 2009, 16:30

А вот что говорит man:
Код: Выделить всё
. . .
     deny_in
             Deny any incoming connection from outside world.
. . .
unreg_only
             Traffic on the local network not originating from an unregistered
             address spaces will be ignored.

Оно?

PS: Например вот так:
Код: Выделить всё
${ipfw} nat 10000 config if rl0 log unreg_only reset
${ipfw} add 10010 nat 10 log ip4 from any to any via rl0


Можно действовать и как ребята сверху написали. Я собственно тоже так поступал, а потом на ipnat перешел. Перешел, потому что мне очень понравилось смотреть активные соединения, удобный конфиг.


Добавлю небольшой пример:
Код: Выделить всё
#!/bin/sh
out_ip="ext_ip"
out_iface="rl0"
local_iface="rl1"
localnet="x.x.x.x/24"
#порты, которые разрешаем натить
tcp_services="21,22,25,80,110,143,443,1863,3389,5190"
ipfw="/sbin/ipfw"

#### flush rules ####
${ipfw} -f flush
${ipfw} -f pipe flush
${ipfw} -f queue flush
${ipfw} table 1 flush
#################

#разрешим ssh кому надо, можно целым подсетям
${ipfw} table 1 y.y.y.y

${ipfw} add 00300 pass all from "table(1)" to ${out_ip} 22 via rl0
${ipfw} add 00310 pass all from ${out_ip} 22 to "table(1)" via rl0

#пингу вечная свобода
${ipfw} add 01200 allow icmp from any to any

# разрешаем только соединения, которые уже установлены от нас (можно пользоваться keep-state)
${ipfw} add 1600 pass tcp from ${localnet} 1024-65535 to not ${localnet} ${tcp_services} via ${local_iface}
${ipfw} add 1700 pass tcp from not ${localnet} ${tcp_services} to ${localnet} 1024-65535 via ${local_iface} established

#тут прибиваем все что не натим действием "reset", чтобы клиент сразу обламывался и не рвал соединение по там-ауту
${ipfw} add 1800 reset log tcp from ${localnet} 1024-65535 to not ${localnet} via ${local_iface}
${ipfw} add 1900 reset log tcp from not ${localnet} to ${localnet} 1024-65535 via ${local_iface}

# тут даем доступ к внешним сервисам, в данном случае впн-сервер
${ipfw} add 5000 pass log tcp from any to ${out_ip} 1723 via ${out_iface}
${ipfw} add 5010 pass log tcp from ${out_ip} 1723 to any via ${out_iface}

#вот собственно нат
${ipfw} nat 10000 config if rl0 log unreg_only reset
${ipfw} add 10010 nat 10 log ip4 from any to any via rl0

# разрешим любые соединения от сервера
${ipfw} add 15050 pass log tcp from ${out_ip} 1024-65535 to any via ${out_iface}
${ipfw} add 15060 pass log tcp from any to ${out_ip} 1024-65535 via ${out_iface} established

#и дропнем все что не описано.
${ipfw} add 60000 reset log ip from any to any via rl0

Если надо сделать проброс порта внуть сети, то надо сделать его на нат и поставить разрешающие правила. На идеальность решения не претендую, но это, как мне кажется, работает вполне нормально.
Хотите могу выгрузить сюда мои записи из вики, касающиеся технологии нат. Там невесть что, но может что-то поможет разъяснить некоторые вещи.
А что ты сделал ради эксперимента?
Аватара пользователя
makky
посетитель
 
Сообщения: 119
Зарегистрирован: 19 окт 2008, 20:42
Откуда: msk

Re: не понимаю я этот kernel nat

Сообщение buryanov » 06 июл 2009, 23:27

Код: Выделить всё
вот собственно нат
${ipfw} nat 10000 config if rl0 log unreg_only reset
${ipfw} add 10010 nat 10 log ip4 from any to any via rl0
здесь небольшая ошибочка, вы сперва создаёте 10000 нат, а потом в 10 нат всё направляете
Аватара пользователя
buryanov
новичок
 
Сообщения: 25
Зарегистрирован: 29 апр 2009, 18:32

Re: не понимаю я этот kernel nat

Сообщение Андрей » 07 июл 2009, 07:21

Это мой pf.conf
Код: Выделить всё
nat on em0 from 172.16.0.0/16 to any -> em0


а это в ядре:
Код: Выделить всё
#FireWall
device pf
device pflog

options         ALTQ
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_CDNR
options         ALTQ_PRIQ
options         ALTQ_NOPCC

и все работает.
ИМХО, pf намного лучше, чем ipfw.
Хотя к то к чему привык.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: не понимаю я этот kernel nat

Сообщение makky » 07 июл 2009, 08:33

Андрей писал(а):Это мой pf.conf
Код: Выделить всё
nat on em0 from 172.16.0.0/16 to any -> em0


а это в ядре:
Код: Выделить всё
#FireWall
device pf
device pflog

options         ALTQ
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_CDNR
options         ALTQ_PRIQ
options         ALTQ_NOPCC

и все работает.
ИМХО, pf намного лучше, чем ipfw.
Хотя к то к чему привык.


расскажи-ка чем же лучше? версия ядра какая?

Пользовался порядка 6 лет ipfw, потом посмотрел на pf, поразбирался и.... Не понял зачем он мне. :shock:
Разве что altq более понятен, чем dummynet, но и время реализации существенно отличается.
А что ты сделал ради эксперимента?
Аватара пользователя
makky
посетитель
 
Сообщения: 119
Зарегистрирован: 19 окт 2008, 20:42
Откуда: msk

Re: не понимаю я этот kernel nat

Сообщение Андрей » 07 июл 2009, 08:42

Если как по мне, то pf более гибок и более понятны сами правила (чем-то схожи с CISCО), в отличие от Ipfw.
О какой версии ядра ты говоришь?
Я просто сорсы скачал с диска и все. Версия фрихи 6.2, 6.3, 7.0 - это те, на которых работает этот конфиг под ядро+сам нат.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

След.

Вернуться в FreeBSD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37