LINUX.ORG.RU

Последний вопрос по netfilter


0

0

Вообщем гуглил,гуглил и пришёл к выводу что нетФильтр это часть сетевой подсистемы ядра и обойтись без неё нельзя и как следствие можно писать файрволы только на основе нетфильтра. Но так ли это?! Или же я ошибаюсь, просто если это так то я не буду заморачиваться и засорять форум, если всё же можно обойтись, то буду думать дальше.

Пы.Сы. (на случай если без нетфильтра можно обойтись, то вот какой вопрос) как я понял при получение пакета в net/core/dev.c из net_rx_acttion вызывается softirq а как его перехватить и заблокировать skb, что бы можно было обработать пакет и очистит буфер сокета при необходимости.

Заранее спасибо!!!

★★★★★

> Вообщем гуглил,гуглил и пришёл к выводу что нетФильтр это часть сетевой подсистемы ядра и обойтись без неё нельзя и как следствие можно писать файрволы только на основе нетфильтра. Но так ли это?!

Нет, не так.

Просто с netfilter писать файрволлы проще, т.к. он уже встроен в ядро и уже предоставляет всю необходимую функциональность.

execve
()
Ответ на: комментарий от cyclon

> Т.е. это что то по типу API? Но как я понимаю заменить его можно?!

Да, можно.

Читай ответ в предыдущем топике.

execve
()
Ответ на: комментарий от execve

Т.е. кроме как патчить других вариантов я так понимаю нет?!

Ну тады буду осваивать нетфильтр.

Я ещё вот что хотел спросить, а вот такая организация как прероутинг - инпут - форвард - оутпут - построутинг это является частью архитектуры ядра? Или же оно привязано к нетфильтру?

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

> Т.е. кроме как патчить других вариантов я так понимаю нет?!

Да.

Либо используй уже готовый hook (netfilter), лио добавляй свой с помощью патча.

> Я ещё вот что хотел спросить, а вот такая организация как прероутинг - инпут - форвард - оутпут - построутинг это является частью архитектуры ядра? Или же оно привязано к нетфильтру?

Это вообще-то практически единственная оптимальная архитектура. :)

Начни же наконец читай исходники ядра, там всё есть.

execve
()
Ответ на: комментарий от execve

> Начни же наконец читай исходники ядра, там всё есть.

За ответы спасибо, но если бы я нашёл там ответы то не спрашивал бы :)) Просто то что там написано не даёт ответа. Не хочу показаться не благодарным, но если покажешь номер строки и файл где можно найти хоть часть ответа то это будет очень хорошо, может просто не там смотрю и не то ищу.

Пы.Сы. опять же извиняюсь за назойливость, но небольшой вопрос, может ты в курсе, можно изменять данные в сокете при получении пакета. Т.е. сработал хук и я в функции изменил данные пакета, т.е. переписал структуру skb? Мне кажется это возможно, ведь иптаблес умеет нат и пр.

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

> За ответы спасибо, но если бы я нашёл там ответы то не спрашивал бы :)) Просто то что там написано не даёт ответа. Не хочу показаться не благодарным, но если покажешь номер строки и файл где можно найти хоть часть ответа то это будет очень хорошо, может просто не там смотрю и не то ищу.

Думаешь, за что бы зацепиться.
Попробуем зацепиться за обработку PREROUTING
$ find linux-2.6.8.1 | xargs grep PREROUTING
Ничего интересного

$ find linux-2.6.8.1 | xargs grep PRE_ROUTING

Ура!
Во первых видишь список файлов, в которых используется константа NF_IP_PRE_ROUTING.
Во вторых замечаешь, что эта константа практически везде соседствует с NF_HOOK.

Думаешь.
Понимаешь, что
1). тебе нужен файл linux-2.6.8.1/net/ipv4/ip_input.c (говорящее название, не правда ли?)
2). NF_HOOK - это и есть способ, которым netfilter получает пакеты от ядра (ещё одно говорящее название).

Далее
1). Ищешь, что такое NF_HOOK (use ctags, Luke!)
2). Открываешь linux-2.6.8.1/net/ipv4/ip_input.c
/NF_HOOK
и обнаруживаешь, что NF_HOOK используется в функциях
ip_local_deliver с параметром NF_IP_LOCAL_IN
ip_rcv с параметром NF_IP_PRE_ROUTING

Читаешь комментарии к этим функциям.

Думаешь ещё немного.
Понимаешь, что NF_IP_* - это скорее всего аналоги pre-defined цепочек из userspace (LOCAL, PREROUTING).

О удача, мы нашли места, в которых нужно встраивать свой код-перехватчик.

Задание на дом: найди места, где обрататываются вызывается netfilter для обработки остальных цепочек.

execve
()
Ответ на: комментарий от execve

Да с этим уже всё понятно и как я понял, хуков нетфильтра достаточно, поскольку вызовы действительно идут из ip_input *-output e.t.c. Так что буду пользоваться ими. Ещё раз спасибо!

P.s. просто раньше никогда ничего не писал с использованием ядра и вот таки решил попробовать а оказалось не так просто понять что к чему.

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