NetFilter Hook em Kernel 2.6

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.

[ Hits: 42.551 ]

Por: Valber Marcel Bueno em 07/11/2005


Maiores dados



Este artigo está divulgado em minha página wiki na internet:
Estou atualizando ela conforme amplio meus horizontes neste âmbito de conhecimento.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Constantes
   3. Estruturas
   4. Exemplo aprimorado
   5. Aplicações
   6. Problemas e correções
   7. Referências e maiores estudos
   8. Maiores dados
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Gerência e criação de módulos do kernel

Controle de tráfego utilizando HTB no Debian Sarge

Algoritmos de compressão

A tecla mágica SysRQ

Slackware com kernel 2.6.10 - passo a passo

  
Comentários
[1] Comentário enviado por removido em 07/11/2005 - 23:44h

Parabens pelo seu artigo..

[2] Comentário enviado por ygorth em 08/11/2005 - 10:46h

Cara,

excelente tema. Parabens!

[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.

Estou usando Ubuntu Server 10.04.

Gostaria se possível que me ajudassem.

Valber, muito obrigado pelo artigo.

[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...

Espero ter podido ajudar

[6] Comentário enviado por Ângelios em 01/10/2010 - 18:13h

Marcel,

Não resolveu o problema mais me ajudou muito.

Irei continuar procurando e tentando resolver isso aki.

Caso consiga retorno aki pra passar o conhecimento a diante.




Mudar de vez enquanto é sempre bom! ^^


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts