Filtro de conteúdo com iptables

Publicado por Carlos Affonso Henriques. em 12/09/2007

[ Hits: 14.402 ]

 


Filtro de conteúdo com iptables



No kernel 2.6.18 em diante foram incluídos vários módulos no ramo NetFilter e um deles é o xt_string, que é usado para fazer filtragens por palavras-chave. Sua aplicação é muito simples e pode ser aplicado em todas as chains do iptables.

Vamos à sua sintaxe:

[chain|tabela] -m string --algo kmp --string "[palavra-chave]" [alvo]

Onde:
  • --algo: é o algoritimo empregado para o rastreamenteo de palavras chave que pode ser:
    • bm: Boyer-Moore;
    • kmp: Knuth-Pratt-Morris.
    Referem-se aos autores do algoritmo

Exemplo:

# iptables -I OUTPUT -o ppp0 \
   -m string --algo kmp --string "google.com" -j DROP


O xt_string ainda permite que você identifique em que parte do pacote aplicar o filtro com os parâmetros --from e --to, embora estas opções somente serão usadas se você tiver conhecimento profundo acerca do pacote que deseja aplicar o filtro. Esta funcionalidade é muito útil especialmente por delimitar uma faixa onde o filtro irá buscar a palavra chave em um datagrama, o que acelera muito o processo.

Exemplo:

# iptables -I OUTPUT -o ppp0 \
   -m string --algo kmp --from 1 --to 8192 \
   --string "google.com" -j DROP


A regra acima determina que somente seja bloqueada a string google.com que se situe entre o bit 1 e 8192 inclusive em um datagrama. Caso não sejam especificados os valores de --from e --to o módulo aplica os valores 0 (zero) e 65535, respectivamente.

O parâmetro --hex-string é usado quando se deseja aplicar o filtro sob uma notação hexadecimal. Exemplo:

# iptables -I OUTPUT -o ppp0 \
   -m string --algo kmp --from 32768 --to 65535 \
   --hex-string "FFF" -j DROP


Outras dicas deste autor

Permissões persistentes em portas seriais

Compilando um novo kernel herdando as configurações do antigo

Atribuindo número de série da MikroTik Routerboard ao hostname

Sed para formatar endereços MAC

Renomeando interfaces de rede com nameif e /etc/mactab

Leitura recomendada

Não completa o apt-get update - /var/lib/dpkg/lock [Resolvido]

Não seja mais rastreado na web

Bloqueando virus com Mikrotik

Para quem quer dar o primeiro passo em direção ao mundo Hacking

Bloqueio total do Google Talk - aplicativo + web (Gmail)

  

Comentários
[1] Comentário enviado por andersonjackson em 12/09/2007 - 15:53h

Pense em uma dica boa..

Parabéns..

Um forte abraço.

[2] Comentário enviado por bjaraujo em 12/09/2007 - 19:59h

Valeu cara. Se puder me tire uma dúvida. Esse filtro só funciona em OUTPUT ou FORWARD e PREROUTING tb? No modo hex eu poderia filtrar até mesmo protocolos néh? Obrigado.

[3] Comentário enviado por elgio em 12/09/2007 - 21:48h

Normalmente sou crítico a "artigos" que deveriam ser dicas...
Mas esta dica, com um pouquinho mais de conteúdo, seria um excelente artigo!!

Só faço algumas considerações (NÃO CRÍTICAS)

- considerar que em máquinas que são roteadores de rede com grande largura de banda isto poder virar um gargalo

- considerar que o filtro não é perfeito, pois atua sobre um único datagrama IP. Se a palavra "google" (do exemplo) ficou quebrada em dois datagramas, um que foi somente até "goo" e o outro com o "gle" o filtro não vai falhar. Alguem que saiba disso pode preparar pacotes que passem pelo filtro.

Segurança perfeita não existe.
:-D

[4] Comentário enviado por capitainkurn em 13/09/2007 - 07:27h

Elgio, também penso como você, mas geralmente posto artigos tirados de cenários reais ou quando não são, gasto um tempo para elabora-los pois não acho legal postar um artigo que "não funciona". Como eu não fiz nada que requeresse o filtro em questão em um contexto mais elaborado preferí não me esticar, e deixar o tema como curiosidade.
Obrigado, fico feliz que tenha gostado da dica.

[5] Comentário enviado por capitainkurn em 13/09/2007 - 07:36h

Bruno, até onde constatei ele funciona em qualquer chain do Iptables, e certamente tem capacidade de filrar protocolos como MSN por exemplo, mas o mais interessante do filtro é que você pode especificar excessões podendo por exemplo permitir que só se possa conversar com determinados contatos do MSN. Deverei brevemente fazer um projeto neste sentido, pois a empresa quer que os funcionários somente conversem com clientes, fornecedores, filiais etc. E o L7 filter não resolve isso.

[6] Comentário enviado por wleao em 11/11/2007 - 00:35h

Como funciona esta regra de liberação do vnc ?

$IPTABLE -I FORWARD -p tcp -m string --string "VER" --from 51 --to 56 --algo bm -j ACCEPT

Como posso traduzir o que ela faz?

Eu consegui apenas entender que ele esta inserindo uma regra de liberação onde os dados são redirecionados para outra interface de rede ou outra maquina. No entanto o que significar --from 51 --to 56 e o "VER" entre aspas ?

[7] Comentário enviado por capitainkurn em 11/11/2007 - 11:38h

O exemplo que você citou seria o seguinte:
O netfilter somente deixa passar pela cadeia FORWARD pacotes tcp que possuam a string VER que situem-se entre os bits 51 e 56 de um datagrama empregando o algoritmo de busca Boyer-Moore (autores do algoritmo)

[8] Comentário enviado por jorgemendes em 22/02/2018 - 16:41h

Olá amigos,
Tenho um proxy na rede e um firewall com iptables que fecha a porta 80 para forward, forçando os usuários a saírem para a internet através do squid. Entretanto, há algumas exceções, domínios que devem ser liberados para serem acessados diretamente.
Tudo certo com o wpad.dat, as exceções funcionam bem, mas o problema acontece quando preciso liberar a porta 80 para qualquer coisa ".gov.br" por exemplo. O comando que conheço é este:
iptables -I FORWARD -p tcp --dport 80 -m string --algo bm --string ".gov.br" -j ACCEPT
Mas não abre. Tentei o inverso, bloqueando tudo ".gov.br" com:
iptables -I FORWARD -p tcp --dport 80 -m string --algo bm --string ".gov.br" -j DROP
e funcionou perfeitamente.
Mas como eu disse, preciso LIBERAR. Alguma idéia?
Obrigado.

[9] Comentário enviado por CapitainKurn em 26/02/2018 - 11:35h

Não testei mas suponho que uma exeção possa ser especificada com um ponto de exclamação.

iptables -I FORWARD -p tcp --dport 80 -m string --algo bm --string !".gov.br" -j DROP

Testa e conte-nos.

Abraço.

[10] Comentário enviado por ksombrah em 23/05/2023 - 20:35h

Olá estou tentando bloquear os downloads de um webmail específico, pesquisando cheguei nesse script:
for i in 172.217.1.110 216.239.32.10 216.239.34.10 216.239.36.10 216.239.38.10 142.251.16.26 142.251.16.27 142.251.163.26 142.251.163.27 142.251.167.26
do
iptables -A INPUT -p tcp -d $i --dport 80 -m string --string "Content-Disposition: attachment;" --algo bm -j DROP
iptables -A INPUT -p tcp -d $i --dport 80 -m string --string "Content-Disposition: attachment;" --algo bm -j REJECT
iptables -A INPUT -p tcp -d $i --dport 443 -m string --string "Content-Disposition: attachment;" --algo bm -j DROP
iptables -A INPUT -p tcp -d $i --dport 443 -m string --string "Content-Disposition: attachment;" --algo bm -j REJECT
iptables -A FORWARD -p tcp -d $i --dport 80 -m string --string "Content-Disposition: attachment;" --algo bm -j DROP
iptables -A FORWARD -p tcp -d $i --dport 80 -m string --string "Content-Disposition: attachment;" --algo bm -j REJECT
iptables -A FORWARD -p tcp -d $i --dport 443 -m string --string "Content-Disposition: attachment;" --algo bm -j DROP
iptables -A FORWARD -p tcp -d $i --dport 443 -m string --string "Content-Disposition: attachment;" --algo bm -j REJECT
done
Mas não está funcionando, alguma idéia?


Paz e Bem!
Alcione Ferreira
Sombra®
101080
[http://www.alcionesytes.net/]
------------------------------------------------
Liberdade e conhecimento ao alcance de todos.

Office Escritório - http://www.libreoffice.org/
Navegador Firefox - http://www.mozilla.org.br/
Email Thunderbird - http://www.mozilla.org.br/
---------------------------------------------------------------
Linux user number 432030 of http://counter.li.org/
---------------------------------------------------------------
ICQ: 377035698
Jabber: ksombrah@jabber.org
MSN: alcione.sombra@hotmail.com
---------------------------------------------------------------
Curriculum: http://lattes.cnpq.br/0545256741852110



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts