Bloquear solicitações no lighttpd feitas com HTTP / 1.0 e permitir somente HTTP / 1.1

1

Eu tenho um servidor web lighttpd que oferece páginas geradas pelo PHP. Este servidor está enfrentando muito tráfego devido a um ataque de bot DDoS, e eu estou procurando uma maneira de bloquear ou mitigar alguns deles.

Até onde eu sei, o lighttpd oferece a possibilidade de bloquear solicitações via endereço IP remoto, por exemplo, colocando

$HTTP["remoteip"] == "12.34.56.0/24" {
  url.access-deny = ( "" )
}

em lighttpd.conf , todos os pedidos provenientes do intervalo IP 12.34.56.0 - 12.34.56.255 seriam bloqueados.

No entanto, devido à natureza do DDoS, não é possível bloquear endereços ou intervalos IP únicos, porque eles mudam com bastante frequência.

Ao examinar o log de acesso, descobri que a maioria dos pedidos de bots parece usar o antigo protocolo HTTP / 1.0, enquanto a maioria dos tráfegos legítimos usa HTTP / 1.1.

Então, minha pergunta é: Existe uma maneira de bloquear / negar todas as solicitações que chegam via HTTP / 1.0 (e permitir aquelas via HTTP / 1.1) no lighttpd?

Eu não encontrei essa possibilidade na documentação de configuração do lighttpd oficial.

Notas:

  • Estou ciente de que algum tráfego legítimo também pode usar o HTTP / 1.0, mas seria OK bloquear esses também.
  • As solicitações de bot não parecem usar um padrão comum para agentes de usuário ou referenciadores de HTTP, portanto, usá-los com um padrão de expressão regular não parece ser uma opção.
por Striezel 22.08.2018 / 08:35

1 resposta

1

Em vez de fornecer uma solução para lighttpd , recomendo que você use o fail2ban presente em todos os sistemas baseados em Unix. Ele está observando as alterações nos arquivos de log e analisa-as de acordo com as regras de expressões regulares e, no caso de padrão correspondente (HTTP / 1.0 no seu caso), bloqueará no nível do firewall do sistema, que é mais eficaz para bloquear conexões indesejadas.

Além disso, se você estiver tendo um tráfego anormal no qual você vê mais solicitações mal-intencionadas do que as solicitações normais, adicione a seguinte regra de firewall para retardar o ataque de DDoS

iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 127 -j ACCEPT

Se você ainda quiser bloquear o HTTP / 1.0 em lighttpd level, tente corresponder ao protocolo HTTP assim:

env.SERVER_PROTOCOL == "HTTP/1.0" {
  url.access-deny = ( "" )
} 

(A solução não foi testada desde que mudei para nginx há muito tempo, mas o AFAIR pode funcionar.)

    
por 22.08.2018 / 09:25