Proteja-se de ataques DoS/DDoS mitigando com FastNetMon e anuncie os prefixos atacados (blackholes) para sua operadora, usando Mikrotik :-)

Neste tutorial vamos aprender como identificar os ataques Dos/DDoS e anunciar os prefixo atacados (ou atacantes) de seu AS em envia-los para uma blackhole, e repassar os mesmo para sua operadora. (Acordo)

Vamos utilizar o FastNetMon que é um analisador de carga DoS/DDoS de alto desempenho, construído sobre vários mecanismos de captura de pacotes (NetFlow, IPFIX, sFlow, AF_PACKET, SnabbSwitch, netmap, PF_RING, PCAP).

Farei a instalação do FastNetMon no Debian 10 (Instalação Limpa)

Você irá precisar configurar o envido dos Flows em seu roteador de bora. Vou deixar aqui um exemplo de como configurar com o routerOS/Mikrotik.

Cenário Ex.:
AS – 15169
172.31.31.1/30 – RouterOS/Mikrotik
172.31.31.2/30 – Servidor FastNetMon

Ative o envido dos flows em seu routerOS/Mikrotik, selecionando as interfaces de entrada (WAN) ex suas operadoras, PTTs (No exemplo sfp1,VLAN.1234-PTT) observe que não irei usar a porta padrão 2055 e sim 62055.

Instalação FastNetMon

Antes de iniciar a instalação do seu do seu servidor em nosso exemplo estou usando o IP 172.31.31.2/30, porém eu NUCA recomendaria você fazer NAT em seu roteador de borda ainda mais ele sendo um Mikrotik, a performasse estaria comprometida, quem tem NAT estude de uma pesquisada sobrem IPv4 Fast Path, IPv4 Fasttrack, Connection Tracking. Quando você compreender esses “caras” e aplicar dentro de sua rede, vai descobrir que o mikrotik não é tão ruim quanto falam por ai kkkkk. (Quem sabe um dia escrevo algo sobre), mas voltando… Porque utilizar o IP 172.31.31.2 então? Primeiramente por que ele não é acessível pelo mundo, logo não pode ser atacado, mas por outro lado se ele não tiver internet você não poderá por exemplo configurar para receber uma notificação (que neste tutorial vou explicar como fazer para enviar alertas no telegram) então como proceder, se você manja já deve ter pensado em uma solução. No meu caso eu sempre divido a a rede, o que é borda é borda, nunca ligo um servidor nela! O ideal é termos um router apenas para os servidores, ou então ligado quem sabe no concentrador de NAT, então nesse caso você pode fazer uma NAT para seu servidor, na pior das hipóteses use um ip válido. Você pode também fechar uma sessão multihop. Bom de seus pulos, ai já é engenharia de redes! 😛

O pacote do fastnetmon já se encontra no repositório do debian, juntamente algumas pacotes extras que vamos utilizar em seguida.

Adicione todos os prefixos de se AS, são esses os IPs que ele fará analise.

Exemplo

Ajustes as configurações

Exlplicarei nos comentários

O fastnetmon sempre que identificar um ataque irá executar notify_script_path, identificando o IP da sua rede que está sofrendo (incoming) o ataque ou que está cometendo (outgoing) o ataque. Ele NÃO irá identificar os IPs de origem. Em um futuro quando tivermos mais testes elaborados eu juntamente com o Gabriel Vargas Padilha estamos estudando os logs e através desses com um script (python) analisarmos a fundo vamos armazena-los em uma base de dados bem como identificar (porem no momento ainda tem falsos positivos), mas a ideia e saber a origem e através de um outro script notificar os IPs de origens enviando os logs para o dono do IP para que ele tome suas providencias, e por que não anunciar também nas blackholes.

Criaremos então nosso arquivo chamado pelo opção “notify_script_path”, mas antes vamos criar um script para enviar notificações (mensagens) e arquivos pelo Telegram. Vai ser necessário criar um bot do telegram para o uso do mesmo. Se você não sabe como criar um Bot para telegram veja como fazer o mesmo no início do tutorial que já postei de como enviar alertas pelo zabbix, Zabbix 4.2 enviando alertas no Telegram via Bot (Debian 10), lá no ínico do tutorial explica como criar o bot, pegar o token e como descobrir o ID de um usuário ou grupo.

Não esqueça de alterar o TOKEN para o do seu bot.

Como usar?

Bot funcionando, criamos então uma pasta onde os logs de ataques que terminaram vão ser movidos, e o script que será executado sempre que um ataque for identificado (BAN/UNBAN).

Restarte o fastnetmon

Instalação do exaBGP

Iremos utilizar o exaBGP fechar nossa conexão BGP para realizar os anúncios dos prefixos atacados.

Configure o arquivo para fechar o peer.

Antes de iniciar o exaBGP você precisa criar um peer e alguns filtros em seu roteador de borda, no nosso exemplo routerOS/Mikrotik.

Filtros:
Crie um filtro de entrada que todas as rotas aprendida do fastnetmon seja setadas como blackhole, e não ensine nada para ele.

Peer:
Atenção para a instance que deve estar selecionada corretamente (use a mesma que você usa com sua operadora). Caso seu servidor não esteja com um conexão direta a borda poe usar multihop=yes, como comentado anteriormente.

Para não ter que carregar na mão o exabgp, criaremos um script para inicialização do exaBGP automaticamente.

De permissão para execução

Crie o arquivo de serviço para o programa exabgp.

Adicione

Recarregue a nova definição do serviço:

Ative o novo serviço, e verifique se o mesmo foi ativado

Reinicie seu servidor

Verifique se o exabgp foi carregado na inicialização, e seu peer estabilizou.

Para iniciar/reiniciar os exabgp pode usar os seguintes comandos:

Para acompanhar a coleta de flows use o comando:

Você vai encontrar tutoriais como integrar com grafana…. mas para mim isso é perfumaria, o mais legal é ver o processamento sem frescura, e saber que pode ser implementado com uma minimo de hardware, essa mesma analise de flows do gráfico assim que está na casa dos 3GBps de tráfego temos o seguinte uso do hasrdware:

Se quiser fazer algum teste, para anunciar uma rotas manualmente user os seguintes comandos:

E para remover:

Acordo de communities com sua operadora

Não vai adiantar muito você identificar o IP que está tomando o ataque se você não repassar o mesmo para sua operadora e ela o mesmo. Como você identificou o IP que esta recebendo o ataque (ou ate mesmo atacando) o mesmos vai subir na sua tabela de rotas como tipo blackhole, logo seu roteador não vai mais responder para esse IP. Sim esse IP não terá mais internet (clientes, servidor….) sim não terá! rsrs, por isso é importante receber o alerta, para saber qual medidas realizar. Nas configurações do fastnetmon existe um arquivo de lista branca /etc/networks_whitelist se desejar você pode incluir os IPs que não quer que o fastnetmon analise (logo não ira bani-lo) porém você também não vai saber se ele foi atacado, eu prefiro deixar esse networks_whitelist vazio e criar então um filtro no roteador para descartar os IPs que não quero que ele jogue na blackhole, assim eu sou notificado, e se o bicho realmente estiver pegando eu deixo passar o ip do servidor e penso no que vou fazer hehehe.

As grande operadoras normalmente tem uma politica de communities que aceita você repassar prefixos /32 com a communities onde em quase todos os casos é AS:666 ou 65xxx:666, então o que você precisa fazer é primeira mente entrar em contato com a mesma para pegar essas informações, caso ela não saiba do que você está falando manda esse o link deste tutorial 😉

Bom, vamos imaginar que sua operadora senha o AS28146 (olha o marketing ai de graça/patrocina eu MH) e seu bloco seja 200.200.200.0/22, como ficaria seu filtro no seu MK?

Explicando a primiera linha:
action=accept –> aceita
chain=AS28146-IPv4-OUT –> nome do seu filtro
bgp-communities=65001:666 -> todas as rotas marcadas com a communities=65001:666 (as q o fastnetmon nos enviou)
prefix-length=32 –> com prefixo apenas /32
set-bgp-communities=28146:666 –> seta a communitie que você verificou com sua operadora

Se você quiser descartar algum IP, ex um servidor (como comentei anteriormente) apenas para a operadora você precisa colocar antes das regras (antes da linha 1). Ex servidor 200.200.200.7 quero descartar para não cair na blackhole:

Agora se você simplesmente não quer que seja bloqueado de forma alguma é só add no filtro do peer com o fastnetmon.

Seria interessante fazer alguns teste de ataques (coisa pequena) de dentro da sua rede e de fora, escolha uma IP que não esteja em uso para tal! Para realizar esse ataque user o a ferramenta criada pelo ekovegeance:
https://github.com/ekovegeance/DDOS

Em um servidor/desktop linux vai precisar ter instalado os pacotes bash sudo curl netcat hping3 openssl stunnel nmap whois dnsutils.
Baixe os arquivos, extraia entre em sua pasta e execute o arquivo ddos.

Gostou? Se sentindo mais seguro agora?

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Abraço!

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

9 Resultados

  1. Roger Cabral disse:

    @Rudimar, show de bola!!!! Deu tudo certo! Muito bom mesmo!

    Só me esclarece uma duvida, está dando erro para fechar a sessão BGP. O Roteador me retorna o seguinte log:

    Failed to open TCP connection: Connection Refused
    RemoteAddress- 172.16.0.110 #IP DO FASTNETMON

    O meu caso é uma sessão MultiHop pelo ip de Loopback. Sabe o que pode ser?

  2. Opa amigo pode me passar seu contato então

  3. Giuliano kneipp Fernandes disse:

    amigo excelente post, parabéns pelo trabalho, no meu caso a única coisa que não funcionou foi o envio de mensagens pelo telegram, será que deixei passar alguma coisa ?, coloquei o token e as ids como no tutorial mais a mensagem não vai quando testo
    para ficar mais claro vou postar meu arquivo de configuração
    obrigado forte abraço

  4. Douglas Rodrigues disse:

    Tutorial fantástico! Tenho me tornado um profissional melhor a cada dia com suas dicas e tutorias!
    Já tinha essa solução implementada, porém essa questão de notificação é algo bem interessante.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *