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? É importante você saber que o IDs de grupos tem um “-” no inicio do ID, já usuários direto não.

ex: telegram -f “-12345689” /var/log/syslog syslog “Logs do sistema para um grupo”

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...

32 Resultados

  1. Ricardo disse:

    Oi, feito todo o procedimento, mas no fastnetmon_client o tráfego é muito baixo, quase insignificante.
    Tem algo que eu possa checar?

  2. Luís Gustavo disse:

    Bom dia, parabéns pelo artigo! Tenho certeza que está ajudando muita gente por aí! Estou com um problema no qual não consigo achar uma solução ou encontrar o que pode estar faltando. Já revisei toda instalação e configuração do FastNetMon com o ExaBGP.

    Fecho a sessão BGP com ele normalmente e rodo os comandos para banir e tirar o banimento e o mesmo responde perfeito. Quando deixo ele realizar sozinho, ele detecta o ataque, bane porém não anuncia para o BGP.

    O que pode estar diferente nas minhas configurações? Muito obrigado.

    • Verifica, e o exabgp_next_hop tem q ser o ip do seu servidor.

  3. Néia disse:

    Boa tarde, para uma sessão Multihop no ExaBGP precisa de algum parâmetro?

  4. EDVALDO ROCHA disse:

    Obrigado pelo tutorial Rudimar !!
    Uma duvida, eu consigo enviar um /24 por exemplo mesmo sendo atacado apenas 1 IP desse bloco ele enviar o /24 para uma operadora que faz mitigação de Ddos ?

    Exemplo: IP 200.200.200.5/32 sendo atacado, entao ele envia 200.200.200.0/24 para operadora que faz a mitigação.

  5. Jonathan Fernandes disse:

    Estou recebendo ataques frequentes em casa por conda do meu servidor de jogo. O atacante usa um site de Stress que disponibiliza ataques grátis de até 1GBs. Eu consigo me defender desses ataques usando o FastNetMon + Net Flow + ExaBGP?

  6. DuhBatista disse:

    Boa tarde

    esse comando não funciona telegram -m “12129999” “Notificação” “Ataque identificado”
    Alguem com essa dificuldade ?

    • Se vc for mandar para usuário fina, edita o script e remova o “-” de chat_id=-$2 para chat_id=$2 pois usuario final não tem o “-“, alterei o script e removi o “-” agora é necessário informar o “-” quando for mensagem para grupo, atualizei o tutorial tb.

  7. Jefferson disse:

    Você diz no texto que o IP que é anunciado na blackhole não terá internet e tal, você prefere receber a notificação e verificar a situação, daí tomar uma decisão, hehe fiquei interessado no que dá pra fazer. Aqui nos utilizamos uma ferramenta para filtrar o ataque e tal só que a latência aumenta, porém o cliente fica navegando mesmo recebendo o ataque, dito isso queria saber de você o que posso fazer além disso. Parabéns pelo post!

  8. Felipe Lins disse:

    Rudimar, bom dia.
    Legal o seu artigo, trabalho com ISP há 23 anos aqui no Rio de Janeiro.
    Já evoluiu com essa parte?

    “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”

    Tenho interesse…

  9. Pablo disse:

    Rudimar, primeiramente parabéns pelo post! Gostaria de saber como vc faz para validar se a amostra que chega no servidor do Fastnetmon condiz realmente com o tráfego real ? Pergunto pois segui seu post corretamente mas em alguns momentos recebo um valor anormal (para mais) de tráfego e pps no flow que não é próximo do real que esta passando no cenário que montei em bancada.

  10. FABRICIO JOSE DA SILVA disse:

    Amigo, quando de fato o Telegram dispara as mensagem no grupo? Estou rodando alinha de teste “# echo “announce route 100.101.255.200 next-hop 172.31.31.2 community 65001:666” > /var/run/exabgp.cmd
    “mas o telegram nao dispara o alerta. Ou ele so dispara mesmo quando o ataque é identificado?

  11. 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?

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

  13. 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

  14. 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.

  1. 13 de agosto de 2020

    […] a configuração do bot nela, criei um novo script com base no código que utilizei no tutorial do Fastnetmon, assim toda vez que for chamar telegram para enviar mensagem ou arquivo basta executa-lo sem […]

Deixe uma resposta

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