<?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 Código Aberto - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/codigo-aberto/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/codigo-aberto</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 Código Aberto - Remontti</title>
	<link>https://blog.remontti.com.br/tag/codigo-aberto</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Guia passo a passo para instalação do phpIPAM, um Software de Gerenciamento de Endereços IP</title>
		<link>https://blog.remontti.com.br/2401</link>
					<comments>https://blog.remontti.com.br/2401#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Mon, 12 Jun 2023 15:40:55 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[administração]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[aplicação]]></category>
		<category><![CDATA[Código Aberto]]></category>
		<category><![CDATA[Configuração]]></category>
		<category><![CDATA[configuração de endereços IPs]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[debain]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[documentação]]></category>
		<category><![CDATA[endereços IPs]]></category>
		<category><![CDATA[ferramenta]]></category>
		<category><![CDATA[gerenciamento]]></category>
		<category><![CDATA[gerenciamento de IP]]></category>
		<category><![CDATA[gerenciamento de rede]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[instalaçao]]></category>
		<category><![CDATA[instalação do phpIPAM]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[IPAM]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php7]]></category>
		<category><![CDATA[phpIPAM]]></category>
		<category><![CDATA[rede]]></category>
		<category><![CDATA[servidor de DHCP]]></category>
		<category><![CDATA[servidor dns]]></category>
		<category><![CDATA[Servidor WEB]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[tutorial banco de dados]]></category>
		<category><![CDATA[tutorial de configuração]]></category>
		<category><![CDATA[tutorial de gerenciamento]]></category>
		<category><![CDATA[tutorial de instalação]]></category>
		<category><![CDATA[tutorial Debian]]></category>
		<category><![CDATA[tutorial MariaDB.]]></category>
		<category><![CDATA[tutorial MySQL]]></category>
		<category><![CDATA[tutorial passo a passo]]></category>
		<category><![CDATA[tutorial phpIPAM]]></category>
		<category><![CDATA[tutorial servidor web]]></category>
		<category><![CDATA[tutorial software de gerenciamento]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=2401</guid>

					<description><![CDATA[<p>O phpIPAM é um aplicação de gerenciamento de endereço IPs de código aberto (IPAM). Seu objetivo é fornecer gerenciamento de endereços IP leve, moderno e útil. É uma aplicação baseada em php com backend&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/2401">Guia passo a passo para instalação do phpIPAM, um Software de Gerenciamento de Endereços IP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><center><img fetchpriority="high" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-7493" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian-520x245.jpg 520w" sizes="(max-width: 720px) 100vw, 720px" /></center></p>
<p>O phpIPAM é um aplicação de gerenciamento de endereço IPs de código aberto (IPAM). Seu objetivo é fornecer gerenciamento de endereços IP leve, moderno e útil. É uma aplicação baseada em php com backend de banco de dados MySQL/MariaDB, usando bibliotecas jQuery, ajax e recursos HTML5 / CSS3.</p>
<p><strong><font color="red">Recomendado Debian 12 Bookworm:</font></strong><br />
1 &#8211; <a href="https://blog.remontti.com.br/7236" rel="noopener noreferrer" target="_blank">Debian 12 Bookworm / Instalação Limpa</a><br />
2.a &#8211; <a href="https://blog.remontti.com.br/7460" rel="noopener" target="_blank">Servidor WEB NGINX + PHP 8.2 + MariaDB + phpMyAdmin</a><br />
2.b &#8211; <a href="https://blog.remontti.com.br/7496" rel="noopener" target="_blank">Servidor WEB Apache2 + PHP 8.2 + MariaDB + phpMyAdmin</a><br />
<font size="2"><b><em>phpMyAdmin é opcional</em></b></font></p>
<p><strong><font color="red">Recomendado Debian 11 Bullseye:</font></strong><br />
1- <a href="https://blog.remontti.com.br/5792" rel="noopener noreferrer" target="_blank">Debian 11 Bullseye / Instalação Limpa</a><br />
2- <a href="https://blog.remontti.com.br/5893" rel="noopener noreferrer" target="_blank">Servidor WEB Apache2 + PHP7.4 + MariaDB + phpMyAdmin</a><br />
<font size="2"><b><em>phpMyAdmin é opcional</em></b></font></p>
<p><strong><font color="red">Recomendado Debian 10 Stretch:</font></strong><br />
1- <a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Debian 10 Stretch / Instalação Limpa</a><br />
2.a &#8211; <a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">Servidor WEB Apache2 + PHP7.3 + MariaDB + phpMyAdmin</a><br />
2.b &#8211; <a href="https://blog.remontti.com.br/5465" rel="noopener" target="_blank">Servidor WEB NGINX + PHP7.3 + MariaDB + phpMyAdmin</a><br />
<font size="2"><b><em>phpMyAdmin é opcional</em></b></font></p>
<p><strong><font color="red">Recomendado Debian 9 Buster:</font></strong><br />
<a href="https://blog.remontti.com.br/1152" rel="noopener noreferrer" target="_blank">Instalação Limpa Debian 9 Buster</a><br />
<a href="https://blog.remontti.com.br/2024" rel="noopener noreferrer" target="_blank">Servidor web Apache2, PHP 7.0, MariaDB, PHPMyAdmin</a><br />
<font size="2"><b><em>phpMyAdmin é opcional</em></b></font></p>
<p>Após instalação do servidor WEB+MariaDB, vamos criar nossa base de dados para o phpipam</p>
<pre class="remontti-code"># mariadb -p</pre>
<pre class="remontti-code">
CREATE DATABASE phpipam;
GRANT ALL PRIVILEGES ON phpipam.* TO &#039;phpipam&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Download phpIPAM<br />
Instalação estável: (Nesta data é 1.5.2) <a href="https://github.com/phpipam/phpipam/releases" rel="noopener noreferrer" target="_blank">https://github.com/phpipam/phpipam/releases</a> </p>
<pre class="remontti-code"># cd /tmp
# wget https://github.com/phpipam/phpipam/releases/download/v1.5.2/phpipam-v1.5.2.tgz
# tar vxf phpipam-v1.5.2.tgz
# mv phpipam /var/www/html/phpipam
&lt;pre&gt;# cd /var/www/html/phpipam</pre>
<p>Agora precisamos inserir os dados para o phpipam conectar ao banco de dados. Primeiro copie config.dist.php para config.php e insira os detalhes necessários.</p>
<pre class="remontti-code"># cp config.dist.php config.php
# vim config.php</pre>
<p>Encontre a linha <em>$db['pass'] = 'phpipamadmin';</em> e altere para sua senha, caso tenha utilizado outro usuário e nome de base altere também.</p>
<pre class="remontti-code">
...
$db[&#039;host&#039;] = &quot;localhost&quot;;
$db[&#039;user&#039;] = &quot;phpipam&quot;;
$db[&#039;pass&#039;] = &quot;SUA_SENHA&quot;;
$db[&#039;name&#039;] = &quot;phpipam&quot;;
...</pre>
<p>Se estas utilizando debian 12, sua versão do php é a 8.2 que na versão atual 1.5.2 ainda parece não ter sido testado, para resolver entre no diretório do phpipam e adicione <strong>$allow_untested_php_versions=true;</strong> ao final do arquivo:</p>
<pre class="remontti-code"># cd /var/www/html/phpipam
# echo &#039;$allow_untested_php_versions=true;&#039; &gt;&gt; config.php</pre>
<p>Além disso, nós extraímos o diretório do phpipam fora pasta raiz (/var/www/html), será necessário definir isso (<em>define('BASE', "/");</em>) em config.php, se você colocou no diretório raiz ou configurou um <a href="https://blog.remontti.com.br/3464" rel="noopener noreferrer" target="_blank">domínio virtual (recomendo)</a> para o phpipam não é necessário :</p>
<pre class="remontti-code"># vim config.php</pre>
<p>Altere :</p>
<pre class="remontti-code-plain">define(&#039;BASE&#039;, &quot;/&quot;);</pre>
<p>para:</p>
<pre class="remontti-code-plain">define(&#039;BASE&#039;, &quot;/phpipam/&quot;);</pre>
<p>Instale a extensão gmp do php que é necessária para o funcionamento do phpipam e restarte o apache ou nginx de acordo com seu servidor.</p>
<pre class="remontti-code"># apt install php-gmp -y
# systemctl restart apache2
ou
# systemctl restart nginx</pre>
<p>Agora acesse seu servidor em seu navegado: http://ip-server.ou.dominio/phpipam/</p>
<p>Clique em <strong>[New phpipam installation]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1.png" data-rel="lightbox-gallery-JqN2IwxY" data-rl_title="" data-rl_caption="" title=""><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1.png" alt="" width="1280" height="709" class="alignnone size-full wp-image-7482" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1-768x425.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Clique em <strong>[Automatic database installation]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2.png" data-rel="lightbox-gallery-JqN2IwxY" data-rl_title="" data-rl_caption="" title=""><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2.png" alt="" width="1280" height="832" class="alignnone size-full wp-image-7483" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2-300x195.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2-1024x666.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2-768x499.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Entre com seu usuario: phpipam e senha senha de conexão do banco de dados (SUA_SENHA), clique em [Show advanced options], e <strong>DESMARQUE</strong> as opções: <strong>Create new database</strong> e <strong>Set permissions to tables</strong> e após em <strong>[Install phpipam database]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3.png" data-rel="lightbox-gallery-JqN2IwxY" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3.png" alt="" width="1280" height="878" class="alignnone size-full wp-image-7484" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3-1024x702.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3-768x527.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Uma mensagem "<strong>Database installed successfully!</strong>" será exibida, informado que o banco de dados foi criado com sucesso. Clique em <strong>[Continue]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4.png" data-rel="lightbox-gallery-JqN2IwxY" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4.png" alt="" width="1280" height="940" class="alignnone size-full wp-image-7485" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4-300x220.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4-1024x752.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4-768x564.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a>  </p>
<p>Defina a senha do usuário admin, e clique em <strong>[Save settings]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5.png" data-rel="lightbox-gallery-JqN2IwxY" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5.png" alt="" width="1280" height="709" class="alignnone size-full wp-image-7486" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5-768x425.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Uma mensagem <strong>"Settings updated, installation complete!"</strong> informado que a instalação foi completada! Clique em [<strong>Procced to login</strong>]<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6.png" data-rel="lightbox-gallery-JqN2IwxY" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6.png" alt="" width="1280" height="798" class="alignnone size-full wp-image-7487" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6-300x187.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6-1024x638.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6-768x479.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Entre com o usuário admin e sua senha:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7.png" data-rel="lightbox-gallery-JqN2IwxY" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7.png" alt="" width="1280" height="709" class="alignnone size-full wp-image-7488" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7-768x425.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Prontinho para seu uso!<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8.png" data-rel="lightbox-gallery-JqN2IwxY" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8.png" alt="" width="1280" height="1387" class="alignnone size-full wp-image-7489" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8-277x300.png 277w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8-945x1024.png 945w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8-768x832.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Gostou?</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong></p>
<p><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/2401">Guia passo a passo para instalação do phpIPAM, um Software de Gerenciamento de Endereços IP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2401/feed</wfw:commentRss>
			<slash:comments>40</slash:comments>
		
		
			</item>
		<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-moUh0lOy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" 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="auto, (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-moUh0lOy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" 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="auto, (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-moUh0lOy" 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>
<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-moUh0lOy" 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-moUh0lOy" 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-moUh0lOy" 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-moUh0lOy" 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-moUh0lOy" 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-moUh0lOy" 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-moUh0lOy" 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-moUh0lOy" 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-moUh0lOy" 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>Aprenda a instalar um dos melhores Looking Glasses de código aberto: o Hyperglass</title>
		<link>https://blog.remontti.com.br/7201</link>
					<comments>https://blog.remontti.com.br/7201#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Thu, 30 Mar 2023 13:56:07 +0000</pubDate>
				<category><![CDATA[Huawei]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Arista EOS]]></category>
		<category><![CDATA[BGP AS Path]]></category>
		<category><![CDATA[BGP Community]]></category>
		<category><![CDATA[BIRD]]></category>
		<category><![CDATA[Cisco IOS-XR]]></category>
		<category><![CDATA[Cisco IOS/IOS-XE]]></category>
		<category><![CDATA[Cisco NX-OS]]></category>
		<category><![CDATA[Código Aberto]]></category>
		<category><![CDATA[debian 11]]></category>
		<category><![CDATA[frrouting]]></category>
		<category><![CDATA[Hyperglass]]></category>
		<category><![CDATA[Juniper JunOS]]></category>
		<category><![CDATA[looking glass]]></category>
		<category><![CDATA[Nokia SR OS]]></category>
		<category><![CDATA[Personalização]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[Rota BGP]]></category>
		<category><![CDATA[TNSR]]></category>
		<category><![CDATA[Traceroute]]></category>
		<category><![CDATA[VyOS]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=7201</guid>

					<description><![CDATA[<p>O que é o Hyperglass O hyperglass é um espelho de rede de código aberto escrito por um engenheiro de rede para outros engenheiros de rede. O objetivo de um espelho é fornecer aos&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7201">Aprenda a instalar um dos melhores Looking Glasses de código aberto: o Hyperglass</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/2023/03/hyperglass.jpg" alt="" width="720" height="340" class="size-full wp-image-7229" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<h3>O que é o <a href="https://hyperglass.dev/docs/introduction" rel="noopener" target="_blank">Hyperglass</a></h3>
<p>O hyperglass é um espelho de rede de código aberto escrito por um engenheiro de rede para outros engenheiros de rede. O objetivo de um espelho é fornecer aos clientes, colegas e completos estranhos uma visibilidade autônoma da rede de uma operadora. A hyperglass foi criada com o grande objetivo de beneficiar a comunidade da Internet em geral, fornecendo uma maneira mais rápida, fácil e segura para as operadoras fornecerem serviços de espelhos a seus clientes, colegas e outras operadoras de rede.</p>
<p><strong>Recursos:</strong><br />
 &#8211; Rota BGP<br />
 &#8211; BGP Community<br />
 &#8211; BGP AS Path<br />
 &#8211; Ping<br />
 &#8211; Traceroute</p>
<p><strong>Suporte para: </strong><br />
 &#8211; Arista EOS<br />
 &#8211; BIRD<br />
 &#8211; Cisco IOS-XR<br />
 &#8211; Cisco IOS/IOS-XE<br />
 &#8211; Cisco NX-OS<br />
 &#8211; FRRouting<br />
 &#8211; Huawei<br />
 &#8211; Juniper JunOS<br />
 &#8211; Mikrotik<br />
 &#8211; Nokia SR OS<br />
 &#8211; TNSR<br />
 &#8211; VyOS</p>
<p>Personalização recursos, tema, texto da UI/API, mensagens de erro e comandos.</p>
<p>Ao decorrer do tutorial irei deixar todos os links com referencia a documentação <a href="https://hyperglass.dev/docs/" rel="noopener" target="_blank">https://hyperglass.dev/docs/</a>, pois o mesmo tem muita possibilidades.</p>
<h4>Notas e agradecimento</h4>
<p>O hyperglass é tem sua principal base desenvolvida em Python e está disponível no github.com por <a href="https://github.com/thatmattlove" rel="noopener" target="_blank">thatmattlove</a>, no entanto conta com um grupo no <a href="https://t.me/hyperglasslg" rel="noopener" target="_blank">telegram</a> onde encontrei algumas soluções para huawei, meu conhecimento em Python é limitado (ainda), mas criei meu próprio <a href="https://github.com/remontti/hyperglass" rel="noopener" target="_blank">fork</a> do projeto, e realizei <a href="https://github.com/remontti/hyperglass/commits/main" rel="noopener" target="_blank">algumas alterações</a>. Deixar aqui uma agradecimento a <a href="https://github.com/thatmattlove/hyperglass/compare/main...eaitelecomunicacoes:hyperglass:add_huawei_support" rel="noopener" target="_blank">eaitelecomunicacoes</a> onde encontrei uma contribuição que me ajudou muito. Contamos com ajuda de todos para tornar o projeto algo ainda melhor! Se tiver melhorias nao deixe de realizar um <a href="https://github.com/remontti/hyperglass/pulls" rel="noopener" target="_blank">Pull requests</a>.</p>
<h4>Distribuição Linux</h4>
<p>Todos meus testes foram realizando em cima do Debian 11<br />
&#8211; <strong><a href="https://blog.remontti.com.br/5792" rel="noopener" target="_blank">Instalação do Debian 11 Bullseye limpa passo-a-passo</a></strong></p>
<p>Acesse seu servidor e se torne root da forma correta:</p>
<pre class="remontti-code"># su -</pre>
<h4>Pacotes necessários</h4>
<pre class="remontti-code"># apt install -y python3-dev python3-pip python3-pil python3-pil.imagetk\
 python3-libtiff python3-glymur libtiff-dev libfreetype-dev liblcms2-2\
 liblcms2-utils libwebp-dev libboost-dev libimagequant-dev libraqm-dev\
 libjpeg-dev wget unzip zip git curl gnupg2</pre>
<h4>Script de instalação</h4>
<pre class="remontti-code"># cd /tmp
# wget https://raw.githubusercontent.com/remontti/hyperglass/main/install.sh
# bash install.sh</pre>
<p>Ao finalize execute o comando hyperglass &#8211;help para ver se a instalação esta funcionando.</p>
<pre class="remontti-code"># hyperglass --help</pre>
<pre class="remontti-code-plain">
Usage: hyperglass [OPTIONS] COMMAND [ARGS]...

   hyperglass Command Line Interface

Options:
   -v, --version  <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f522.png" alt="🔢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> hyperglass version
   -h, --help     <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f64f.png" alt="🙏" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Show this help message

Commands:
   build-ui     <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f98b.png" alt="🦋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Create a new UI build
   clear-cache  <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9fc.png" alt="🧼" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Clear the Redis cache
   secret       <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Generate agent secret
   setup        <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Run the setup wizard
   start        <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Start web server
   system-info  <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f321.png" alt="🌡" class="wp-smiley" style="height: 1em; max-height: 1em;" />  Get system information for a bug report</pre>
<h3>Configurando hyperglass</h3>
<pre class="remontti-code"># hyperglass setup</pre>
<p>Vamos definir o diretório de configurações, selecione com a seta para baixo <strong>/etc/hyperglass</strong></p>
<pre class="remontti-code-plain">[?] Choose a directory for hyperglass: /etc/hyperglass
   /root/hyperglass
 &gt; /etc/hyperglass</pre>
<p>Antes de deixar você chanar no <strong>erro webpack</strong>:</p>
<pre class="remontti-code-plain">
[ERROR] 20230330 10:02:32 | hyperglass.util.frontend:401 | build_frontend → 
Messages:
info  - Using webpack 5. Reason: future.webpack5 option enabled https://nextjs.org/docs/messages/webpack5</pre>
<p>Vamos a solução localize `webpack5: true,` e altere para `webpack5: false,`</p>
<pre class="remontti-code"># sed -i &#039;s/webpack5: true,/webpack5: false,/g&#039; /usr/local/lib/python3.9/dist-packages/hyperglass/ui/next.config.js</pre>
<h4>Parâmetros de configuração</h4>
<p>Crie o arquivo /etc/hyperglass/hyperglass.yaml</p>
<pre class="remontti-code"># vim /etc/hyperglass/hyperglass.yaml</pre>
<p>Ajuste suas informações. <a href="https://hyperglass.dev/docs/parameters" rel="noopener" target="_blank">Doc</a>.</p>
<pre class="remontti-code-plain">
# https://hyperglass.dev/docs/parameters
debug: false
developer_mode: false
org_name: Remontti Telecom
primary_asn: 12345
site_title: Looking Glass Remontti
site_description: &quot;{org_name} Network Looking Glass&quot;
site_keywords: [hyperglass, looking glass, routing, bgp]
request_timeout: 30
listen_address: &quot;172.18.18.79&quot;  # IP que ira startar o serviço
listen_port: 80  # Porta do servico
#
# https://hyperglass.dev/docs/response-caching
cache:
  database: 0
  host: localhost
  port: 6379
  show_text: true
  timeout: 120
#
# https://hyperglass.dev/docs/messages/
messages:
  acl_denied: &quot;{target} is a member of {denied_network}, which is not allowed.&quot;
  acl_not_allowed: &quot;{target} is not allowed.&quot;
  authentication_error: Authentication error occurred.
  connection_error: &quot;Error connecting to {device_name}: {error}&quot;
  feature_not_enabled: &quot;{feature} is not enabled for {device_name}.&quot;
  general: Something went wrong.
  invalid_field: &quot;{input} is an invalid {field}.&quot;
  invalid_input: &quot;{target} is not a valid {query_type} target.&quot;
  no_input: &quot;{field} must be specified.&quot;
  no_output: The query completed, but no matching results were found.
  no_response: No response.
  parsing_error: An error occurred while parsing the query output.
  request_timeout: Request timed out.
  vrf_not_associated: VRF {vrf_name} is not associated with {device_name}.
  vrf_not_found: VRF {vrf_name} is not defined.
#
# https://hyperglass.dev/docs/logging/ (/var/log/hyperglass.log)
logging:
  directory: /var/log
  format: text
  max_size: 50 MB
#
# https://hyperglass.dev/docs/query-settings/
queries:
  bgp_route:
    display_name: BGP Route
    enable: true
  bgp_community:
    #Huwei modo structured não fuciona
    display_name: BGP Community
    enable: false
    mode: select
    communities:
      - community: 12345:666
        display_name: Blackhole
        description: 12345:666
  bgp_aspath:
    #Huwei modo structured não fuciona
    display_name: BGP AS Path
    enable: false
    pattern:
      asdot: &#039;^(\^|^\_)((\d+\.\d+)\_|(\d+\.\d+)\$|(\d+\.\d+)\(\_\.\+\_\))+$&#039;
      asplain: &#039;^(\^|^\_)(\d+\_|\d+\$|\d+\(\_\.\+\_\))+$&#039;
      mode: asplain
  ping:
    display_name: Ping
    enable: true
  traceroute:
    display_name: Traceroute
    enable: true
    #
# https://hyperglass.dev/docs/table-output/
structured:
  rpki:
    mode: external

#  communities:
#    #Para não exibir nenhuma communities    
#    mode: deny

#  communities:
#    # Para permitir apenas...
#    mode: permit
#    items:
#      - &#039;65000:\d+&#039;
#      - &#039;65[1-4]00:\d+&#039;

# https://hyperglass.dev/docs/ui/configuration/
web:
  links:
    - title: PeeringDB
      url: https://www.peeringdb.com/asn/12345
      side: left
      order: 1
    - title: Qrator
      url: https://radar.qrator.net/AS12345
      side: left
      order: 2
    - title: RADb
      url: https://www.radb.net/query?advanced_query=&amp;keywords=AS12345
      side: left
      order: 3
    - title: IRR Explorer
      url: https://irrexplorer.nlnog.net/asn/AS12345
      side: left
      order: 4
    - title: RDAP
      url: https://rdap.registro.br/autnum/12345
      side: left
      order: 5    
    - title: Remontti
      url: https://www.remontti.com.br
      side: right
      order: 0
  menus:
    - title: Contato
      content: &quot;Please contact [noc@remontti.com.br](mailto:noc@remontti.com.br) to get support.&quot;
      side: right
    - title: Termos e Condições
      content: /etc/hyperglass/terms-and-conditions.md
      side: right
  # https://hyperglass.dev/docs/ui/logo
  logo:
    dark: /etc/hyperglass/static/images/hyperglass-dark.svg
    light: /etc/hyperglass/static/images/hyperglass-light.svg
    favicon: /etc/hyperglass/static/images/hyperglass-icon.svg
    height: null
    width: 100%
  # https://hyperglass.dev/docs/ui/text
  text:
    cache_icon: Cached from {time} UTC
    cache_prefix: &quot;Results cached for &quot;
    complete_time: Completed in {seconds}
    fqdn_error: Unable to resolve {fqdn}
    fqdn_error_button: Try Again
    fqdn_message: Your browser has resolved {fqdn} to
    fqdn_tooltip: Use {protocol}
    no_communities: No Communities
    query_location: Location
    query_target: Target
    query_type: Query Type
    query_vrf: Routing Table
    rpki_invalid: Invalid
    rpki_unknown: No ROAs Exist
    rpki_unverified: Not Verified
    rpki_valid: Valid
    subtitle: Network Looking Glass
    title: hyperglass
    title_mode: logo_subtitle
  # https://hyperglass.dev/docs/ui/theme
  # https://hyperglass.dev/docs/ui/example</pre>
<h4>Adicionando Dispositivos</h4>
<p>Para adicionar seus dispositivos para cunsultas LG, crie o arquivo /etc/hyperglass/devices.yaml. Vou deixar um exemplo básico para Huawei, Mikrotik e comando personalizados com Linux. <a href="https://hyperglass.dev/docs/adding-devices" rel="noopener" target="_blank">Docs</a>  </p>
<pre class="remontti-code"># vim /etc/hyperglass/devices.yaml</pre>
<p>Adicione de acordo suas configurações</p>
<pre class="remontti-code-plain">
# https://hyperglass.dev/docs/adding-devices
routers:
  - name: AS12345 Remontti
    address: 10.50.50.25
    network:
      name: as12345
      display_name: Huawei
    credential:
      username: lookingglass
      password: supersenha
    port: 22
    nos: huawei
    vrfs:
      - name: global
        default: true
        ipv4:
          source_address: 200.200.200.200
          access_list:
            - network: 10.0.0.0/8
              action: deny
            - network: 192.168.0.0/16
              action: deny
            - network: 100.64.0.0/10
              action: deny
            - network: 172.16.0.0/12
              action: deny
            - network: 0.0.0.0/0
              action: permit
              ge: 8
              le: 32
        ipv6:
          source_address: 2000:2000:1::1
          access_list:
            - network: ::/0
              action: permit
              ge: 32
              le: 128

  - name: Mkzao Remontti
    address: 172.18.18.1
    network:
      name: routerosrr
      display_name: Mikrotik
    credential:
      username: usuario
      password: senha
    port: 22
    nos: mikrotik_routeros
    vrfs:
      - name: global
        default: true
        ipv4:
          source_address: 172.18.18.1
        ipv6:
          source_address: 2001:db8::2

  - name: Localhost Hyperglass
    address: 127.0.0.1
    network:
      name: test1
      display_name: Linux
    credential:
      username: usuario
      password: senha
    nos: linux
    commands: linux_comando_personlizado
    vrfs:
      - name: global
        default: true
        ipv4:
          source_address: 192.168.0.5
        ipv6:
          source_address: 2001:db8:bebe:cafe:5</pre>
<h4>Comandos personalizados</h4>
<pre class="remontti-code"># vim /etc/hyperglass/commands.yaml</pre>
<p>Acima adicionei um device linux, qual temos <a href="https://hyperglass.dev/docs/commands" rel="noopener" target="_blank">comandos personalizado</a>, segue um exemplo de como seria. Crie o arquivo /etc/hyperglass/commands.yaml</p>
<pre class="remontti-code-plain">#https://hyperglass.dev/docs/commands
linux_comando_personlizado:
  ipv4_default:
    bgp_route: &#039;echo bgp_route &quot;{target}&quot;&#039;
    bgp_aspath: &#039;echo bgp_aspath &quot;{target}&quot;&#039;
    bgp_community: &#039;echo bgp_community &quot;{target}&quot;&#039;
    ping: &#039;ping -c 4 &quot;{target}&quot;&#039;
    traceroute: &#039;traceroute -n &quot;{target}&quot;&#039;
  ipv6_default:
    bgp_route: &#039;echo &quot;{target}&quot;&#039;
    bgp_aspath: &#039;echo &quot;{target}&quot;&#039;
    bgp_community: &#039;echo &quot;{target}&quot;&#039;
    ping: &#039;echo &quot;{target}&quot;&#039;
    traceroute: &#039;echo &quot;{target}&quot;&#039;
  ipv4_vpn:
    bgp_route: &#039;echo &quot;{vrf} {target}&quot;&#039;
    bgp_aspath: &#039;echo &quot;{vrf} {target}&quot;&#039;
    bgp_community: &#039;echo &quot;{vrf} {target}&quot;&#039;
    ping: &#039;echo &quot;{vrf} {target}&quot;&#039;
    traceroute: &#039;echo &quot;{vrf} {target}&quot;&#039;
  ipv6_vpn:
    bgp_route: &#039;echo &quot;{vrf} {target}&quot;&#039;
    bgp_aspath: &#039;echo &quot;{vrf} {target}&quot;&#039;
    bgp_community: &#039;echo &quot;{vrf} {target}&quot;&#039;
    ping: &#039;echo &quot;{vrf} {target}&quot;&#039;
    traceroute: &#039;echo &quot;{vrf} {target}&quot;&#039;</pre>
<p>Crie um arquivo para seis termos:</p>
<pre class="remontti-code"># vim /etc/hyperglass/terms-and-conditions.md</pre>
<p>Descreva de acordo suas políticas.</p>
<pre class="remontti-code-plain">Ao usar {site_title}, você concorda em cumprir os seguintes termos de uso:

Todas as consultas executadas nesta página são registradas para análise e solução de problemas. 
Os usuários estão proibidos de automatizar consultas ou tentar processar consultas em massa. Este serviço é fornecido com base no melhor esforço, e {org_name} não oferece garantias ou garantias de disponibilidade ou desempenho.</pre>
<p>Agora vamos a construção da interface do usuário. o Comando a baixo pode levar uns minutinho.</p>
<pre class="remontti-code"># cd /etc/hyperglass/
# hyperglass build-ui</pre>
<p>Aguarde até ter a resposta:</p>
<pre class="remontti-code-plain">[SUCCESS] 20230329 21:36:48 | hyperglass.util.frontend:386 | build_frontend → Completed UI build
<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;" /> Completed UI build in production mode</pre>
<h4>Iniciando o serviço</h4>
<p>Poderíamos iniciar com o comando `hyperglass start`, mas vamos criar um serviço no linux para fazer esse trabalho, para deixar até mesmo automatizado durante o boot. para isso irei criar uma pasta /etc/hyperglass/service/ onde irei criar nosso serviço.</p>
<pre class="remontti-code"># mkdir /etc/hyperglass/service/
# vim /etc/hyperglass/service/hyperglass.service</pre>
<p>Agora vamos instruir o que deve ser feito.</p>
<pre class="remontti-code-plain">
[Unit]
Description=hyperglass
After=network.target
Requires=redis-server.service

[Service]
User=root
Group=root
ExecStart=/usr/local/bin/hyperglass start
ExecStop=/usr/bin/pkill -f hyperglass

TimeoutStartSec=120
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target</pre>
<p>Vamos cria um apontamento, recarecar nosso daemon, dar um enable para deixar iniciando com o boot, em seguida vamos iniciar o serviço.</p>
<pre class="remontti-code"># ln -s /etc/hyperglass/service/hyperglass.service /etc/systemd/system/hyperglass.service
# systemctl daemon-reload
# systemctl enable hyperglass 
# systemctl start hyperglass
# systemctl status hyperglass</pre>
<p>Pode levar um minutinho até iniciar, você pode acompanhar os logs.</p>
<pre class="remontti-code"># tail -f /var/log/hyperglass.log</pre>
<p>Quando aparecer a mensagem a baixo você pode acessar em seu navegador:</p>
<pre class="remontti-code-plain">
...Started hyperglass 1.0.4 on http://SEUIP:PORTA with 6 workers</pre>
<p>Pode verificar também as portas que estão sendo ouvidas.</p>
<pre class="remontti-code"># ss -putan  | grep LISTEN | grep hyperglass</pre>
<p>Acesse me seu navegador http://SEUIP:PORTA</p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0.png" data-rel="lightbox-gallery-bN34okX8" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0.png" alt="" width="1773" height="773" class="alignnone size-full wp-image-7215" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0.png 1773w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0-300x131.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0-1024x446.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0-768x335.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0-1536x670.png 1536w" sizes="auto, (max-width: 1773px) 100vw, 1773px" /></a></p>
<h3>Bonus: Proxy Nginx + Https</h3>
<p>É bem comum querer executar o hyperglass em outra porta e somente para localhost, e criar um proxy para acesso web bem como ativar suporte https para sua página, pois em alguns casos ele pode esta rodando junto com outros serviços sem problema algum. Não é necessário ter uma &#8220;VM&#8221; só para isso. Vamos ao exemplo</p>
<pre class="remontti-code"># vim /etc/hyperglass/hyperglass.yaml</pre>
<p>Altere o IP em <strong>listen_address</strong> para nosso endereço da loopback <strong>127.0.0.1</strong> e defina outra porta <strong>listen_port</strong> que ira rodar o serviço, no meu caso vou usar <strong>58000</strong></p>
<pre class="remontti-code-plain">listen_address: &quot;127.0.0.1&quot;
listen_port: 58000</pre>
<p>Reinicie o hyperglass</p>
<pre class="remontti-code">systemctl restart hyperglass</pre>
<p><strong>Instale o Nxgix</strong></p>
<pre class="remontti-code"># apt install nginx
# sed -i &#039;s/# server_tokens/server_tokens/&#039; /etc/nginx/nginx.conf</pre>
<p>Em alguns caso recomendo deletar as conf padrões, caso tiver problemas.</p>
<pre class="remontti-code"># rm /etc/nginx/sites-enabled/default</pre>
<p>Crie um arquivo de configuração o nginx criar um proxy do nosso hyperglass</p>
<pre class="remontti-code"># vim /etc/nginx/sites-available/hyperglass.conf</pre>
<p>Adicione</p>
<pre class="remontti-code-plain">
server {
  listen 80;
  listen [::]:80;
  server_name lg.remontti.com.br;
  #server_name _;

  # Descomente para deixar restrito apenas para determinados prefixos ou IPs.
  #allow  192.168.87.0/24;
  #allow  127.0.0.1;
  #allow  2001:0db8::/32;
  #allow  ::1;
  #deny   all;
  #error_page  403   http://www.remontti.com.br;

  client_max_body_size 2M;
  root /etc/hyperglass/static;

  location / {
    try_files $uri $uri/ /ui /ui/$uri =404;
    index /ui/index.html;
  }

  location /openapi.json {
      try_files $uri @proxy_to_app;
  }

  location /custom/ {
      try_files $uri $uri/ /custom;
  }

  location /images/ {
      try_files $uri $uri/ /images;
  }

  location /api {
      try_files $uri @proxy_to_app;
  }

  location @proxy_to_app {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://127.0.0.1:58000;
  }
}</pre>
<p>Link o arquivo no diretório /etc/nginx/sites-enabled qual será carregado ao iniciar o nginx, em seguira reinicie o serviço do nginx.</p>
<pre class="remontti-code"># ln -s /etc/nginx/sites-available/hyperglass.conf /etc/nginx/sites-enabled/hyperglass.conf
# systemctl restart nginx</pre>
<p>Agora você já pode acessar seu hyperglass através do nginx.</p>
<h4>Criando certificado</h4>
<p>Ao executar o <strong>Certbot</strong> instalado via apt tive alguns erros do python, acredito que conflitou alguma coisa com o hyperglass, (como meu tempo é bem curto inclusive para esta escrevendo aqui) realizei a instalação via <strong>snap</strong> qual resolveu meu problema.<br />
Segue a instalação do snap:</p>
<pre class="remontti-code"># apt install snapd
# snap install core</pre>
<p>Instale o certbot via snap, crie um link em nossos binários, em seguida execute ele. </p>
<pre class="remontti-code"># snap install --classic certbot
# ln -s /snap/bin/certbot /usr/bin/certbot
# certbot</pre>
<p>Informe os dados, ao finalizar o mesmo irá já ajustar seu arquivo do nginx, e basta acessar seu domínio.</p>
<p>Não esqueça que a cada 90 dias o certificado expira, então crie uma rotina para renovação, você pode adicionar ao cron agendando por exemplo para todo dia primeiro tentar renovar.</p>
<pre class="remontti-code"># echo &#039;00 00   1 * *   root     certbot renew -q&#039; &gt;&gt; /etc/crontab
# systemctl restart cron</pre>
<p><strong>Parabéns você finalizou! 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>
<h4>Prints</h4>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0.png" data-rel="lightbox-gallery-bN34okX8" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0-300x131.png" alt="" width="300" height="131" class="alignnone size-medium wp-image-7215" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0-300x131.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0-1024x446.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0-768x335.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0-1536x670.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_0.png 1773w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1.png" data-rel="lightbox-gallery-bN34okX8" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1-300x141.png" alt="" width="300" height="141" class="alignnone size-medium wp-image-7216" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1-300x141.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1-1024x482.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1-768x362.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1-1536x723.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1-520x245.png 520w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1-720x340.png 720w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1.png 1773w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_3.png" data-rel="lightbox-gallery-bN34okX8" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_3-300x131.png" alt="" width="300" height="131" class="alignnone size-medium wp-image-7214" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_3-300x131.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_3-1024x446.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_3-768x335.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_3-1536x670.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_3.png 1773w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_4.png" data-rel="lightbox-gallery-bN34okX8" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_4-300x137.png" alt="" width="300" height="137" class="alignnone size-medium wp-image-7213" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_4-300x137.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_4-1024x468.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_4-768x351.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_4-1536x702.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_4-980x450.png 980w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_4.png 1773w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_2.png" data-rel="lightbox-gallery-bN34okX8" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_2-300x131.png" alt="" width="300" height="131" class="alignnone size-medium wp-image-7211" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_2-300x131.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_2-1024x446.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_2-768x335.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_2-1536x670.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_2.png 1773w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_5.png" data-rel="lightbox-gallery-bN34okX8" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_5-300x216.png" alt="" width="300" height="216" class="alignnone size-medium wp-image-7210" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_5-300x216.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_5-1024x737.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_5-768x553.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_5-1536x1105.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_5.png 1773w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1_1.png" data-rel="lightbox-gallery-bN34okX8" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1_1-300x131.png" alt="" width="300" height="131" class="alignnone size-medium wp-image-7212" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1_1-300x131.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1_1-1024x446.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1_1-768x335.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1_1-1536x670.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2023/03/hyperglass_huawei_1_1.png 1773w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Abraço!</p>
<p><strong>Fontes:</strong><br />
<a href="https://hyperglass.dev/" rel="noopener" target="_blank">https://hyperglass.dev/</a><br />
<a href="https://hyperglass.dev/docs/" rel="noopener" target="_blank">https://hyperglass.dev/docs/</a></p>
<p>O post <a href="https://blog.remontti.com.br/7201">Aprenda a instalar um dos melhores Looking Glasses de código aberto: o Hyperglass</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/7201/feed</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
	</channel>
</rss>
