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.480 ]

Por: Valber Marcel Bueno em 07/11/2005


Problemas e correções



1. Rodar o make causa o retorno "make: Nothing to be done for 'default'"

R: Na primeira compilação isto não costuma ocorrer. Se for desenvolver e recompilar seguidas vezes, recomendo o ajuste do Makefile para fazer clean, ou compile manualmente:

# rm -rf *.o
# rm -rf *.ko
# rm -rf *.mod.c
# make -C /lib/modules/$(uname -r)/build SUBDIRS=$(pwd) modules


Página anterior     Próxima página

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

Atualizando kernel de 2.4.31 para 2.6.13 no Slackware 10.2

openSUSE Linux no Windows 10 sem virtualização

Aplicando o patch do grsecurity no kernel 2.4

Compilando o kernel no Slackware com pacotes pré-compilados

Kernel atualizado no Debian - Parte I

  
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