Como posso evitar um DDOS não intencional executando o ColdFusion 8 com o IIS 6?

1

Tivemos uma interrupção interessante hoje em um dos sites de nossos clientes. Do nada, o site estava inacessível. O site funciona sozinho em um servidor físico Windows 2003 R2 dedicado (provavelmente exagero, eu sei, mas isso é uma discussão para um dia diferente). Depois de reiniciar o IIS e o ColdFusion Application Service, o problema voltou várias vezes. Meu pensamento inicial foi de que era um problema de DNS, o que acontece ocasionalmente - a última vez que aconteceu foi depois do furacão Sandy quando nosso ISP estava fora, e tivemos que fazer algumas alterações nas configurações de rede. Mas não foi um problema de DNS. Meu segundo pensamento foi que era um ataque DDOS, mas há muito pouca razão para alguém querer derrubar esse site. Quando ligamos para o nosso ISP, o operador do outro lado notou que o tráfego estava aumentando significativamente. Como se viu, o cliente acidentalmente causou um DDOS no site, depois de fazer o FTP de um arquivo de vídeo muito grande, e em massa enviou um link para ele. Centenas de pessoas clicaram no link e deixaram o site de joelhos.

Sou principalmente um programador de sites, mas às vezes preciso contribuir para a administração do servidor às vezes. Infelizmente, sou residente do ColdFusion e do IIS, mas não tenho muita experiência com esse problema. Quais são alguns passos básicos que posso tomar para evitar que isso aconteça no futuro, já que nem sempre podemos controlar quais arquivos o cliente envia ao site.

Aqui estão algumas ideias que tive, mas não tenho certeza do impacto:

  1. Limite o número de conexões no IIS.
  2. Coloque arquivos de mídia em um servidor separado (como um site da Amazon, etc.).
  3. Solicitações de arquivos deste tipo atualmente por trás de um script de servidor (ou seja, /www.site.com/viewFile.cfm?fileId=1424545, em que fileId faz referência a um arquivo fora da webroot) que registra solicitações e envia o arquivo para o navegador usando CFCONTENT. Eu poderia editar esse script para rejeitar solicitações quando elas excederem um determinado valor em um determinado período de tempo (por exemplo, um total de 5 MB pode ser acessado globalmente 10 vezes em uma hora). Isso pode causar frustração a alguns usuários, mas, se centenas de usuários estiverem tentando visualizar o arquivo, o site irá falhar de qualquer forma, como aconteceu hoje, o que é muito mais frustrante, já que não há mensagens "bonitas" explicando por que não pode chegar ao arquivo.
  4. Atualize as configurações de ajuste de solicitação no ColdFusion Administrator. Maximum number of simultaneous Template requests está atualmente definido para 20. Eu poderia reduzir esse número para algo como 5 apenas para evitar ocorrências como essa, mas isso provavelmente teria um efeito adverso no uso normal do site.

Estou aberto a qualquer sugestão, pois continuo minha pesquisa para relatar ao CTO as melhores opções, para que possamos implementar uma solução.

Obrigado.

UPDATE: Relatório de uso do tempo em torno da interrupção:

    
por Eric Belair 30.11.2012 / 03:53

2 respostas

1

Para grandes itens estáticos, mova-os para um CDN como o Amazon CloudFront.

    
por 30.11.2012 / 16:23
0

Aqui está a solução com a qual estou trabalhando agora:

Todos esses links para carregar documentos vão para uma página, com informações adicionais anexadas na string de consulta:

/www.site.com/viewFile.cfm?fileId=1424545

Eu atualizei este arquivo para simplesmente conter um iframe que aponta para um site separado que exibe o arquivo de mídia:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>

    <style type="text/css">
        html {
            overflow: hidden;
        }

        iframe {
            position: absolute;
            left: 0px;
            top: 0px;
            width: 100%;
            height: 100%;
            border: none;
        }
    </style>
</head>
<body>
    <cfoutput>
    <iframe src="http://media.site.com/index.cfm#CGI.PATH_INFO#"frameborder="0"></iframe>
    </cfoutput>
</body>
</html>

Esse site separado (media.site.com) reside em um servidor diferente (que é servido por uma linha ISP separada, que na verdade é uma linha de 15Mbps, mas também lida com outro tráfego para a empresa) e index.cfm nesse site contém toda a lógica que residia anteriormente na página de destino atual e exibe o arquivo no diretório local, que sincroniza os arquivos de mídia de onde eles residem originalmente.

Um pouco hack-ish, mas faz o trabalho. Dessa forma, se os usuários sobrecarregarem as solicitações de arquivos de mídia, apenas o site / servidor / linha IPS ficará inativo, mas o site original permanecerá "operacional", para que os usuários ainda possam executar funções normais, mesmo que possam veja os arquivos de mídia.

    
por 30.11.2012 / 19:13