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