Configurações limitadoras de taxa razoável com firewall PF

2

Eu tenho as seguintes configurações no meu pf.conf para dissuadir clientes abusivos (eu recebo alguns por dia que obviamente estão apenas raspando o conteúdo indiscriminadamente e atrasando tudo):

pass in on $ext_if proto tcp to { $loadbalancer1_int } port $web_ports flags S/SA keep state (max-src-conn 80, max-src-conn-rate 200/5, overload <web_flood> flush)
pass in on $ext_if proto tcp to { $loadbalancer2_int } port $web_ports flags S/SA keep state (max-src-conn 80, max-src-conn-rate 200/5, overload <web_flood> flush)

Infelizmente, alguns dos meus clientes estão ficando bloqueados. Não sei o que esses clientes estão fazendo para acionar esse IO de rede. Eu continuo aumentando os valores e eles continuam ficando bloqueados. Não são esses valores (80 conexões e 200 conexões dentro de 5 segundos) dentro do que geralmente seria considerado "abusivo"?

    
por onyxrev 14.02.2013 / 23:14

1 resposta

1

"abusivo" é totalmente relativo, mas em termos de acesso à web é quase certo que a captura de um limite de taxa no número de conexões / segundo atraia usuários legítimos.

Tenha em mente o que acontece quando você visita uma página da web

  1. Uma conexão HTTP é aberta e a página principal (digamos, index.html ) é baixada.
  2. Seu navegador analisa index.html e descobre de que outros recursos precisa:
    • CSS
    • Javascript
    • Imagens
    • Coisas em um ou (mais "páginas principais")
    • Provavelmente mais coisas que estou esquecendo
  3. Seu navegador pega todos esses itens.
    Pode fazer isso de duas maneiras "
    • Em série: Fazendo o download de cada item em sequência (uma conexão por vez)
    • Em paralelo: Download de vários itens de uma vez (várias conexões abertas).

O keepalive HTTP teoricamente mantém o número de ciclos connect () inativos, mas alguns navegadores podem não suportar HTTP keepalive (ou podem decidir não usá-lo por qualquer motivo), caso em que cada item sendo baixado significa que outra conexão é aberta o servidor.

Uma página da Web é, portanto, potencialmente um grande número de conexões - fácil o bastante para desarmar seu firewall, especialmente se você tiver mais de um usuário em um IP ou se seus usuários navegarem ativamente.

Em vez de bloquear completamente, você tem algumas opções:

  1. Marque os pacotes correspondentes em pf e limite a largura de banda com altq .
    Isso não é realmente ideal - você ainda vai pegar usuários legítimos - mas pelo menos eles são limitados (lentos), não bloqueados (quebrados).

  2. Use o mod_evasive , mod_security ou similar
    Esses módulos são mais trabalhosos para o Apache, mas são mais configuráveis e ajudam a evitar a captura de usuários legítimos.

por 14.02.2013 / 23:24