LINUX.ORG.RU

netfilter


0

0

Привет.

Я столкнулся с такой задачей:
1. фильтровать входящие пакеты: все TCP пакеты на порт 9999 пропускать, остальные, например, молча дропать
2. у всех входящих TCP-пакетов на порт 9999 сохранять ip.src, tcp.src и ip.dst в таблицу1, после чего подменить ip.dst на свой IP (эти пакеты предназначались не нам :))
3. В юзерспейсе подхватываем эти соединения с помощью accept, создаем новое соединение на original dst (из таблицы1) и порт 9999. из полученных 2 сокетов заполняем таблицу2: original ip.src, tcp.src - new ip.src, tcp.src.
4. У всех исходящих пакетов на порт 9999 смотреть IP.src, искать по нему в таблице2 original IP.src, и подменять ip.dst на original IP.dst из таблицы 1.

Как я понял, с этим со всем отлично справляются netfilter в ядре и lipiptс в user-space. С lipiptc вроде все понятно, а по поводу программирования ядерного модуля в netfilter-hacking-howto - какая-то каша. Немногочисленные примеры кода меня только запутали :(

Посему вопрос:
1. есть ли смысл писать код в kernel-space: все равно какая-то информация (инфа для таблиц 1 и 2) будет передаваться в userspace. Нагрузка на интерфейс - около 50 килопакетов в секунду.
2. если ответ на п.2 - "да", то есть ли где-нибудь "пошаговое" руководство где все подробно разжевано про программирование с netfilter в ядре?

P.S.: Не пинайте сильно, я в этой области еще не очень силен.
P.P.S.: Да, я организую man-in-the-middle атаку :)

Ответ на: DMA & memory-to-memory от int_0dh

Re: DMA & memory-to-memory

ок, NAT у всех входящих соединений я сделаю. но потом как сделать connect на исходный ip.dst? как различить исходящие соединения чтобы подменить им ip.src как будто мы это не мы?

это правда там есть? я просто не нашел.

BreadFan ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.