ipfw+nat

FreeBSD, NetBSD, OpenBSD, DragonFly и т. д.

Модератор: arachnid

TranceMaker
Сообщения: 68

ipfw+nat

Сообщение TranceMaker »

Всем привет!
Не могу разобраться и понять принципы работы фаервола и нат.
для теста(чтоб понять) пытаюсь(разными способами) прокинуть порты ssh
правила какие есть

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

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 allow ip from any to any via bge0
00500 divert 8668 ip from ВНУТРЕННЯЯ ПОДСЕТЬ/23 to any out via dc0
00600 divert 8668 ip from any to [b]ВНЕШНИЙ[/b] in via dc0
00700 allow icmp from any to any
00800 divert 8668 tcp from any to [b]ВНЕШНИЙ IP[/b] dst-port 22 in recv dc0
00900 divert 8668 tcp from any to [b]ВНЕШНИЙ IP[/b] src-port 22 in recv dc0
01000 divert 8668 tcp from [b]ВНУТРЕННИЙ IP[/b] to any dst-port 22 out xmit dc0
01100 divert 8668 tcp from [b]ВНУТРЕННИЙ IP[/b] 22 to any out xmit dc0
01200 allow tcp from any to [b]ВНУТРЕННИЙ IP[/b] dst-port 22
01300 allow tcp from any to [b]ВНУТРЕННИЙ IP[/b] src-port 22
01400 allow tcp from [b]ВНУТРЕННИЙ IP[/b] to any dst-port 22
01500 allow tcp from [b]ВНУТРЕННИЙ IP[/b] 22 to any
01600 allow udp from any 123 to me
01700 allow udp from me to any dst-port 123
01800 allow tcp from [b]подсеть внутри[/b]/23 to [b]ип фаервола[/b] dst-port 800
01900 allow tcp from [b]ип фаервола[/b] 800 to [b]подсеть внутри[/b]/23
02000 allow tcp from any 80 to ВНЕШНЯЯ ПОДСЕТЬ/30
02100 allow tcp from [b]ВНЕШНИЙ IP[/b]/30 to any dst-port 80
02200 allow tcp from any 443,5190,1100 to any
02300 allow tcp from any to any dst-port 443,5190,1100
02400 allow udp from any to any dst-port 53
02500 allow udp from any 53 to any
02600 allow tcp from any 21 to any
02700 allow tcp from any to any dst-port 21
02800 allow tcp from any 20 to any
02900 allow tcp from any to any dst-port 20
03000 deny ip from any to any

nat.d

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

interface dc0
port 8668
log yes
redirect_port tcp [b]внутренний ип[/b]:22 22

в чем проблема понять не могу, смотрел несколько способов банально прокинуть ип и что то ничего не выходит... нужно мне это для того чтобы понять как работает фаервол и в дальнейшем прокинуть порты для видео конференции
Спасибо сказали:
Аватара пользователя
Poor Fred
Сообщения: 1575
Статус: Pygoscelis papua
ОС: Gentoo Linux, FreeBSD

Re: ipfw+nat

Сообщение Poor Fred »

Оставь только один divert from any to any в начале, а порты разрешай только нужные. Диверт, как правило, нужен только один, максимум - два: на исходящий и входящий трафик.
Либо смотри в хендбуке более продвинутый конфиг с keep-state - check-state и подправь под себя.
Убить всех человеков!
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: ipfw+nat

Сообщение bakulenko »

# tcpdump -i dc0 -n port 22
в руки.
и на внутренний интерфейс тоже. Увидишь, дивертятся ли пакеты или нет.

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

В голову пока приходит один наводящий вопрос. natd точно подхватывает свой конфиг файл?

Смысл вообще такой.

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

ipfw add 500 divert natd all from any to <ВНЕШНИЙ_АДРЕС> via dc0
ipfw add 600 allow tcp from any to <SSHDHOST>  dst-port 22 in via dc0
ipfw add 700 allow tcp from any to <SSHDHOST>  dst-port 22 out via bge0

ipfw add 900 allow tcp from <SSHDHOST> 22 to any in via bge0
ipfw add 1000 divert natd tcp from <LOCALNET> to any via dc0
ipfw add 1100 allow tcp from <ВНЕШНИЙ АДРЕС> 22 to any out via dc0


Как то так. По первости вообще советую не шибко экспериментировать с in и out, ибо там есть нюансы.

Важно понять, что пакет с адреса из мира на внешний интерфейс по порту 22, подпадающий под правило №500 превратится в пакет на адрес внутри сети, опять попадет в ipfw, но он по-прежнему будет считаться входящим для if=dc0, и только после
разрешения его прохождения правилом 600, он перекинется на внутренний интерфейс и будет считаться исходящим с if=bge0 c адресом из мира и идущим к SSHDHOST.

Спасибо сказали:
TranceMaker
Сообщения: 68

Re: ipfw+nat

Сообщение TranceMaker »

bakulenko писал(а):
14.05.2010 18:23
# tcpdump -i dc0 -n port 22
в руки.
и на внутренний интерфейс тоже. Увидишь, дивертятся ли пакеты или нет.

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

В голову пока приходит один наводящий вопрос. natd точно подхватывает свой конфиг файл?

Смысл вообще такой.

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

ipfw add 500 divert natd all from any to <ВНЕШНИЙ_АДРЕС> via dc0
ipfw add 600 allow tcp from any to <SSHDHOST>  dst-port 22 in via dc0
ipfw add 700 allow tcp from any to <SSHDHOST>  dst-port 22 out via bge0

ipfw add 900 allow tcp from <SSHDHOST> 22 to any in via bge0
ipfw add 1000 divert natd tcp from <LOCALNET> to any via dc0
ipfw add 1100 allow tcp from <ВНЕШНИЙ АДРЕС> 22 to any out via dc0


Как то так. По первости вообще советую не шибко экспериментировать с in и out, ибо там есть нюансы.

Важно понять, что пакет с адреса из мира на внешний интерфейс по порту 22, подпадающий под правило №500 превратится в пакет на адрес внутри сети, опять попадет в ipfw, но он по-прежнему будет считаться входящим для if=dc0, и только после
разрешения его прохождения правилом 600, он перекинется на внутренний интерфейс и будет считаться исходящим с if=bge0 c адресом из мира и идущим к SSHDHOST.

спасибо, ssh для теста у нас заработал.
Следующая цель была видео конференция ...
как выяснилось что нат не работает с h323 - tcp 1720
пришлось его форвардить через portfwd
:)

Спасибо сказали: