Esse artigo mostra como montar um módulo personalizado para Kernel 2.6 que trabalhe com o NetFilter. Dentre suas possíveis utilidades, podemos criar: firewall leve, compilado; firewall com alarme; "gatilho" para determinados eventos; contadores de pacotes; etc.
[3] Comentário enviado por zero_bala em 08/11/2005 - 11:18h
Que esta vai para o favoritos, nem tenha dúvida! Excelente pesquisa e muito proveitosa para o meio acadêmico. Marcel, você conhece algum livro sobre o assunto?
[4] Comentário enviado por Ângelios em 30/09/2010 - 17:40h
Caros,
Copiei os códigos dos dois exemplos e tentei compila, mais aparece a seguinte mensagem:
nfhook.c:15:26: error: linux/config.h: Arquivo ou diretório não encontrado
nfhook.c:16:26: error: linux/module.h: Arquivo ou diretório não encontrado
nfhook.c:17:24: error: linux/init.h: Arquivo ou diretório não encontrado
nfhook.c:18:27: error: linux/proc_fs.h: Arquivo ou diretório não encontrado
nfhook.c:20:25: error: asm/uaccess.h: Arquivo ou diretório não encontrado
In file included from nfhook.c:21:
/usr/include/linux/netfilter.h:55: error: field ‘in’ has incomplete type
/usr/include/linux/netfilter.h:56: error: field ‘in6’ has incomplete type
In file included from nfhook.c:22:
/usr/include/linux/netfilter_ipv4.h:53: error: ‘INT_MIN’ undeclared here (not in a function)
/usr/include/linux/netfilter_ipv4.h:64: error: ‘INT_MAX’ undeclared here (not in a function)
nfhook.c:32: warning: ‘struct net_device’ declared inside parameter list
nfhook.c:32: warning: its scope is only this definition or declaration, which is probably not what you want
nfhook.c:32: warning: ‘struct sk_buff’ declared inside parameter list
nfhook.c: In function ‘hook_func’:
nfhook.c:36: error: dereferencing pointer to incomplete type
nfhook.c:36: error: dereferencing pointer to incomplete type
nfhook.c: At top level:
nfhook.c:47: error: expected declaration specifiers or ‘...’ before ‘off_t’
nfhook.c: In function ‘show_stats’:
nfhook.c:57: warning: incompatible implicit declaration of built-in function ‘sprintf’
nfhook.c:58: error: ‘offset’ undeclared (first use in this function)
nfhook.c:58: error: (Each undeclared identifier is reported only once
nfhook.c:58: error: for each function it appears in.)
nfhook.c: At top level:
nfhook.c:65: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘nfhook_init’
nfhook.c:105: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘nfhook_exit’
nfhook.c:115: warning: data definition has no type or storage class
nfhook.c:115: warning: parameter names (without types) in function declaration
nfhook.c:116: warning: data definition has no type or storage class
nfhook.c:116: warning: parameter names (without types) in function declaration
nfhook.c:118: error: expected declaration specifiers or ‘...’ before string constant
nfhook.c:118: warning: data definition has no type or storage class
Este aparece quando tento compilar o segundo exemplo.
Não entendo porque estas bibliotecas não foram encontradas.
[5] Comentário enviado por marcelbueno em 30/09/2010 - 19:26h
Caro Angelios,
Faz algum tempo que escrevi este artigo. Para ser mais específico, uns 5 anos. De lá para cá muita coisa mudou: mudei de projeto, de emprego, de distro, de versão de kernel, de área, de estado e até de esposa ;-)
Brincadeiras à parte, creio que partes do seu problema se deve a falta do pacote de kernel-headers, ou kernel-dev. No caso da plataforma fedora (e redhats-like) o comando é algo como "yum install kernel-devel". Suspeito que nos debians-like, o comando seja muito semelhante, utilizando-se do "apt-get".
No entanto, pode ser que algumas coisas aí do meio (constantes principalmente) não sejam mais desta forma, e certas coisas não sejam mais aceitas pelo GCC, kernel, etc. Mas isto você só vai descobrir indo por partes...