_ RU.UNIX.BSD (2:5077/15.22) _____________________________________ RU.UNIX.BSD _
From : Anatoly A. Orehovsky 2:5020/400 23 Oct 99 22:18:08
Subj : как работает правило divert
________________________________________________________________________________
From: tolik@mpeks.tomsk.su (Anatoly A. Orehovsky)
Valentin Davydov (val@sqdp.trc-net.co.jp) wrote:
: А всё-таки, объясните, как работает правило divert? Вот, к примеру,
В divert-socket приходит заказанный пакет с уже ntohs адресами src
и dst. Программа, читающая сокет, может отфильтровать пакет или
записАть обратно в сокет. При этом пакет пойдет дальше (но HЕ
ОБРАТHО), не попадая уже в соответствующее правило, которое его
в начале завернуло в диверт.
: ipfw add divert 1234 tcp from any to ${my_ip} 123 via ${local_if} in
: заворачивает tcp пакеты, пришедшие на 123 порт из локалки, на порт
Съэмулировать работу по TCP при этом можно только, если слушающая
программа имеет кроме divert для input еще и открытый RAW-сокет
для output. И хитрые правила, чтобы исходящий через этот raw-сокет
трафик опять в диверт не попал.
И придется полностью эмулировать TCP. В общем, неблагодарное это
занятие. Тем более, что все будет происходить в user level.
Это если приходящий трафик прямо в диверт-демоне обрабатывать.
Есть вариант, правда, такого плана - диверт-правило заворачивает в
диверт приходящий на x-порт трафик и уходящий с y-порта. Hа y-порту
должен сидеть некий обычный tcp-демон.
А на диверт-сокете сидит программка, принимающая трафик на x-порт
и пихающая его в локальный y-порт. А также, принимающая трафик с
y-порта и рассовывающая по peerам, пришедшим на x-порт. Короче,
libalias: PacketAliasRedirectPort(3). Опять же, со всеми прелестями
user-level. И прочим геморроем.
: 1234. Предположим, там слушает netcat, который эти пакеты обрабатывает
Оригинальный netcat ни в коем случае не пойдет. Править его придется.
Вплоть до полного переписывания.
К тому же, 1234 - совсем не похож на обычный tcp-порт. Мало того,
что инициализируется не так, так еще и туда будут валиться ПОЛHЫЕ
ip-дейтаграммы. А вовсе даже не tcp-stream. Сразу в полный рост
встает проблема по отлову tcp-сессий и прочие заморочки.
: и посылает ответы (tcp всё-таки, как ни как). Как составить правило,
: чтобы эти пакеты уходили обратно в локалку с того же 123 порта?
Вот для такой задачи идеально подходит правило fwd с форважением на
локальный порт. Тут и netcat пойдет, и что угодно еще. Совершенно
стандартное. При этом, tcp peer будет иметь полное впечатление, что
работает с тем, что заказывал (см. transparent proxy).
А на divert в данном случае лучше не обращать внимание.
--
Anatoly A. Orehovsky. AO9-RIPE. AAO1-RIPN
http://www.tekmetrics.com/transcript.shtml?pid=6064
--- ifmail v.2.14dev3
* Origin: CISA Ltd. InterNetNews site (2:5020/400)
961 Прочтений • [как работает правило divert (freebsd ipfw divert firewall)] [08.05.2012] [Комментариев: 0]