<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos notificações - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/notificacoes/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/notificacoes</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Thu, 22 Jun 2023 17:38:46 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.remontti.com.br/wp-content/uploads/2024/09/icone-rr-80x80.png</url>
	<title>Arquivos notificações - Remontti</title>
	<link>https://blog.remontti.com.br/tag/notificacoes</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Fortalecendo a Resiliência da Rede: Detecção de Ataques DDoS com FastNetMon, FRRouting, Grafana e Implementação em Debian 12 com Huawei &#038; RouterOS</title>
		<link>https://blog.remontti.com.br/7322</link>
					<comments>https://blog.remontti.com.br/7322#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 31 May 2023 20:38:50 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[alertas]]></category>
		<category><![CDATA[Análise de Tráfego]]></category>
		<category><![CDATA[Ataque]]></category>
		<category><![CDATA[Código Aberto]]></category>
		<category><![CDATA[Comunidade.]]></category>
		<category><![CDATA[Configuração]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[Debian 12]]></category>
		<category><![CDATA[Defesa]]></category>
		<category><![CDATA[Detecção]]></category>
		<category><![CDATA[detecção de ataques DDoS]]></category>
		<category><![CDATA[fastnetmon]]></category>
		<category><![CDATA[Firewalls]]></category>
		<category><![CDATA[frrouting]]></category>
		<category><![CDATA[Geração de Relatórios]]></category>
		<category><![CDATA[grafana]]></category>
		<category><![CDATA[Infraestrutura de Rede]]></category>
		<category><![CDATA[integração]]></category>
		<category><![CDATA[Melhores Práticas]]></category>
		<category><![CDATA[mitigação]]></category>
		<category><![CDATA[monitoramento]]></category>
		<category><![CDATA[Monitoramento em Tempo Real]]></category>
		<category><![CDATA[NE-Huawei]]></category>
		<category><![CDATA[notificações]]></category>
		<category><![CDATA[Políticas]]></category>
		<category><![CDATA[proteção]]></category>
		<category><![CDATA[resiliência da rede]]></category>
		<category><![CDATA[Roteadores]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Tráfego]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=7322</guid>

					<description><![CDATA[<p>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&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7322">Fortalecendo a Resiliência da Rede: Detecção de Ataques DDoS com FastNetMon, FRRouting, Grafana e Implementação em Debian 12 com Huawei &#038; RouterOS</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><center><a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/fastnetmon.jpg" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img fetchpriority="high" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/fastnetmon.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-7359" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/fastnetmon.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2023/05/fastnetmon-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2023/05/fastnetmon-520x245.jpg 520w" sizes="(max-width: 720px) 100vw, 720px" /></a></center></p>
<p><strong><em>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!</em></strong></p>
<p>Vamos aprender como identificar os ataques Dos/DDoS e anunciar os prefixo atacados (ou atacantes) <strong>de seu AS</strong> em envia-los para uma blackhole, e repassar os mesmo para sua operadora. (Acordo)</p>
<p>Vamos utilizar o <a href="https://github.com/pavel-odintsov/fastnetmon/" rel="noopener noreferrer" target="_blank"><strong>FastNetMon</strong></a> (<strong>Community Edition</strong>) 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). </p>
<p>Farei a instalação no <a href="https://blog.remontti.com.br/7236" rel="noopener" target="_blank"><strong>Debian 12 (Instalação Limpa)</strong></a>. O hardware utilizado por ser bem generoso, 4CPU (se for usar o influx/grafana recomendo 8CPU) e 4GB de memoria. </p>
<p>Adicione <strong>contrib non-free</strong> ao repositório.</p>
<pre class="remontti-code"># vim /etc/apt/sources.list</pre>
<p>Irá ficar assim:</p>
<pre class="remontti-code-plain">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</pre>
<p>Atualize agora o repositório, e os pacotes. </p>
<pre class="remontti-code"># apt update ; apt upgrade -y
# apt install firmware-linux firmware-linux-free firmware-linux-nonfree</pre>
<p>Instale também alguns pacotes que iremos utilizar mais a frente.</p>
<pre class="remontti-code"># apt install wget tcpdump net-tools zip curl -y</pre>
<p><strong>Cenário fictício de exemplo:</strong><br />
Seu AS: 260072 <em>(Madruga Telecom)</em><br />
Operadora AS: 71 <em>(BrUxa71 Telecom)</em><br />
10.52.52.1/24 &#8211; Huawei/RouterOS<br />
10.52.52.2/24 &#8211; Servidor</p>
<h3>Configurando a interface de Rede</h3>
<p>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 <a href="https://blog.remontti.com.br/5848" rel="noopener" target="_blank">nesse tutorial</a>, recomendo uma leitura). </p>
<p>Vamos supor que seu prefixo seja 72.72.72.0/22 e você vai alocar o ip 72.72.72.255<strong>/32</strong> para ser o IP de &#8220;loopback&#8221;. <em>Dica que esse IP não seja próximo a do prefixo público que utiliza em seus servidores</em>. 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.</p>
<pre class="remontti-code"># vim /etc/network/interfaces</pre>
<pre class="remontti-code-plain">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
</pre>
<p>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. </p>
<p>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.</p>
<pre class="remontti-code">
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
</pre>
<pre class="remontti-code">
&lt;HUAWEI&gt; 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
</pre>
<p>É claro que neste caso ficará sem internet, mas podemos aplicar um firewall para enviar que ele fique respondendo, apenas para deixar ele &#8220;escondidinho&#8221;. E para isso vamos usar o nftables (Que já vem instalado por padrão no Debian 11 substituindo o iptables)<br />
Habilite o mesmo para iniciar com o sistema:</p>
<pre class="remontti-code"># systemctl enable nftables</pre>
<p>Vamos montar nosso firewall de forma que apenas conexoes que forem abertas pelo servidor seja respondidas.</p>
<pre class="remontti-code"># vim /etc/nftables.conf</pre>
<pre class="remontti-code-plain">#!/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;
    }
}
</pre>
<p>Inicie o nftables</p>
<pre class="remontti-code"># systemctl enable nftables
# systemctl start nftables</pre>
<p>Você pode simplesmente rodar um scanner de porta no seu IP público bem como um ping, o mesmo não deve responde. </p>
<h3>Instalação FastNetMon (Edição da comunidade)</h3>
<p>FastNetMon se encontra no repositório do Debian 12</p>
<pre class="remontti-code"># apt search fastnetmon</pre>
<pre class="remontti-code-plain">Sorting... Pronto
Full Text Search... Pronto
fastnetmon/testing 1.2.4-2 amd64
  fast DDoS analyzer with sflow/netflow/mirror support (community edition)</pre>
<pre class="remontti-code"># apt install fastnetmon -y</pre>
<p>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</p>
<pre class="remontti-code"># vim /etc/networks_list</pre>
<pre class="remontti-code-plain">72.72.72.0/24
72.72.73.0/24
72.72.74.0/24
72.72.75.0/24
</pre>
<p>Crie também o arquivo que irá conter a lista branca de IPs (Explico mais a frente)</p>
<pre class="remontti-code"># &gt; /etc/networks_whitelist</pre>
<p>As configurações do Fastnetmon ficam em <strong>/etc/fastnetmon.conf</strong>, vamos fazer alguns ajustes básicos:<br />
Vamos começar ativando o serviço de netflow. Utilizarei o comando <strong>sed</strong> que irá buscar no arquivo <strong>netflow = off</strong> e alterar para <strong>netflow = on</strong>, nos comandos seguintes farei o mesmo, se desejar acesse o arquivo e edite manualmente.</p>
<pre class="remontti-code"># sed -i &#039;s/netflow = off/netflow = on/&#039; /etc/fastnetmon.conf</pre>
<p><strong>Ajustes para Huawei</strong></p>
<pre class="remontti-code"># sed -i &#039;s/average_calculation_time = 5/average_calculation_time = 15/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/netflow_sampling_ratio = 1/netflow_sampling_ratio = 1024/&#039; /etc/fastnetmon.conf</pre>
<p><strong>Ajustes para Mikrotik</strong></p>
<pre class="remontti-code"># Não precisa alterar nada aqui</pre>
<p>Defina por quanto tempo em segundos um IP ficará em blackhole o padrão é 1900 seg. No comando estou alterando para 10min: </p>
<pre class="remontti-code"># sed -i &#039;s/ban_time = 1900/ban_time = 600/&#039; /etc/fastnetmon.conf</pre>
<p>Altera o top 7 para o top 10 ao usar o comando fastnetmon_client (Ao seu gosto)</p>
<pre class="remontti-code"># sed -i &#039;s/max_ips_in_list = 7/max_ips_in_list = 10/&#039; /etc/fastnetmon.conf</pre>
<p>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.</p>
<pre class="remontti-code"># sed -i &#039;s/ban_for_flows = off/ban_for_flows = on/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/ban_for_tcp_bandwidth = off/ban_for_tcp_bandwidth = on/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/ban_for_udp_bandwidth = off/ban_for_udp_bandwidth = on/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/ban_for_icmp_bandwidth = off/ban_for_icmp_bandwidth = on/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/ban_for_tcp_pps = off/ban_for_tcp_pps = on/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/ban_for_udp_pps = off/ban_for_udp_pps = on/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/ban_for_icmp_pps = off/ban_for_icmp_pps = on/&#039; /etc/fastnetmon.conf</pre>
<p>Se desejar ter mais detalhes no log, aumenta de 20 para até 200 linhas de registro no log.</p>
<pre class="remontti-code"># sed -i &#039;s/ban_details_records_count = 20/ban_details_records_count = 200/&#039; /etc/fastnetmon.conf</pre>
<p>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, <strong>isso não é regra</strong> mas pode ser uma base inicial. Vamos imaginar então que meu maior plano seja 900MB, farei uma ajuste no <strong>threshold_pps</strong> para 110.000 pps para não pegar alguma rajada inicial. <strong>Mas vale lembrar que inicialmente você precisa estudar sua rede e adaptar a sua realidade.</strong></p>
<pre class="remontti-code"># sed -i &#039;s/threshold_pps = 20000/threshold_pps = 110000/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/threshold_tcp_pps = 100000/threshold_tcp_pps = 90000/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/threshold_udp_pps = 100000/threshold_udp_pps = 90000/&#039; /etc/fastnetmon.conf</pre>
<p>Agora em <strong>threshold_mbps</strong> seria o maior tráfego que você irá permitir, eu normalmente não altero e deixo no padrão 1gb. E em <strong>threshold_flows</strong> o fluxos de limite qual também mantenho o mesmo valor 3500.</p>
<pre class="remontti-code"># sed -i &#039;s/threshold_mbps = 1000/threshold_mbps = 999/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/threshold_tcp_mbps = 100000/threshold_tcp_mbps = 900/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/threshold_udp_mbps = 100000/threshold_udp_mbps = 900/&#039; /etc/fastnetmon.conf</pre>
<p>Ajustes de ICMP</p>
<pre class="remontti-code"># sed -i &#039;s/threshold_icmp_mbps = 100000/threshold_icmp_mbps = 100/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/threshold_icmp_pps = 100000/threshold_icmp_pps = 10000/&#039; /etc/fastnetmon.conf</pre>
<p>O netflow ouve a porta padrão 2055 se desejar alterar basta alterar o valor de <strong>netflow_port</strong>. Irei alterar para 52055.</p>
<pre class="remontti-code"># sed -i &#039;s/netflow_port = 2055/netflow_port = 52055/&#039; /etc/fastnetmon.conf</pre>
<p>Ainda em /etc/fastnetmon.conf temos <strong>notify_script_path</strong> que sempre que o fastnetmon identificar um ataque irá executar o script <strong>/usr/local/bin/notify_about_attack.sh</strong>, identificando o IP da sua rede que está sofrendo <strong>(incoming)</strong> o ataque ou que está atacando <strong>(outgoing)</strong> alguém. <strong>Ele NÃO irá identificar os IPs de origem</strong>, pois em um ataque quase sempre as origens são alteradas por milhares de IPs aleatórios.  </p>
<p>Faça alguns ajustes nos parâmetros do kernel</p>
<pre class="remontti-code"># vim /etc/sysctl.conf</pre>
<p>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 </p>
<pre class="remontti-code-plain">
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</pre>
<p>Carregue as alterações:</p>
<pre class="remontti-code"># sysctl -p</pre>
<p>Habilite e reinicie o fastnetmon para carregar as novas configurações.</p>
<pre class="remontti-code"># systemctl enable fastnetmon
# systemctl restart fastnetmon</pre>
<p>Verifique se a porta 52055/udp esta ouvindo:</p>
<pre class="remontti-code"># netstat -putan  | grep 52055</pre>
<pre class="remontti-code-plain">udp        0      0 0.0.0.0:52055           0.0.0.0:*                           2522/fastnetmon     </pre>
<p>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.</p>
<p><strong>Roteador RuterOS/Mikrotik:</strong><br />
Informe apenas suas interfaces de upstream (operadoras) ex: spf1,sfp1.100</p>
<pre class="remontti-code">
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
</pre>
<p><strong>Roteador Huawei:</strong></p>
<pre class="remontti-code">&lt;HUAWEI&gt; 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</pre>
<p>slot 0 NE8000F1A / slot 10 ou 9 NE8000 M8 / slot 3 NE40</p>
<pre class="remontti-code">[*HUAWEI] slot &lt;0-10&gt;
[*HUAWEI] ip netstream sampler to slot self
[*HUAWEI]  ipv6 netstream sampler to slot self</pre>
<p>Será necessário adicionar em todas suas interfaces de Uplink: </p>
<pre class="remontti-code-plain"> ip netstream inbound
 ip netstream outbound</pre>
<p>Exemplo:</p>
<pre class="remontti-code">
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
</pre>
<p>Com o tcpdump vamos monitorar a interface para ver o que esta chegando na porta.</p>
<pre class="remontti-code"># tcpdump -i enp0s3 -n udp port 52055 -T cnfp -c 10</pre>
<p>Se seu NE estiver mandado os pacotes você terá um resultado como:</p>
<pre class="remontti-code-plain">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 &gt; 10.52.52.2.52055: NetFlow v9
14:25:19.608068 IP 10.52.52.1.40000 &gt; 10.52.52.2.52055: NetFlow v9
14:25:19.668054 IP 10.52.52.1.40000 &gt; 10.52.52.2.52055: NetFlow v9
14:25:19.691123 IP 10.52.52.1.40000 &gt; 10.52.52.2.52055: NetFlow v9
14:25:19.768055 IP 10.52.52.1.40000 &gt; 10.52.52.2.52055: NetFlow v9
14:25:19.781129 IP 10.52.52.1.40000 &gt; 10.52.52.2.52055: NetFlow v9
14:25:19.831133 IP 10.52.52.1.40000 &gt; 10.52.52.2.52055: NetFlow v9
14:25:19.858054 IP 10.52.52.1.40000 &gt; 10.52.52.2.52055: NetFlow v9
14:25:19.941124 IP 10.52.52.1.40000 &gt; 10.52.52.2.52055: NetFlow v9
14:25:19.958060 IP 10.52.52.1.40000 &gt; 10.52.52.2.52055: NetFlow v9
10 packets captured
10 packets received by filter
0 packets dropped by kernel</pre>
<p>Agora com o comando: </p>
<pre class="remontti-code"># fastnetmon_client</pre>
<p>Iremos visualizar os TOP IPs</p>
<pre class="remontti-code-plain">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
</pre>
<p>Perceba que o IP <strong>72.72.72.238</strong> 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 <strong>fastnetmon ignore o mesmo</strong> você pode cria uma <strong>lista branca</strong>. Não se preocupe se isso acontecer com você o fastnetmon não ira fazer nenhuma ação, pois não configuramos nada ainda.<br />
Para criar a lista branca <strong>networks_whitelist</strong> com os IPs ou prefixo que deseja ignorar.</p>
<pre class="remontti-code"># vim /etc/networks_whitelist</pre>
<p>Exemplo</p>
<pre class="remontti-code-plain">72.72.72.224/28
72.72.73.224/28</pre>
<p>Reinicie para carregar as novas configurações.</p>
<pre class="remontti-code"># systemctl restart fastnetmon</pre>
<h3>Bot Telegram</h3>
<p>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 <a href="https://telegram.me/BotFather" rel="noopener" target="_blank">@BotFather</a> e enviar para ele <strong>/newbot</strong>, ele irá pedir qual nome você gostaria de dar a seu bot, e em seguida ira gera um token que vamos precisar a seguir. </p>
<p>Para o Telegram vamos usar um scriptzinho que criei.</p>
<pre class="remontti-code"># 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</pre>
<p>Edite o token.conf e altere para o seu TOKEN.</p>
<pre class="remontti-code"># vim /usr/local/bin/telegram.conf/token.conf</pre>
<pre class="remontti-code">######################################
# Telegram bot                       #
# Create a new bot with @BotFather   #
# get TOKEN                          #
######################################

TOKEN=&quot;123456789:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF&quot;</pre>
<p>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 &#8220;-&#8221; no inicio do ID, já usuários não. Para descobrir o ID do seu usuário fale com o bot <a href="https://telegram.me/myidbot" rel="noopener" target="_blank"><strong>@myidbot</strong></a> e envie para ele <strong>/getid</strong>, para saber de um grupo adicione <strong>@myidbot</strong> ao seu grupo e envie <strong>/getgroupid@myidbot</strong>. Realize um teste com um dos comandos: (Não esqueça de alterar pelo seu ID)</p>
<pre class="remontti-code-plain">Uso: telegram [Opções]
  -m: Para enviar uma mensagem
     ex: telegram -m &quot;ID Chat&quot; &quot;Meu assunto&quot; &quot;Minha mensagem...&quot;
     ex: telegram -m &quot;-123456789&quot; &quot;Notificação&quot; &quot;Mensagem para um grupo ID&quot;
     ex: telegram -m &quot;123456789&quot; &quot;Notificação&quot; &quot;Mensagem para direta/privado&quot;

  -f: Para enviar um arquivo
     ex: telegram -f &quot;ID Chat&quot; &quot;/diretorio/arquivo&quot; &quot;nome do arquivo zip&quot; &quot;Comentário&quot;
     ex: telegram -f &quot;12345689&quot; /var/log/syslog syslog &quot;Logs do sistema para user privado&quot;
     ex: telegram -f &quot;-12345689&quot; /var/log/syslog syslog &quot;Logs do sistema para um grupo&quot;

  -t: Para enviar um arquivo sem compactar
     ex: telegram -f &quot;ID Chat&quot; &quot;/diretorio/arquivo.txt&quot; &quot;Mensagem&quot;
     ex: telegram -f &quot;-12345689&quot; /var/log/fastnetmon.log &quot;Logs do sistema&quot;</pre>
<h3>FRR</h3>
<p>Vamos realizar a instalação do <a href="http://frrouting.org/" rel="noopener" target="_blank">FRRouting</a> (FRR) para fechar sessão BGP entre o roteador de borda e servidor.</p>
<pre class="remontti-code"># apt install frr frr-doc</pre>
<p>Ative o modulo BGP</p>
<pre class="remontti-code"># sed -i &#039;s/bgpd=no/bgpd=yes/&#039; /etc/frr/daemons</pre>
<p>Reinicie o FRR</p>
<pre class="remontti-code"># systemctl restart frr</pre>
<p>Entre no shell VTY do FRR.</p>
<pre class="remontti-code"># vtysh</pre>
<p>Rode o comando: `show running-config`</p>
<pre class="remontti-code-plain">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
</pre>
<p>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 <strong>deixar</strong> ser anunciado <strong>apenas nossos prefixos</strong> e aplicaremos a community <strong>65001:666</strong> para prefixos <strong>/32</strong> e <strong>65001:777</strong> para prefixos <strong>/24</strong></p>
<pre class="remontti-code">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 &quot;BORDA&quot;
 !
 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</pre>
<h4>Configuração RouterOS/Mikrotik </h4>
<p>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.</p>
<pre class="remontti-code">/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</pre>
<p>Atenção para a instance que deve estar selecionada corretamente (use a mesma que você usa com sua operadora).</p>
<pre class="remontti-code">/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</pre>
<p>Exemplo de configuração para filtro para operadora</p>
<pre class="remontti-code">/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=&quot;&quot;
add action=discard chain=OPERADORA_IPv4_EXPORT</pre>
<p>Exemplo de configuração para filtro para mitigação</p>
<pre class="remontti-code">/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</pre>
<h4>Configurações do Huawei</h4>
<pre class="remontti-code">&lt;HUAWEI&gt; system-view
Enter system view, return user view with return command.</pre>
<p>Crie uma rota estática de Blackhole</p>
<pre class="remontti-code">[~HUAWEI] ip route-static 192.0.2.1 255.255.255.255 NULL0 description BLACKHOLE</pre>
<p>Crie um filtro que irá aceitar qualquer rota /32</p>
<pre class="remontti-code">[*HUAWEI] ip ip-prefix  ACCEP_PREFIX_MASK32_FASTNETMON_IPV4 index 10 permit 0.0.0.0 0 greater-equal 32</pre>
<p>Crie um filtro que irá aceitar as rota /24 de seu prefixo</p>
<pre class="remontti-code">[*HUAWEI] ip ip-prefix  ACCEP_PREFIX_MASK24_FASTNETMON_IPV4 index 10 permit 72.72.72.0 22 greater-equal 24</pre>
<p>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)</p>
<pre class="remontti-code">[*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</pre>
<p>Crie um filtro para nossas community  65001:666 65001:777</p>
<pre class="remontti-code">[*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</pre>
<p>Defina community para usar nos RP das operadoras</p>
<pre class="remontti-code">[*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</pre>
<p>Vamos montar agora nosso route policy de import (rotas que iremos receber). A 1ª é ignorar os prefixos <strong>IGNORE_PREFIX_FASTNETMON_IPV4</strong></p>
<pre class="remontti-code">[*HUAWEI] route-policy FASTNETMON_IMPORT_IPV4 deny node 1000
[*HUAWEI]  if-match ip-prefix IGNORE_PREFIX_FASTNETMON_IPV4</pre>
<p>A 2º é o que vir marcado do fastnetmon com 65001:666 (COMM_FASTNETMON_BLACKHOLE_32) jogar para blackhole e aplicar uma community nova <strong>65444:666</strong>, 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!</p>
<pre class="remontti-code">[*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</pre>
<p>Vamos preparar também para receber os prefixos /24 caso for anunciar para um mitigação por exemplo.</p>
<pre class="remontti-code">
[*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</pre>
<p>E a 3ª ignoramos o resto como boas praticas.</p>
<pre class="remontti-code">[*HUAWEI] route-policy FASTNETMON_IMPORT_IPV4 deny node 9999</pre>
<p>Para as route policy de export (Rotas que o NE irá ensinar) colocarei apenas um Deny pois ele não precisa ensinar nada.</p>
<pre class="remontti-code">[*HUAWEI] route-policy FASTNETMON_EXPORT_IPV4 deny node 9999
[*HUAWEI] commit</pre>
<p>Vamos ao peer</p>
<pre class="remontti-code">[~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 </pre>
<p>Em caso de alguma <strong>emergência</strong>, para <strong>baixar</strong> a sessão use:</p>
<pre class="remontti-code">[~HUAWEI] bgp 260072
[*HUAWEI] peer 10.52.52.2 ignore
[*HUAWEI] commit</pre>
<p>Para <strong>subir</strong> novamente:</p>
<pre class="remontti-code">[~HUAWEI] bgp 260072
[*HUAWEI] undo peer 10.52.52.2 ignore
[*HUAWEI] commit</pre>
<p>Verifique se sua sessão subiu:</p>
<pre class="remontti-code">[*HUAWEI] display bgp peer | include 10.52.52.2</pre>
<pre class="remontti-code-plain"> 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</pre>
<p>No FRR use `show bgp summary`</p>
<pre class="remontti-code"># vtysh</pre>
<pre class="remontti-code-plain"># 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</pre>
<p>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:</p>
<p>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.</p>
<pre class="remontti-code">[~HUAWEI] route-policy UPSTREAM_OP_BRUXADO71_EXPORT_IPV4 permit node 2070
[*HUAWEI]  if-match community-filter COMM_BLACKHOLE_32
[*HUAWEI]  apply community 71:666</pre>
<p>Agora tudo que marcamos com community 65444:777 enviamos para mitigraçação</p>
<pre class="remontti-code">[*HUAWEI] route-policy UPSTREAM_MITIGAAI_EXPORT_IPV4 permit node 2070
[*HUAWEI]  if-match community-filter COMM_BLACKHOLE_24
[*HUAWEI]  apply community 1000:9999</pre>
<p>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 <strong>BAN</strong> ou <strong>UNBAN</strong>. Irei criar um diretório /var/log/fastnetmon_attacks/ataques qual irá ficar os ataques finalizados.</p>
<pre class="remontti-code"># mkdir /var/log/fastnetmon_attacks/ataques -p
# vim /usr/local/bin/notify_about_attack.sh</pre>
<p>Altere <strong>ID_CHAT=&#8217;-1000000000000&#8242;</strong> pelo ID do seu usuário ou grupo.<br />
Para anunciar os prefixos /24 do IP atacado altere <strong>ANUNCIAR_24</strong> para <strong>sim</strong><br />
Se não quiser receber o arquivo de log altere <strong>ARQUIVO_DE_LOG</strong> para <strong>nao</strong><br />
Dei uma encrementada para identificar a categoria do IP, que iremos ver em seguido o script que ira identificar, em <strong>IDENT_CATEGORIA</strong> vai poder classificar exemplo se um ip é de CGNAT, servidor&#8230; </p>
<pre class="remontti-code">#!/usr/bin/env bash
#
# Este script receberá os seguintes parâmetros:
# $1 IP do cliente
# $2 INCOMING -&gt; Vindo de fora da rede | OUTGOING -&gt; 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 &quot;-&quot; )
ID_CHAT=&#039;-1000000000000&#039;
#
# Deseja anunciar prefixos /24? (sim/nao)
ANUNCIAR_24=&#039;nao&#039;
#
# Deseja enviar arquivo de log compactado para o telegram? (sim/nao)
ARQUIVO_DE_LOG=&#039;sim&#039;
#
# Deseja identificar a categoria do endereço atacado (sim/nao)
# script python /opt/rr_fastnetmon/prefixos.txt
IDENT_CATEGORIA=&#039;sim&#039;
#
# Seu ASN
ASN=260072
#--------------------------------------------------------------------------------
#
# Pegando prefixo 24
ip32=$1
prefixo24=&quot;${ip32%.*}.0/24&quot;
#
quebralinha=&quot;
&quot;
#
if [ &quot;$2&quot; = &quot;incoming&quot; ]; then
  TIPO=&quot;Sendo atacado&quot;
else
  TIPO=&quot;Realizando um ataque&quot;
fi
#
if [ &quot;$IDENT_CATEGORIA&quot; = &quot;sim&quot; ]; then
  CATEGORIA=$(/opt/rr_fastnetmon/categoria_ip.py $1)
else
  CATEGORIA=&quot;&quot;
fi
#
# Desbanindo um IP
if [ &quot;$4&quot; = &quot;unban&quot; ]; then
  # Remove IP do anuncio para o FRR
  if [ $ANUNCIAR_24 = &quot;sim&quot; ]; then
    /usr/local/bin/telegram -m &quot;$ID_CHAT&quot; &quot;&lt;b&gt;(UNBAN) Anúncios removido&lt;/b&gt;&quot; &quot;&lt;code&gt; Blackhole: $1/32$quebralinha Prefixo: $prefixo24&lt;/code&gt;&quot;
    vtysh --command &quot;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
    &quot;
  else
    /usr/local/bin/telegram -m &quot;$ID_CHAT&quot; &quot;&lt;b&gt;(UNBAN) Anúncio removido&lt;/b&gt;&quot; &quot;&lt;code&gt; Blackhole: $1/32$quebralinha&lt;/code&gt;&quot;
    vtysh --command &quot;configure terminal
    no ip route $1/32 lo
    router bgp $ASN
     address-family ipv4 unicast
      no network $1/32
    &quot;
  fi
  # Movemos os logs para pasta ataques pois não queremos mais receber elas.
  mv /var/log/fastnetmon_attacks/$1* /var/log/fastnetmon_attacks/ataques
  exit 0
fi
#
# Banindo um IP
if [ &quot;$4&quot; = &quot;ban&quot; ]; then
  cp /var/log/fastnetmon_attacks/$1* /var/log/fastnetmon_attacks/$1.log.txt &amp;&gt;/dev/null
  # Anuncia IP ao FRR
  if [ $ANUNCIAR_24 = &quot;sim&quot; ]; then
    /usr/local/bin/telegram -m &quot;$ID_CHAT&quot; &quot;&lt;b&gt;(BAN) $TIPO&lt;/b&gt; [ $3 pps ]&quot; &quot;Anunciando$quebralinha&lt;code&gt; Blackhole: $1/32$quebralinha Prefixo: $prefixo24&lt;/code&gt;$quebralinha &lt;i&gt;$CATEGORIA&lt;/i&gt;&quot;
    vtysh --command &quot;configure terminal
    ip route $1/32 lo
    ip route $prefixo24 lo
    router bgp $ASN
     address-family ipv4 unicast
      network $1/32
      network $prefixo24
    &quot;
  else
    /usr/local/bin/telegram -m &quot;$ID_CHAT&quot; &quot;&lt;b&gt;(BAN) $TIPO&lt;/b&gt; [ $3 pps ]&quot; &quot;Anunciando$quebralinha&lt;code&gt; Blackhole: $1/32&lt;/code&gt;$quebralinha &lt;i&gt;$CATEGORIA&lt;/i&gt;&quot;
    vtysh --command &quot;configure terminal
    ip route $1/32 lo
    router bgp $ASN
     address-family ipv4 unicast
      network $1/32
    &quot;
  fi
  # Envio de log
  if [ $ARQUIVO_DE_LOG = &quot;sim&quot; ]; then
    /usr/local/bin/telegram -t &quot;$ID_CHAT&quot; /var/log/fastnetmon_attacks/$1.log.txt &quot;Logs do ataque&quot;
  fi
  sleep 2
  rm /var/log/fastnetmon_attacks/$1.log.txt &amp;&gt;/dev/null
  exit 0
fi
#
if [ &quot;$4&quot; == &quot;attack_details&quot; ]; then
  # Null
  exit 0
fi
</pre>
<p>De permissão para execução</p>
<pre class="remontti-code"># chmod a+x /usr/local/bin/notify_about_attack.sh</pre>
<p>Crie um diretório em /opt/rr_fastnetmon onde iremos colocar nossos scripts complementares</p>
<pre class="remontti-code"># mkdir /opt/rr_fastnetmon</pre>
<p>Crie o arquivo categoria_ip.py que utiliza python3 (Não se preocupe em instalar o python)</p>
<pre class="remontti-code"># vim /opt/rr_fastnetmon/categoria_ip.py</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">
#!/usr/bin/env python3

import sys
import ipaddress

if len(sys.argv) != 2:
    print(&quot;Uso: categoria_ip.py &lt;endereço IP&gt;&quot;)
    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(&quot;/opt/rr_fastnetmon/prefixos.txt&quot;) as arquivo:
    for linha in arquivo:
        prefixo, cat = linha.strip().split(&quot; &quot;)
        rede = ipaddress.IPv4Network(prefixo)
        if endereco_ip in rede:
            categoria = cat
            break

if categoria is None:
    print(&quot;Categoria não encontrada para o endereço IP&quot;)
else:
    print(&quot;Categoria:&quot;, categoria)


</pre>
<pre class="remontti-code"># chmod +x /opt/rr_fastnetmon/categoria_ip.py</pre>
<p>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.</p>
<pre class="remontti-code"># vim /opt/rr_fastnetmon/prefixos.txt</pre>
<p>Exemplo:</p>
<pre class="remontti-code-plain">
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
</pre>
<p>Teste o script executando como no exemplo:</p>
<pre class="remontti-code"># /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</pre>
<p>Exemplo de alarme no telegram<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/telegram.jpg" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/telegram.jpg" alt="" width="356" height="742" class="alignnone size-full wp-image-7368" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/telegram.jpg 356w, https://blog.remontti.com.br/wp-content/uploads/2023/05/telegram-144x300.jpg 144w" sizes="(max-width: 356px) 100vw, 356px" /></a></p>
<p>Restarte o fastnetmon</p>
<pre class="remontti-code"># systemctl restart fastnetmon</pre>
<p>Se quiser fazer um teste manual simulando um anuncio de um IP (Cuidado se estiver anunciando prefixo) exemplo: 72.72.73.255/32</p>
<pre class="remontti-code"> # /usr/local/bin/notify_about_attack.sh 72.72.73.255 incoming 9996 ban</pre>
<p>Verificando se esta enviando:</p>
<pre class="remontti-code"># vtysh --command &quot; show ip bgp neighbors 10.52.52.1 advertised-routes&quot;</pre>
<pre class="remontti-code-plain">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, &gt; best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop&#039;s vrf id, &lt; 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
*&gt; 72.72.73.255/32  0.0.0.0                  0         32768 i

Total number of prefixes 1</pre>
<p>Para remover:</p>
<pre class="remontti-code"> # /usr/local/bin/notify_about_attack.sh 72.72.73.255 incoming 9996 unban</pre>
<p>Finalizamos a primeira parte sem fazer nenhum estrago ao servidor (CPU) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<p>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: <a href="https://github.com/ekovegeance/DDOS" rel="noopener noreferrer" target="_blank">https://github.com/ekovegeance/DDOS</a> Cuidado você pode criar um alto uso de Hardware na sua rede!!!</p>
<p>Em um servidor/desktop linux vai precisar ter instalado os pacotes bash sudo curl netcat hping3 openssl stunnel nmap whois dnsutils.<br />
<a href="https://github.com/ekovegeance/DDOS/archive/v1.2.4.zip">Baixe os arquivos</a>, extraia entre em sua pasta e execute o arquivo ddos.</p>
<pre class="remontti-code">$ wget https://github.com/ekovegeance/DDOS/archive/v1.2.4.zip
$ unzip v1.2.4.zip 
$ cd DDOS-1.2.4/
$ ./ddos</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos.png" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos.png" alt="" width="676" height="881" class="alignnone size-full wp-image-3988" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos.png 676w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos-230x300.png 230w" sizes="(max-width: 676px) 100vw, 676px" /></a></p>
<h3>Gráficos Grafana</h3>
<p>Habilite o graphite no fastnetmon</p>
<pre class="remontti-code"># sed -i &#039;s/graphite = off/graphite = on/&#039; /etc/fastnetmon.conf</pre>
<p>Vamos instalar o <strong>influxdb</strong> para ser a base de dados</p>
<pre class="remontti-code"># apt install gnupg2 -y
# cd /tmp
# wget -q https://repos.influxdata.com/influxdata-archive_compat.key
# echo &#039;393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key&#039; \
  | sha256sum -c &amp;&amp; cat influxdata-archive_compat.key \
  | gpg --dearmor \
  | tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg &gt; /dev/null
# echo &#039;deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main&#039;\
  | tee /etc/apt/sources.list.d/influxdata.list
# apt update
# apt install influxdb -y</pre>
<p>Crie uma cópia do arquivo de configuração, e edite o mesmo</p>
<pre class="remontti-code"># cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.orig
# vim /etc/influxdb/influxdb.conf</pre>
<p>Localize [[graphite]] e insira a baixo as seguintes linhas:</p>
<pre class="remontti-code-plain">
[[graphite]]
  enabled = true
  bind-address = &quot;:2003&quot;
  protocol = &quot;tcp&quot;
  consistency-level = &quot;one&quot;
  separator = &quot;.&quot;
  templates = [
    &quot;fastnetmon.hosts.* app.measurement.cidr.direction.function.resource&quot;,
    &quot;fastnetmon.networks.* app.measurement.cidr.direction.resource&quot;,
    &quot;fastnetmon.total.* app.measurement.direction.resource&quot;
  ]</pre>
<p>Reinicie o influxdb</p>
<pre class="remontti-code"># systemctl restart influxdb</pre>
<p>Em seguida o fastnetmon</p>
<pre class="remontti-code"># systemctl restart fastnetmon</pre>
<p>Agora vamos acessar o o influxdb para ver se o banco e verificar se o graphite foi criado.</p>
<pre class="remontti-code"># influx</pre>
<pre class="remontti-code-plain">Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10</pre>
<pre class="remontti-code">&gt; SHOW databases</pre>
<pre class="remontti-code-plain">name: databases
name
----
_internal
graphite</pre>
<pre class="remontti-code">&gt; USE graphite</pre>
<pre class="remontti-code-plain">Using database graphite</pre>
<pre class="remontti-code">&gt; SHOW MEASUREMENTS</pre>
<pre class="remontti-code-plain">name: measurements
name
----
hosts
networks
total</pre>
<p>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.</p>
<pre class="remontti-code">&gt; SHOW RETENTION POLICIES ON graphite</pre>
<pre class="remontti-code-plain">name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        true</pre>
<p>Vamos remover o banco, criar novamente com os tempos desejados</p>
<pre class="remontti-code">&gt; DROP DATABASE graphite
&gt; CREATE DATABASE graphite WITH DURATION 90d SHARD DURATION 7d
&gt; SHOW RETENTION POLICIES ON graphite</pre>
<pre class="remontti-code-plain">name    duration  shardGroupDuration replicaN default
----    --------- ------------------ -------- -------
autogen 2160h0m0s 168h0m0s           1        true</pre>
<pre class="remontti-code">&gt; exit</pre>
<p>Reinicie os serviços novamente</p>
<pre class="remontti-code"># systemctl restart influxdb fastnetmon</pre>
<p>Você pode optar pelo modo bruto e remover com script.</p>
<pre class="remontti-code"># vim /root/limpa_graphite.sh</pre>
<p>Ajuste o número de dias que deseja que fique salvo apenas.</p>
<pre class="remontti-code">
#!/bin/bash

# Manter por quantos dias?
DIAS=&quot;7&quot;

# Define o banco de dados
DATABASE=&quot;graphite&quot;

# Define os comandos
COMMANDS=(&quot;DELETE FROM hosts WHERE time &lt; now() - ${DIAS}d&quot; &quot;DELETE FROM networks WHERE time &lt; now() - ${DIAS}d&quot; &quot;DELETE FROM total WHERE time &lt; now() - ${DIAS}d&quot;)

# Executa cada comando
for cmd in &quot;${COMMANDS[@]}&quot;; do
    echo &quot;Executing: $cmd&quot;
    influx -database &quot;$DATABASE&quot; -execute &quot;$cmd&quot;
done

echo &quot;Todos os comandos executados com sucesso&quot;
</pre>
<p>De permissão e execute, se desejar pode adicionar ao cron:</p>
<pre class="remontti-code"># chmod +x /root/limpa_graphite.sh
# /root/limpa_graphite.sh</pre>
<h4>Grafana</h3>
<p>Adicione o repositório do grafana e instale-o</p>
<pre class="remontti-code"># wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
# echo &quot;deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main&quot; | tee -a /etc/apt/sources.list.d/grafana.list
# apt update; apt install grafana -y</pre>
<p>Habilite serviço para inicialização e inicie o mesmo</p>
<pre class="remontti-code"># systemctl enable grafana-server
# systemctl start grafana-server</pre>
<p>Acesse em seu navegador <strong>http://ip_privado:3000</strong> e entre com <strong>usuário e senha admin</strong> 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.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_1.png" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_1.png" alt="" width="1453" height="777" class="alignnone size-full wp-image-7334" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_1.png 1453w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_1-300x160.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_1-1024x548.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_1-768x411.png 768w" sizes="auto, (max-width: 1453px) 100vw, 1453px" /></a></p>
<p>No menu vá em  <strong>Connections</strong>, clique em <strong>Connect data</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a2.png" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a2.png" alt="" width="1445" height="728" class="alignnone size-full wp-image-7338" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a2.png 1445w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a2-300x151.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a2-1024x516.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a2-768x387.png 768w" sizes="auto, (max-width: 1445px) 100vw, 1445px" /></a><br />
Localize influxDB e clique nele<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a3.png" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a3.png" alt="" width="1445" height="530" class="alignnone size-full wp-image-7339" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a3.png 1445w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a3-300x110.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a3-1024x376.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_a3-768x282.png 768w" sizes="auto, (max-width: 1445px) 100vw, 1445px" /></a></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_aa3.png" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_aa3.png" alt="" width="1451" height="583" class="alignnone size-full wp-image-7340" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_aa3.png 1451w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_aa3-300x121.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_aa3-1024x411.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_aa3-768x309.png 768w" sizes="auto, (max-width: 1451px) 100vw, 1451px" /></a></p>
<p>Preencha apenas:<br />
URL:<strong> http://localhost:8086</strong><br />
Database: <strong>graphite</strong><br />
E clique em <strong>Save & test</strong>, você deve ter a resposta <strong>atasource is working. 3 measurements found</strong>.<br />
Mas antes de sair anote o uid que esta na <strong>URL</strong> no meu caso: <strong>da56a879-9ae6-42ca-aeb5-236e8b439be4</strong>, vamos precisar dele para facilitar ao importar as dashs.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_6.png" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_6.png" alt="" width="1428" height="878" class="alignnone size-full wp-image-7341" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_6.png 1428w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_6-300x184.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_6-1024x630.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_6-768x472.png 768w" sizes="auto, (max-width: 1428px) 100vw, 1428px" /></a></p>
<p>Faça <a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/Fastnetmon-Grafana.zip"><strong>download aqui</strong></a> das Dashs e importe.<br />
- Fastnetmon - Home<br />
- Fastnetmon - Painel Geral<br />
- Fastnetmon - Top PPs<br />
- Fastnetmon - Top Prefixos<br />
- Fastnetmon - Top Hosts MBs<br />
- Fastnetmon - Top Tráfego saída<br />
- Fastnetmon - Tráfego por Prefixo<br />
- Fastnetmon - Tráfego por endereço IPv4</p>
<p>Extraia o arquivo zip e abra em um editor de texto os arquivos .json localize <strong>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</strong> e substitua pelo seu <strong>uid</strong>, assim lhe poupará de fazer ajustes manuais.<br />
Se seu desktop é um linux use o comando sed e faça em um unico comando:<br />
`sed -i 's/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/da56a879-9ae6-42ca-aeb5-236e8b439be4/' *.json`<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_7a.png" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_7a.png" alt="" width="1272" height="578" class="alignnone size-full wp-image-7343" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_7a.png 1272w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_7a-300x136.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_7a-1024x465.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_7a-768x349.png 768w" sizes="auto, (max-width: 1272px) 100vw, 1272px" /></a></p>
<p>Volte para o menu <strong>e clique em Dashboards</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_4.png" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_4.png" alt="" width="1440" height="479" class="alignnone size-full wp-image-7336" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_4.png 1440w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_4-300x100.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_4-1024x341.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_4-768x255.png 768w" sizes="auto, (max-width: 1440px) 100vw, 1440px" /></a><br />
Importe uma a um das Dashs.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_5.png" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_5.png" alt="" width="1444" height="580" class="alignnone size-full wp-image-7337" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_5.png 1444w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_5-300x120.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_5-1024x411.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/05/grafana_fastnetmon_5-768x308.png 768w" sizes="auto, (max-width: 1444px) 100vw, 1444px" /></a></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2023/05/painel-geral.png" data-rel="lightbox-gallery-yIHUK2bJ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/05/painel-geral.png" alt="" width="2560" height="947" class="alignnone size-full wp-image-7374" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/05/painel-geral.png 2560w, https://blog.remontti.com.br/wp-content/uploads/2023/05/painel-geral-300x111.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/05/painel-geral-1024x379.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/05/painel-geral-768x284.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/05/painel-geral-1536x568.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2023/05/painel-geral-2048x758.png 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></a></p>
<p>Gostou? Se sentindo mais seguro agora? É consultor e ganha $ com isso!?</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>Fontes:<br />
<a href="https://fastnetmon.com/install/" rel="noopener" target="_blank">https://fastnetmon.com/install/</a><br />
<a href="https://docs.frrouting.org/en/latest/bgp.html" rel="noopener" target="_blank">https://docs.frrouting.org/en/latest/bgp.html</a><br />
<a href="https://deb.frrouting.org/" rel="noopener" target="_blank">https://deb.frrouting.org/</a><br />
<a href="https://fastnetmon.com/docs/influxdb_integration/" rel="noopener" target="_blank">https://fastnetmon.com/docs/influxdb_integration/</a><br />
<a href="https://grafana.com/docs/grafana/latest/installation/debian/" rel="noopener" target="_blank">https://grafana.com/docs/grafana/latest/installation/debian/</a></p>
<p>O post <a href="https://blog.remontti.com.br/7322">Fortalecendo a Resiliência da Rede: Detecção de Ataques DDoS com FastNetMon, FRRouting, Grafana e Implementação em Debian 12 com Huawei &#038; RouterOS</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/7322/feed</wfw:commentRss>
			<slash:comments>24</slash:comments>
		
		
			</item>
		<item>
		<title>Proteja-se de ataques DoS/DDoS mitigando com FastNetMon e anuncie os prefixos atacados (blackholes) para sua operadora, usando Mikrotik :-)</title>
		<link>https://blog.remontti.com.br/3981</link>
					<comments>https://blog.remontti.com.br/3981#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Sat, 25 Jan 2020 02:28:33 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[ataques]]></category>
		<category><![CDATA[bgp]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debina 10]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[exabgp]]></category>
		<category><![CDATA[fastnetmon]]></category>
		<category><![CDATA[ibgp]]></category>
		<category><![CDATA[mitigação]]></category>
		<category><![CDATA[notificações]]></category>
		<category><![CDATA[proteção]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[telegram]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3981</guid>

					<description><![CDATA[<p>Existe um tutorial mais atualizado acesse: Fortalecendo a Resiliência da Rede: Detecção de Ataques DDoS com FastNetMon, FRRouting, Grafana e Implementação em Debian 12 com Huawei &#038; RouterOS 👆 👆 👆 👆 👆 👆&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3981">Proteja-se de ataques DoS/DDoS mitigando com FastNetMon e anuncie os prefixos atacados (blackholes) para sua operadora, usando Mikrotik :-)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><font color="red">Existe um tutorial mais atualizado acesse:</font></h2>
<p><a href="https://blog.remontti.com.br/7322">Fortalecendo a Resiliência da Rede: Detecção de Ataques DDoS com FastNetMon, FRRouting, Grafana e Implementação em Debian 12 com Huawei &#038; RouterOS</a><br />
 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="remontti-code">#
#
#
#
#
#
#
#
</pre>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-3991" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p>Neste tutorial vamos aprender como identificar os ataques Dos/DDoS e anunciar os prefixo atacados (ou atacantes) <strong>de seu AS</strong> em envia-los para uma blackhole, e repassar os mesmo para sua operadora. (Acordo)</p>
<p>Vamos utilizar o <a href="https://github.com/pavel-odintsov/fastnetmon/" rel="noopener noreferrer" target="_blank">FastNetMon</a> 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). </p>
<p>Farei a instalação do FastNetMon no Debian 10 (Instalação Limpa)</p>
<p>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.</p>
<p><strong>Cenário Ex.:</strong><br />
AS &#8211; 15169<br />
172.31.31.1/30 &#8211; RouterOS/Mikrotik<br />
172.31.31.2/30 &#8211; Servidor FastNetMon<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp.png" data-rel="lightbox-gallery-gAWZI2SF" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp.png" alt="" width="1332" height="606" class="alignnone size-full wp-image-3984" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp.png 1332w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp-300x136.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp-1024x466.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp-768x349.png 768w" sizes="auto, (max-width: 1332px) 100vw, 1332px" /></a></p>
<p>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) <em>observe que não irei usar a porta padrão 2055 e sim 62055.</em></p>
<pre class="remontti-code">/ip traffic-flow set active-flow-timeout=1m cache-entries=4k enabled=yes interfaces=&quot;sfp1,VLAN.1234-PTT&quot;
/ip traffic-flow target add dst-address=172.31.31.2 port=62055</pre>
<h3>Instalação FastNetMon</h3>
<p>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 &#8220;caras&#8221; 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&#8230; 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 <strong>multihop</strong>. Bom de seus pulos, ai já é engenharia de redes! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>O pacote do fastnetmon já se encontra no repositório do debian, juntamente algumas pacotes extras que vamos utilizar em seguida.</p>
<pre class="remontti-code"># apt install fastnetmon zip curl wget python-pip socat -y</pre>
<p>Adicione todos os prefixos de se AS, são esses os IPs que ele fará analise. </p>
<pre class="remontti-code"># vim /etc/networks_list</pre>
<p>Exemplo</p>
<pre class="remontti-code">216.58.192.0/22
2800:3f0::/32</pre>
<p>Ajustes as configurações</p>
<pre class="remontti-code"># vim /etc/fastnetmon.conf</pre>
<p>Exlplicarei nos comentários</p>
<pre class="remontti-code"># Quantos pacotes serão coletados do tráfego de ataque
# Aumentamos para ter um log com mais informações
ban_details_records_count = 1000

# Defina por quanto tempo você irá ficar anunciando seu IP atacado a blackhole 
ban_time = 600

# Ative o rastreamento de conexão
enable_connection_tracking = on

# Ativaremos a detecção de ataques, por pacotes por/s, por limite de banda e pro flows.
ban_for_pps = on
ban_for_bandwidth = on
ban_for_flows = on

# Limites de pacotes
threshold_pps = 20000
# Limite de banda (Pode pegar como base o cliente/ plano com mair trafego 
# cuidado com ips de cgnat, eles terão bem mais consumo. 
threshold_mbps = 1000
# Limite por flows
threshold_flows = 3500

# Você pode desativar o sflow (Já que com RouterOS não vamos utiliza-lo)
sflow = off

# Ative o netflow
netflow = on

# Ative o exabgp (É com ele que vamos fechamos nosso per com a borda)
exabgp = on
# Defina para 60 o mesmo tempo setado la no Router (active-flow-timeout=1m)
average_calculation_time = 60

# Altere a porta para mesma que configuramos no Router
netflow_port = 62055

# Informe o IP da sua interface do servidor
exabgp_next_hop = 172.31.31.2

# Script que será executado sempre quer um banir/desbanir
notify_script_path = /usr/local/bin/notify_about_attack.sh</pre>
<p>O fastnetmon sempre que identificar um ataque irá executar <strong>notify_script_path</strong>, identificando o IP da sua rede que está sofrendo <strong>(incoming)</strong> o ataque ou que está cometendo <strong>(outgoing)</strong> o ataque. Ele <strong>NÃO</strong> 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.  </p>
<p>Criaremos então nosso arquivo chamado pelo opção &#8220;notify_script_path&#8221;, 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, <a href="https://blog.remontti.com.br/3053" rel="noopener noreferrer" target="_blank">Zabbix 4.2 enviando alertas no Telegram via Bot (Debian 10)</a>, lá no ínico do tutorial explica como criar o bot, pegar o token e como descobrir o ID de um usuário ou grupo. </p>
<pre class="remontti-code"># 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/</pre>
<p>Não esqueça de alterar o TOKEN para o do seu bot.</p>
<pre class="remontti-code"># vim /usr/local/bin/telegram.conf/token.conf</pre>
<pre class="remontti-code">######################################
# Telegram bot                       #
# Create a new bot with @BotFather   #
# get TOKEN                          #
######################################

TOKEN=&quot;000000000:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF&quot;</pre>
<p>Como usar? É importante você saber que o IDs de grupos tem um &#8220;-&#8221; no inicio do ID, já usuários direto não.</p>
<pre class="remontti-code">Uso: telegram [Opções]
  -m: Para enviar uma mensagem
     ex: telegram -m &quot;ID Chat&quot; &quot;Meu assunto&quot; &quot;Minha mensagem...&quot;
     ex: telegram -m &quot;-123456789&quot; &quot;Notificação&quot; &quot;Mensagem para um grupo ID&quot;
     ex: telegram -m &quot;123456789&quot; &quot;Notificação&quot; &quot;Mensagem para direta/privado&quot;

  -f: Para enviar um arquivo
     ex: telegram -f &quot;ID Chat&quot; &quot;/diretorio/arquivo&quot; &quot;nome do arquivo zip&quot; &quot;Comentário&quot;
     ex: telegram -f &quot;12345689&quot; /var/log/syslog syslog &quot;Logs do sistema para user privado&quot;</pre>
<p>     ex: telegram -f &#8220;-12345689&#8221; /var/log/syslog syslog &#8220;Logs do sistema para um grupo&#8221;</p>
<p>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).</p>
<pre class="remontti-code"># mkdir /var/log/fastnetmon_attacks/ataques
# vim /usr/local/bin/notify_about_attack.sh</pre>
<pre class="remontti-code">
#!/usr/bin/env bash

# This script will get following params:
#  $1 client_ip_as_string
#  $2 data_direction
#  $3 pps_as_string
#  $4 action (ban or unban)

# Desbanindo um IP
if [ &quot;$4&quot; = &quot;unban&quot; ]; then
    /usr/local/bin/telegram -m &quot;-12345678&quot; &quot;UNBAN: $2 Ataque&quot; &quot;&lt;code&gt;IP $1&lt;/code&gt; removido da blackhole&quot;
    # Movemos os logs para pasta ataques pois não queremos mais receber elas.
    mv /var/log/fastnetmon_attacks/$1* /var/log/fastnetmon_attacks/ataques
    # Unban actions if used
    exit 0
fi

# Banindo
if [ &quot;$4&quot; = &quot;ban&quot; ]; then
    /usr/local/bin/telegram -m &quot;-12345678&quot; &quot;BAN: $2 ataque&quot; &quot;&lt;code&gt;IP $1&lt;/code&gt; prefixo anunciado a blackhole&quot;
    /usr/local/bin/telegram -f &quot;-12345678&quot; /var/log/fastnetmon_attacks/$1* $1 &quot;Logs do ataque ao IP $1&quot;
    exit 0
fi

if [ &quot;$4&quot; == &quot;attack_details&quot; ]; then    
    #/usr/local/bin/telegram -m &quot;-12345678&quot; &quot;BAN&quot; &quot;&lt;code&gt;FastNetMon: IP $1 blocked because $2 attack with power $3 pps&lt;/code&gt;&quot;
    exit 0
fi</pre>
<pre class="remontti-code"># chmod a+x /usr/local/bin/notify_about_attack.sh</pre>
<p>Restarte o fastnetmon</p>
<pre class="remontti-code"># systemctl restart fastnetmon</pre>
<h3>Instalação do exaBGP</h3>
<p>Iremos utilizar o <a href="https://github.com/Exa-Networks/exabgp" rel="noopener noreferrer" target="_blank">exaBGP</a> fechar nossa conexão BGP para realizar os anúncios dos prefixos atacados.</p>
<pre class="remontti-code"># pip install exabgp==3.4.20</pre>
<p>Configure o arquivo para fechar o peer.</p>
<pre class="remontti-code"># vim /etc/exabgp.conf</pre>
<pre class="remontti-code">group RouterBorda {
    hold-time 180;
    # AS do nosso ExaBGP (Pode deixar 65001)
    local-as 65001;
    # AS Remoto (Seu AS pois você vai estar fechando com seu roteador de borda)
    peer-as 15169;
    # ID do ExaBGP router (use o mesmo IP da sua placa de rede)
    router-id 172.31.31.2;
    graceful-restart 1200;
    # Remote peer
    neighbor 172.31.31.1 {
        # Endereço IP da interface desse servidor
        local-address 172.31.31.2;
        description &quot;ExaBGP&quot;;
        family {
            ipv4 unicast;
            ipv6 unicast;
        }
    }
    # Processo que vai receber as linhas de comandos para adicionar ou excluir uma prefixo
    process service-dynamic {
        run /usr/bin/socat stdout pipe:/var/run/exabgp.cmd;
    }
}</pre>
<p>Antes de iniciar o exaBGP você precisa criar um peer e alguns filtros em seu roteador de borda, no nosso exemplo routerOS/Mikrotik.</p>
<p><strong>Filtros</strong>:<br />
Crie um filtro de entrada que todas as rotas aprendida do fastnetmon seja setadas como blackhole, e não ensine nada para ele.</p>
<pre class="remontti-code">/routing filter
add action=accept chain=FastNetMon-IN set-type=blackhole
add action=discard chain=FastNetMon-OUT</pre>
<p><strong>Peer</strong>:<br />
Atenção para a <strong>instance</strong> 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=<strong>yes</strong>, como comentado anteriormente.</p>
<pre class="remontti-code">/routing bgp peer
add name=FastNetMon instance=default remote-as=65001 multihop=no  \
 in-filter=FastNetMon-IN out-filter=FastNetMon-OUT \
 remote-address=172.31.31.2 update-source=172.31.31.1</pre>
<p>Para não ter que carregar na mão o exabgp, criaremos um script para inicialização do exaBGP automaticamente.</p>
<pre class="remontti-code"># vim /etc/init.d/exabgp </pre>
<pre class="remontti-code">#!/bin/bash
### BEGIN INIT INFO
# Provides:          exabgp
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
### END INIT INFO

VERMELHO=&#039;\033[1;31m&#039;
VERDE=&#039;\033[1;32m&#039;
NC=&#039;\033[0m&#039;

PROCESSO=$(ps -x |grep -v &quot;grep&quot; |grep -v &quot;/bin/bash&quot; |grep exabgp |wc -l); 

function startExaBGP(){
    if [  $PROCESSO -eq 0 ]
    then
        echo &quot;Iniciandos...&quot;;
        env exabgp.daemon.user=root \
          exabgp.daemon.daemonize=true \
          exabgp.daemon.pid=/var/run/exabgp.pid \
          exabgp.log.destination=/var/log/exabgp.log \
          exabgp /etc/exabgp.conf
        sleep 0.3
        echo -e &quot;ExaBGP [${VERDE} Iniciado ${NC}] &quot;;
    else
        echo -e &quot;ExaBGP já exstá em execuxão. [${VERDE} Ativo ${NC}] &quot;;
    fi
}
 
function stopExaBGP(){
    if [  $PROCESSO -eq 0 ]
    then
        echo -e &quot;ExaBGP não está sendo executado. [${VERMELHO} Parado ${NC}]&quot;;
        
    else 
        echo &quot;Parando...&quot;;
        kill -9 `cat /var/run/exabgp.pid` &amp;&gt;/dev/null
        echo -e &quot;ExaBGP [${VERMELHO} Parado ${NC}] &quot;;
    fi
}

function statusExaBGP(){
    if [  $PROCESSO -eq 0 ]
    then
        echo -e &quot;ExaBGP está [${VERMELHO} Parado ${NC}]&quot;;
    else 
        echo -e &quot;ExaBGP está [${VERDE} Ativo ${NC}]&quot;;
    fi
    echo 
    echo &quot;Logs:&quot;
    tail /var/log/exabgp.log
}

case &quot;$1&quot; in
    start )
        startExaBGP
        ;;
 
    stop )
        stopExaBGP
        ;;
 
    restart )
        stopExaBGP
        sleep 1
        startExaBGP
        ;;
 
    status )
        statusExaBGP      
        ;;
 
    * )
        echo &quot;Opção inválida, use start | stop | restart | status&quot;
        ;;
esac</pre>
<p>De permissão para execução</p>
<pre class="remontti-code"># chmod a+x /etc/init.d/exabgp</pre>
<p>Crie o arquivo de serviço para o programa exabgp.</p>
<pre class="remontti-code"># vim /lib/systemd/system/exabgp.service</pre>
<p>Adicione</p>
<pre class="remontti-code">[Unit]
Description=ExaBGP
After=network.target remote-fs.target

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/etc/init.d/exabgp start
ExecStop=/etc/init.d/exabgp stop
ExecReload=/etc/init.d/exabgp restart
 
[Install]
WantedBy=multi-user.target</pre>
<p>Recarregue a nova definição do serviço:</p>
<pre class="remontti-code"># systemctl daemon-reload</pre>
<p>Ative o novo serviço, e verifique se o mesmo foi ativado</p>
<pre class="remontti-code"># systemctl enable exabgp
# systemctl list-unit-files | grep exabgp</pre>
<p>Reinicie seu servidor</p>
<pre class="remontti-code"># reboot</pre>
<p>Verifique se o exabgp foi carregado na inicialização, e seu peer estabilizou.</p>
<pre class="remontti-code"># systemctl status exabgp</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik.png" data-rel="lightbox-gallery-gAWZI2SF" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik.png" alt="" width="1639" height="381" class="alignnone size-full wp-image-3894" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik.png 1639w, https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik-300x70.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik-1024x238.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik-768x179.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik-1536x357.png 1536w" sizes="auto, (max-width: 1639px) 100vw, 1639px" /></a></p>
<p>Para iniciar/reiniciar os exabgp pode usar os seguintes comandos:</p>
<pre class="remontti-code"># systemctl stop exabgp
# systemctl start exabgp
# systemctl restart exabgp</pre>
<p>Para acompanhar a coleta de flows use o comando:</p>
<pre class="remontti-code"># fastnetmon_client</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon.png" data-rel="lightbox-gallery-gAWZI2SF" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon.png" alt="" width="661" height="610" class="alignnone size-full wp-image-3986" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon.png 661w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon-300x277.png 300w" sizes="auto, (max-width: 661px) 100vw, 661px" /></a></p>
<p>Você vai encontrar tutoriais como integrar com grafana&#8230;. 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:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop.png" data-rel="lightbox-gallery-gAWZI2SF" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop.png" alt="" width="1114" height="277" class="alignnone size-full wp-image-3987" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop.png 1114w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop-300x75.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop-1024x255.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop-768x191.png 768w" sizes="auto, (max-width: 1114px) 100vw, 1114px" /></a></p>
<p>Se quiser fazer algum teste, para anunciar uma rotas manualmente user os seguintes comandos:</p>
<pre class="remontti-code"># echo &quot;announce route 100.101.255.200 next-hop 172.31.31.2 community 65001:666&quot; &gt; /var/run/exabgp.cmd</pre>
<p>E para remover:</p>
<pre class="remontti-code"># echo &quot;withdraw route 100.101.255.200 next-hop 172.31.31.2&quot;  &gt; /var/run/exabgp.cmd</pre>
<h3>Acordo de communities com sua operadora</h3>
<p>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. <strong>Sim esse IP não terá mais internet </strong>(clientes, servidor&#8230;.) 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 <strong>lista branca /etc/networks_whitelist</strong> 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.</p>
<p>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 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>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? </p>
<pre class="remontti-code">/routing filter
add action=accept  chain=AS28146-IPv4-OUT bgp-communities=65001:666 prefix-length=32 set-bgp-communities=28146:666
add action=accept  chain=AS28146-IPv4-OUT prefix=45.189.228.0/22 prefix-length=22-23
add action=discard chain=AS28146-IPv4-OUT</pre>
<p>Explicando a primiera linha:<br />
<strong>action=accept</strong> &#8211;> aceita<br />
<strong>chain=AS28146-IPv4-OUT</strong> &#8211;> nome do seu filtro<br />
<strong>bgp-communities=65001:666</strong> -> todas as rotas marcadas com a communities=65001:666 (as q o fastnetmon nos enviou)<br />
<strong>prefix-length=32</strong> &#8211;> com prefixo apenas /32<br />
set-bgp-communities=28146:666 &#8211;> seta a communitie que você verificou com sua operadora</p>
<p>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:</p>
<pre class="remontti-code">/routing filter
add action=discard chain=AS28146-IPv4-OUT prefix=45.189.228.7/32 prefix-length=32 
add action=accept  chain=AS28146-IPv4-OUT bgp-communities=65001:666 prefix-length=32 set-bgp-communities=28146:666
add action=accept  chain=AS28146-IPv4-OUT prefix=45.189.228.0/22 prefix-length=22-23
add action=discard chain=AS28146-IPv4-OUT</pre>
<p>Agora se você simplesmente não quer que seja bloqueado de forma alguma é só add no filtro do peer com o fastnetmon.</p>
<pre class="remontti-code">/routing filter
add action=discard chain=FastNetMon-IN prefix=45.189.228.7/32 prefix-length=32
add action=accept  chain=FastNetMon-IN set-type=blackhole
add action=discard chain=FastNetMon-OUT</pre>
<p>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:<br />
<a href="https://github.com/ekovegeance/DDOS" rel="noopener noreferrer" target="_blank">https://github.com/ekovegeance/DDOS</a></p>
<p>Em um servidor/desktop linux  vai precisar ter instalado os pacotes bash sudo curl netcat hping3 openssl stunnel nmap whois dnsutils.<br />
<a href="https://github.com/ekovegeance/DDOS/archive/v1.2.4.zip">Baixe os arquivos</a>, extraia entre em sua pasta e execute o arquivo ddos.</p>
<pre class="remontti-code">$ wget https://github.com/ekovegeance/DDOS/archive/v1.2.4.zip
$ unzip v1.2.4.zip 
$ cd DDOS-1.2.4/
$ ./ddos</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos.png" data-rel="lightbox-gallery-gAWZI2SF" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos.png" alt="" width="676" height="881" class="alignnone size-full wp-image-3988" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos.png 676w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos-230x300.png 230w" sizes="auto, (max-width: 676px) 100vw, 676px" /></a></p>
<p>Gostou? Se sentindo mais seguro agora?</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/3981">Proteja-se de ataques DoS/DDoS mitigando com FastNetMon e anuncie os prefixos atacados (blackholes) para sua operadora, usando Mikrotik :-)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3981/feed</wfw:commentRss>
			<slash:comments>47</slash:comments>
		
		
			</item>
		<item>
		<title>Zabbix 4.0 + Alertas no Telegram via Bot</title>
		<link>https://blog.remontti.com.br/2817</link>
					<comments>https://blog.remontti.com.br/2817#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Sat, 03 Nov 2018 20:11:46 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[notificações]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[telegram]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[token]]></category>
		<category><![CDATA[zabbix]]></category>
		<category><![CDATA[zabbix 4]]></category>
		<category><![CDATA[zabbix4]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=2817</guid>

					<description><![CDATA[<p>Existe um tutorial mais atualizado Zabbix 4.2 enviando alertas no Telegram via Bot (Debian 10) Vamos aprender como receber os alertas do zabbix através do telegram. Para instalação do Zabbix 4.0 Instalação do Zabbix&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/2817">Zabbix 4.0 + Alertas no Telegram via Bot</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix-4.0-telegram.jpg" alt="" width="719" height="342" class="alignnone size-full wp-image-2879" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix-4.0-telegram.jpg 719w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix-4.0-telegram-300x143.jpg 300w" sizes="auto, (max-width: 719px) 100vw, 719px" /></p>
<h2><font color="red">Existe um tutorial mais atualizado</font> <a href="https://blog.remontti.com.br/3053" rel="noopener noreferrer" target="_blank">Zabbix 4.2 enviando alertas no Telegram via Bot (Debian 10)</a></h2>
<p>Vamos aprender como receber os alertas do zabbix através do telegram.</p>
<p><strong>Para instalação do Zabbix 4.0</strong><br />
<a href="https://blog.remontti.com.br/2126" rel="noopener noreferrer" target="_blank">Instalação do Zabbix 4.0 / 3.4 / 3.0 no Debian 9 Stretch com banco de dados MariaBD</a></p>
<p><strong>Criando nosso bot</strong></p>
<p>Abra APP do telegram e procure por <a href="https://t.me/BotFather" rel="noopener noreferrer" target="_blank"><strong>@BotFather</strong></a> Comece uma uma conversa com ele.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram1.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram1-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2823" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram1-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram1-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram1.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram2.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram2-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2826" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram2-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram2-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram2.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram3.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram3-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2827" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram3-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram3-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram3.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a></p>
<p>Agora digite <strong>/newbot</strong> para criar um novo bot. Após o comando você vai dar um nome <em>&#8220;Bot Legal RR&#8221;</em>. Em seguida é necessário digitar o nome de login sendo obrigatório terminar com <strong>bot</strong> <em>&#8220;legallrr_bot&#8221;</em>. Você vai ter um retorno com token que vamos utilizar em seguida.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram4.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram4-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2830" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram4-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram4-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram4.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram5.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram5-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2833" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram5-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram5-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram5.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram6.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram6-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2835" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram6-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram6-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram6.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a></p>
<p>Nosso token para acessar a API HTTP:<br />
<strong>757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0</strong></p>
<p>Agora procure pelo seu bot e comece uma conversa com ele e envie uma mensagem de teste para o mesmo, pois vamos precisar descobrir o ID do seu usuário, para que ele possa lhe enviar as mensagens.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram7.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram7-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2837" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram7-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram7-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram7.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram8.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram8-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2838" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram8-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram8-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram8.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a></p>
<p>Agora vamos acessar a seguinte URL https://api.telegram.org/bot<strong>TOKEN</strong>/getUpdates para descobrir o ID do usuário que enviou a mensagem.<br />
Ex.: <font size="2"><em>https://api.telegram.org/bot<strong>757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0</strong>/getUpdates</em></font></p>
<pre class="remontti-code">{&quot;ok&quot;:true,&quot;result&quot;:[{&quot;update_id&quot;:649208620,
&quot;message&quot;:{&quot;message_id&quot;:2,&quot;from&quot;:{&lt;strong&gt;&lt;font color=&quot;red&quot;&gt;&quot;id&quot;:221122111,&quot;&lt;/font&gt;&lt;/strong&gt;is_bot&quot;:false,&quot;first_name&quot;:&quot;Rudimar&quot;,&quot;last_name&quot;:&quot;Remontti&quot;,&quot;username&quot;:&quot;remontti&quot;,&quot;language_code&quot;:&quot;pt-br&quot;},&quot;chat&quot;:{&quot;id&quot;:201149282,&quot;first_name&quot;:&quot;Rudimar&quot;,&quot;last_name&quot;:&quot;Remontti&quot;,&quot;username&quot;:&quot;remontti&quot;,&quot;type&quot;:&quot;private&quot;},&quot;date&quot;:1541210279,&quot;text&quot;:&lt;strong&gt;&lt;font color=&quot;red&quot;&gt;&quot;Testando&quot;&lt;/font&gt;&lt;/strong&gt;}}]}  
</pre>
<p>Você pode criar um grupo também e adicionar seu bot nele, após adiciona-lo envia uma mensagem como <strong>/teste</strong> para que possamos coletar o ID do grupo.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram9.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram9-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2843" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram9-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram9-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram9.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram10.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram10-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2844" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram10-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram10-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram10.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a></p>
<pre class="remontti-code">{&quot;update_id&quot;:649208622,
&quot;message&quot;:{&quot;message_id&quot;:4,&quot;from&quot;:{&quot;id&quot;:221122111,&quot;is_bot&quot;:false,&quot;first_name&quot;:&quot;Rudimar&quot;,&quot;last_name&quot;:&quot;Remontti&quot;,&quot;username&quot;:&quot;remontti&quot;,&quot;language_code&quot;:&quot;pt-br&quot;},&quot;chat&quot;:{&lt;strong&gt;&lt;font color=&quot;red&quot;&gt;&quot;id&quot;:-252697045&lt;/font&gt;&lt;/strong&gt;,&quot;title&quot;:&quot;Grupo Legal&quot;,&quot;type&quot;:&quot;group&quot;,&quot;all_members_are_administrators&quot;:true},&quot;date&quot;:1541210975,&quot;text&quot;:&quot;&lt;strong&gt;&lt;font color=&quot;red&quot;&gt;/teste&lt;/font&gt;&lt;/strong&gt;&quot;,&quot;entities&quot;:[{&quot;offset&quot;:0,&quot;length&quot;:6,&quot;type&quot;:&quot;bot_command&quot;}]}}]}</pre>
<p>Note que o nome do grupo meu com um &#8220;<strong>&#8211;</strong>&#8221; no inicio do ID.</p>
<p>Para testarmos se o envio esta funcionando, abra seu navegador e cole a seguinte URL:<br />
https://api.telegram.org/bot<strong><font color="red">TOKEN</font></strong>/sendMessage?chat_id=<strong><font color="red">ID</font></strong>&amp;text=<font color="red">Minha%20Mensagem</font><br />
Ex.: <font size="2"><em>https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/sendMessage?chat_id=-252697045&amp;text=Minha%20Mensagem<br />
https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/sendMessage?chat_id=221122111&amp;text=Mensagem%20Direta</em></font><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram11.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram11-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2847" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram11-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram11-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram11.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram12.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram12-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2848" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram12-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram12-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix_bot_telegram12.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a></p>
<p>Vamos instalar o curl, uma ferramenta para comando para transferência de dados com sintaxe URL.</p>
<pre class="remontti-code"># apt install curl</pre>
<p>O diretório padrão no zabbix para os scripts fica em /usr/lib/zabbix/alertscripts/.<br />
<font size="2">(Obs: No tutorial Zabbix 3.0.x com notificações via Telegram nos alteramos o valor de AlertScriptsPath, então caso você seja um leitor que quer apenas migrar, volte o diretório esta em /opt/telegram)</font></p>
<p>Vamos criar o arquivo telegram</p>
<pre class="remontti-code"># vim /usr/lib/zabbix/alertscripts/telegram</pre>
<pre class="remontti-code">#!/bin/bash

TOKEN=&quot;ALTERE-PELO-SEU-TOKEN&quot;

USER=$1
SUBJECT=$2

curl --silent --output /dev/null &quot;https://api.telegram.org/bot$TOKEN/sendMessage?chat_id=$USER&amp;text=$SUBJECT&quot;

exit 0</pre>
<p>De permissão para executar, em seguida vamos criar um atalho em /usr/bin/ e alterar as permissões para o usuário do zabbix.</p>
<pre class="remontti-code"># chmod +x /usr/lib/zabbix/alertscripts/telegram
# ln -s /usr/lib/zabbix/alertscripts/telegram /usr/bin/telegram
# chown zabbix. -R /usr/lib/zabbix/alertscripts</pre>
<p>Agora execute em seu terminal</p>
<pre class="remontti-code"># telegram &quot;-252697045&quot; &quot;Mensagem via Terminal para o grupo&quot;
# telegram &quot;221122111&quot; &quot;Mensagem via Terminal para o grupo&quot;</pre>
<p><strong>Integrando o Telegram com o Zabbix</strong></p>
<p>Se você recebeu as mensagens agora vamos ao nosso zabbix.<br />
Clique em: <strong>Administração</strong> ⇒ <strong>Tipos de mídias</strong> ⇒ <strong>Criar tipo de mídia</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram--300x118.png" alt="" width="300" height="118" class="alignnone size-medium wp-image-2855" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram--300x118.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram--768x302.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram--980x386.png 980w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-.png 982w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Nome: <strong>Telegram</strong><br />
Tipo: <strong>Script</strong><br />
Nome script: <strong>telegram</strong><br />
Parâmetros do script<br />
<strong>{ALERT.SENDTO}<br />
{ALERT.SUBJECT}</strong><br />
Ativo: <strong>Sim</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-2.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-2-300x174.png" alt="" width="300" height="174" class="alignnone size-medium wp-image-2856" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-2-300x174.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-2.png 705w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Clique em: <strong>Adicionar</strong></p>
<p>Agora vá em: <strong>Administração</strong> ⇒ <strong>Usuários</strong> e sobre o usuário <strong>Admin</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-3.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-3-300x173.png" alt="" width="300" height="173" class="alignnone size-medium wp-image-2858" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-3-300x173.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-3.png 667w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Com as opções do usuário aberto clique na aba <strong>Mídia</strong> e em <strong>Adicionar</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-4.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-4-300x111.png" alt="" width="300" height="111" class="alignnone size-medium wp-image-2859" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-4-300x111.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-4.png 740w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Tipo: <strong>Telegram</strong><br />
Enviar para: <strong>ID-Do-Grupo/ID-Usuário</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-5.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-5-300x165.png" alt="" width="300" height="165" class="alignnone size-medium wp-image-2861" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-5-300x165.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-5.png 666w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
<strong>Adicionar</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-6.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-6-300x89.png" alt="" width="300" height="89" class="alignnone size-medium wp-image-2862" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-6-300x89.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-6.png 749w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
<strong>Atualizar</strong></p>
<p>Agora vamos criar a ação que fará o envios dos alertas.<br />
Menu: <strong>Configurações</strong> ⇒ <strong>Ações</strong> ⇒ <strong>Criar ação</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-7.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-7-300x58.png" alt="" width="300" height="58" class="alignnone size-medium wp-image-2863" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-7-300x58.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-7-768x147.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-7.png 974w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>De um nome para sua ação<br />
Nome: <em><strong>Reportar Problema no Telegram</strong></em><br />
Crie uma no Nova condição: <strong>Incidente suprimido</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-8.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-8-300x142.png" alt="" width="300" height="142" class="alignnone size-medium wp-image-2864" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-8-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-8-520x245.png 520w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-8-720x340.png 720w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-8.png 758w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-9.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-9-300x128.png" alt="" width="300" height="128" class="alignnone size-medium wp-image-2865" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-9-300x128.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-9-768x327.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-9.png 781w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Na aba <strong>Operações</strong><br />
<strong>Assunto padrão</strong>:</p>
<pre class="remontti-code"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> {HOST.NAME} • {TRIGGER.NAME} = {ITEM.NAME1} {ITEM.VALUE1}</pre>
<p>Operação: Clique em <strong>Nova</strong> Mais campos se abrirão, agora em <strong>Enviar para Usuário</strong> Clique em <strong>Adicionar</strong> e Selecione o Usuário <strong>Admin</strong> qual configuramos a mídia. Na opção <strong>Enviar apenas para</strong>: Selecione <strong>Telegram</strong>, e em seguida <strong>Adicionar</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-10.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-10-300x272.png" alt="" width="300" height="272" class="alignnone size-medium wp-image-2867" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-10-300x272.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-10-768x695.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-10.png 937w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Vamos repetir a mesma coisa na aba <strong>Operações de recuperação</strong><br />
Mas com o<strong> Assunto padrão</strong>:</p>
<pre class="remontti-code"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" />  {HOST.NAME} • {TRIGGER.NAME} = {ITEM.NAME1} {ITEM.VALUE1}</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-11.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-11-300x207.png" alt="" width="300" height="207" class="alignnone size-medium wp-image-2872" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-11-300x207.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-11-768x530.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-11.png 943w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Pode clicar agora em <strong>Adicionar</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-12.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-12-300x123.png" alt="" width="300" height="123" class="alignnone size-medium wp-image-2874" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-12-300x123.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-12-768x316.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-12.png 842w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-13.png" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-13-300x110.png" alt="" width="300" height="110" class="alignnone size-medium wp-image-2875" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-13-300x110.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-13-768x282.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-13-980x360.png 980w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix4-telegram-13.png 982w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Pronto! Agora precisamos gerar um incidente para ver se nosso alerta será enviado para o Telegram.<br />
No meu caso vou fazer uma edição /etc/bind/named.conf.options qual possuo um template que criei onde ele verifica a cada modificação no arquivo e me envia um alerta <em>vfs.file.cksum[/etc/bind/named.conf.options].diff(0)}&gt;0</em></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix-telegram-14.jpg" data-rel="lightbox-gallery-79wTfoSc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix-telegram-14-169x300.jpg" alt="" width="169" height="300" class="alignnone size-medium wp-image-2876" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix-telegram-14-169x300.jpg 169w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix-telegram-14-576x1024.jpg 576w, https://blog.remontti.com.br/wp-content/uploads/2018/11/zabbix-telegram-14.jpg 720w" sizes="auto, (max-width: 169px) 100vw, 169px" /></a><br />
Bingo! Tudo certo, nosso sistema de envio de mensagem está concluído!</p>
<p>Gostou? Deixe seu comentário ficarei feliz em saber que lhe ajudei, e se tiver qualquer pergunta deixe-a também, se preferir acesse o menu <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">Contato</a> lá você encontra meios de falar comigo!</p>
<p>Abraço!</p>
<p><font size="2">Fontes: <a href="https://core.telegram.org/bots" rel="noopener noreferrer" target="_blank">https://core.telegram.org/bots</a> &amp; <a href="https://www.zabbix.com/documentation/" rel="noopener noreferrer" target="_blank">https://www.zabbix.com/documentation/</a></font></p>
<p>O post <a href="https://blog.remontti.com.br/2817">Zabbix 4.0 + Alertas no Telegram via Bot</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2817/feed</wfw:commentRss>
			<slash:comments>51</slash:comments>
		
		
			</item>
	</channel>
</rss>
