Deve haver um firewall separado em algum lugar na frente do seu servidor da web. Você quer impedir que as solicitações de lá cheguem ao seu servidor, de modo que, no que diz respeito ao IP, o servidor não existe mais.
Alguns roteiros infantis em Delhi, na Índia, tentam hackear nosso site desde ontem à noite. Ele escreveu um script de navegador que faz solicitações de nosso servidor em loops aninhados, tentando tudo sob o sol.
Ele não está chegando a lugar nenhum e não está conseguindo ultrapassar nossas defesas básicas (mas ele está preenchendo nossos arquivos de log).
Estamos enviando de volta um 403 Unauthorized
para seus pedidos quase tão logo eles entram, mas quanto mais rápido bloqueamos seus pedidos, mais rápido o script é executado.
Gostaríamos de introduzir um "atraso" de algum tipo antes de enviar de volta a resposta 403. Quanto mais tempo, melhor.
Pergunta: Como podemos atrasar tentativas de invasão sem afetar o resto do site?
403 Unauthorized
ou eventualmente expirar, então provavelmente poderíamos fazer uma espera indefinida / infinita. Deve haver um firewall separado em algum lugar na frente do seu servidor da web. Você quer impedir que as solicitações de lá cheguem ao seu servidor, de modo que, no que diz respeito ao IP, o servidor não existe mais.
Existem sistemas de detecção de invasão reais grandes e pequenos que farão isso automaticamente dependendo de vários filtros, honeypots e outros mecanismos
Por exemplo, consulte fail2ban , que pode ser configurado para realizar ações com base na análise de registros.
Desta forma você pode
Existem outras ferramentas maiores, veja a seção também na wikipedia.
Como sua pergunta está marcada como asp.net, assumo que sua plataforma de servidor é o Windows. Ainda assim, se usar o linux firewall é uma opção, você pode tentar o seguinte
Esse firewall pode ser executado em hardware extremamente modesto - pense até mesmo em algo como roteadores linksys (veja aqui ) para larguras de banda de links muito decentes.
Se eles vierem de um endereço IP específico ou bloco de endereço, talvez você queira adicionar uma rota blackhole a ele:
ip ro add blackhole 10.69.96.0/24
ip ro flush cache
Você também pode fazer isso usando uma regra iptables, mas perceba que as regras do iptables são atravessadas linearmente, então se você começar a adicionar regras do iptables para cada descuido que aparecer, você pode começar a consumir muita CPU. As tabelas de roteamento são otimizadas para lidar com muitas entradas. Por exemplo, uma das minhas caixas tem 350 mil entradas em sua tabela de roteamento sem nenhum problema. Mas se eu tivesse 3 regras de iptables, a caixa quase certamente cairia.
Se você tentar fazer algo em que seu aplicativo durma por muitos segundos nessas conexões, poderá acabar amarrando recursos suficientes para que solicitações legítimas não obtenham recursos.
Você não quer atrasá-lo porque atrasá-lo incorretamente derrubará seu site como se estivesse sob um ataque DoS porque seus threads estarão "ocupados" atendendo a solicitações dessa pessoa. O que você quer fazer é bloquear seu IP e acabar com isso. Não há razão para atrair a pessoa que o faz.
O que você procura é o módulo mod_evaisve do Apache.
Em distros baseadas em Debian, instale-o usando
apt-get install libapache2-mod-evasive
CentOS / RHEL
yum install mod_evasive
O mod_evasive mantém um controle sobre as solicitações que chegam ao Apache e proíbe o IP usando iptables que passam o valor limite. É uma ferramenta definitiva contra ataques DoS baseados em HTTP e até ataques Distributed DoS quando você é visado por uma enorme botnet com milhares de IPs diferentes.
Ele é executado como um módulo do Apache carregado durante o tempo de execução e não como um daemon separado.
Embora um invasor inteligente com controle de uma enorme botnet ainda possa derrubar o seu servidor web, cronometrando as solicitações enviadas por cada zumbi na rede de bots, de forma que nenhum dos IPs ultrapasse o valor limite.
Nesse caso, você deve usar o IDS baseado em anomalias e provavelmente treinar o sistema por conta própria. Mas é altamente improvável que isso aconteça, a menos que você tenha alguns inimigos de verdade ou alguém com uma agenda corporativa.
Se você estiver usando o linux, use iptables para limitar o cara a gostar de 1 byte / s com grandes atrasos e fazê-lo aceitar para sempre para obter uma solicitação. Se for distribuído, isso não ajudará muito.
Não sei ao certo como você faria isso no Windows, mas você pode encontrar algumas opções semelhantes no firewall do seu roteador ou hardware, se tiver uma.
EDIT: De acordo com o acima, isso é mais como uma questão de falha no servidor.
Se o endereço IP do cara for bastante constante, você pode criar um HttpModule personalizado, conectá-lo por meio de uma alteração no arquivo web.config e ter um atraso quando for reconhecido como esse endereço IP. Ou você pode enviar-lhe de volta alguns códigos 404 ou redirecioná-lo para outro lugar.
Você sabe que eles estão na Índia. Seu site tem usuários indianos significativos que impediriam simplesmente o bloqueio de todo o intervalo de IPs no nível do firewall em incrementos até que o fluxo fosse interrompido? Certamente não é uma solução firme, mas se você está lidando apenas com um típico 'script kiddie', deve ser o suficiente para desencorajá-los e enviá-los para outro alvo.
Melhor ainda, se for de um IP, você pode responder com seu próprio ataque de negação de serviço:)
Além da resposta recebida, você desejará salvar sua documentação (registros, rastreios) e fornecê-los ao seu provedor de serviços. Este é o mais eficaz durante o incidente, pois o seu provedor pode testemunhar a incursão. Mesmo que você tenha sucesso em suas medidas, é importante restringir outras tentativas e ajuda seu provedor a escalar uma solicitação para o provedor de serviços do invasor. sem dúvida, a ação mais eficiente é que o provedor do invasor recuse o serviço ao seu cliente, o invasor identificado.
se você é um programador, pode trabalhar com o evento .net Begin_Request e colocar seu "sleep" lá