Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: xfce the best
Por escoria
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

NetFilter Hook em Kernel 2.6
Linux user
marcelbueno
07/11/2005
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.
Por: Valber Marcel Bueno
[ Hits: 24014 ]
Conceito: 10.0   3 voto(s)3 voto(s)3 voto(s)3 voto(s)3 voto(s) + quero dar nota ao artigo

Introdução

Netfilter é um subsistema do Kernel do Linux superiores ao 2.4. O Netfilter é o responsável pelo filtro de pacotes, NAT, firewall, redirecionamentos, entre outros. O Netfilter é muito extensível e sua documentação é muito bem feita (procure também por "Netfilter Hacking HOWTO"). O Netfilter deixa a possibilidade de uso de HOOKs no código do Kernel, fazendo com que seu uso seja muito maleável e muito adotado pela comunidade. Estes HOOKs deixam várias possibilidades, podendo servir como gatilhos para certos eventos.

O Netfilter é muito conhecido pelo seu comando de front-end, o iptables, mas não limita-se à ele. A criação de EXTENSIONs para o iptables, a criação de HOOKs no Netfilter/Kernel se tornam muito interessantes, tendo como limitação apenas a imaginação de cada um.

A idéia de desenvolver um HOOK partiu do princípio da complexidade em se contabilizar consumo por IPs e por PORTAS, utilizando os próprios recursos do sistema. Muitos vão me dizer: mas isto é possível com fulano, ciclano, etc. Normalmente os programas que executam esta ação utilizam meios mais pesados para obtê-la, utilizando de bibliotecas como a libpcap (sniffer), entre outras formas, que acabam consumindo uma certa memória.

Desta maneira surgiu a idéia de desenvolver estes módulos em cima do próprio IPTABLES e minha experiência anterior (IPCHAINS) forçava a me atentar ao fato de que certos contadores eu poderia encontrar no /proc. Ledo engano: o iptables não armazena muita coisa interessante por lá.

Mas a melhor idéia veio realmente quando eu me deparei com o Fedora Core 4, que vinha com o SELinux e que habilitava um Netfilter HOOK sobre o sistema. Algumas pesquisas e pronto: cá estava eu com uma fonte interessante de informações, mas que não me serviam, pois elas existem muito mais para Kernel 2.4. Como fazer então com Kernel 2.6?

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

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

Parabens pelo seu artigo..

[2] Comentário enviado por ctrlc 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


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.