Доброе время суток Господа!
Возник вопрос: Нужно написать сетевой фильтр пакетов сети Интернет.
Фильтрация производится по правилам... Типа если адрес отправителя пакета - доверительный, то пакет пропустить. Иначе запретить.
Я склонен на написания модуля для ядра. Подскажите куда двигаться, и правильно ли моё направление?
П.С. привожу кусок уже работающего кода на с++, для блокировки ВСЕХ пакетов.
Единственное затруднение - это интерфейс с пользователем... Как реализовать?
#define __KERNEL__
#define MODULE
#define LINUX
#define __NO_VERSION__.#include </usr/include/linux/module.h>
#include </usr/include/linux/version.h>
#include </usr/src/linux-2.4.20-8/include/linux/netfilter.h>
#include </usr/src/linux-2.4.20-8/include/linux/netfilter_ipv4.h>MODULE_LICENSE("GPL");
MODULE_AUTHOR("asik");struct nf_hook_ops nf_incoming;
struct nf_hook_ops nf_outgoing;unsigned int main_hook (unsigned int hooknum,struct sk_buff **skb,const struct net_device *in,const struct net_device *out,int (*okfn)(struct sk_buff*))
{
/* Drop all */
return NF_DROP;
}int init_module ()
{
//Incoming
nf_incoming.hook = main_hook; /* @ */
nf_incoming.pf = PF_INET;
nf_incoming.hooknum = NF_IP_PRE_ROUTING;
nf_incoming.priority = NF_IP_PRI_FIRST;//outgoing
nf_outgoing.hook = main_hook;
nf_outgoing.pf = PF_INET;
nf_outgoing.hooknum = NF_IP_PRE_ROUTING;
nf_outgoing.priority = NF_IP_PRI_FIRST;nf_register_hook(&nf_incoming);
nf_register_hook(&nf_outgoing);printk ("FireWall loaded \n");
return 0;
}void cleanup_module ()
{nf_unregister_hook(&nf_incoming);
nf_unregister_hook(&nf_outgoing);printk ("FireWall unload \n");
}
>Доброе время суток Господа!
>Возник вопрос: Нужно написать сетевой фильтр пакетов сети Интернет.
>Фильтрация производится по правилам... Типа если адрес отправителя пакета - доверительный, то
>пакет пропустить. Иначе запретить.
>Я склонен на написания модуля для ядра. Подскажите куда двигаться, и правильно
>ли моё направление?
>П.С. привожу кусок уже работающего кода на с++, для блокировки ВСЕХ пакетов.
>
>Единственное затруднение - это интерфейс с пользователем... Как реализовать?через файловую систему proc. А чем тебя стандартный файрвол не устраивает? заново будешь писать весь iptables?
так может libconntrack_ipqueue всётаки http://netfilter.org/
>>Доброе время суток Господа!
>>Возник вопрос: Нужно написать сетевой фильтр пакетов сети Интернет.
>>Фильтрация производится по правилам... Типа если адрес отправителя пакета - доверительный, то
>>пакет пропустить. Иначе запретить.
>>Я склонен на написания модуля для ядра. Подскажите куда двигаться, и правильно
>>ли моё направление?
>>П.С. привожу кусок уже работающего кода на с++, для блокировки ВСЕХ пакетов.
>>
>>Единственное затруднение - это интерфейс с пользователем... Как реализовать?
>
>через файловую систему proc. А чем тебя стандартный файрвол не устраивает? заново
>будешь писать весь iptables?Есть задание такое.... дипломное... А что конкретнее в proc?