Processamento de regras

Como as regras são organizadas na memória.

O HLBR não processa as regras uma a uma, como pode parecer. Ao invés disso ele processa os testes contra cada pacote, cada teste estando ligado a uma ou mais regras.

diagrama das estruturas em memória das regras e dos testes.

Eis o que acontece. Suponha que o HLBR seja executado com as três regras abaixo:

<rule>
ip dst(www)
tcp dst(80)
tcp content(awstats)
message=awstats test
action=action1
</rule>

<rule>
ip dst(www)
tcp dst(80)
tcp nocase(cmd.exe)
message=cmd.exe test
action=action1
</rule>

<rule>
ip dst(www)
tcp content(qqporta)
message=qqporta test
action=action1
</rule>

Quando o HLBR lê as regras, ele dá a cada uma um número começando de 0.
Então, basicamente:

Para cada pacote que o HLBR testa com estas regras, ele vai executar os passos a seguir. Tenha em mente que os testes vão acontecendo à medida em que o pacote vai sendo decodificado; primeiro entra em ação o decodificador de pacotes IP (IP decoder), que verifica se o pacote é um pacote IP. Se for, ele executa os testes apropriados. Logo em seguida ele executa os demais decodificadores que estão ligados ao IP (TCP e UDP), e assim por diante. Logo, as regras serão executadas assim:

  1. Logo depois do IP decoder verificar que se trata de um pacote IP, os testes relacionados a este decoder serão executados. No caso, há apenas um teste, que é utilizado pelas três regras acima: "ip dst(www)", que significa "verifique se o endereço IP de destino do pacote faz parte da lista de IPs www". O HLBR verifica isto e segue adiante.
  2. Logo depois o decodificador TCP irá verificar que se trata de um pacote TCP. Então, é executado o teste 'tcp dst'. Duas regras usam este teste: 0 e 1.
  3. O teste 'tcp dst' nas regras 0 e 1 diz a mesma coisa: "pacotes para a porta 80" ("tcp dst(80)"). Ele então faz este teste.
  4. Agora ele testa outro tipo de teste: 'tcp content'. Duas regras usam ele: 0 e 2.
  5. O teste 'tcp content' nas regras 0 e 2 diz: "awstats" e "qqporta". Ele vai testar todas as strings possíveis usadas em todas as regras que tinham um teste 'tcp content'.
  6. Segue para o teste 'tcp nocase'...

Depois disso ele passa para o teste 'tcp nocase', e segue adiante, repetindo este processo. Ou seja: as regras não são processadas por inteiro, mas partes das regras são processadas à medida em que o HLBR passa pelos diferentes testes.