Os filtros de pacotes ainda se dividem em
stateless, muito mais conhecido como filtro estático, e os filtro
statefull, também chamado de filtro dinâmico.
Um filtro stateless ou estático é aquele que precisa tomar a sua decisão baseado unicamente no pacote atual. Tal filtro não tem possibilidade de "lembrar-se" do passado e nunca poderia tomar uma decisão como "vou bloquear este pacote porque já passaram 100 deste ip no último minuto". Para que ele fizesse isto, teria que armazenar a informação de que passaram-se 100 pacotes em um minuto, e o stateless não tem esta memória.
A única informação que um stateless pode usar para decidir pelo bloqueio ou não de um pacote é baseado em informações que estão presentes neste pacote. Informações estas que podem ser número do IP, da porta, do protocolo ou qualquer outra informação disponível nos cabeçalhos do pacote que se está filtrando.
Já os filtros statefull ou dinâmicos permitem tomar sua decisão baseada em decisões ou pacotes anteriores. Com um filtro statefull é possível tomar uma decisão como"vou deixar este pacote de dados passar porque a origem completou corretamente o handshake TCP". Para que ele tome esta decisão é necessário que ele tenha visto o handshake e armazenado esta informação para lembrar-se dele posteriormente (Figura 3).
Filtros de pacotes incorporados a roteadores comerciais geralmente são apenas stateless. O motivo disto é fácil de explicar, já que são roteadores e não firewalls. Todo o hardware foi construído para rotear e rotear bem. Também porque os filtros statefull requerem muito mais recursos de hardware, seja de memória para armazenar as informações de pacotes anteriores, seja de processamento para recuperar esta informação consultando tabelas. Filtros statefull são mais lentos e consomem mais recursos e mais facilmente podem tornarem-se gargalos.
Já o iptables é extremamente statefull. Extremamente porque muita coisa pode ser feita baseada em sua capacidade de memorização de pacote, como:
- consultar sua tabela para ver se este pacote pertence a uma sessão ativa (módulo state);
- contar quantos pacotes passam por determinando intervalo de tempo (módulo limit);
- armazenar os ips de origem e contar quantos pacotes vieram deles (módulo recent);
O iptables possui recursos que podem até instigar a curiosidade sobre sua necessidade. Pode-se até mesmo decidir recusar, aleatoriamente, uma porcentagem dos pacotes que entram.