Como saber se você está sendo atacado com Denial of Service?
Os ataques do tipo Denial of Service são difíceis de mitigar, uma vez que eles geralmente se passam por conexões normais e tráfego normal, mas de forma abundante, até que o servidor não tenha mais recursos para resolver as solicitações e o serviço ficar indisponível.
Uma das maneiras de você verificar se há conexões demais e de onde elas vem é com o comando netstat.
A maneira mais simples é listar as conexões com o comando netstat -an
$ netstat -an
Conexões Internet Ativas (servidores e estabelecidas)
Proto Recv-Q Send-Q Local Address Foreign Address State
cp 0 0 0.0.0.0:11211 0.0.0.0:* OUÇA
tcp 0 0 0.0.0.0:80 0.0.0.0:* OUÇA
tcp 0 0 0.0.0.0:22 0.0.0.0:* OUÇA
tcp 0 0 0.0.0.0:443 0.0.0.0:* OUÇA
tcp 0 0 127.0.0.1:11211 127.0.0.1:51898 ESTABELECIDA
tcp 0 0 127.0.0.1:11211 127.0.0.1:51570 ESTABELECIDA
tcp 0 0 127.0.0.1:11211 127.0.0.1:53800 ESTABELECIDA
tcp 0 0 127.0.0.1:53800 127.0.0.1:11211 ESTABELECIDA
tcp 0 0 127.0.0.1:11211 127.0.0.1:52002 ESTABELECIDA
Mas isso é difícil de contar, pois as conexões de ataque de negação de serviço são rápidas.
A opção viável, ainda com o comando netstat é:
$ netstat -ntu | grep ESTAB | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr
34 127.0.0.1
1 50.31.164.148
1 50.31.164.147
1 50.31.164.146
1 35.155.143.94
1 10.8.0.6
Desta forma esse comando irá contar as conexões estabelecidas por endereço IP de origem.
Você também pode fazer uma alteração no comando acima, para listar por exemplo somente as conexões na porta 80:
$ netstat -lan|grep :80|awk {‘print $5’}|cut -d: -f 1|sort|uniq -c|sort -nk 1
1 0.0.0.0
1 169.254.169.254
2 127.0.0.1
64 149.56.180.254
Neste exemplo, esse servidor está sofrendo um ataque de SYN_SENT, vindo do ip 149.56.180.254 com 64 conexões, que pode ser confirmado através do netstat:
netstat -an|grep 149.56.180.254
tcp 0 0 172.30.1.187:80 149.56.180.254:38165 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:5557 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:3605 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:18728 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:35138 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:23965 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:41358 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:44263 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:52759 SYN_RECV
Neste caso, podemos levantar uma regra de IPTABLES para fazer um DROP de todas conexões vindas deste endereço:
# iptables -I INPUT -s 149.56.180.254 -j DROP
Rodando o netstat novamente podemos observar que os pedidos de conexões SYN se foram:
# netstat -plan|grep :80|awk {‘print $5’}|cut -d: -f 1|sort|uniq -c|sort -nk 1
1 0.0.0.0
1 169.254.169.254
2 127.0.0.1
Gostou deste post? Conheça o curso de Firewall Iptables e o Treinamento online de Pfsense, da Certificação Linux
Aprenda muito mais sobre Linux em nosso curso online. Você pode fazer a matrícula aqui com trial de 7 dias grátis. Se você já tem uma conta, pode acessar aqui.
1 Comentário
Muito bom mesmo ótimo me ajudou muito