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