Proteção DDOS simples para você APIS

Instale NGINX e Fail2ban

$ sudo apt install nginx fail2ban
2. Crie uma configuração simples do nginx que usa como proxy sua API

$ sudo nano / etc / nginx / sites-enabled / default

deletar tudo. copie cole este aqui

server {
listen
80;
listen
[::]:80;
server_name _
;
location
/api_proxy/ {
proxy_pass http
://localhost:9090/api/v1/;
proxy_buffering off
;
}
}

Onde localhost: 9090 / api / v1 / é seu servidor local, node, go, java, qualquer que seja

Teste se tudo funciona chamando http: // server_ip / api_proxy /

Agora que resolvemos isso, a próxima etapa é configurá-lo

Configure o nginx com limitação de taxa

Limitação de taxa, que pode ser usada efetivamente para limitar a quantidade de solicitações que um usuário pode fazer em um determinado período de tempo.

A limitação de taxa pode ser usada para fins de segurança e pode ajudar muito a proteger nosso site contra ataques DDoS, limitando a taxa de solicitação de entrada a um valor típico para usuários reais e (com registro) identificar os URLs alvo. Agora que temos o registro, podemos criar um filtro em fail2ban, mas vamos testar a limitação de taxa primeiro.

Atualize a configuração do nginx para

limit_req_zone $request_uri zone=by_uri:10m rate=1r/s;
server
{
listen
80;
listen
[::]:80;
server_name _
;
location
/api_proxy/ {
limit_req zone
=by_uri burst=5;
proxy_pass http
://localhost:9090/api/v1/;
proxy_buffering off
;
}
}

Teste se tudo funciona chamando http: // server_ip / api_proxy / e aperte o botão REFRESH o mais rápido possível. Você deve ter o serviço indisponível de vez em quando

Configurar fail2ban

crie um novo arquivo de filtro

nano/etc/fail2ban/filter.d/nginx-req-limit.conf

com o seguinte conteúdo:

# Fail2Ban configuration file 
#
# supports: ngx_http_limit_req_module module
[Definition]
failregex
= limiting requests, excess:.* by zone.*client: <HOST>
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT #
ignoreregex
=
cp
/etc/fail2ban/jail.conf /etc/fail2ban/jail.local

e adicione o seguinte no final

[nginx-req-limit] 
enabled
= true
filter
= nginx-req-limit
action
= iptables-multiport[name=ReqLimit, port=”http,https”, protocol=tcp]
logpath
= /var/log/nginx/*error.log
findtime = 600

bantime = 20

maxretry = 10
restart fail2ban $sudo service fail2ban restart

Experimente alguns testes e verifique

fail2ban-client status nginx-req-limit

Depois disso, você pode aumentar o tempo de banimento para algo como: 7200 e aumentar o número de solicitações por segundo no nginx para 10 / s (ou qualquer valor que seja adequado para você)

Parabéns! Agora, esses hackers não vão derrubar sua API.
Você economizou $ 20 por mês para o Cloudflare 🙂