The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"help understanding IPFW + natd"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"help understanding IPFW + natd"  
Сообщение от trionix email(ok) on 03-Мрт-08, 00:44 
Доброй ночи. Вразумите меня по поводу такой задачи.
Пусть имеетсся шлюз FreeBSD 6 с двумя сетевыми картами и используется IPFW в связке с NATD. Пусть мы пишем простые правила, преследующие только учебную цель и направленные только на прохождение FTP траффика (активный FTP). Вот эти правила (lnc1 - внутренняя сеть,IP 10.10.0.2; lnc0 - внешняя,IP 192.168.124.2):

00002 allow log ip from any to any via lnc1
00003 allow ip from any to any via lo0
00100 divert 8668 ip from any to any in via lnc0
00101 check-state
00120 skipto 500 udp from any to any dst-port 53 out via lnc0 keep-state
#правило для управляющего соединения FTP
00125 skipto 500 tcp from any to any dst-port 21 out via lnc0 setup keep-state
# Логика следующего правила верна, ибо клиент подключился к ftp:21, далее пользователь
# вводит команду, например ls (dir), клиент выдал команду PORT A,B,C,D,E,F. Сервер FTP
# выполняет подключение к клиенту со своего порта 20 на порт E*256+F клиента. Keep-state
# запомнит правило в обоих направлениях, так что подключения клиента с портом (E*256+F)
# на порт сервера 20 будут самим собой разумеющимся явлением.
00310 allow tcp from any 20 to any in via lnc0 keep-state
00450 deny log ip from any to any
00500 divert 8668 ip from any to any out via lnc0
00510 allow ip from any to any
65535 allow ip from any to any

Подключение клиента к FTP серверу без проблем, однако затык начинается при попытке, например, выполнить команду dir. Идет временная пауза, затем сброс соединения. Имею полный доступ к FTP серверу, шлюзу и клиенту в локальной сети за шлюзом. На всех троих установил по снифферу. Анализ траффика как на стороне клиента, так и на стороне сервера FTP:
0) ....
1) клиент выдал команду PORT.
2) сервер подключается со своего порта 20 к порту, указанному клиентом. Фаерволл траффик не заблокировал, клиент принял пакет от сервера FTP.
На шлюзе создались временные правила: (FTP Server) 192.168.124.1 20 <-> 10.10.0.3 1739 (Client)
3) Клиент получил SYN пакет от FTP сервера (192.168.124.1 20 -> 10.10.0.3 1739 успешно)
4) Клиент отвечает на SYN пакет сервера своим SYN и ACK: 10.10.0.3 1739 -> 192.168.124.1 20, сервер FTP получил пакет
5) Сервер отвечает клиенту со своего порта 20, однако на стороне клиента вижу, что пакет пришел с порта 21 сервера и на порт, который использовался при управляющим соединении(!).
Очевидно какая-то ошибка в правилах на шлюзе.
Объясните пож в чем косяк.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "help understanding IPFW + natd"  
Сообщение от Garet (??) on 03-Мрт-08, 09:37 
>[оверквотинг удален]
># вводит команду, например ls (dir), клиент выдал команду PORT A,B,C,D,E,F. Сервер
>FTP
># выполняет подключение к клиенту со своего порта 20 на порт E*256+F
>клиента. Keep-state
># запомнит правило в обоих направлениях, так что подключения клиента с портом
>(E*256+F)
># на порт сервера 20 будут самим собой разумеющимся явлением.
>00310 allow tcp from any 20 to any in via lnc0 keep-state
>
>00450 deny log ip from any to any

после этого правила все остальные строки безполезны т.к. идет проверка по ip протаколу в соответствии с правилами у тебя сказанно что если не под одно правило не по падает то мы все остальное запрещаем проверка дальше проводиться не будет!

>00500 divert 8668 ip from any to any out via lnc0
>00510 allow ip from any to any
>65535 allow ip from any to any

теперь, по поводу keep-state вообщем это у меня не заработало в связки IPFW+NAT ну покрайней мере у меня не получилось грамотно все организовать.
я сделал следующим образом:
allow all from (IP для которого организуем доступ) to any
allow all from any to (IP для которого организуем доступ)
таким образом мы организуем полный доступ для определенного адреса через наш шлюз. Эти правила должны находиться перед последним правилом, но после всех остальных.
deny all from any to any
вот таким образом все работает.
Если что то не так раскажите как можно по другому это организовать...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "help understanding IPFW + natd"  
Сообщение от trionix (ok) on 03-Мрт-08, 10:04 
>после этого правила все остальные строки безполезны т.к. идет проверка по ip протаколу в >соответствии с правилами у тебя сказанно что если не под одно правило не по падает то мы >все остальное запрещаем проверка дальше проводиться не будет!

Все работает, т.к.
00120 skipto 500 udp from any to any dst-port 53 out via lnc0 keep-state
..
00125 skipto 500 tcp from any to any dst-port 21 out via lnc0 setup keep-state
т.е. срабатывает skipto, перекидывающее обработку правил на правило №500.
Подробнее такой тип записи правил описан http://www.lissyara.su/?id=1356

Вопрос в другом: фаервол не блокирует записи (смотрим лог /var/log/security), однако идет затык на уровне протокола FTP, сделано предположение, что фаервол маршрутизирует входящие пакеты не по той таблице состояний, как ожидаю. Объясните, в чем загвоздка.

>[оверквотинг удален]
>я сделал следующим образом:
>allow all from (IP для которого организуем доступ) to any
>allow all from any to (IP для которого организуем доступ)
>таким образом мы организуем полный доступ для определенного адреса через наш шлюз.
>Эти правила должны находиться перед последним правилом, но после всех остальных.
>
>deny all from any to any
>вот таким образом все работает.
>Если что то не так раскажите как можно по другому это организовать...
>

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "help understanding IPFW + natd"  
Сообщение от pavel_i (??) on 02-Апр-08, 21:00 
>[оверквотинг удален]
>>я сделал следующим образом:
>>allow all from (IP для которого организуем доступ) to any
>>allow all from any to (IP для которого организуем доступ)
>>таким образом мы организуем полный доступ для определенного адреса через наш шлюз.
>>Эти правила должны находиться перед последним правилом, но после всех остальных.
>>
>>deny all from any to any
>>вот таким образом все работает.
>>Если что то не так раскажите как можно по другому это организовать...
>>

Извините, не стал разбираться в ваших правилах. Скажу только суть.
дожны быть открыты порты 20,21,1025-65535 на выход с внешнего ip
затем на вход с 21,20 на ip локальный
а также открыты пустые порты 1025-65535 на локальный ip
xl0 -внутренний инт
rl0 - внешний инт
ipfw add 400 allow ip from <локальная сеть/маска> to any in recv xl0
ipfw add 410  allow ip from any to <локальная сеть/маска> out xmit xl0

ipfw add 600  divert 8668 ip from <локальная сеть/маска> to any out xmit rl0
ipfw add 610  divert 8668 ip from any to <внешний ip> in recv rl0
ipfw add 749 allow tcp from <внешний ip>  1025-65535 to any dst-port 1025-65535 out xmit rl0
ipfw add 749 allow tcp from <внешний ip>  1025-65535 to any dst-port 21,20 out xmit rl0
ipfw add 999 allow tcp from any 1025-65535 to <локальный ip> dst-port 1025-65535 in recv rl0

ipfw add 1000 allow tcp from any 21,20 to <локальный ip> dst-port 1025-65535 in recv rl0 established

Что то в этом роде. Тогда активный ftp работает.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру