Como configurar o serviço de proteção contra DoS para Java 8

O serviço de proteção contra negação de serviço (DoS, na sigla em inglês) do App Engine permite evitar o esgotamento da cota de aplicativos que sofrem ataques de negação de serviço ou formas de abuso semelhantes. Adicione endereços ou sub-redes IP à lista negra para que as solicitações encaminhadas a partir deles sejam descartadas antes de chamar o código do seu aplicativo. No caso de solicitações desse tipo, nenhuma alocação de recursos será consumida, seja ela faturada ou não.

Por padrão, o App Engine envia uma página de erro genérica para os endereços na lista de proibições. Se quiser, configure seu app para enviar uma resposta personalizada.

Antes de começar

Crie um arquivo dos.xml no diretório WEB-INF do seu aplicativo. É nesse arquivo que você especificará os endereços IP e redes que entrarão na lista de proibições.

Como bloquear solicitações com listas de proibições de DoS

Faça uma lista de proibições com os endereços e as sub-redes IP que não podem ter acesso a seu aplicativo.

O dos.xml é limitado a 100 entradas. Portanto, o bloqueio de sub-redes inteiras pode ser necessário se você estiver enfrentando um ataque DoS. Essa também será uma maneira eficiente de se proteger se você descobrir que vários endereços IP da mesma rede fazem parte de um ataque de DoS contra o app.

Como criar entradas na lista de proibições de endereços IP

Para impedir que um ou mais endereços IP acessem seu aplicativo, defina esses endereços IPv4 ou IPv6 no seu arquivo dos.xml. Exemplo:

<?xml version="1.0" encoding="UTF-8"?>
<blacklistentries>
  <blacklist>
    <subnet>1.2.3.4</subnet>
    <description>a single IP address</description>
  </blacklist>
  <blacklist>
    <subnet>abcd::123:4567</subnet>
    <description>an IPv6 address</description>
  </blacklist>
</blacklistentries>

Em um ataque distribuído de negação de serviço (DDoS, na sigla em inglês), provavelmente será necessário bloquear sub-redes inteiras, em vez de endereços IP individuais.

Por exemplo, consulte a referência de dos.xml.

Depois de criar o dos.xml, é preciso fazer o upload dele para o aplicativo.

Como criar entradas da lista de proibições para sub-redes IP

Para impedir que uma sub-rede IP acesse seu aplicativo, defina-a no formato CIDR (em inglês). Use a ferramenta IP to CIDR (em inglês) para ajudar na criação de regras que usam a notação CIDR.

<?xml version="1.0" encoding="UTF-8"?>
<blacklistentries>
  <blacklist>
    <subnet>abcd::123:4567/48</subnet>
    <description>an IPv6 subnet</description>
  </blacklist
  <blacklist>
    <subnet>abcd::123:4567/48</subnet>
    <description>an IPv6 subnet</description>
  </blacklist
</blacklistentries>

Por exemplo, consulte a referência de dos.xml.

Depois de criar o dos.xml, é preciso fazer o upload dele para o aplicativo.

Como criar mensagens de erro personalizadas para solicitações na lista negra

Por padrão, é enviada uma página de erro genérica para as solicitações bloqueadas pelo serviço de proteção contra DoS. Os ataques distribuídos de negação de serviço podem envolver uma máquina infectada de um usuário legítimo. Essa página fornece uma explicação a esse usuário sobre o porquê do acesso negado.

  1. Crie um arquivo estático no diretório do aplicativo para veicular as solicitações bloqueadas pelo serviço de proteção contra DoS.

  2. No arquivo appengine-web.xml, especifique um gerenciador de erros para as respostas de DoS fornecendo o caminho para o arquivo estático e adicionando o tipo <static-error-handlers> de dos_api_denial:

    <static-error-handlers>
      <handler error-code="dos_api_denial" file="dos-response.html" />
    </static-error-handlers>
    

Como excluir todas as entradas na lista de proibições

Para excluir todas as entradas na lista de proibições:

  1. Edite o arquivo dos.xml para que contenha apenas os itens a seguir:

    <?xml version="1.0" encoding="UTF-8"?>
    <blacklistentries/>
    

    A exclusão de dos.xml não remove as listas de proibições.

  2. Reimplante o dos.xml para que as alterações entrem em vigor.

Como ver os erros de negação DoS no Console

Veja um gráfico com o número de solicitações que estão sendo negadas:

  1. Acesse o painel do App Engine no Console do Google Cloud:

    Abrir o gráfico de detalhes de erros do App Engine

  2. Ajuste o período do gráfico conforme necessário para ver os resultados.

Fazer upload da lista negra de DoS

Você pode usar o appcfg.sh para enviar configurações do DoS. Quando você faz upload do aplicativo para o App Engine usando appcfg.sh update, o serviço de proteção contra DoS é atualizado com o conteúdo do arquivo de configuração dos.xml.

Para atualizar apenas o arquivo de configuração de DoS sem fazer upload do restante do aplicativo, use o seguinte comando:

appcfg.sh update_dos [PATH_TO_CONFIG_FILE]/dos.xml

A seguir

  • Configure o Cloud Monitoring para identificar problemas rapidamente e alertar você.
  • Leia a experiência de um cliente (em inglês) sobre como ele respondeu a um ataque distribuído de negação de serviço (DDoS, na sigla em inglês), publicada em janeiro de 2013.