Fortalecendo a Resiliência da Rede: Detecção de Ataques DDoS com FastNetMon, FRRouting, Grafana e Implementação em Debian 12 com Huawei & RouterOS
Este tutorial combina e aprimora dois tutoriais anteriores do blog sobre fastnetmon, incorporando melhorias e ideias compartilhadas pela comunidade ao longo do tempo. Espero que aprecie!
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 (Community Edition) 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 no Debian 12 (Instalação Limpa). O hardware utilizado por ser bem generoso, 4CPU (se for usar o influx/grafana recomendo 8CPU) e 4GB de memoria.
Adicione contrib non-free ao repositório.
# vim /etc/apt/sources.list
Irá ficar assim:
deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free deb-src http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb http://deb.debian.org/debian/ bookworm-updates main non-free-firmware contrib non-free deb-src http://deb.debian.org/debian/ bookworm-updates main non-free-firmware contrib non-free
Atualize agora o repositório, e os pacotes.
# apt update ; apt upgrade -y # apt install firmware-linux firmware-linux-free firmware-linux-nonfree
Instale também alguns pacotes que iremos utilizar mais a frente.
# apt install wget tcpdump net-tools zip curl -y
Cenário fictício de exemplo:
Seu AS: 260072 (Madruga Telecom)
Operadora AS: 71 (BrUxa71 Telecom)
10.52.52.1/24 – Huawei/RouterOS
10.52.52.2/24 – Servidor
Configurando a interface de Rede
Antes de iniciar a instalação do seu do seu servidor em meu exemplo estou usando o IP 10.52.52.2/30, porém eu NUNCA faria um NAT no roteador de borda então porque utilizar o IP privado? Simples por que ele não é acessível logo não pode ser atacado, mas por outro lado se ele não tiver internet você não poderá fazer a instalação e ele não poderá te notificar pelo telegram. Solução que eu gosto muito de aplicar em servidores é a seguinte (falo muito de como configurar interface de redes nesse tutorial, recomendo uma leitura).
Vamos supor que seu prefixo seja 72.72.72.0/22 e você vai alocar o ip 72.72.72.255/32 para ser o IP de “loopback”. Dica que esse IP não seja próximo a do prefixo público que utiliza em seus servidores. Irei também configurar um IPv6 roteador da mesma forma para que ele tenha uma conectividade IPv6 qual o telegram pode se beneficiar para enviar um alerta por exemplo.
# vim /etc/network/interfaces
allow-hotplug enp0s3 iface enp0s3 inet static address 72.72.72.255/32 iface enp0s3 inet static address 10.52.52.2/24 post-up /usr/sbin/ip route add default via 10.52.52.1 src 72.72.72.255 iface enp0s3 inet6 static pre-up modprobe ipv6 address 2804:1234:bebe:caff::f0da/128 iface enp0s3 inet6 static pre-up modprobe ipv6 address fd00:cafe::2/64 post-up ip -6 route add default via fd00:cafe::1 src 2804:1234:bebe:caff:1:f0da:2:ff1f
Perceba que nós estaremos conversando com nosso roteador de borda pelo prefixo privado 10.100.0.0/30 porém todo o pacote de origem do servidor sai pelo o IP público. Caso este ip seja atacado o mesmo poderá cair em blackhole que o nosso servidor ainda terá comunicação com a borda.
Mas para que seu IP publico tenha rota será necessário criar um rota em seu roteador de borda apontando o IP público para o privado.
RouterOS# /ip address add interface=ether1 address=10.52.52.1/24 RouterOS# /ipv6 address add interface=ether1 address=fd00:cafe::1/64 advertise=no RouterOS# /ip route add dst-address=72.72.72.255/32 gateway=10.52.52.2 RouterOS# /ipv6 route add dst-address=2804:1234:bebe:caff:1:f0da:2:ff1f/128 gateway=fd00:cafe::1
<HUAWEI> system-view [~HUAWEI] interface 25GE0/1/36 [*HUAWEI] description INTERFACE_SERVIDOR [*HUAWEI] undo shutdown [*HUAWEI] ipv6 enable [*HUAWEI] ip address 10.52.52.1 255.255.255.0 [*HUAWEI] ipv6 address FD00:CAFE::1/64 [*HUAWEI] quit [*HUAWEI] ip route-static 72.72.72.255 255.255.255.255 10.52.52.2 description FASTNETMON [*HUAWEI] ipv6 route-static 2804:1234:bebe:caff:1:f0da:2:ff1f 128 2001:FD00:CAFE::1 description FASTNETMON [*HUAWEI] commit
É claro que neste caso ficará sem internet, mas podemos aplicar um firewall para enviar que ele fique respondendo, apenas para deixar ele “escondidinho”. E para isso vamos usar o nftables (Que já vem instalado por padrão no Debian 11 substituindo o iptables)
Habilite o mesmo para iniciar com o sistema:
# systemctl enable nftables
Vamos montar nosso firewall de forma que apenas conexoes que forem abertas pelo servidor seja respondidas.
# vim /etc/nftables.conf
#!/usr/sbin/nft -f flush ruleset # IP SERVIDOR define IPV4_SERV = { 72.72.72.255 } define IPV6_SERV = { 2804:1234:bebe:caff:1:f0da:2:ff1f } # Portas aberta para ADM (vou deixar só SSH e a do Grafana) define PORTS_ACCEP_ADM = { 22, 3000 } table inet filter { set ACESSO_TOTAL4 { type ipv4_addr flags interval # Lista dos IPv4 com permissão elements = { 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 100.64.0.0/10, 72.72.72.0/24 } } set ACESSO_TOTAL6 { type ipv6_addr flags interval # Lista dos IPv6 com permissão elements = { ::1, 2804:1234:bebe::/48 } } chain input { type filter hook input priority 0; # Aceita ICMP apenas das origens com permissão ip saddr @ACESSO_TOTAL4 ip protocol icmp icmp type echo-request accept ip6 nexthdr icmpv6 ip6 saddr @ACESSO_TOTAL6 icmpv6 type echo-request accept # Permite acesso as portas vindo das origens com permissão ip saddr @ACESSO_TOTAL4 tcp dport { $PORTS_ACCEP_ADM } counter accept ip6 saddr @ACESSO_TOTAL6 tcp dport { $PORTS_ACCEP_ADM } counter accept # Fecha todo resto ip daddr { $IPV4_SERV } ct state related,established counter accept ip daddr { $IPV4_SERV } counter drop ip6 daddr { $IPV6_SERV } ct state related,established counter accept ip6 daddr { $IPV6_SERV } counter drop type filter hook input priority 0; } chain forward { type filter hook forward priority 0; } chain output { type filter hook output priority 0; } }
Inicie o nftables
# systemctl enable nftables # systemctl start nftables
Você pode simplesmente rodar um scanner de porta no seu IP público bem como um ping, o mesmo não deve responde.
Instalação FastNetMon (Edição da comunidade)
FastNetMon se encontra no repositório do Debian 12
# apt search fastnetmon
Sorting... Pronto Full Text Search... Pronto fastnetmon/testing 1.2.4-2 amd64 fast DDoS analyzer with sflow/netflow/mirror support (community edition)
# apt install fastnetmon -y
Adicione todos os prefixos do seu AS, são esses os IPs serão feito analise. Dica: se você for usar o grafana recomendo cadastras todos os prefixos /24 para poder visualizar o trafego de cada prefixo em especifico
# vim /etc/networks_list
72.72.72.0/24 72.72.73.0/24 72.72.74.0/24 72.72.75.0/24
Crie também o arquivo que irá conter a lista branca de IPs (Explico mais a frente)
# > /etc/networks_whitelist
As configurações do Fastnetmon ficam em /etc/fastnetmon.conf, vamos fazer alguns ajustes básicos:
Vamos começar ativando o serviço de netflow. Utilizarei o comando sed que irá buscar no arquivo netflow = off e alterar para netflow = on, nos comandos seguintes farei o mesmo, se desejar acesse o arquivo e edite manualmente.
# sed -i 's/netflow = off/netflow = on/' /etc/fastnetmon.conf
Ajustes para Huawei
# sed -i 's/average_calculation_time = 5/average_calculation_time = 15/' /etc/fastnetmon.conf # sed -i 's/netflow_sampling_ratio = 1/netflow_sampling_ratio = 1024/' /etc/fastnetmon.conf
Ajustes para Mikrotik
# Não precisa alterar nada aqui
Defina por quanto tempo em segundos um IP ficará em blackhole o padrão é 1900 seg. No comando estou alterando para 10min:
# sed -i 's/ban_time = 1900/ban_time = 600/' /etc/fastnetmon.conf
Altera o top 7 para o top 10 ao usar o comando fastnetmon_client (Ao seu gosto)
# sed -i 's/max_ips_in_list = 7/max_ips_in_list = 10/' /etc/fastnetmon.conf
Temos diferentes abordagens para detecção dos ataques: Pacotes por segundos, largura de banda e por fluxo (flows), protocolos, nessa parte irei habilitar todos filtros, mas cada caso é uma realidade.
# sed -i 's/ban_for_flows = off/ban_for_flows = on/' /etc/fastnetmon.conf # sed -i 's/ban_for_tcp_bandwidth = off/ban_for_tcp_bandwidth = on/' /etc/fastnetmon.conf # sed -i 's/ban_for_udp_bandwidth = off/ban_for_udp_bandwidth = on/' /etc/fastnetmon.conf # sed -i 's/ban_for_icmp_bandwidth = off/ban_for_icmp_bandwidth = on/' /etc/fastnetmon.conf # sed -i 's/ban_for_tcp_pps = off/ban_for_tcp_pps = on/' /etc/fastnetmon.conf # sed -i 's/ban_for_udp_pps = off/ban_for_udp_pps = on/' /etc/fastnetmon.conf # sed -i 's/ban_for_icmp_pps = off/ban_for_icmp_pps = on/' /etc/fastnetmon.conf
Se desejar ter mais detalhes no log, aumenta de 20 para até 200 linhas de registro no log.
# sed -i 's/ban_details_records_count = 20/ban_details_records_count = 200/' /etc/fastnetmon.conf
Como temos todas as detecções ativas, precisamos ajustar cada situação para sua realidade. Você precisa ter em mente qual é o maior tráfego que pode atingir por um IP da sua rede (seu maior plano) com base nisso tenha em mente que a cada 100MB gera em torno de 10.000 pps por segundo, isso não é regra mas pode ser uma base inicial. Vamos imaginar então que meu maior plano seja 900MB, farei uma ajuste no threshold_pps para 110.000 pps para não pegar alguma rajada inicial. Mas vale lembrar que inicialmente você precisa estudar sua rede e adaptar a sua realidade.
# sed -i 's/threshold_pps = 20000/threshold_pps = 110000/' /etc/fastnetmon.conf # sed -i 's/threshold_tcp_pps = 100000/threshold_tcp_pps = 90000/' /etc/fastnetmon.conf # sed -i 's/threshold_udp_pps = 100000/threshold_udp_pps = 90000/' /etc/fastnetmon.conf
Agora em threshold_mbps seria o maior tráfego que você irá permitir, eu normalmente não altero e deixo no padrão 1gb. E em threshold_flows o fluxos de limite qual também mantenho o mesmo valor 3500.
# sed -i 's/threshold_mbps = 1000/threshold_mbps = 999/' /etc/fastnetmon.conf # sed -i 's/threshold_tcp_mbps = 100000/threshold_tcp_mbps = 900/' /etc/fastnetmon.conf # sed -i 's/threshold_udp_mbps = 100000/threshold_udp_mbps = 900/' /etc/fastnetmon.conf
Ajustes de ICMP
# sed -i 's/threshold_icmp_mbps = 100000/threshold_icmp_mbps = 100/' /etc/fastnetmon.conf # sed -i 's/threshold_icmp_pps = 100000/threshold_icmp_pps = 10000/' /etc/fastnetmon.conf
O netflow ouve a porta padrão 2055 se desejar alterar basta alterar o valor de netflow_port. Irei alterar para 52055.
# sed -i 's/netflow_port = 2055/netflow_port = 52055/' /etc/fastnetmon.conf
Ainda em /etc/fastnetmon.conf temos notify_script_path que sempre que o fastnetmon identificar um ataque irá executar o script /usr/local/bin/notify_about_attack.sh, identificando o IP da sua rede que está sofrendo (incoming) o ataque ou que está atacando (outgoing) alguém. Ele NÃO irá identificar os IPs de origem, pois em um ataque quase sempre as origens são alteradas por milhares de IPs aleatórios.
Faça alguns ajustes nos parâmetros do kernel
# vim /etc/sysctl.conf
Adicione ao final do arquivo, observe enp0s3 é o nome da sua interface de rede coloque o nome da sua, pode usar o comando ip addr para visualizar
net.ipv4.ip_forward = 1 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.lo.rp_filter = 0 net.ipv4.conf.enp0s3.rp_filter = 0
Carregue as alterações:
# sysctl -p
Habilite e reinicie o fastnetmon para carregar as novas configurações.
# systemctl enable fastnetmon # systemctl restart fastnetmon
Verifique se a porta 52055/udp esta ouvindo:
# netstat -putan | grep 52055
udp 0 0 0.0.0.0:52055 0.0.0.0:* 2522/fastnetmon
Bom mas antes de criarmos nosso script notify_about_attack.sh, precisamos preparar algumas coisas, e antes de mais nada vamos configurar nosso Huawei para enviar os dados.
Roteador RuterOS/Mikrotik:
Informe apenas suas interfaces de upstream (operadoras) ex: spf1,sfp1.100
RouterOS# /ip traffic-flow set active-flow-timeout=5s cache-entries=1k inactive-flow-timeout=1s interfaces=spf1,sfp1.100 RouterOS# /ip traffic-flow target add dst-address=10.52.52.2 v9-template-refresh=5 v9-template-timeout=1s
Roteador Huawei:
<HUAWEI> system-view [~HUAWEI] ip netstream export version ipfix peer-as bgp-nexthop ttl [*HUAWEI] ip netstream export template sequence-number fixed [*HUAWEI] ip netstream export index-switch 32 [*HUAWEI] ip netstream as-mode 32 [*HUAWEI] ip netstream timeout active 1 [*HUAWEI] ip netstream timeout inactive 15 [*HUAWEI] ip netstream export template timeout-rate 1 [*HUAWEI] ip netstream export template option sampler [*HUAWEI] ip netstream export template option application-label [*HUAWEI] ip netstream sampler fix-packets 1024 inbound [*HUAWEI] ip netstream sampler fix-packets 1024 outbound [*HUAWEI] ip netstream export source 10.52.52.1 [*HUAWEI] ip netstream export host 10.52.52.2 52055
slot 0 NE8000F1A / slot 10 ou 9 NE8000 M8 / slot 3 NE40
[*HUAWEI] slot <0-10> [*HUAWEI] ip netstream sampler to slot self [*HUAWEI] ipv6 netstream sampler to slot self
Será necessário adicionar em todas suas interfaces de Uplink:
ip netstream inbound ip netstream outbound
Exemplo:
interface 40GE0/1/49.71 vlan-type dot1q 71 description BruxaDo71Telecom ip address 71.71.71.2 255.255.255.252 statistic enable ip netstream inbound ip netstream outbound
Com o tcpdump vamos monitorar a interface para ver o que esta chegando na porta.
# tcpdump -i enp0s3 -n udp port 52055 -T cnfp -c 10
Se seu NE estiver mandado os pacotes você terá um resultado como:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes 14:25:19.601113 IP 10.52.52.1.40000 > 10.52.52.2.52055: NetFlow v9 14:25:19.608068 IP 10.52.52.1.40000 > 10.52.52.2.52055: NetFlow v9 14:25:19.668054 IP 10.52.52.1.40000 > 10.52.52.2.52055: NetFlow v9 14:25:19.691123 IP 10.52.52.1.40000 > 10.52.52.2.52055: NetFlow v9 14:25:19.768055 IP 10.52.52.1.40000 > 10.52.52.2.52055: NetFlow v9 14:25:19.781129 IP 10.52.52.1.40000 > 10.52.52.2.52055: NetFlow v9 14:25:19.831133 IP 10.52.52.1.40000 > 10.52.52.2.52055: NetFlow v9 14:25:19.858054 IP 10.52.52.1.40000 > 10.52.52.2.52055: NetFlow v9 14:25:19.941124 IP 10.52.52.1.40000 > 10.52.52.2.52055: NetFlow v9 14:25:19.958060 IP 10.52.52.1.40000 > 10.52.52.2.52055: NetFlow v9 10 packets captured 10 packets received by filter 0 packets dropped by kernel
Agora com o comando:
# fastnetmon_client
Iremos visualizar os TOP IPs
FastNetMon 1.1.3 master git- Pavel Odintsov: stableit.ru IPs ordered by: packets Incoming traffic 724347 pps 6998 mbps 161 flows 72.72.72.238 51973 pps 569 mbps 0 flows *banned* 72.72.72.112 14390 pps 154 mbps 0 flows 72.72.72.93 14000 pps 150 mbps 0 flows 72.72.72.161 11705 pps 129 mbps 0 flows 72.72.72.118 8797 pps 86 mbps 0 flows 72.72.72.43 7602 pps 84 mbps 0 flows 72.72.72.111 6669 pps 64 mbps 0 flows Outgoing traffic 291008 pps 705 mbps 101 flows 72.72.72.238 18009 pps 14 mbps 0 flows *banned* 72.72.72.112 7929 pps 5 mbps 0 flows 72.72.72.93 7110 pps 10 mbps 0 flows 72.72.72.14 4910 pps 40 mbps 0 flows 72.72.72.43 4887 pps 2 mbps 0 flows 72.72.72.161 4537 pps 2 mbps 0 flows 72.72.72.111 3933 pps 14 mbps 0 flows Internal traffic 0 pps 0 mbps Other traffic 420 pps 0 mbps Screen updated in: 0 sec 331 microseconds Traffic calculated in: 0 sec 854 microseconds Total amount of IPv6 packets related to our own network: 0 Not processed packets: 0 pps Subnet load: 72.72.72.0/22 pps in: 256000 out: 52000 mbps in: 9630 out: 1077 100.100.0.6/32 pps in: 0 out: 0 mbps in: 0 out: 0
Perceba que o IP 72.72.72.238 foi banido, pois o mesmo excedeu os pps de 50.000, no entanto este é um dos IPs que então em meu CGNAT, e vai ser natural este ter um comportamento diferente. Para que o fastnetmon ignore o mesmo você pode cria uma lista branca. Não se preocupe se isso acontecer com você o fastnetmon não ira fazer nenhuma ação, pois não configuramos nada ainda.
Para criar a lista branca networks_whitelist com os IPs ou prefixo que deseja ignorar.
# vim /etc/networks_whitelist
Exemplo
72.72.72.224/28 72.72.73.224/28
Reinicie para carregar as novas configurações.
# systemctl restart fastnetmon
Bot Telegram
Para receber notificações pelo Telegram juntamente com o arquivo de log, 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 basta você falar com o @BotFather e enviar para ele /newbot, ele irá pedir qual nome você gostaria de dar a seu bot, e em seguida ira gera um token que vamos precisar a seguir.
Para o Telegram vamos usar um scriptzinho que criei.
# cd /tmp/ # wget https://github.com/remontti/TelegramCMD/archive/master.zip # unzip /tmp/master.zip # chmod a+x /tmp/TelegramCMD-master/telegram # mv /tmp/TelegramCMD-master/telegram* /usr/local/bin/ # ln -s /usr/local/bin/telegram /bin/telegram
Edite o token.conf e altere para o seu TOKEN.
# vim /usr/local/bin/telegram.conf/token.conf
###################################### # Telegram bot # # Create a new bot with @BotFather # # get TOKEN # ###################################### TOKEN="123456789:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
Esse script você pode usar para diversas coisas, ele será capaz de zipar um diretorio e lhe enviar o arquivo bem como enviar apenas uma mensagem. Como usar? É importante você saber que o IDs de grupos tem um “-” no inicio do ID, já usuários não. Para descobrir o ID do seu usuário fale com o bot @myidbot e envie para ele /getid, para saber de um grupo adicione @myidbot ao seu grupo e envie /getgroupid@myidbot. Realize um teste com um dos comandos: (Não esqueça de alterar pelo seu ID)
Uso: telegram [Opções] -m: Para enviar uma mensagem ex: telegram -m "ID Chat" "Meu assunto" "Minha mensagem..." ex: telegram -m "-123456789" "Notificação" "Mensagem para um grupo ID" ex: telegram -m "123456789" "Notificação" "Mensagem para direta/privado" -f: Para enviar um arquivo ex: telegram -f "ID Chat" "/diretorio/arquivo" "nome do arquivo zip" "Comentário" ex: telegram -f "12345689" /var/log/syslog syslog "Logs do sistema para user privado" ex: telegram -f "-12345689" /var/log/syslog syslog "Logs do sistema para um grupo" -t: Para enviar um arquivo sem compactar ex: telegram -f "ID Chat" "/diretorio/arquivo.txt" "Mensagem" ex: telegram -f "-12345689" /var/log/fastnetmon.log "Logs do sistema"
FRR
Vamos realizar a instalação do FRRouting (FRR) para fechar sessão BGP entre o roteador de borda e servidor.
# apt install frr frr-doc
Ative o modulo BGP
# sed -i 's/bgpd=no/bgpd=yes/' /etc/frr/daemons
Reinicie o FRR
# systemctl restart frr
Entre no shell VTY do FRR.
# vtysh
Rode o comando: `show running-config`
Hello, this is FRRouting (version 8.4.2). Copyright 1996-2005 Kunihiro Ishiguro, et al. fastnetmon# show running-config Building configuration... Current configuration: ! frr version 8.4.2 frr defaults traditional hostname fastnetmon log syslog informational no ipv6 forwarding service integrated-vtysh-config ! end
Agora entre no modo de configuração, e vamos preparar nosso peer com o router de borda. No exemplo está praticamente auto explicativo, vamos fechar o peer e deixar ser anunciado apenas nossos prefixos e aplicaremos a community 65001:666 para prefixos /32 e 65001:777 para prefixos /24
configure terminal ! ip prefix-list FASTNETMON_EXPORT_32 seq 5 permit 72.72.72.0/22 le 32 ! ip prefix-list FASTNETMON_EXPORT_24 seq 5 permit 72.72.72.0/22 le 24 ! route-map MARK_FASTNETMON_IMPORT deny 10 exit ! route-map MARK_FASTNETMON_EXPORT permit 10 match ip address prefix-list FASTNETMON_EXPORT_24 set community 65001:777 exit ! route-map MARK_FASTNETMON_EXPORT permit 20 match ip address prefix-list FASTNETMON_EXPORT_32 set community 65001:666 exit ! router bgp 260072 bgp router-id 10.52.52.2 neighbor 10.52.52.1 remote-as 260072 neighbor 10.52.52.1 description "BORDA" ! address-family ipv4 unicast neighbor 10.52.52.1 route-map MARK_FASTNETMON_IMPORT in neighbor 10.52.52.1 route-map MARK_FASTNETMON_EXPORT out exit-address-family exit ! end write memory exit
Configuração RouterOS/Mikrotik
Crie um filtro de entrada que todas as rotas /32 e /24 aprendida do fastnetmon seja setadas como blackhole ou como prefixo para mitigação, e não ensine nada para ele.
/routing filter add action=accept chain=FASTNETMON_IMPORT_IPV4 prefix-length=32 \ set-bgp-communities=65444:666 set-distance=1 set-type=blackhole add action=accept chain=FASTNETMON_IMPORT_IPV4 prefix-length=24 \ set-bgp-communities=65444:777 set-distance=1 set-type=blackhole add action=discard chain=FASTNETMON_IMPORT_IPV4 add action=discard chain=FASTNETMON_EXPORT_IPV4
Atenção para a instance que deve estar selecionada corretamente (use a mesma que você usa com sua operadora).
/routing bgp peer add name=FASTNETMON remote-as=260072 \ in-filter=FASTNETMON_IMPORT_IPV4 out-filter=FASTNETMON_EXPORT_IPV4 \ remote-address=10.52.52.2 update-source=10.52.52.1
Exemplo de configuração para filtro para operadora
/routing filter add action=accept bgp-communities=65444:666 \ chain=OPERADORA_IPv4_EXPORT prefix-length=32 set-bgp-communities=71:666 add action=accept chain=OPERADORA_IPv4_EXPORT \ prefix=72.72.72.0/22 prefix-length=22-24 set-bgp-communities="" add action=discard chain=OPERADORA_IPv4_EXPORT
Exemplo de configuração para filtro para mitigação
/routing filter add action=accept bgp-communities=65444:777 \ chain=MITIGACAO_IPv4_EXPORT prefix=72.72.72.0/22 \ prefix-length=24 set-bgp-communities=19000:666 add action=discard chain=MITIGACAO_IPv4_EXPORT
Configurações do Huawei
<HUAWEI> system-view Enter system view, return user view with return command.
Crie uma rota estática de Blackhole
[~HUAWEI] ip route-static 192.0.2.1 255.255.255.255 NULL0 description BLACKHOLE
Crie um filtro que irá aceitar qualquer rota /32
[*HUAWEI] ip ip-prefix ACCEP_PREFIX_MASK32_FASTNETMON_IPV4 index 10 permit 0.0.0.0 0 greater-equal 32
Crie um filtro que irá aceitar as rota /24 de seu prefixo
[*HUAWEI] ip ip-prefix ACCEP_PREFIX_MASK24_FASTNETMON_IPV4 index 10 permit 72.72.72.0 22 greater-equal 24
Crie filtro se desejar rejeitar algum IP ou prefixo atacado atacado, caso você deixar o fastnetmon anúnciar seu NE pode rejeitar (Ex IP Servidores ou CGNAT)
[*HUAWEI] ip ip-prefix IGNORE_PREFIX_FASTNETMON_IPV4 index 10 permit 72.72.72.224 28 greater-equal 28 less-equal 32 [*HUAWEI] ip ip-prefix IGNORE_PREFIX_FASTNETMON_IPV4 index 20 permit 72.72.73.224 28 greater-equal 28 less-equal 32
Crie um filtro para nossas community 65001:666 65001:777
[*HUAWEI] ip community-filter basic COMM_FASTNETMON_BLACKHOLE_32 index 10 permit 65001:666 [*HUAWEI] ip community-filter basic COMM_FASTNETMON_BLACKHOLE_24 index 10 permit 65001:777
Defina community para usar nos RP das operadoras
[*HUAWEI] ip community-filter basic COMM_BLACKHOLE_32 index 10 permit 65444:666 [*HUAWEI] ip community-filter basic COMM_BLACKHOLE_24 index 10 permit 65444:777
Vamos montar agora nosso route policy de import (rotas que iremos receber). A 1ª é ignorar os prefixos IGNORE_PREFIX_FASTNETMON_IPV4
[*HUAWEI] route-policy FASTNETMON_IMPORT_IPV4 deny node 1000 [*HUAWEI] if-match ip-prefix IGNORE_PREFIX_FASTNETMON_IPV4
A 2º é o que vir marcado do fastnetmon com 65001:666 (COMM_FASTNETMON_BLACKHOLE_32) jogar para blackhole e aplicar uma community nova 65444:666, como no exemplo aqui meu AS é de 32bits vou usar um AS privado, mas onde seu AS é de 16bits o mais comunity de se encontrar é AS:666. Assim se você for trânsito de outro AS você pode montar em suas route policy para aceitar prefixos do AS dele com /32 marcados com AS:666 e jogar para blackhole também fica dica!
[*HUAWEI] route-policy FASTNETMON_IMPORT_IPV4 permit node 1010 [*HUAWEI] if-match community-filter COMM_FASTNETMON_BLACKHOLE_32 [*HUAWEI] apply local-preference 999 [*HUAWEI] apply ip-address next-hop 192.0.2.1 [*HUAWEI] apply community 65444:666 [*HUAWEI] if-match ip-prefix ACCEP_PREFIX_MASK32_FASTNETMON_IPV4
Vamos preparar também para receber os prefixos /24 caso for anunciar para um mitigação por exemplo.
[*HUAWEI] route-policy FASTNETMON_IMPORT_IPV4 permit node 1020 [*HUAWEI] if-match community-filter COMM_FASTNETMON_BLACKHOLE_24 [*HUAWEI] apply local-preference 999 [*HUAWEI] apply ip-address next-hop 192.0.2.1 [*HUAWEI] apply community 65444:777 [*HUAWEI] if-match ip-prefix ACCEP_PREFIX_MASK24_FASTNETMON_IPV4
E a 3ª ignoramos o resto como boas praticas.
[*HUAWEI] route-policy FASTNETMON_IMPORT_IPV4 deny node 9999
Para as route policy de export (Rotas que o NE irá ensinar) colocarei apenas um Deny pois ele não precisa ensinar nada.
[*HUAWEI] route-policy FASTNETMON_EXPORT_IPV4 deny node 9999 [*HUAWEI] commit
Vamos ao peer
[~HUAWEI] bgp 260072 [~HUAWEI] undo peer 10.52.52.2 [*HUAWEI] peer 10.52.52.2 as-number 260072 [*HUAWEI] peer 10.52.52.2 description BORDA_VS_FASTNETMON_IPV4 [*HUAWEI] peer 10.52.52.2 timer connect-retry 1 [*HUAWEI] peer 10.52.52.2 connect-interface 10.52.52.1 [*HUAWEI] peer 10.52.52.2 timer keepalive 10 hold 30 y [*HUAWEI] ipv4-family unicast [*HUAWEI] peer 10.52.52.2 enable y [*HUAWEI] peer 10.52.52.2 public-as-only [*HUAWEI] peer 10.52.52.2 route-policy FASTNETMON_IMPORT_IPV4 import [*HUAWEI] peer 10.52.52.2 route-policy FASTNETMON_EXPORT_IPV4 export [*HUAWEI] peer 10.52.52.2 next-hop-local [*HUAWEI] peer 10.52.52.2 advertise-community [*HUAWEI] peer 10.52.52.2 advertise-ext-community [*HUAWEI] commit [~HUAWEI] run save
Em caso de alguma emergência, para baixar a sessão use:
[~HUAWEI] bgp 260072 [*HUAWEI] peer 10.52.52.2 ignore [*HUAWEI] commit
Para subir novamente:
[~HUAWEI] bgp 260072 [*HUAWEI] undo peer 10.52.52.2 ignore [*HUAWEI] commit
Verifique se sua sessão subiu:
[*HUAWEI] display bgp peer | include 10.52.52.2
BGP local router ID : x.x.x.x Local AS number : 260072 Total number of peers : 13 Peers in established state : 13 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 10.52.52.2 4 260072 897801 1088107 0 2496h26m Established 0
No FRR use `show bgp summary`
# vtysh
# show bgp summary IPv4 Unicast Summary: BGP router identifier 10.52.52.2, local AS number 260072 vrf-id 0 BGP table version 0 RIB entries 0, using 0 bytes of memory Peers 1, using 21 KiB of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt 10.52.52.1 4 260072 5 5 0 0 0 00:02:52 0 0 Total number of neighbors 1 # exit
Para repassar os prefixos marcados como blackhole para sua operadora você precisará saber qual é a community que a mesma utiliza e se ela lhe oferece esse recurso, em seguida você irá adicionar a route policy da sua operadora uma nova regra:
No exemplo tudo que recebemos do fastnetmon passamos a aplicar a community 65444:666, logo tudo que for marcado com a mesma iremos repassar para operadora, com o community da operadora.
[~HUAWEI] route-policy UPSTREAM_OP_BRUXADO71_EXPORT_IPV4 permit node 2070 [*HUAWEI] if-match community-filter COMM_BLACKHOLE_32 [*HUAWEI] apply community 71:666
Agora tudo que marcamos com community 65444:777 enviamos para mitigraçação
[*HUAWEI] route-policy UPSTREAM_MITIGAAI_EXPORT_IPV4 permit node 2070 [*HUAWEI] if-match community-filter COMM_BLACKHOLE_24 [*HUAWEI] apply community 1000:9999
Pronto agora que já temos nosso peer Up entre router e servidor, nosso Bot mandando mensagem, iremos criar o script que será executado sempre que um ataque for identificado BAN ou UNBAN. Irei criar um diretório /var/log/fastnetmon_attacks/ataques qual irá ficar os ataques finalizados.
# mkdir /var/log/fastnetmon_attacks/ataques -p # vim /usr/local/bin/notify_about_attack.sh
Altere ID_CHAT=’-1000000000000′ pelo ID do seu usuário ou grupo.
Para anunciar os prefixos /24 do IP atacado altere ANUNCIAR_24 para sim
Se não quiser receber o arquivo de log altere ARQUIVO_DE_LOG para nao
Dei uma encrementada para identificar a categoria do IP, que iremos ver em seguido o script que ira identificar, em IDENT_CATEGORIA vai poder classificar exemplo se um ip é de CGNAT, servidor…
#!/usr/bin/env bash # # Este script receberá os seguintes parâmetros: # $1 IP do cliente # $2 INCOMING -> Vindo de fora da rede | OUTGOING -> Saindo da sua rede # $3 Pacotes por seguncoes # $4 Ação (ban ou unban) # #-------------------------------------------------------------------------------- # Defina o ID do Chat ou Grupo do Telegram (Grupos sempre começam com "-" ) ID_CHAT='-1000000000000' # # Deseja anunciar prefixos /24? (sim/nao) ANUNCIAR_24='nao' # # Deseja enviar arquivo de log compactado para o telegram? (sim/nao) ARQUIVO_DE_LOG='sim' # # Deseja identificar a categoria do endereço atacado (sim/nao) # script python /opt/rr_fastnetmon/prefixos.txt IDENT_CATEGORIA='sim' # # Seu ASN ASN=260072 #-------------------------------------------------------------------------------- # # Pegando prefixo 24 ip32=$1 prefixo24="${ip32%.*}.0/24" # quebralinha=" " # if [ "$2" = "incoming" ]; then TIPO="Sendo atacado" else TIPO="Realizando um ataque" fi # if [ "$IDENT_CATEGORIA" = "sim" ]; then CATEGORIA=$(/opt/rr_fastnetmon/categoria_ip.py $1) else CATEGORIA="" fi # # Desbanindo um IP if [ "$4" = "unban" ]; then # Remove IP do anuncio para o FRR if [ $ANUNCIAR_24 = "sim" ]; then /usr/local/bin/telegram -m "$ID_CHAT" "<b>(UNBAN) Anúncios removido</b>" "<code> Blackhole: $1/32$quebralinha Prefixo: $prefixo24</code>" vtysh --command "configure terminal no ip route $1/32 lo no ip route $prefixo24 lo router bgp $ASN address-family ipv4 unicast no network $1/32 no network $prefixo24 " else /usr/local/bin/telegram -m "$ID_CHAT" "<b>(UNBAN) Anúncio removido</b>" "<code> Blackhole: $1/32$quebralinha</code>" vtysh --command "configure terminal no ip route $1/32 lo router bgp $ASN address-family ipv4 unicast no network $1/32 " fi # Movemos os logs para pasta ataques pois não queremos mais receber elas. mv /var/log/fastnetmon_attacks/\* /var/log/fastnetmon_attacks/ataques exit 0 fi # # Banindo um IP if [ "$4" = "ban" ]; then cp /var/log/fastnetmon_attacks/\* /var/log/fastnetmon_attacks/\.log.txt &>/dev/null # Anuncia IP ao FRR if [ $ANUNCIAR_24 = "sim" ]; then /usr/local/bin/telegram -m "$ID_CHAT" "<b>(BAN) $TIPO</b> [ $3 pps ]" "Anunciando$quebralinha<code> Blackhole: $1/32$quebralinha Prefixo: $prefixo24</code>$quebralinha <i>$CATEGORIA</i>" vtysh --command "configure terminal ip route $1/32 lo ip route $prefixo24 lo router bgp $ASN address-family ipv4 unicast network $1/32 network $prefixo24 " else /usr/local/bin/telegram -m "$ID_CHAT" "<b>(BAN) $TIPO</b> [ $3 pps ]" "Anunciando$quebralinha<code> Blackhole: $1/32</code>$quebralinha <i>$CATEGORIA</i>" vtysh --command "configure terminal ip route $1/32 lo router bgp $ASN address-family ipv4 unicast network $1/32 " fi # Envio de log if [ $ARQUIVO_DE_LOG = "sim" ]; then /usr/local/bin/telegram -t "$ID_CHAT" /var/log/fastnetmon_attacks/\.log.txt "Logs do ataque" fi sleep 2 rm /var/log/fastnetmon_attacks/\.log.txt &>/dev/null exit 0 fi # if [ "$4" == "attack_details" ]; then # Null exit 0 fi
De permissão para execução
# chmod a+x /usr/local/bin/notify_about_attack.sh
Crie um diretório em /opt/rr_fastnetmon onde iremos colocar nossos scripts complementares
# mkdir /opt/rr_fastnetmon
Crie o arquivo categoria_ip.py que utiliza python3 (Não se preocupe em instalar o python)
# vim /opt/rr_fastnetmon/categoria_ip.py
Adicione:
#!/usr/bin/env python3 import sys import ipaddress if len(sys.argv) != 2: print("Uso: categoria_ip.py <endereço IP>") sys.exit(1) ip = sys.argv[1] # Converter o endereço IP fornecido em um objeto ipaddress.IPv4Address endereco_ip = ipaddress.IPv4Address(ip) # Procurar a categoria correspondente ao endereço IP no arquivo prefixos.txt categoria = None with open("/opt/rr_fastnetmon/prefixos.txt") as arquivo: for linha in arquivo: prefixo, cat = linha.strip().split(" ") rede = ipaddress.IPv4Network(prefixo) if endereco_ip in rede: categoria = cat break if categoria is None: print("Categoria não encontrada para o endereço IP") else: print("Categoria:", categoria)
# chmod +x /opt/rr_fastnetmon/categoria_ip.py
Agora crie um arquivo prefixos.txt nele você pode classificar seus IPs assim no alarme ira lhe ajudar (ou você pode invetar algo novo). Coloque sempre os mais especificos primeiro caso você não queira declarar todos os prefixos.
# vim /opt/rr_fastnetmon/prefixos.txt
Exemplo:
72.72.72.0/26 Servidor 72.72.72.128/26 CGNAT 72.72.73.0/24 Cliente_Dedicado 72.72.72.0/22 Clientes_Dinamico
Teste o script executando como no exemplo:
# /opt/rr_fastnetmon/categoria_ip.py 72.72.72.20 Categoria: Servidor # /opt/rr_fastnetmon/categoria_ip.py 72.72.72.140 Categoria: CGNAT # /opt/rr_fastnetmon/categoria_ip.py 72.72.73.100 Categoria: Cliente_Dedicado # /opt/rr_fastnetmon/categoria_ip.py 72.72.72.80 Categoria: Clientes_Dinamico # /opt/rr_fastnetmon/categoria_ip.py 72.72.75.9 Categoria: Clientes_Dinamico
Restarte o fastnetmon
# systemctl restart fastnetmon
Se quiser fazer um teste manual simulando um anuncio de um IP (Cuidado se estiver anunciando prefixo) exemplo: 72.72.73.255/32
# /usr/local/bin/notify_about_attack.sh 72.72.73.255 incoming 9996 ban
Verificando se esta enviando:
# vtysh --command " show ip bgp neighbors 10.52.52.1 advertised-routes"
BGP table version is 3, local router ID is 10.52.52.2, vrf id 0 Default local pref 100, local AS 260072 Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, i internal, r RIB-failure, S Stale, R Removed Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 72.72.73.255/32 0.0.0.0 0 32768 i Total number of prefixes 1
Para remover:
# /usr/local/bin/notify_about_attack.sh 72.72.73.255 incoming 9996 unban
Finalizamos a primeira parte sem fazer nenhum estrago ao servidor (CPU) 🙂
Seria interessante fazer alguns testes de ataques (coisa pequena) mas com características reais 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 Cuidado você pode criar um alto uso de Hardware na sua rede!!!
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.
$ wget https://github.com/ekovegeance/DDOS/archive/v1.2.4.zip $ unzip v1.2.4.zip $ cd DDOS-1.2.4/ $ ./ddos
Gráficos Grafana
Habilite o graphite no fastnetmon
# sed -i 's/graphite = off/graphite = on/' /etc/fastnetmon.conf
Vamos instalar o influxdb para ser a base de dados
# apt install gnupg2 -y # cd /tmp # wget -q https://repos.influxdata.com/influxdata-archive_compat.key # echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' \ | sha256sum -c && cat influxdata-archive_compat.key \ | gpg --dearmor \ | tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null # echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main'\ | tee /etc/apt/sources.list.d/influxdata.list # apt update # apt install influxdb -y
Crie uma cópia do arquivo de configuração, e edite o mesmo
# cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.orig # vim /etc/influxdb/influxdb.conf
Localize [[graphite]] e insira a baixo as seguintes linhas:
[[graphite]] enabled = true bind-address = ":2003" protocol = "tcp" consistency-level = "one" separator = "." templates = [ "fastnetmon.hosts.* app.measurement.cidr.direction.function.resource", "fastnetmon.networks.* app.measurement.cidr.direction.resource", "fastnetmon.total.* app.measurement.direction.resource" ]
Reinicie o influxdb
# systemctl restart influxdb
Em seguida o fastnetmon
# systemctl restart fastnetmon
Agora vamos acessar o o influxdb para ver se o banco e verificar se o graphite foi criado.
# influx
Connected to http://localhost:8086 version 1.8.10 InfluxDB shell version: 1.8.10
> SHOW databases
name: databases name ---- _internal graphite
> USE graphite
Using database graphite
> SHOW MEASUREMENTS
name: measurements name ---- hosts networks total
Se você tem pouco disco e deseja não salvar por tanto tempo, você pode ajustar o tempo de retenção dos dados, no comando estarei informando 90 dias (padrão é infinito) com métrica de tráfego para 7 dias (padrão ja é 7 dias), será necessário apagar o banco e recria-lo.
> SHOW RETENTION POLICIES ON graphite
name duration shardGroupDuration replicaN default ---- -------- ------------------ -------- ------- autogen 0s 168h0m0s 1 true
Vamos remover o banco, criar novamente com os tempos desejados
> DROP DATABASE graphite > CREATE DATABASE graphite WITH DURATION 90d SHARD DURATION 7d > SHOW RETENTION POLICIES ON graphite
name duration shardGroupDuration replicaN default ---- --------- ------------------ -------- ------- autogen 2160h0m0s 168h0m0s 1 true
> exit
Reinicie os serviços novamente
# systemctl restart influxdb fastnetmon
Você pode optar pelo modo bruto e remover com script.
# vim /root/limpa_graphite.sh
Ajuste o número de dias que deseja que fique salvo apenas.
#!/bin/bash # Manter por quantos dias? DIAS="7" # Define o banco de dados DATABASE="graphite" # Define os comandos COMMANDS=("DELETE FROM hosts WHERE time < now() - ${DIAS}d" "DELETE FROM networks WHERE time < now() - ${DIAS}d" "DELETE FROM total WHERE time < now() - ${DIAS}d") # Executa cada comando for cmd in "${COMMANDS[@]}"; do echo "Executing: $cmd" influx -database "$DATABASE" -execute "$cmd" done echo "Todos os comandos executados com sucesso"
De permissão e execute, se desejar pode adicionar ao cron:
# chmod +x /root/limpa_graphite.sh # /root/limpa_graphite.sh
Grafana
Adicione o repositório do grafana e instale-o
# wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key # echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | tee -a /etc/apt/sources.list.d/grafana.list # apt update; apt install grafana -y
Habilite serviço para inicialização e inicie o mesmo
# systemctl enable grafana-server # systemctl start grafana-server
Acesse em seu navegador http://ip_privado:3000 e entre com usuário e senha admin em seguida defina uma nova senha. Atualmente o grafana esta na versão 9.5.x caso você instale uma versão superior no futuro os passos não devem mudarem muito de locais.
No menu vá em Connections, clique em Connect data
Localize influxDB e clique nele
Preencha apenas:
URL: http://localhost:8086
Database: graphite
E clique em Save & test, você deve ter a resposta atasource is working. 3 measurements found.
Mas antes de sair anote o uid que esta na URL no meu caso: da56a879-9ae6-42ca-aeb5-236e8b439be4, vamos precisar dele para facilitar ao importar as dashs.
Faça download aqui das Dashs e importe.
- Fastnetmon - Home
- Fastnetmon - Painel Geral
- Fastnetmon - Top PPs
- Fastnetmon - Top Prefixos
- Fastnetmon - Top Hosts MBs
- Fastnetmon - Top Tráfego saída
- Fastnetmon - Tráfego por Prefixo
- Fastnetmon - Tráfego por endereço IPv4
Extraia o arquivo zip e abra em um editor de texto os arquivos .json localize xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx e substitua pelo seu uid, assim lhe poupará de fazer ajustes manuais.
Se seu desktop é um linux use o comando sed e faça em um unico comando:
`sed -i 's/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/da56a879-9ae6-42ca-aeb5-236e8b439be4/' *.json`
Volte para o menu e clique em Dashboards
Importe uma a um das Dashs.
Gostou? Se sentindo mais seguro agora? É consultor e ganha $ com isso!?
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!
Fontes:
https://fastnetmon.com/install/
https://docs.frrouting.org/en/latest/bgp.html
https://deb.frrouting.org/
https://fastnetmon.com/docs/influxdb_integration/
https://grafana.com/docs/grafana/latest/installation/debian/
Olá da pra usar essa solução sem ter ASN?
Alguem conseguiu pegar o trafego por IP específico?
Parabéns… Pelo Tutorial.
Gostaria de saber se tem como adicionar no Grafana os ASN? Top Mais acessados.
Se Tiver, poderiam informar informar um tutorial?
Desde já grato.
Não deu certo pra mim, acontece a mesma coisa que com o ElastiFlow.
O ele chega a pegar os pacotes do tcpdump vindo Huawei F1A, mas nenhum parametro é coletado pela ferramenta.
Deve ter algo que fala ativar no F1A que não tem em nenhum dos tutorias.
parabéns, excelente artigo e obrigado por compartilhar.
Olá! Obrigado pelo tutorial, funcionou.
Porém não funcionou com IPV6. Não localizei neste tutorial sobre a configuração do IPV6 no fastnetmon. Se puderem me ajudar, agradeço!
Olá! primeiramente come sempre, um excelente material!
Gostaria de saber porque no dashboard trafego por prefixo, o meu não trouxe nenhum prefixo. Estou utilizando o Huawei ne8k para exportar flow.
Obrigado.
O problema estava na configuração do fastnetmon.conf neste item:
# enable per subnet speed meters
# For each subnet, list track speed in bps and pps for both directions
enable_subnet_counters = on
esta off e passei para on.
Perfeito, só não conseguir monitorar o trafego por IP
Quanto de armazenamento pra uma maquina dessas ai rodar de boa?
Primeiramente parabéns pelo excelente trabalho! 👏👏👏👏
o que mudaria na configuração para utilizar por exemplo o bgp flowspec ?
Estou tendo um resultado difente. Ao escutar a porta 52055, vejo o huawei enviando diversas informações de netflow para o servidor. Mas quando rodo o comando fastnetmon_client , não é mostrado nenhum endereço IP.
Outgoing, internal traffic e other traffic, incmoing, ficam todos zerados. sem informação nenhuma. Já fiz e refiz, mas não sei porque está dessa forma.
no routeos v7 só funcionou quando preenchi o src address com o ip do equipamento. quando estava 0.0.0.0 não funcionava.
/ip traffic-flow target add src-address=IP DO EQUIPAMENTO dst-address=10.52.52.2 v9-template-refresh=5 v9-template-timeout=1s
Consegui fazer perfeitamente no IPv4 seguindo os passos, para IPv6 seria somente adaptar os filtros com os prefixos v6 ?
Excelente Material!!!
Versão free não tinha suporte, só se agora tem.
Impecável como sempre, nossa guerra é contra os ataques DDoS e suas variantes. Parabéns Rudimar..
Quando agente pensa q acabou o cara surpreende novamente ….
e não é ?… TOP