<?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 Mikrotik - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/mikrotik/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/mikrotik</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Tue, 24 Mar 2026 13:00:23 +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 Mikrotik - Remontti</title>
	<link>https://blog.remontti.com.br/tag/mikrotik</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Configurando OpenVPN no RouterOS v7</title>
		<link>https://blog.remontti.com.br/7921</link>
					<comments>https://blog.remontti.com.br/7921#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 12 Apr 2024 20:58:46 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[configuração de rede]]></category>
		<category><![CDATA[configuração de VPN]]></category>
		<category><![CDATA[criptografia]]></category>
		<category><![CDATA[IP público]]></category>
		<category><![CDATA[isp]]></category>
		<category><![CDATA[MikroTik Hex RB750Gr3]]></category>
		<category><![CDATA[OpenVPN]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[RouterOS 6]]></category>
		<category><![CDATA[RouterOS 7]]></category>
		<category><![CDATA[Segurança de Rede]]></category>
		<category><![CDATA[tutoriais MikroTik]]></category>
		<category><![CDATA[vpn]]></category>
		<category><![CDATA[VPN segura]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=7921</guid>

					<description><![CDATA[<p>Hoje, vamos aprender a configurar o OpenVPN no RouterOS v7. Com vasta experiência junto a ISPs, percebo que muitos ainda utilizam protocolos como PPTP, SSTP e L2TP, que oferecem menor segurança. Optar pelo OpenVPN&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7921">Configurando OpenVPN no RouterOS v7</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img fetchpriority="high" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/openvpn-remontti.com_.br_.png" alt="" width="1530" height="826" class="alignnone size-full wp-image-7933" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/openvpn-remontti.com_.br_.png 1530w, https://blog.remontti.com.br/wp-content/uploads/2024/04/openvpn-remontti.com_.br_-300x162.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/openvpn-remontti.com_.br_-1024x553.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/openvpn-remontti.com_.br_-768x415.png 768w" sizes="(max-width: 1530px) 100vw, 1530px" /><br />
Hoje, vamos aprender a configurar o OpenVPN no RouterOS v7. Com vasta experiência junto a ISPs, percebo que muitos ainda utilizam protocolos como PPTP, SSTP e L2TP, que oferecem menor segurança. Optar pelo OpenVPN é uma escolha superior, pois ele não só fornece criptografia robusta e configurações altamente personalizáveis, mas também garante uma proteção mais eficaz contra as vulnerabilidades comuns nesses protocolos menos seguros.</p>
<p>Para configurar nosso servidor OpenVPN, precisaremos de um IP público para acessar o servidor. Uma vantagem interessante é que esse IP pode estar em &#8220;<strong>blackhole</strong>&#8220;, o que significa que ele não responderá a nenhuma porta indiscriminadamente, economizando recursos da CPU ao evitar a criação extensiva de regras de firewall. Vou ilustrar essa configuração com um exemplo prático:</p>
<p>Imagine que você adquiriu um MikroTik <em>Hex RB750Gr3</em> para gerenciar sua rede interna. Você conecta esse dispositivo ao seu roteador de borda. Para configurar a comunicação, você estabelece um segmento de rede /30, por exemplo, 10.7.7.0/30. No roteador de borda, você configura o IP 10.7.7.1/30, e no seu Hex RB750Gr3, você configura o IP 10.7.7.2/30. Em seguida, você adiciona um gateway padrão com o IP 10.7.7.1 e configura na tabela de rotas o IP 250.250.250.250 em balckhole.</p>
<p>No roteador de borda, você cria uma rota estática com destino a 250.250.250.250 com gateway 10.7.7.2. Com isso, você estabelece um caminho direto para o seu IP público, mas sem responder a nenhuma solicitação de conexão externa.</p>
<p>Se você precisar acessar o dispositivo via Winbox, basta criar uma regra de redirecionamento (redirect) para essa porta específica, permitindo o acesso externo somente por ela. Usar um IP em &#8220;blackhole&#8221; é como ter um firewall que automaticamente descarta qualquer pacote não solicitado, proporcionando uma camada extra de segurança e eficiência.</p>
<h3>Exemplo acima ficaria da seguinte forma:</h3>
<p><strong>Borda</strong></p>
<pre class="remontti-code">
# Adicione o IP à interface que comunica com sua HE
/ip address add address=10.7.7.1/30 comment=&quot;WAN&quot; interface=ether1

# Cria rota estática dizendo que seu IP público está atrás do endereço &quot;tal&quot;
/ip route add comment=&quot;Rota_HEX&quot; dst-address=250.250.250.250/32 gateway=10.7.7.2
</pre>
<p><strong>Hex RB750Gr3</strong></p>
<pre class="remontti-code">
# Adicione o IP à interface que comunica com sua Borda
/ip address add address=10.7.7.2/30 comment=&quot;WAN&quot; interface=ether1

# Adiciona um gateway
/ip route add comment=&quot;Gateway&quot; dst-address=0.0.0.0/0 gateway=10.7.7.1

# Adiciona seu IP público em blackhole
/ip route add blackhole comment=&quot;Blackhole&quot; dst-address=250.250.250.250/32

# Redirect para winbox (Não use porta padrão para segurança, ex: 61000)
/ip firewall nat add action=redirect chain=dstnat comment=&quot;Winbox&quot; \
    dst-address=250.250.250.250 dst-port=61000 protocol=tcp to-ports=8291
</pre>
</p>
<h3>Configurando o Servidor OpenVPN</h3>
<p>Para a criação do servidor OpenVPN, será necessário gerar três certificados distintos. Seguem os passos detalhados:</p>
<p><strong>Crie o certificado CA (Certificado de Autoridade)</strong></p>
<p>Para iniciar, crie o certificado da Autoridade Certificadora (CA), que será a base da confiança dos certificados subsequentes:</p>
<pre class="remontti-code">/certificate add name=CA common-name=CA key-usage=crl-sign,key-cert-sign days-valid=36500</pre>
<p>Após criar o certificado CA, você deve assiná-lo. Substitua <strong>250.250.250.250</strong> pelo seu IP público:</p>
<pre class="remontti-code">/certificate sign CA ca-crl-host=250.250.250.250</pre>
<p><strong>Crie e assine o certificado SERVIDOR</strong></p>
<p>Este certificado será usado para autenticar o servidor durante as conexões:</p>
<pre class="remontti-code">/certificate add name=SERVIDOR common-name=SERVIDOR key-usage=digital-signature,key-encipherment,tls-server days-valid=36500
/certificate sign SERVIDOR ca=CA
/certificate set SERVIDOR trusted=yes</pre>
<p><strong>Crie e assine o certificado CLIENTE</strong></p>
<p>Em seguida, crie o certificado do cliente, que será utilizado pelos clientes para estabelecer uma conexão segura com o servidor:</p>
<pre class="remontti-code">/certificate add name=CLIENTE common-name=CLIENTE key-usage=tls-client days-valid=36500
/certificate sign CLIENTE ca=CA</pre>
<p><strong>Exportação dos certificados</strong></p>
<p>Por fim, exporte os certificados para arquivos PEM, o que facilitará a importação em diferentes clientes. Não se esqueça de substituir <strong>sup3s3nha0p3nvpn</strong> pela senha que protegerá o certificado do cliente:</p>
<pre class="remontti-code">/certificate export-certificate CA type=pem file-name=CA
/certificate export-certificate CLIENTE type=pem file-name=CLIENTE export-passphrase=sup3s3nha0p3nvpn</pre>
<p>Este processo garante que tanto o servidor quanto os clientes possam estabelecer uma conexão VPN segura através do uso de certificados confiáveis.</p>
<p>Irá ser criado 3 arquivos CA.crt, CLIENTE.crt e CLIENTE.key</p>
<pre class="remontti-code">/file print </pre>
<pre class="remontti-code-plain"> # NAME                             TYPE                                   SIZE CREATION-TIME       
 0 CA.crt                           .crt file                              1180 apr/12/2024 14:33:11
 1 CLIENTE.crt                      .crt file                              1143 apr/12/2024 14:33:16
 2 CLIENTE.key                      .key file                              1858 apr/12/2024 14:33:16</pre>
<p>Pelo menu FILE do winbox faça download do mesmo se você estiver utilizando a versão 6 do RouterOS, para versão 7 não é necessário baixar, pois o mesmo tem um gerador que iremos ver mais a frente.</p>
<p>Agora vamos as configurações que serão entregues ao cliente. Crie uma pool qual será entregue.</p>
<pre class="remontti-code">/ip pool 
add name=POOL_OpenVPN ranges=192.168.250.128/25</pre>
<p>Crie um o profile especifico para OPEN_VPN, no exemplo estou definindo também uma velocidade de 50MB de upload e download.</p>
<pre class="remontti-code">/ppp profile
add change-tcp-mss=yes local-address=192.168.250.1 name=OPEN_VPN rate-limit=50m/50m remote-address=POOL_OpenVPN use-encryption=yes</pre>
<p>Se você deseja ser notificado via Telegram sempre que alguém se conectar ao seu servidor VPN (algo que eu recomendo e costumo fazer), você pode facilmente configurar essa integração editando o perfil no servidor e incluindo um script para enviar alertas. Para isso, siga os passos abaixo:</p>
<p>1. Acesse o perfil do servidor VPN (<strong>OPEN_VPN</strong>) e localize a aba &#8220;Scripts&#8221;.<br />
2. Insira o script fornecido, substituindo `XXXXXXXXXXXXXXXXXXXXXX` pelo token do seu bot no Telegram, e `-10000000000` pelo ID do seu grupo ou usuário do Telegram.<br />
<strong># On Up:</strong></p>
<pre class="remontti-code">:local callerId $&quot;caller-id&quot;
/tool fetch url=&quot;https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXX/sendMessage\?parse_mode=HTML&amp;chat_id=-10000000000&amp;text=%E2%9D%8E%20OpenVPN%20ON%20USUARIO:%20&lt;code&gt;$user&lt;/code&gt;%20ORIGEM:%20&lt;code&gt;$callerId&lt;/code&gt;&amp;disable_web_page_preview=true&quot; keep-result=no</pre>
<p><strong># On Down:</strong></p>
<pre class="remontti-code">
:local callerId $&quot;caller-id&quot;
/tool fetch url=&quot;https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXX/sendMessage\?parse_mode=HTML&amp;chat_id=-10000000000&amp;text=%E2%9D%8C%20OpenVPN%20OFF%20USUARIO:%20&lt;code&gt;$user&lt;/code&gt;%20ORIGEM:%20&lt;code&gt;$callerId&lt;/code&gt;&amp;disable_web_page_preview=true&quot; keep-result=no</pre>
<p>Esse ajuste permitirá que você receba uma notificação imediata sempre que ocorrer uma conexão, aumentando o controle e a segurança da sua rede.</p>
<p>Faça uma <strong>regra de NAT </strong>(src-nat) para fornecer internet ao cliente, onde 250.250.250.250 é nosso querido IP que está em blackhole, e ether1 seria minha interface WAN (Upstream)</p>
<pre class="remontti-code">
/ip firewall nat
add action=src-nat chain=srcnat comment=&quot;NAT_OpenVPN&quot; out-interface=ether1 \
    src-address=192.168.250.128/25 to-addresses=250.250.250.250</pre>
<p>Iremos ativar o servidor OpenVPN agora, a porta padrão é a 1194, porem estarei adotando a boa pratica de utilizar outra como a 61194</p>
<pre class="remontti-code">/interface ovpn-server server
add name=open-vpn-server \
 auth=sha1 \
 certificate=SERVIDOR \
 cipher=aes256-cbc \
 default-profile=OPEN_VPN \
 require-client-certificate=yes \
 port=61194 \
 redirect-gateway=def1

/interface ovpn-server server print
/interface ovpn-server server enable 0
</pre>
<p><strong>Crie seus usuários</strong>, vou criar um de exemplo:</p>
<pre class="remontti-code">/ppp secret add comment=&quot;Key: sup3s3nha0p3nvpn&quot; name=remontti@remontti.vpn profile=OPEN_VPN service=ovpn password=su4senhAparaL0gar </pre>
<p>Você pode também utilizar os usuários via Radius, basta fazer a integração. Exemplo:</p>
<pre class="remontti-code">/ppp aaa set interim-update=5m use-radius=yes
/radius add address=10.10.10.10 secret=senha service=ppp</pre>
<p><strong>Na versão 7 </strong>do routerOS podemos criar nosso <em>arquivo.ovpn</em> direto pelo botão <strong>Export .ovpn </strong></p>
<p>Altere <strong>server-address</strong> para seu endereço de ip público.</p>
<pre class="remontti-code">/interface ovpn-server server export-client-configuration \
  server-address=250.250.250.250 \
  ca-certificate=CA.crt \
  client-certificate=CLIENTE.crt \
  client-cert-key=CLIENTE.key \
  server=open-vpn-server 
</pre>
<p>Se estiver utilizando o ip em blackhole vc precisa fazer o redirect para porta que irá utilizar ex.: &#8220;61194&#8221;</p>
<pre class="remontti-code">
/ip firewall nat add action=redirect chain=dstnat comment=&quot;OpenVPN&quot; \
    dst-address=250.250.250.250 dst-port=61194 protocol=tcp to-ports=61194
</pre>
<p>Veja os arquivos novamente.</p>
<pre class="remontti-code">/file print </pre>
<p>Perceba que temos agora um novo arquivo <strong>client1712413538.ovpn</strong>, faça donwload do mesmo e pule a próxima etapa da versão 6 direto para configuração do cliente OpenVPN.</p>
<pre class="remontti-code-plain">#  NAME                   TYPE        SIZE  CREATION-TIME      
0  CLIENTE.key            .key file   1858  2024-04-06 10:53:13
1  client1712413538.ovpn  .ovpn file  4393  2024-04-06 11:25:38
2  CLIENTE.crt            .crt file   1090  2024-04-06 10:53:13
3  CA.crt                 .crt file   1123  2024-04-06 10:53:07
</pre>
<h3>Cliente OpenVPN</h3>
<p>Acessando https://openvpn.net/client/ voce encontra cliente para <a href="https://openvpn.net/client/client-connect-vpn-for-windows/" rel="noopener" target="_blank">Windows</a>, <a href="https://openvpn.net/downloads/openvpn-connect-v3-macos.dmg" rel="noopener" target="_blank">MacOS</a>, <a href="https://openvpn.net/openvpn-client-for-linux/" rel="noopener" target="_blank">Linux</a>, <a href="https://play.google.com/store/apps/details?id=net.openvpn.openvpn" rel="noopener" target="_blank">Android</a>,  <a href="https://apps.apple.com/us/app/openvpn-connect-openvpn-app/id590379981" rel="noopener" target="_blank">iOS</a> e <a href="https://play.google.com/store/apps/details?id=net.openvpn.openvpn" rel="noopener" target="_blank">ChromeOS</a>.</p>
<p>Com o cliente instalado basta você importar o arquivo .ovpn e infomar seu usuário e senha, ao conectar pela primeira vez irá solicitar a chave do certificado. </p>
<p>No linux você pode configurar também automaticamente nas configurações de rede sem a necessidade de instalar nenhum programa.<br />
<img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/debian-12-gnome-openvpn.png" alt="" width="1173" height="806" class="alignnone size-full wp-image-7929" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/debian-12-gnome-openvpn.png 1173w, https://blog.remontti.com.br/wp-content/uploads/2024/04/debian-12-gnome-openvpn-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/debian-12-gnome-openvpn-1024x704.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/debian-12-gnome-openvpn-768x528.png 768w" sizes="(max-width: 1173px) 100vw, 1173px" /></p>
<p>Gostou? Quer ajudar manter o blog? <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><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>O post <a href="https://blog.remontti.com.br/7921">Configurando OpenVPN no RouterOS v7</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/7921/feed</wfw:commentRss>
			<slash:comments>10</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 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="(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-FoEWjcnA" 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-FoEWjcnA" 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-FoEWjcnA" 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-FoEWjcnA" 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-FoEWjcnA" 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-FoEWjcnA" 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-FoEWjcnA" 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-FoEWjcnA" 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>
		<item>
		<title>Aprenda instalar o ElastiFlow, uma poderosa ferramenta para análise de tráfego de rede no Debian 11 Bullseye</title>
		<link>https://blog.remontti.com.br/6255</link>
					<comments>https://blog.remontti.com.br/6255#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Thu, 10 Mar 2022 18:29:24 +0000</pubDate>
				<category><![CDATA[Huawei]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[ASN]]></category>
		<category><![CDATA[Elasticsearch]]></category>
		<category><![CDATA[ElastiFlow]]></category>
		<category><![CDATA[flows]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6255</guid>

					<description><![CDATA[<p>Coletor de fluxo unificado ElastiFlow O ElastiFlow ™ Unified Flow Collector recebe, decodifica, transforma, normaliza, traduz e enriquece registros de fluxo de rede e telemetria enviados de dispositivos e aplicativos de rede usando IPFIX,&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6255">Aprenda instalar o ElastiFlow, uma poderosa ferramenta para análise de tráfego de rede no Debian 11 Bullseye</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/2022/03/ElastiFlow.png" alt="" width="720" height="340" class="alignnone size-full wp-image-6414" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/03/ElastiFlow.png 720w, https://blog.remontti.com.br/wp-content/uploads/2022/03/ElastiFlow-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/03/ElastiFlow-520x245.png 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p>Coletor de fluxo unificado <a href="https://github.com/robcowart/elastiflow/" rel="noopener" target="_blank">ElastiFlow</a><br />
O ElastiFlow <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Unified Flow Collector recebe, decodifica, transforma, normaliza, traduz e enriquece registros de fluxo de rede e telemetria enviados de dispositivos e aplicativos de rede usando IPFIX, Netflow e sFlow. Os registros resultantes podem ser enviados para diversas plataformas e serviços.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/03/elastiflow_br.png" alt="" width="1463" height="771" class="alignnone size-full wp-image-6402" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/03/elastiflow_br.png 1463w, https://blog.remontti.com.br/wp-content/uploads/2022/03/elastiflow_br-300x158.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/03/elastiflow_br-1024x540.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/03/elastiflow_br-768x405.png 768w" sizes="auto, (max-width: 1463px) 100vw, 1463px" /></p>
<p>Requisitos de sistema <a href="https://docs.elastiflow.com/docs/requirements/" rel="noopener" target="_blank">acesse aqui</a>.</p>
<p><strong>Com seu Debian 11 (Bullseye) 64 bits</strong>. <a href="https://blog.remontti.com.br/5792" rel="noopener" target="_blank">Instalação mínima</a> pronta </p>
<p>Existem outras formas de configurar, mas aqui tentei passar a forma mais simples possível para que qualquer um consiga insta-lo. <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>
<pre class="remontti-code"># su - </pre>
<p>Instale os pacotes básicos necessários</p>
<pre class="remontti-code"># apt install wget apt-transport-https gnupg unzip curl net-tools</pre>
<p>Recomendo a instalacao dos firmwares binário para vários drivers do kernel Linux, para isso adicione contrib non-free ao seu repositório.</p>
<pre class="remontti-code"># vim /etc/apt/sources.list</pre>
<pre class="remontti-code">deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main contrib non-free

deb http://security.debian.org/debian-security bullseye-security main contrib non-free
deb-src http://security.debian.org/debian-security bullseye-security main contrib non-free

# bullseye-updates, to get updates before a point release is made;
# see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports
deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye-updates main contrib non-free
</pre>
<pre class="remontti-code"># apt update
# apt install firmware-linux firmware-linux-free firmware-linux-nonfree</pre>
<p>Tuning no kernel</p>
<pre class="remontti-code"># echo &quot;vm.swappiness=10&quot; &gt;&gt; /etc/sysctl.conf
# echo &quot;vm.max_map_count=262144&quot; &gt; /etc/sysctl.d/70-elasticsearch.conf
# cat &lt;&lt;EOF &gt;/etc/sysctl.d/60-net.conf
net.core.netdev_max_backlog=4096
net.core.rmem_default=262144
net.core.rmem_max=67108864
net.ipv4.udp_rmem_min=131072
net.ipv4.udp_mem=2097152 4194304 8388608
EOF

# sysctl -w vm.max_map_count=262144 &amp;&amp; \
sysctl -w net.core.netdev_max_backlog=4096 &amp;&amp; \
sysctl -w net.core.rmem_default=262144 &amp;&amp; \
sysctl -w net.core.rmem_max=67108864 &amp;&amp; \
sysctl -w net.ipv4.udp_rmem_min=131072 &amp;&amp; \
sysctl -w net.ipv4.udp_mem=&#039;2097152 4194304 8388608&#039;</pre>
<p>Reinicie para que os novos módulos sejam carregado.</p>
<pre class="remontti-code"># reboot</pre>
<h3>:: Elastic Stack ::</h3>
<p>Será necessário ter o Java instalado.</p>
<pre class="remontti-code"># su -
# apt install default-jre</pre>
<p>Adicione o repositório elastic.</p>
<pre class="remontti-code"># wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# echo &quot;deb https://artifacts.elastic.co/packages/8.x/apt stable main&quot; |  tee -a /etc/apt/sources.list.d/elastic.list
# apt update</pre>
<h3>:: Elasticsearch ::</h3>
<p>Elasticsearch é um mecanismo de pesquisa baseado em texto completo. </p>
<pre class="remontti-code"># apt install elasticsearch</pre>
<p>Se uma JVM for iniciada com tamanhos de heap inicial e máximo desiguais, ela poderá pausar conforme o heap da JVM for redimensionado durante o uso do sistema. Por esse motivo, é melhor iniciar a JVM com os tamanhos de heap inicial e máximo configurados com valores iguais.</p>
<p>Adicione o arquivo e defina e heap.optionsa cerca de um terço da memória do sistema, mas não exceda . Para este exemplo, usaremos 12 GB dos 32 GB de memória disponíveis para heap da JVM.</p>
<pre class="remontti-code"># echo -e &quot;-Xms12g\n-Xmx12g&quot; &gt; /etc/elasticsearch/jvm.options.d/heap.options</pre>
<p>Os limites do sistema aumentados devem ser especificados em um systemd.</p>
<pre class="remontti-code"># mkdir /etc/systemd/system/elasticsearch.service.d
# cat &lt;&lt;EOF &gt;/etc/systemd/system/elasticsearch.service.d/elasticsearch.conf
[Service]
LimitNOFILE=131072
LimitNPROC=8192
LimitMEMLOCK=infinity
LimitFSIZE=infinity
LimitAS=infinity
EOF</pre>
<p>Após instalação vamos alterar network.host para ouvir apenas localhost, em seguida ativar o serviço e inicia-lo.</p>
<pre class="remontti-code"># sed -i &#039;s/#cluster.name: my-application/cluster.name: elastiflow/&#039; /etc/elasticsearch/elasticsearch.yml
# sed -i &#039;s/#network.host: 192.168.0.1/network.host: 127.0.0.1/&#039; /etc/elasticsearch/elasticsearch.yml
# sed -i &#039;s/xpack.security.enabled: true/xpack.security.enabled: false/&#039; /etc/elasticsearch/elasticsearch.yml
# echo &quot;indices.query.bool.max_clause_count: 8192&quot; &gt;&gt; /etc/elasticsearch/elasticsearch.yml
# echo &quot;search.max_buckets: 250000&quot; &gt;&gt; /etc/elasticsearch/elasticsearch.yml

# systemctl daemon-reload
# systemctl enable elasticsearch
# systemctl start elasticsearch
# systemctl status elasticsearch</pre>
<pre class="remontti-code-plain">● elasticsearch.service - Elasticsearch
     Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/elasticsearch.service.d
             └─elasticsearch.conf
     Active: active (running) since Fri 2022-02-04 11:34:39 -03; 53s ago
       Docs: https://www.elastic.co
   Main PID: 4701 (java)
      Tasks: 60 (limit: 38490)
     Memory: 12.7G
        CPU: 52.548s
     CGroup: /system.slice/elasticsearch.service
             ├─4701 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 .....
             └─4893 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller

fev 04 11:34:23 debian systemd[1]: Starting Elasticsearch...
fev 04 11:34:39 debian systemd[1]: Started Elasticsearch.</pre>
<p>Cheque se o mesmo esta funcionando</p>
<pre class="remontti-code"># curl -X GET &quot;http://127.0.0.1:9200&quot;</pre>
<p>Retorno algo como&#8230;.</p>
<pre class="remontti-code-plain">{
  &quot;name&quot; : &quot;debianFlows&quot;,
  &quot;cluster_name&quot; : &quot;elastiflow&quot;,
  &quot;cluster_uuid&quot; : &quot;mgKF5EP-SnKbbULl3D6aXQ&quot;,
  &quot;version&quot; : {
    &quot;number&quot; : &quot;8.4.2&quot;,
    &quot;build_flavor&quot; : &quot;default&quot;,
    &quot;build_type&quot; : &quot;deb&quot;,
    &quot;build_hash&quot; : &quot;89f8c6d8429db93b816403ee75e5c270b43a940a&quot;,
    &quot;build_date&quot; : &quot;2022-09-14T16:26:04.382547801Z&quot;,
    &quot;build_snapshot&quot; : false,
    &quot;lucene_version&quot; : &quot;9.3.0&quot;,
    &quot;minimum_wire_compatibility_version&quot; : &quot;7.17.0&quot;,
    &quot;minimum_index_compatibility_version&quot; : &quot;7.0.0&quot;
  },
  &quot;tagline&quot; : &quot;You Know, for Search&quot;
}</pre>
<h3>:: kibana ::</h3>
<p>Kibana é uma plataforma de análise e visualização usada para exibir os painéis do ElastiFlow.</p>
<pre class="remontti-code"># apt install kibana</pre>
<p>Após instalação vamos alterar server.host, em seguida ativar o serviço e inicia-lo.</p>
<pre class="remontti-code"># echo &quot;telemetry.enabled: false&quot; &gt;&gt; /etc/kibana/kibana.yml
# echo &quot;telemetry.optIn: false&quot; &gt;&gt; /etc/kibana/kibana.yml
# echo &quot;newsfeed.enabled: false&quot; &gt;&gt; /etc/kibana/kibana.yml
# echo &quot;server.host: \&quot;0.0.0.0\&quot;&quot; &gt;&gt; /etc/kibana/kibana.yml
# echo &quot;server.maxPayload: 8388608&quot; &gt;&gt; /etc/kibana/kibana.yml
# echo &quot;elasticsearch.requestTimeout: 132000&quot; &gt;&gt; /etc/kibana/kibana.yml
# echo &quot;elasticsearch.shardTimeout: 120000&quot; &gt;&gt; /etc/kibana/kibana.yml</pre>
<pre class="remontti-code"># vim /etc/kibana/kibana.yml</pre>
<p>Ajuste para o endereço da sua URL(Domínio ou IP) pública, exemplo:</p>
<pre class="remontti-code-plain">server.publicBaseUrl: &quot;http://192.168.0.30:5601&quot;</pre>
<pre class="remontti-code"># systemctl daemon-reload
# systemctl enable kibana
# systemctl start kibana
# systemctl status kibana</pre>
<pre class="remontti-code-plain">● kibana.service - Kibana
     Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-02-03 17:45:24 -03; 3s ago
       Docs: https://www.elastic.co
   Main PID: 4638 (node)
      Tasks: 11 (limit: 6548)
     Memory: 138.6M
        CPU: 4.339s
     CGroup: /system.slice/kibana.service
             └─4638 /usr/share/kibana/bin/../node/bin/node /usr/share/kibana/bin/../src/cli/dist\ 
                                           --logging.dest=/var/log/kibana/kibana.log\ 
                                           --pid.file=/run/kibana/kibana.pi&gt;

fev 03 17:45:24 deb11 systemd[1]: Started Kibana.
</pre>
<h3>:: ElastiFlow ::</h3>
<p><a href="https://github.com/robcowart/elastiflow/" rel="noopener noreferrer" target="_blank">ElastiFlow</a> fornece coleta e visualização de dados de fluxo de rede usando o Elastic Stack.</p>
<pre class="remontti-code"># apt install libpcap-dev
# wget https://elastiflow-packages.s3.amazonaws.com/flow-collector/flow-collector_5.6.0_linux_amd64.deb
# dpkg -i flow-collector_5.6.0_linux_amd64.deb
# apt install -f
# systemctl daemon-reload 
# systemctl enable flowcoll
# systemctl start flowcoll
# systemctl status flowcoll</pre>
<pre class="remontti-code-plain">● flowcoll.service - ElastiFlow Unified Flow Collector
     Loaded: loaded (/etc/systemd/system/flowcoll.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/flowcoll.service.d
             └─flowcoll.conf
     Active: active (running) since Fri 2022-02-04 13:49:34 -03; 8s ago
       Docs: https://docs.elastiflow.com
   Main PID: 10763 (flowcoll)
      Tasks: 9 (limit: 38490)
     Memory: 33.0M
        CPU: 105ms
     CGroup: /system.slice/flowcoll.service
             └─10763 /usr/share/elastiflow/bin/flowcoll</pre>
<pre class="remontti-code"># wget https://raw.githubusercontent.com/elastiflow/elastiflow_for_elasticsearch/master/kibana/kibana-7.14.x-codex-dark.ndjson
# curl -XPOST &quot;http://127.0.0.1:5601/api/saved_objects/_import?overwrite=true&quot;\
 -k -H &quot;kbn-xsrf: true&quot; -H &quot;securitytenant: global&quot; --form file=@kibana-7.14.x-codex-dark.ndjson</pre>
<p>No retornos dos comando curl certifique-se de ter no inicio a mensagem <strong>&#8220;success&#8221;:true&#8221;</strong></p>
<pre class="remontti-code-plain">
{&quot;successCount&quot;:229,&quot;success&quot;:true,&quot;warnings&quot;:[],&quot;successResults...............</pre>
<h4>Configurações Avançadas Recomendadas do Kibana</h4>
<p>Acesse seu Kibana no navegador. <em><strong>http://____:5601</strong></em></p>
<p>Realizando esses ajustes avançados o Kibana produzirá uma experiência mais amigável ao usar o ElastiFlow. Essas configurações são feitas no Kibana, em <strong>Stack Management</strong> -><strong> Advanced Settings</strong>.<br />
Use a busca para localizar e ajustar os seguintes valores:</p>
<p><strong>Pin filters by default:</strong> On<br />
<strong>Highlight results :</strong> Off<br />
<strong>Store URLs in session storage:</strong> On<br />
<strong>Dark mode:</strong> On<br />
<strong>Day of week:</strong> Monday<br />
<strong>Formatting locale:</strong> Portuguese (Brazil)<br />
<strong>Number format:</strong> 0,0.[00]<br />
<strong>Percent format:</strong> 0,0.[00]%<br />
<strong>Time filter defaults:</strong></p>
<pre class="remontti-code-plain">{
  &quot;from&quot;: &quot;now-1h/m&quot;,
  &quot;to&quot;: &quot;now&quot;
}</pre>
<p><strong>Time filter quick ranges:</strong></p>
<pre class="remontti-code-plain">[
  {
    &quot;from&quot;: &quot;now-15m/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 15 minutes&quot;
  },
  {
    &quot;from&quot;: &quot;now-30m/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 30 minutes&quot;
  },
  {
    &quot;from&quot;: &quot;now-1h/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 1 hour&quot;
  },
  {
    &quot;from&quot;: &quot;now-2h/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 2 hours&quot;
  },
  {
    &quot;from&quot;: &quot;now-4h/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 4 hours&quot;
  },
  {
    &quot;from&quot;: &quot;now-12h/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 12 hours&quot;
  },
  {
    &quot;from&quot;: &quot;now-24h/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 24 hours&quot;
  },
  {
    &quot;from&quot;: &quot;now-48h/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 48 hours&quot;
  },
  {
    &quot;from&quot;: &quot;now-7d/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 7 days&quot;
  },
  {
    &quot;from&quot;: &quot;now-30d/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 30 days&quot;
  },
  {
    &quot;from&quot;: &quot;now-60d/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 60 days&quot;
  },
  {
    &quot;from&quot;: &quot;now-90d/m&quot;,
    &quot;to&quot;: &quot;now/m&quot;,
    &quot;display&quot;: &quot;Last 90 days&quot;
  }
]</pre>
<p>Ajustes finos:</p>
<pre class="remontti-code"># vim /etc/systemd/system/flowcoll.service.d/flowcoll.conf</pre>
<p>Ajustes ELASTICSEARCH</p>
<pre class="remontti-code">Environment=&quot;EF_FLOW_OUTPUT_ELASTICSEARCH_ENABLE=true&quot;
Environment=&quot;EF_FLOW_OUTPUT_ELASTICSEARCH_TIMESTAMP_SOURCE=end&quot;
Environment=&quot;EF_FLOW_OUTPUT_ELASTICSEARCH_INDEX_TEMPLATE_ILM_LIFECYCLE=elastiflow&quot;
#Environment=&quot;EF_FLOW_OUTPUT_ELASTICSEARCH_USERNAME=elastic&quot;
#Environment=&quot;EF_FLOW_OUTPUT_ELASTICSEARCH_PASSWORD=changeme&quot;</pre>
<p>Ajustes DNS</p>
<pre class="remontti-code">Environment=&quot;EF_FLOW_DECODER_ENRICH_DNS_ENABLE=true&quot;
Environment=&quot;EF_FLOW_DECODER_ENRICH_DNS_NAMESERVER_IP=1.1.1.1&quot;</pre>
<p>Ajustes MAXMIND</p>
<pre class="remontti-code">Environment=&quot;EF_FLOW_DECODER_ENRICH_MAXMIND_ASN_ENABLE=true&quot; 
Environment=&quot;EF_FLOW_DECODER_ENRICH_MAXMIND_GEOIP_ENABLE=true&quot;
Environment=&quot;EF_FLOW_DECODER_ENRICH_MAXMIND_GEOIP_LANG=pt-BR&quot;
Environment=&quot;EF_FLOW_DECODER_ENRICH_MAXMIND_ASN_PATH=maxmind/GeoLite2-ASN.mmdb&quot;
Environment=&quot;EF_FLOW_DECODER_ENRICH_MAXMIND_GEOIP_PATH=maxmind/GeoLite2-City.mmdb&quot;</pre>
<p><a href="https://github.com/P3TERX/GeoLite.mmdb" rel="noopener" target="_blank">Base MAXMIND</a>.</p>
<pre class="remontti-code"># cd /etc/elastiflow/maxmind
# wget https://git.io/GeoLite2-ASN.mmdb
# wget https://git.io/GeoLite2-City.mmdb
# wget https://git.io/GeoLite2-Country.mmdb</pre>
<p>Reiniciando os serviços</p>
<pre class="remontti-code"># systemctl daemon-reload
# systemctl restart flowcoll
# systemctl status flowcoll
# systemctl restart elasticsearch kibana
# systemctl status elasticsearch kibana</pre>
<h3> Configure seu router para enviar os flows</h4>
<p><strong>Bonus: Huawei NE Netstream (NetFlow)</strong></p>
<pre class="remontti-code">ip netstream as-mode 32
ip netstream timeout active 1
ip netstream timeout inactive 15
ip netstream export version 9 origin-as
ip netstream export index-switch 32
ip netstream export template timeout-rate 2
ip netstream sampler fix-packets 128 inbound
ip netstream sampler fix-packets 128 outbound
ip netstream export source IPv4_LOOPBACK_ORIGEM
ip netstream export host IPv4_SERVIDOR 9995
ip netstream export template option sampler
ip netstream export template option application-label
#
ipv6 netstream as-mode 32
ipv6 netstream timeout active 1
ipv6 netstream timeout inactive 15
ipv6 netstream export version 9 origin-as
ipv6 netstream export index-switch 32
ipv6 netstream export template timeout-rate 2
ipv6 netstream sampler fix-packets 128 inbound
ipv6 netstream sampler fix-packets 128 outbound
ipv6 netstream export source IPv4_LOOPBACK_ORIGEM
ipv6 netstream export host IPv4_SERVIDOR 9995
ipv6 netstream export template option sampler
 
# CONFIG NO SLOT -- slot 9 ou 10 NE8000 / slot 3 NE40
# EXECUTE O CMD NO ROOT, COMANDO NÃO FUNCIONA NO VIRTUAL SYSTEM
slot 9
 ip netstream sampler to slot self
 ipv6 netstream sampler to slot self
 
# APLICAR APENAS NAS INTERFACES UPSTREAM (LINK IP, PTT, IX...)
ip netstream inbound
ip netstream outbound
ipv6 netstream inbound
ipv6 netstream outbound
 
# EM CASO DE INTERFACES DE CDN INTERNO, APLICAR:
ip netstream inbound
ipv6 netstream inbound
 
# EM CASO DE INTERFACE BILATERAL (ONDE TANTO RECEBE QUANTO ENVIA CONTEÚDO), APLICAR:
ip netstream inbound
ipv6 netstream inbound
</pre>
<p><strong>Bonus: Mikrotik</strong></p>
<pre class="remontti-code">
/ip traffic-flow
set active-flow-timeout=1m cache-entries=4k enabled=yes interfaces=INTERFACES_COLETAR
/ip traffic-flow target 
add dst-address=IP_SERVER_ASSTATS port=9995 src-address=IP_ORIGEM version=9</pre>
<p>Verificar se os pacotes estão chegando na porta 9995</p>
<pre class="remontti-code"># apt install tcpdump
# tcpdump -i ens18 -n udp port 9995 -T cnfp</pre>
<p>Acesse eu Kibana e seja feliz!<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/03/elastiflow_brasil1.png" alt="" width="971" height="586" class="alignnone size-full wp-image-6406" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/03/elastiflow_brasil1.png 971w, https://blog.remontti.com.br/wp-content/uploads/2022/03/elastiflow_brasil1-300x181.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/03/elastiflow_brasil1-768x463.png 768w" sizes="auto, (max-width: 971px) 100vw, 971px" /><br />
Escolha sua Dash<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/03/asn.png" alt="" width="1920" height="1012" class="alignnone size-full wp-image-6403" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/03/asn.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2022/03/asn-300x158.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/03/asn-1024x540.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/03/asn-768x405.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/03/asn-1536x810.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>Gostou e quer me ajudar a manter o blog? <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><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><strong>Fonte:</strong><br />
<a href="https://docs.elastiflow.com" rel="noopener" target="_blank">https://docs.elastiflow.com</a></p>
<p>O post <a href="https://blog.remontti.com.br/6255">Aprenda instalar o ElastiFlow, uma poderosa ferramenta para análise de tráfego de rede no Debian 11 Bullseye</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6255/feed</wfw:commentRss>
			<slash:comments>62</slash:comments>
		
		
			</item>
		<item>
		<title>Como se proteger de ataques DDoS com FastNetMon de graça &#8211; Integração FRR vs NE-Huawei &#8211; Bonus Gráficos Grafana</title>
		<link>https://blog.remontti.com.br/6278</link>
					<comments>https://blog.remontti.com.br/6278#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 16 Feb 2022 20:00:18 +0000</pubDate>
				<category><![CDATA[Huawei]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[ataques]]></category>
		<category><![CDATA[Bullseye]]></category>
		<category><![CDATA[ccr]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian 11]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[fastnemon]]></category>
		<category><![CDATA[grafana]]></category>
		<category><![CDATA[influxdb]]></category>
		<category><![CDATA[mitigação]]></category>
		<category><![CDATA[ne8000]]></category>
		<category><![CDATA[ne8000f1a]]></category>
		<category><![CDATA[Netflow]]></category>
		<category><![CDATA[telegram]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6278</guid>

					<description><![CDATA[<p>Existe um tutorial mais atualizado acesse: Fortalecendo a Resiliência da Rede: Detecção de Ataques DDoS com FastNetMon, FRRouting, Grafana e Implementação em Debian 12 com Huawei &#038; RouterOS 👆 👆 👆 👆 👆 👆&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6278">Como se proteger de ataques DDoS com FastNetMon de graça &#8211; Integração FRR vs NE-Huawei &#8211; Bonus Gráficos Grafana</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><font color="red">Existe um tutorial mais atualizado acesse:</font></h2>
<p><a href="https://blog.remontti.com.br/7322">Fortalecendo a Resiliência da Rede: Detecção de Ataques DDoS com FastNetMon, FRRouting, Grafana e Implementação em Debian 12 com Huawei &#038; RouterOS</a><br />
 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="remontti-code">#
#
#
#
#
#
#
#
</pre>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_huawei-1.png" alt="" width="720" height="340" class="alignnone size-full wp-image-6341" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_huawei-1.png 720w, https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_huawei-1-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_huawei-1-520x245.png 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p>Neste tutorial vamos aprender como identificar os ataques Dos/DDoS e anunciar os prefixo atacados (ou atacantes) <strong>de seu AS</strong> em envia-los para uma blackhole, e repassar os mesmo para sua operadora. (Acordo)</p>
<p>Vamos utilizar o <a href="https://github.com/pavel-odintsov/fastnetmon/" rel="noopener noreferrer" target="_blank"><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/5792" rel="noopener" target="_blank"><strong>Debian 11 (Instalação Limpa)</strong></a>. O hardware utilizado por ser bem generoso, 1CPU e 1GB de memoria. </p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_hardware.png" alt="" width="1212" height="383" class="alignnone size-full wp-image-6312" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_hardware.png 1212w, https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_hardware-300x95.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_hardware-1024x324.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_hardware-768x243.png 768w" sizes="auto, (max-width: 1212px) 100vw, 1212px" /><br />
Nesse gráfico podemos ver um servidor analisando 10GB via Netflow e quase nada sendo usado de recursos. Mais ao final irei configurar o Graphith para termos gráficos qual irá abusar mais do hardware, porém para muitos gráficos não são necessários, e sim algo que o proteja.  </p>
<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.100.0.1/30 &#8211; Huawei NE<br />
10.100.0.2/30 &#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.100.0.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>.</p>
<pre class="remontti-code"># vim /etc/network/interfaces</pre>
<pre class="remontti-code-plain">allow-hotplug eno1
iface eno1 inet static
    address 72.72.72.255/32

iface enp0s3 inet static
    address 10.100.0.2/30
    post-up /usr/sbin/ip route add default via 10.100.0.1 src 72.72.72.255</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">&lt;NE-SEUMADRUGA&gt; system-view
Enter system view, return user view with return command.
[~NE-SEUMADRUGA] ip route-static 72.72.72.255 255.255.255.255 10.100.0.2 description FASTNETMON
[*NE-SEUMADRUGA] 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

table inet filter {

        chain input {
                type filter hook input priority 0;

                # Permite que apenas conexoes que foram aberta pelo servidor seja respondidas
                ip daddr 72.72.72.255 ct state related,established counter accept
                ip daddr 72.72.72.255 counter drop

        }
        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 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>Para ver o comparativo da versão gratuita <a href="https://fastnetmon.com/compare-community-and-advanced/" rel="noopener" target="_blank">acesse aqui</a>. Já antemão o que não teremos suporte é ao IPv6 e alguns recursos extras.<br />
Conversando com <a href="https://www.linkedin.com/in/podintsov">Pavel Odintsov</a> entendeu que no Brasil os planos da versão paga ficam muito pesada para a grande maioria devido a alto do dólar, então ele criou um cupom com <strong>50%</strong> de desconto para os brasileiros. <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;" /><br />
Segue os lins com o desconto:<br />
<a href="https://fastnetmon.chargebee.com/hosted_pages/plans/fastnetmon-10g?subscription[coupon]=BRAZIL_PROMO" rel="noopener" target="_blank">Licença 10Gb</a><br />
<a href="https://fastnetmon.chargebee.com/hosted_pages/plans/fastnetmon-40g?subscription[coupon]=BRAZIL_PROMO" rel="noopener" target="_blank">Licença 40GB</a><br />
<a href="https://fastnetmon.chargebee.com/hosted_pages/plans/fastnetmon-100g?subscription[coupon]=BRAZIL_PROMO" rel="noopener" target="_blank">Licença 100GB</a></p>
<p>Vamos a instalação <a href="https://fastnetmon.com/install/" rel="noopener" target="_blank">[Doc Oficial]</a></p>
<pre class="remontti-code"># apt install wget tcpdump net-tools zip curl
# cd /tmp/
# wget https://install.fastnetmon.com/installer -Oinstaller
# chmod +x installer
# ./installer -install_community_edition</pre>
<p>É necessário que vc informe seu e-mail durante a instalação. <em>(Para usar a Comunidade FastNetMon você deve fornecer seu e-mail corporativo válido e aceitar receber informações sobre nossa edição comercial e atualizações de segurança)</em></p>
<pre class="remontti-code-plain">18:13:33 Will log all installation process details into file: /tmp/fastnetmon_install_1170.log
18:13:33 Installer build git version is: b21331ee349eaf0bc2abc71a466802cd26ee2347 build time is: 2022-01-17T16:17:51
18:13:33 Install FastNetMon Community edition

We offer significantly improved FastNetMon Advanced edition: 
&lt;blockquote class=&quot;wp-embedded-content&quot; data-secret=&quot;ghCHMDUZME&quot;&gt;&lt;a href=&quot;https://fastnetmon.com/fastnetmon-advanced/&quot;&gt;FastNetMon Advanced&lt;/a&gt;&lt;/blockquote&gt;&lt;iframe class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; style=&quot;position: absolute; clip: rect(1px, 1px, 1px, 1px);&quot; title=&quot;&#8220;FastNetMon Advanced&#8221; &#8212; FastNetMon DDoS Detection Tool&quot; src=&quot;https://fastnetmon.com/fastnetmon-advanced/embed/#?secret=9HRlASbAu2#?secret=ghCHMDUZME&quot; data-secret=&quot;ghCHMDUZME&quot; width=&quot;500&quot; height=&quot;282&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
You could order free one-month trial for Advanced edition here: 
&lt;blockquote class=&quot;wp-embedded-content&quot; data-secret=&quot;zdVTqp3qpj&quot;&gt;&lt;a href=&quot;https://fastnetmon.com/trial/&quot;&gt;Order trial&lt;/a&gt;&lt;/blockquote&gt;&lt;iframe class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; style=&quot;position: absolute; clip: rect(1px, 1px, 1px, 1px);&quot; title=&quot;&#8220;Order trial&#8221; &#8212; FastNetMon DDoS Detection Tool&quot; src=&quot;https://fastnetmon.com/trial/embed/#?secret=kKLHfdm2fM#?secret=zdVTqp3qpj&quot; data-secret=&quot;zdVTqp3qpj&quot; width=&quot;500&quot; height=&quot;282&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;

To use FastNetMon Community you must provide your valid corporate email and accept 
to receive information about our commercial edition and security updates.
You can find our privacy policy here https://fastnetmon.com/privacy-policy/

Provide your corporate email here, personal emails are not allowed: seu@email.com.br
18:13:41 Apply sysctl configuration changes
18:13:41 Disable rp_filter for all interfaces
18:13:41 Installing on Debian 11.2 platform
18:13:41 Download binary package
18:15:27 Successfully installed FastNetMon Community edition</pre>
<p>Adicione todos os prefixos do seu AS, são esses os IPs serão feito analise.</p>
<pre class="remontti-code"># vim /etc/networks_list</pre>
<p>Exemplo:</p>
<pre class="remontti-code">72.72.72.0/22</pre>
<p>Ajustando as configurações do /etc/fastnetmon.conf.<br />
Habilitamos o serviço de netflow: `netflow = off` para `netflow = on`</p>
<pre class="remontti-code"># sed -i &#039;s/netflow = off/netflow = on/&#039; /etc/fastnetmon.conf</pre>
<p>Ajustes de tempo</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/average_calculation_time_for_subnets = 5/average_calculation_time_for_subnets = 15/&#039; /etc/fastnetmon.conf
# sed -i &#039;s/netflow_sampling_ratio = 1/netflow_sampling_ratio = 1024/&#039; /etc/fastnetmon.conf</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>Ative medidores de velocidade por sub-rede, para listar a velocidade da faixa em bps e pps para ambas as direções. (Parece que removeram na última versão)</p>
<pre class="remontti-code"># sed -i &#039;s/enable_subnet_counters = off/enable_subnet_counters = on/&#039; /etc/fastnetmon.conf</pre>
<p>Altera o top 7 para o top 10 ao usar o comando fastnetmon_client</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).</p>
<pre class="remontti-code-plain">ban_for_pps = on
ban_for_bandwidth = on
ban_for_flows = off

ban_for_tcp_bandwidth = off
ban_for_udp_bandwidth = off
ban_for_icmp_bandwidth = off

ban_for_tcp_pps = off
ban_for_udp_pps = off
ban_for_icmp_pps = off
</pre>
<p>Vamos ativar todos os filtros:</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>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 90.000 pps.</p>
<pre class="remontti-code"># sed -i &#039;s/threshold_pps = 20000/threshold_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-plain">threshold_mbps = 1050
threshold_flows = 3500</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>Por o serviço ira ficar ouvindo em todos os endereços IPs do seu servidor (<strong>netflow_host = 0.0.0.0</strong>), logo o mais correto seria deixa-lo apenas para o IP privado.</p>
<pre class="remontti-code"># sed -i &#039;s/netflow_host = 0.0.0.0/netflow_host = 10.100.0.2/&#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>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 10.100.0.2:52055           0.0.0.0:*                           1599/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>Acesse seu roteador Huawei:</p>
<pre class="remontti-code">&lt;NE-SEUMADRUGA&gt; system-view
[~NE-SEUMADRUGA] ip netstream export version ipfix peer-as bgp-nexthop ttl
[*NE-SEUMADRUGA] ip netstream export template sequence-number fixed
[*NE-SEUMADRUGA] ip netstream export index-switch 32
[*NE-SEUMADRUGA] ip netstream as-mode 32
[*NE-SEUMADRUGA] ip netstream timeout active 1
[*NE-SEUMADRUGA] ip netstream timeout inactive 15
[*NE-SEUMADRUGA] ip netstream export template timeout-rate 1
[*NE-SEUMADRUGA] ip netstream export template option sampler
[*NE-SEUMADRUGA] ip netstream export template option application-label
[*NE-SEUMADRUGA] ip netstream sampler fix-packets 1024 inbound
[*NE-SEUMADRUGA] ip netstream sampler fix-packets 1024 outbound
[*NE-SEUMADRUGA] ip netstream export source 10.100.0.1
[*NE-SEUMADRUGA] ip netstream export host 10.100.0.2 52055</pre>
<p>slot 0 NE8000F1A / slot 10 ou 9 NE8000 M8 / slot 3 NE40</p>
<pre class="remontti-code">[*NE-SEUMADRUGA] slot &lt;0-10&gt;
[*NE-SEUMADRUGA] ip netstream sampler to slot self
[*NE-SEUMADRUGA]  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 ens192 -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.100.0.1.40000 &gt; 10.100.0.2.52055: NetFlow v9
14:25:19.608068 IP 10.100.0.1.40000 &gt; 10.100.0.2.52055: NetFlow v9
14:25:19.668054 IP 10.100.0.1.40000 &gt; 10.100.0.2.52055: NetFlow v9
14:25:19.691123 IP 10.100.0.1.40000 &gt; 10.100.0.2.52055: NetFlow v9
14:25:19.768055 IP 10.100.0.1.40000 &gt; 10.100.0.2.52055: NetFlow v9
14:25:19.781129 IP 10.100.0.1.40000 &gt; 10.100.0.2.52055: NetFlow v9
14:25:19.831133 IP 10.100.0.1.40000 &gt; 10.100.0.2.52055: NetFlow v9
14:25:19.858054 IP 10.100.0.1.40000 &gt; 10.100.0.2.52055: NetFlow v9
14:25:19.941124 IP 10.100.0.1.40000 &gt; 10.100.0.2.52055: NetFlow v9
14:25:19.958060 IP 10.100.0.1.40000 &gt; 10.100.0.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"># &gt; /etc/networks_whitelist
# 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;</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 curl apt-transport-https gnupg2 tree net-tools
# curl -s https://deb.frrouting.org/frr/keys.asc | apt-key add -
# echo deb https://deb.frrouting.org/frr bullseye frr-8 | tee -a /etc/apt/sources.list.d/frr.list
# apt update
# apt install frr frr-doc</pre>
<p>Parâmetros kernel</p>
<pre class="remontti-code"># echo &#039;net.ipv4.ip_forward = 1&#039; &gt;&gt; /etc/sysctl.conf
# echo &quot;net.ipv4.conf.all.rp_filter = 0&quot; &gt;&gt; /etc/sysctl.conf
# echo &quot;net.ipv4.conf.default.rp_filter = 0&quot; &gt;&gt; /etc/sysctl.conf
# echo &quot;net.ipv4.conf.lo.rp_filter = 0&quot; &gt;&gt; /etc/sysctl.conf
# echo &quot;net.ipv4.conf.`ip -br link |awk &#039;{print $1}&#039; |grep -v lo`.rp_filter = 0&quot; &gt;&gt; /etc/sysctl.conf
# sysctl -p</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">deb11# show running-config 
Building configuration...

Current configuration:
!
frr version 8.3.1
frr defaults traditional
hostname deb11
log syslog informational
no ip forwarding
no ipv6 forwarding
service integrated-vtysh-config
!
line vty
!
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 <strong>community 65001:666</strong></p>
<pre class="remontti-code-plain">configure terminal
!
ip prefix-list FASTNETMON_EXPORT seq 5 permit 72.72.72.0/23 le 32
ip prefix-list FASTNETMON_EXPORT seq 10 permit 72.72.74.0/23 le 32
!
!
route-map MARK_FASTNETMON_IMPORT deny 10
!
route-map MARK_FASTNETMON_EXPORT permit 10
 match ip address prefix-list FASTNETMON_EXPORT
 set community 65001:666
!
router bgp 65001
 bgp router-id 10.100.0.2
 neighbor 10.100.0.1 remote-as 260072
 neighbor 10.100.0.1 description &quot;NE8K_BORDA&quot;
# neighbor 10.100.0.1 ebgp-multihop 255 # (Caso seja multihop)
 !
 address-family ipv4 unicast
  neighbor 10.100.0.1 route-map MARK_FASTNETMON_IMPORT in
  neighbor 10.100.0.1 route-map MARK_FASTNETMON_EXPORT out
 exit-address-family
!
line vty
!
end
write memory
exit</pre>
<p>Vamos ao <strong>Huawei</strong></p>
<pre class="remontti-code">&lt;NE-SEUMADRUGA&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">[~NE-SEUMADRUGA] 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">[*NE-SEUMADRUGA] ip ip-prefix  ACCEP_PREFIX_MASK32_FASTNETMON_IPV4 index 10 permit 0.0.0.0 0 greater-equal 32</pre>
<p>Crie os prefixos publico para rejeitar e não cair em blackhole mesmo quando atacado, caso você deixar o fastnetmon anúnciar seu NE pode rejeitar (Ex IP Servidores ou CGNAT)</p>
<pre class="remontti-code">[*NE-SEUMADRUGA] ip ip-prefix  IGNORE_PREFIX_FASTNETMON_IPV4 index 10 permit 72.72.72.224 28 greater-equal 28 less-equal 32
[*NE-SEUMADRUGA] 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 a community 65001:666</p>
<pre class="remontti-code">[*NE-SEUMADRUGA] ip community-filter basic COMM_FASTNETMON_BLACKHOLE index 10 permit 65001:666</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">[*NE-SEUMADRUGA] route-policy FASTNETMON_IMPORT_IPV4 deny node 1000
[*NE-SEUMADRUGA]  if-match ip-prefix IGNORE_PREFIX_FASTNETMON_IPV4</pre>
<p>A 2º é o que vir marcado do fastnetmon com 65001:666 (COMM_FASTNETMON_BLACKHOLE) 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 comum 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">[*NE-SEUMADRUGA] route-policy FASTNETMON_IMPORT_IPV4 permit node 1010
[*NE-SEUMADRUGA]  if-match community-filter COMM_FASTNETMON_BLACKHOLE 
[*NE-SEUMADRUGA]  apply local-preference 999
[*NE-SEUMADRUGA]  apply ip-address next-hop 192.0.2.1
[*NE-SEUMADRUGA]  apply community 65444:666
[*NE-SEUMADRUGA]  if-match ip-prefix ACCEP_PREFIX_MASK32_FASTNETMON_IPV4</pre>
<p>E a 3ª ignoramos o resto como boas praticas.</p>
<pre class="remontti-code">[*NE-SEUMADRUGA] 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">[*NE-SEUMADRUGA] route-policy FASTNETMON_EXPORT_IPV4 deny node 9999
[*NE-SEUMADRUGA] commit</pre>
<p>Vamos ao peer</p>
<pre class="remontti-code">[*NE-SEUMADRUGA] bgp 260072
[~NE-SEUMADRUGA] undo peer 10.100.0.2
[*NE-SEUMADRUGA]  peer 10.100.0.2 as-number 65001
[*NE-SEUMADRUGA]  peer 10.100.0.2 description BORDA_VS_FASTNETMON_IPV4
[*NE-SEUMADRUGA]  peer 10.100.0.2 timer connect-retry 1
[*NE-SEUMADRUGA]  peer 10.100.0.2 connect-interface 10.100.0.1
[*NE-SEUMADRUGA]  peer 10.100.0.2 timer keepalive 10 hold 30 
[*NE-SEUMADRUGA]  ipv4-family unicast
[*NE-SEUMADRUGA]   peer 10.100.0.2 enable
[*NE-SEUMADRUGA]   peer 10.100.0.2 public-as-only
[*NE-SEUMADRUGA]   peer 10.100.0.2 route-policy FASTNETMON_IMPORT_IPV4 import
[*NE-SEUMADRUGA]   peer 10.100.0.2 route-policy FASTNETMON_EXPORT_IPV4 export
[*NE-SEUMADRUGA]   peer 10.100.0.2 next-hop-local
[*NE-SEUMADRUGA]   peer 10.100.0.2 advertise-community
[*NE-SEUMADRUGA]   peer 10.100.0.2 advertise-ext-community
[*NE-SEUMADRUGA] commit
[~NE-SEUMADRUGA] 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">[~NE-SEUMADRUGA] bgp 260072
[*NE-SEUMADRUGA] peer 10.100.0.2 ignore
[*NE-SEUMADRUGA] commit</pre>
<p>Para <strong>subir</strong> novamente:</p>
<pre class="remontti-code">[~NE-SEUMADRUGA] bgp 260072
[*NE-SEUMADRUGA] undo peer 10.100.0.2 ignore
[*NE-SEUMADRUGA] commit</pre>
<p>Verifique se sua sessão subiu:</p>
<pre class="remontti-code">[*NE-SEUMADRUGA] display bgp peer | include 10.100.0.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.100.0.2                       4       65001   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.100.0.2, local AS number 65001 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.100.0.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á adiciar 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 irei repassar para operadora com a commnunity da operadora. Para isso crie então primeiro a community-filter de Blackhole sua.</p>
<pre class="remontti-code">[~NE-SEUMADRUGA] ip community-filter basic COMM_BLACKHOLE index 10 permit 65444:666</pre>
<p>Agora na route policy da operadora crie algo semelhante ao exemplo, sendo que a community de blackhole que sua operadora passou fosse &#8220;71:666&#8221;:</p>
<pre class="remontti-code">[~NE-SEUMADRUGA] route-policy UPSTREAM_OP_BRUXADO71_EXPORT_IPV4 permit node 2070
[~NE-SEUMADRUGA]  if-match community-filter COMM_BLACKHOLE
[~NE-SEUMADRUGA]  apply community 71:666</pre>
<p>Pronto agora que ja 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.</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 (Grupos sempre começam com &quot;-&quot; )
ID_CHAT=&#039;-1000000000000&#039;

if [ &quot;$2&quot; = &quot;incoming&quot; ]; then
  TIPO=&quot;Sendo atacado&quot;
else 
  TIPO=&quot;Realizando um ataque&quot;
fi

# Desbanindo um IP
if [ &quot;$4&quot; = &quot;unban&quot; ]; then
  /usr/local/bin/telegram -m &quot;$ID_CHAT&quot; &quot;UNBAN IP: &lt;code&gt;$1&lt;/code&gt;&quot; &quot;&lt;code&gt;-&gt;&gt;&lt;/code&gt; Removido da blackhole&quot;
  # Remove IP do anuncio para o FRR
  vtysh --command &quot;configure terminal
  no ip route $1/32 lo
  router bgp 65001
   address-family ipv4 unicast
    no network $1/32
  &quot;
  # Movemos os logs para pasta ataques pois não queremos mais receber elas.
  mv /var/log/fastnetmon_attacks/$1* /var/log/fastnetmon_attacks/ataques
  exit 0
fi

# Banindo um IP
if [ &quot;$4&quot; = &quot;ban&quot; ]; then
  /usr/local/bin/telegram -m &quot;$ID_CHAT&quot; &quot;BAN IP: &lt;code&gt;$1&lt;/code&gt; $TIPO &lt;b&gt;[$3 pps]&lt;/b&gt;&quot; &quot;&lt;code&gt;-&gt;&gt;&lt;/code&gt; Anunciado em blackhole&quot;
  /usr/local/bin/telegram -f &quot;$ID_CHAT&quot; /var/log/fastnetmon_attacks/$1* $1 &quot;Logs do ataque ao IP $1&quot;
  # Anuncia IP ao FRR
  vtysh --command &quot;configure terminal
  ip route $1/32 lo
  router bgp 65001
   address-family ipv4 unicast
    network $1/32
  &quot;
    exit 0
fi

if [ &quot;$4&quot; == &quot;attack_details&quot; ]; then
  #/usr/local/bin/telegram -m &quot;$ID_CHAT&quot; &quot;BAN&quot; &quot;&lt;code&gt;FastNetMon: IP $1 blocked because $2 attack with power $3 pps&lt;/code&gt;&quot;
  exit 0
fi</pre>
<p>De permissão para execução</p>
<pre class="remontti-code"># chmod a+x /usr/local/bin/notify_about_attack.sh</pre>
<p>Restarte o fastnetmon</p>
<pre class="remontti-code"># systemctl restart fastnetmon</pre>
<p>Se quiser fazer um teste manual anunciando um IP (um que não esteja em uso né!!! rsrsrs) exemplo: 72.72.73.255/32<br />
Adicionando:</p>
<pre class="remontti-code"># vtysh --command &quot;configure terminal
  ip route 72.72.73.255/32 lo
  router bgp 65001
   address-family ipv4 unicast
    network 72.72.73.255/32&quot;</pre>
<p>Verificando se esta enviando:</p>
<pre class="remontti-code"># vtysh --command &quot; show ip bgp neighbors 10.100.0.1 advertised-routes&quot;</pre>
<pre class="remontti-code-plain">BGP table version is 3, local router ID is 10.100.0.2, vrf id 0
Default local pref 100, local AS 65001
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>Removendo:</p>
<pre class="remontti-code"># vtysh --command &quot;configure terminal
  no ip route 72.72.73.255/32 lo
  router bgp 65001
   address-family ipv4 unicast
    no network 72.72.73.255/32&quot;</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></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-Um3BDYby" 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 lsb-release gnupg2 curl wget
# 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</pre>
<p>Edite o influxdb.conf</p>
<pre class="remontti-code"># vim /etc/influxdb/influxdb.conf</pre>
<p>Localize [[graphite]] e abaixo adicione:</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;
  batch-size = 5000 # will flush if this many points get buffered
  batch-timeout = &quot;1s&quot; # will flush at least this often even if we haven&#039;t hit buffer limit
  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><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/influxdb_graphite.png" alt="" width="1038" height="639" class="alignnone size-full wp-image-6314" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/influxdb_graphite.png 1038w, https://blog.remontti.com.br/wp-content/uploads/2022/02/influxdb_graphite-300x185.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/influxdb_graphite-1024x630.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/influxdb_graphite-768x473.png 768w" sizes="auto, (max-width: 1038px) 100vw, 1038px" /></p>
<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 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; 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>
<pre class="remontti-code">&gt; exit</pre>
<h4> Grafana</h3>
<p>Adicione o repositório do grafana e instale-o</p>
<pre class="remontti-code"># wget -q -O - https://packages.grafana.com/gpg.key | apt-key add -
# echo &quot;deb https://packages.grafana.com/oss/deb stable main&quot; | tee -a /etc/apt/sources.list.d/grafana.list
# apt update; apt install grafana</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.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_01.png" alt="" width="1384" height="769" class="alignnone size-full wp-image-6318" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_01.png 1384w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_01-300x167.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_01-1024x569.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_01-768x427.png 768w" sizes="auto, (max-width: 1384px) 100vw, 1384px" /></p>
<p>No menu <strong>Configuration</strong> e vá em  <strong>Data sources</strong>, clique em <strong>Add data source</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_02.png" alt="" width="1113" height="564" class="alignnone size-full wp-image-6319" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_02.png 1113w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_02-300x152.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_02-1024x519.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_02-768x389.png 768w" sizes="auto, (max-width: 1113px) 100vw, 1113px" /></p>
<p>Localize influxDB e selecione<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_03.png" alt="" width="1370" height="366" class="alignnone size-full wp-image-6320" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_03.png 1370w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_03-300x80.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_03-1024x274.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_03-768x205.png 768w" sizes="auto, (max-width: 1370px) 100vw, 1370px" /></p>
<p>Preencha apenas:<br />
URL:<strong> http://localhost:8086</strong><br />
Database: <strong>graphite</strong><br />
E clique em <strong>Save &#038; test</strong>, você deve ter a resposta <strong>Data source is working</strong>.</p>
<p>Faça <strong><a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon-Dash.zip" rel="noopener" target="_blank">download aqui</a> </strong>das Dashs e importe.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_04.png" alt="" width="207" height="187" class="alignnone size-full wp-image-6321" /><br />
Não esqueça de definir o banco InfluxDB<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_05.png" alt="" width="859" height="590" class="alignnone size-full wp-image-6323" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_05.png 859w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_05-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_fastnetmon_05-768x527.png 768w" sizes="auto, (max-width: 859px) 100vw, 859px" /></p>
<p>Você pode pesquisar por mais dashs em: <a href="https://grafana.com/grafana/dashboards/?search=fastnetmon" rel="noopener" target="_blank">https://grafana.com/grafana/dashboards/?search=fastnetmon</a></p>
<p><strong>Fastnetmon</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon.png" alt="" width="1920" height="1480" class="alignnone size-full wp-image-6329" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon-300x231.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon-1024x789.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon-768x592.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon-1536x1184.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /><br />
<strong>Fastnetmon PAINEL GERAL</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_PAINEL_GERAL.png" alt="" width="1920" height="984" class="alignnone size-full wp-image-6328" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_PAINEL_GERAL.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_PAINEL_GERAL-300x154.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_PAINEL_GERAL-1024x525.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_PAINEL_GERAL-768x394.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_PAINEL_GERAL-1536x787.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p><strong>Fastnetmon TOP HOSTS (+100MB)</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_100MB.png" alt="" width="1920" height="1478" class="alignnone size-full wp-image-6331" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_100MB.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_100MB-300x231.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_100MB-1024x788.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_100MB-768x591.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_100MB-1536x1182.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p><strong>Fastnetmon TOP HOSTS (+300MB)</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_300MB.png" alt="" width="1920" height="984" class="alignnone size-full wp-image-6332" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_300MB.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_300MB-300x154.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_300MB-1024x525.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_300MB-768x394.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_HOSTS_300MB-1536x787.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p><strong>Fastnetmon TOP NETWORKS</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_NETWORKS.png" alt="" width="1920" height="984" class="alignnone size-full wp-image-6333" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_NETWORKS.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_NETWORKS-300x154.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_NETWORKS-1024x525.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_NETWORKS-768x394.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_NETWORKS-1536x787.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p><strong>Fastnetmon TOP TRÁFEGO DE SAÍDA</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_TRAFEGO_DE_SAIDA.png" alt="" width="1920" height="984" class="alignnone size-full wp-image-6334" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_TRAFEGO_DE_SAIDA.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_TRAFEGO_DE_SAIDA-300x154.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_TRAFEGO_DE_SAIDA-1024x525.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_TRAFEGO_DE_SAIDA-768x394.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TOP_TRAFEGO_DE_SAIDA-1536x787.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p><strong>Fastnetmon TRÁFEGO REDE ESPECIFICADA</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_REDE_ESPECIFICADA.png" alt="" width="1920" height="912" class="alignnone size-full wp-image-6335" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_REDE_ESPECIFICADA.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_REDE_ESPECIFICADA-300x143.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_REDE_ESPECIFICADA-1024x486.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_REDE_ESPECIFICADA-768x365.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_REDE_ESPECIFICADA-1536x730.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p><strong>Fastnetmon TRÁFEGO POR IP ESPECIFICO</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_POR_IP_ESPECIFICO.png" alt="" width="1920" height="912" class="alignnone size-full wp-image-6336" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_POR_IP_ESPECIFICO.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_POR_IP_ESPECIFICO-300x143.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_POR_IP_ESPECIFICO-1024x486.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_POR_IP_ESPECIFICO-768x365.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/Fastnetmon_TRAFEGO_POR_IP_ESPECIFICO-1536x730.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>E como ficou o hardware agora?<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_hardware_grafana.png" alt="" width="1340" height="458" class="alignnone size-full wp-image-6338" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_hardware_grafana.png 1340w, https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_hardware_grafana-300x103.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_hardware_grafana-1024x350.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/fastnetmon_hardware_grafana-768x262.png 768w" sizes="auto, (max-width: 1340px) 100vw, 1340px" /></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>
<h4>BÔNUS PEGANDO PREFIXO /24 DO IP ATACADO E ANUNCIANDO COM OUTRA COMMUNITY PARA MITIGAR</h4>
<pre class="remontti-code-plain">
#####################
# SCRIPT FASTNETMON
#####################

#!/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)

# Pegando prefixo 24
ip32=$1
prefixo24=&quot;${ip32%.*}.0/24&quot;

# Defina o ID do Chat ou Grupo (Grupos sempre começam com &quot;-&quot; )
ID_CHAT=&#039;-1000000000000&#039;
 
if [ &quot;$2&quot; = &quot;incoming&quot; ]; then
  TIPO=&quot;Sendo atacado&quot;
else 
  TIPO=&quot;Realizando um ataque&quot;
fi
 
# Desbanindo um IP
if [ &quot;$4&quot; = &quot;unban&quot; ]; then
  /usr/local/bin/telegram -m &quot;$ID_CHAT&quot; &quot;UNBAN IP: &lt;code&gt;$1&lt;/code&gt;&quot; &quot;&lt;code&gt;-&gt;&gt;&lt;/code&gt; Removido da blackhole&quot;
  # Remove IP do anuncio para o FRR
  vtysh --command &quot;configure terminal
  no ip route $1/32 lo
  no ip route $prefixo24 lo
  router bgp 65001
   address-family ipv4 unicast
    no network $1/32
    no network $prefixo24
  &quot;
  # Movemos os logs para pasta ataques pois não queremos mais receber elas.
  mv /var/log/fastnetmon_attacks/$1* /var/log/fastnetmon_attacks/ataques
  exit 0
fi
 
# Banindo um IP
if [ &quot;$4&quot; = &quot;ban&quot; ]; then
  /usr/local/bin/telegram -m &quot;$ID_CHAT&quot; &quot;BAN IP: &lt;code&gt;$1&lt;/code&gt; $TIPO &lt;b&gt;[$3 pps]&lt;/b&gt;&quot; &quot;&lt;code&gt;-&gt;&gt;&lt;/code&gt; Anunciado em blackhole&quot;
  /usr/local/bin/telegram -f &quot;$ID_CHAT&quot; /var/log/fastnetmon_attacks/$1* $1 &quot;Logs do ataque ao IP $1&quot;
  # Anuncia IP ao FRR
  vtysh --command &quot;configure terminal
  ip route $1/32 lo
  ip route $prefixo24 lo
  router bgp 65001
   address-family ipv4 unicast
    network $1/32
    network $prefixo24
  &quot;
    exit 0
fi
 
if [ &quot;$4&quot; == &quot;attack_details&quot; ]; then
  #/usr/local/bin/telegram -m &quot;$ID_CHAT&quot; &quot;BAN&quot; &quot;&lt;code&gt;FastNetMon: IP $1 blocked because $2 attack with power $3 pps&lt;/code&gt;&quot;
  exit 0
fi


#####################
# FRR
#####################


!
frr version 8.5.1
frr defaults traditional
hostname fnm
log syslog informational
no ipv6 forwarding
service integrated-vtysh-config
!
router bgp 65001
 bgp router-id 172.16.1.2
 neighbor 172.16.1.1 remote-as 12345
 neighbor 172.16.1.1 description &quot;BORDA&quot;
 !
 address-family ipv4 unicast
  neighbor 172.16.1.1 route-map MARK_FASTNETMON_IMPORT in
  neighbor 172.16.1.1 route-map MARK_FASTNETMON_EXPORT out
 exit-address-family
exit
!
ip prefix-list FASTNETMON_EXPORT_32 seq 5 permit 200.0.0.0/22 le 32
!
ip prefix-list FASTNETMON_EXPORT_24 seq 5 permit 200.0.0.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
!
end
write memory


#####################
# HUAWEI
#####################


#Configurando filtros e sessão BGP
ip route-static 192.0.2.1 255.255.255.255 NULL0 description BLACKHOLE

# Aceitas os prefixos 32 do AS para blackhole
ip ip-prefix  ACCEP_PREFIX_MASK32_FASTNETMON_IPV4 index 10 permit 200.0.0.0 22 greater-equal 32

# Aceitas os prefixos 24 do AS para mitigar
ip ip-prefix  ACCEP_PREFIX_MASK24_FASTNETMON_IPV4 index 10 permit 200.0.0.0 22 greater-equal 24

#Iginora Prefixos do CGNAT/Servidores
ip ip-prefix  IGNORE_PREFIX_FASTNETMON_IPV4 index 10 permit 200.0.1.0 28 greater-equal 28 less-equal 32
ip ip-prefix  IGNORE_PREFIX_FASTNETMON_IPV4 index 20 permit 200.0.2.0 26 greater-equal 26 less-equal 32

# community que o FRR ira enviar
ip community-filter basic COMM_FASTNETMON_BLACKHOLE_32 index 10 permit 65001:666
ip community-filter basic COMM_FASTNETMON_BLACKHOLE_24 index 10 permit 65001:777

# Define comm para usar nos RP das operadoras
ip community-filter basic COMM_BLACKHOLE_32 index 10 permit 65444:666
ip community-filter basic COMM_BLACKHOLE_24 index 10 permit 65444:777

# RP
route-policy FASTNETMON_IMPORT_IPV4 deny node 1000
 if-match ip-prefix IGNORE_PREFIX_FASTNETMON_IPV4

route-policy FASTNETMON_IMPORT_IPV4 permit node 1010
 if-match community-filter COMM_FASTNETMON_BLACKHOLE_32 
 apply local-preference 999
 apply ip-address next-hop 192.0.2.1
 apply community 65444:666
 if-match ip-prefix ACCEP_PREFIX_MASK32_FASTNETMON_IPV4
 
route-policy FASTNETMON_IMPORT_IPV4 permit node 1020
 if-match community-filter COMM_FASTNETMON_BLACKHOLE_24
 apply local-preference 999
 apply ip-address next-hop 192.0.2.1
 apply community 65444:777
 if-match ip-prefix ACCEP_PREFIX_MASK24_FASTNETMON_IPV4
 
route-policy FASTNETMON_IMPORT_IPV4 deny node 9999
route-policy FASTNETMON_EXPORT_IPV4 deny node 9999

# FILTRO OPERADORA

# Envia para community de blackhole da operadora 
route-policy UPSTREAM_OP_BRUXADO71_EXPORT_IPV4 permit node 2070
 if-match community-filter COMM_BLACKHOLE_32
 apply community 71:666

# Envia para community de blackhole de mitigraçação
route-policy UPSTREAM_OP_BRUXADO71_EXPORT_IPV4 permit node 2070
 if-match community-filter COMM_BLACKHOLE_24
 apply community 71:999
</pre>
<p>O post <a href="https://blog.remontti.com.br/6278">Como se proteger de ataques DDoS com FastNetMon de graça &#8211; Integração FRR vs NE-Huawei &#8211; Bonus Gráficos Grafana</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6278/feed</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>Monitorando no Zabbix as sessões BGP do RouterOS v6 (Mikrotik) via SNMP</title>
		<link>https://blog.remontti.com.br/6175</link>
					<comments>https://blog.remontti.com.br/6175#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 28 Dec 2021 20:31:48 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[bgp]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[routeros v6]]></category>
		<category><![CDATA[snmp]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6175</guid>

					<description><![CDATA[<p>Neste tutorial vamos aprender a monitorar o status da sessão BGP no RouterOS v6 o nosso &#8220;querido&#8221; Mikrotik, bem como receber notificações se a sessão cair ou reconectar. Como a mikrotik não disponibiliza essas&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6175">Monitorando no Zabbix as sessões BGP do RouterOS v6 (Mikrotik) via SNMP</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/2021/12/mikrotik_bgp_zabbix_snmp.png" alt="" width="750" height="375" class="alignnone size-full wp-image-6178" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/12/mikrotik_bgp_zabbix_snmp.png 750w, https://blog.remontti.com.br/wp-content/uploads/2021/12/mikrotik_bgp_zabbix_snmp-300x150.png 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></p>
<p>Neste tutorial vamos aprender a monitorar o status da sessão BGP no RouterOS v6 o nosso &#8220;querido&#8221; Mikrotik, bem como receber notificações se a sessão cair ou reconectar.</p>
<p>Como a mikrotik não disponibiliza essas informações via SNMP das sessões BGP, usaremos das artimanhas. Então juntamente com meu amigo <strong><a href="https://github.com/saulotarsobc" rel="noopener" target="_blank">Saulo Costa</a></strong> qual identificou que existe uma OID dos script que estão no RouterOS (<em>1.3.6.1.4.1.14988.1.1.8.1.1.2</em>) e outra (<em>1.3.6.1.4.1.14988.1.1.18.1.1.2.<strong>***</strong></em>) que é possivel executar-lo bem como ter retornos, e ai meu amigo as mentes voaram longe!</p>
<p>Acompanhe o raciocínio:</p>
<h3>1º Crie um script em seu RouterOS</h3>
<p>Darei o nome do script de <strong>bgp_snmp</strong></p>
<pre class="remontti-code">:put &quot;{\&quot;peer\&quot;: [&quot;;
:global lista [/routing bgp peer find];
:global contador 0;
:foreach i in=$lista do={
  :global disabled [/routing bgp peer get value-name=disabled number=$i];
  :global name [/routing bgp peer get value-name=name number=$i];
  :global remoteaddress [/routing bgp peer get value-name=remote-address number=$i];
  :global remoteas [/routing bgp peer get value-name=remote-as number=$i];
  :global state [/routing bgp peer get value-name=state number=$i];
    :if (state = &quot;idle&quot;) do={:set state 1;};
    :if (state = &quot;connect&quot;) do={:set state 2;}
    :if (state = &quot;active&quot;) do={:set state 3;}; 
    :if (state = &quot;opensent&quot;) do={:set state 4;}
    :if (state = &quot;openconfirm&quot;) do={:set state 5;}; 
    :if (state = &quot;established&quot;) do={:set state 6;}
    :if (disabled = true) do={:set state 1;}
  :global prefix [/routing bgp peer get value-name=prefix number=$i];
    :if (prefix &lt; 1) do={:set prefix 0;}  
  :global uptime [/routing bgp peer get value-name=uptime number=$i];
    :if (uptime &lt; 1) do={:set uptime 0;}
    :global uptimeseconds 0; :global weekend 0; 
    :global dayend 0; :global weeks 0; :global days 0;
    :if ([:find $uptime &quot;w&quot; -1] &gt; 0) do={
      :set weekend [:find $uptime &quot;w&quot; -1];
      :set weeks [:pick $uptime 0 $weekend];
      :set weekend ($weekend+1);
    };
    :if ([:find $uptime &quot;d&quot; -1] &gt; 0) do={
      :set dayend [:find $uptime &quot;d&quot; -1];
      :set days [:pick $uptime $weekend $dayend];
    };
    :global time [:pick $uptime ([:len $uptime]-8) [:len $uptime]]; 
    :global hours [:pick $time 0 2];
    :global minutes [:pick $time 3 5];
    :global seconds [:pick $time 6 8]; 
    :set uptimeseconds [($weeks*86400*7+$days*86400+$hours*3600+$minutes*60+$seconds)];

  :set contador ($contador + 1);
  :if ( $contador &lt; [:len $lista]) do={
    :put &quot;{\&quot;Id\&quot;: \&quot;$contador\&quot;,\&quot;Disabled\&quot;: \&quot;$disabled\&quot;,\&quot;Name\&quot;: \&quot;$name\&quot;,\&quot;Remote-Address\&quot;: \&quot;$remoteaddress\&quot;,\&quot;Remote-AS\&quot;: \&quot;$remoteas\&quot;,\&quot;State\&quot;: \&quot;$state\&quot;,\&quot;Prefix\&quot;: \&quot;$prefix\&quot;,\&quot;Uptime\&quot;: \&quot;$uptimeseconds\&quot;},&quot;
  } else={
    :put &quot;{\&quot;Id\&quot;: \&quot;$contador\&quot;,\&quot;Disabled\&quot;: \&quot;$disabled\&quot;,\&quot;Name\&quot;: \&quot;$name\&quot;,\&quot;Remote-Address\&quot;: \&quot;$remoteaddress\&quot;,\&quot;Remote-AS\&quot;: \&quot;$remoteas\&quot;,\&quot;State\&quot;: \&quot;$state\&quot;,\&quot;Prefix\&quot;: \&quot;$prefix\&quot;,\&quot;Uptime\&quot;: \&quot;$uptimeseconds\&quot;}&quot;
  };
  };
:put &quot;]}&quot;;</pre>
<p>A idéa é pegar as informações no scrip e apenas imprimi-las. Experimente executar o script agora!</p>
<pre class="remontti-code">[user@mikrotik] &gt; system script run bgp_snmp</pre>
<p>Você terá uma saída em JSON com as informações que iremos coletar lá no Zabbix.</p>
<pre class="remontti-code-plain">{&quot;peer&quot;: [
{&quot;Id&quot;: &quot;1&quot;,&quot;Disabled&quot;: &quot;false&quot;,&quot;Name&quot;: &quot;VS_BORDA_IPv4&quot;,&quot;Remote-Address&quot;: &quot;10.50.50.29&quot;,&quot;Remote-AS&quot;: &quot;1234&quot;,&quot;State&quot;: &quot;6&quot;,&quot;Prefix&quot;: &quot;1&quot;,&quot;Uptime&quot;: &quot;83235&quot;},
{&quot;Id&quot;: &quot;2&quot;,&quot;Disabled&quot;: &quot;false&quot;,&quot;Name&quot;: &quot;VS_BORDA_IPv6&quot;,&quot;Remote-Address&quot;: &quot;fd00:bacb:50:28::1&quot;,&quot;Remote-AS&quot;: &quot;1234&quot;,&quot;State&quot;: &quot;6&quot;,&quot;Prefix&quot;: &quot;1&quot;,&quot;Uptime&quot;: &quot;3500&quot;}
]}</pre>
<h3>2º Configure o SNMP</h3>
<p>Será necessário habiliar o <strong>write-access</strong>, então tenha certeza de ter uma community fora dos padrões <em>(ex public {mando te matar!})</em> bem como restringir o acesso apenas para IP ou Prefixos de seus servidores.<br />
Segue um exemplo:</p>
<pre class="remontti-code">/snmp community set [ find default=yes ] addresses=200.200.200.0/28 name=sUpErS3cret0 write-access=yes
/snmp set contact=&quot;noc@remontti.com.br&quot; enabled=yes location=&quot;Seu Local&quot; trap-version=2
</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_mikrotik_snmp_conf.png" data-rel="lightbox-gallery-o4yl1IRO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_mikrotik_snmp_conf.png" alt="" width="1426" height="684" class="alignnone size-full wp-image-6182" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_mikrotik_snmp_conf.png 1426w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_mikrotik_snmp_conf-300x144.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_mikrotik_snmp_conf-1024x491.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_mikrotik_snmp_conf-768x368.png 768w" sizes="auto, (max-width: 1426px) 100vw, 1426px" /></a></p>
<h3>3º Teste do seu servidor Zabbix</h3>
<p>No exemplo meu router tem o IP 10.50.50.30 e minha community é sUpErS3cret0. Se você não tem as MIBS e o comando snmpwalk não "funciona" <a href="https://github.com/remontti/Zabbix-Templates/blob/main/README.md" rel="noopener" target="_blank">leia aqui</a>.</p>
<pre class="remontti-code"># snmpwalk -v2c -c sUpErS3cret0 10.50.50.30 1.3.6.1.4.1.14988.1.1.8.1.1.2</pre>
<p>Você tera um resultado com todos os seus scripts:</p>
<pre class="remontti-code-plain">SNMPv2-SMI::enterprises.14988.1.1.8.1.1.2.1 = STRING: &quot;bakup_ftp&quot;
SNMPv2-SMI::enterprises.14988.1.1.8.1.1.2.4 = STRING: &quot;script_da_morte&quot;
SNMPv2-SMI::enterprises.14988.1.1.8.1.1.2.7 = STRING: &quot;bgp_snmp&quot;</pre>
<p>O que é iportante para nós é esse numerozinho aqui: 14988.1.1.8.1.1.2.<strong>7</strong>, mais propriamente dito o final dele, neste exemplo o nº <strong>7</strong>, este é o identificador do script. Anote ele, vamos precisar ele lá no nosso template.<br />
Agora vamos rodar o script e fazer um get para ver se temos o retorno com o OID 1.3.6.1.4.1.14988.1.1.18.1.1.2.<strong>X</strong>. Onde <strong>X</strong> é o nº do identificador do script (neste ex 7).</p>
<pre class="remontti-code"># snmpget -v2c -c sUpErS3cret0 10.50.50.30 1.3.6.1.4.1.14988.1.1.18.1.1.2.7 |  sed -e &#039;s/\\//g&#039;</pre>
<p>Você irá receber uma saída com todos os peers do seu router:</p>
<pre class="remontti-code-plain">SNMPv2-SMI::enterprises.14988.1.1.18.1.1.2.8 = STRING: &quot;{&quot;peer&quot;: [
{&quot;Id&quot;: &quot;1&quot;,&quot;Disabled&quot;: &quot;false&quot;,&quot;Name&quot;: &quot;VS_BORDA_IPv4&quot;,&quot;Remote-Address&quot;: &quot;10.50.50.29&quot;,&quot;Remote-AS&quot;: &quot;1234&quot;,&quot;State&quot;: &quot;6&quot;,&quot;Prefix&quot;: &quot;1&quot;,&quot;Uptime&quot;: &quot;84508&quot;},
{&quot;Id&quot;: &quot;2&quot;,&quot;Disabled&quot;: &quot;false&quot;,&quot;Name&quot;: &quot;VS_BORDA_IPv6&quot;,&quot;Remote-Address&quot;: &quot;fd00:bacb:50:28::1&quot;,&quot;Remote-AS&quot;: &quot;1234&quot;,&quot;State&quot;: &quot;6&quot;,&quot;Prefix&quot;: &quot;1&quot;,&quot;Uptime&quot;: &quot;4773&quot;}
]}&quot;</pre>
<h3>4º Importando o template para o Zabbix</h3>
<p>Faça download do template <strong><a href="https://raw.githubusercontent.com/remontti/Zabbix-Templates/main/Mikrotik/BGP_SNMP_SCRIPT/RR%20Mikrotik%20-%20BGP%20-%20SNMP%20Script.xml" rel="noopener" target="_blank">RR Mikrotik - BGP - SNMP Script.xml</a></strong> e importe o mesmo.</p>
<h3>5º Crie/Edite um host usando o template</h3>
<p>Informe o Nome, grupo bem como IP com agente SNMP.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_1.png" data-rel="lightbox-gallery-o4yl1IRO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_1.png" alt="" width="1274" height="709" class="alignnone size-full wp-image-6188" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_1.png 1274w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_1-300x167.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_1-1024x570.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_1-768x427.png 768w" sizes="auto, (max-width: 1274px) 100vw, 1274px" /></a><br />
Selecione o template<strong> RR Mikrotik - BGP - SNMP Script</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_2.png" data-rel="lightbox-gallery-o4yl1IRO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_2.png" alt="" width="1001" height="261" class="alignnone size-full wp-image-6187" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_2.png 1001w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_2-300x78.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_2-768x200.png 768w" sizes="auto, (max-width: 1001px) 100vw, 1001px" /></a><br />
Lembra do identificador, precisamos informa-lo aqui.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_3.png" data-rel="lightbox-gallery-o4yl1IRO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_3.png" alt="" width="1195" height="390" class="alignnone size-full wp-image-6186" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_3.png 1195w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_3-300x98.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_3-1024x334.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_3-768x251.png 768w" sizes="auto, (max-width: 1195px) 100vw, 1195px" /></a></p>
<p>Acesse os dados recentes para verificar se os itens foram criados (lembrado que ele é executado a cada 5min) então tenha paciência de aguardar 10min ou execute manualmente.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_4.png" data-rel="lightbox-gallery-o4yl1IRO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_4.png" alt="" width="1617" height="808" class="alignnone size-full wp-image-6191" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_4.png 1617w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_4-300x150.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_4-1024x512.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_4-768x384.png 768w, https://blog.remontti.com.br/wp-content/uploads/2021/12/bgp_snmp_routeros_4-1536x768.png 1536w" sizes="auto, (max-width: 1617px) 100vw, 1617px" /></a></p>
<p>Bem mais simplique que o metodo do outro <a href="https://blog.remontti.com.br/6075" rel="noopener" target="_blank">tutorial com script python</a>.</p>
<p>Espero que tenha gostado! E mais uma vez deixo meu agradecimento ao parceio Saulo. Se fizer algo legal não deixe de compartilhar! Com isso você pode criar até mesmo outros templates, para coletar outras informações. Isso é o legal de compartilhar!</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><br />
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>O post <a href="https://blog.remontti.com.br/6175">Monitorando no Zabbix as sessões BGP do RouterOS v6 (Mikrotik) via SNMP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6175/feed</wfw:commentRss>
			<slash:comments>30</slash:comments>
		
		
			</item>
		<item>
		<title>Monitorando no Zabbix as sessões BGP do RouterOS/Mikrotik (Script Python)</title>
		<link>https://blog.remontti.com.br/6075</link>
					<comments>https://blog.remontti.com.br/6075#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 17 Nov 2021 00:03:50 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[bgp]]></category>
		<category><![CDATA[grafana]]></category>
		<category><![CDATA[monitoramenteo]]></category>
		<category><![CDATA[peer]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[zabbix]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6075</guid>

					<description><![CDATA[<p>Neste tutorial vamos aprender a monitorar o status da sessão BGP no RouterOS/Mikrotik, bem como receber notificações se a sessão cair ou reconectar. PARA PARA PARA&#8230;. Quando escrevi este tutorial não existia esse tutorial&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6075">Monitorando no Zabbix as sessões BGP do RouterOS/Mikrotik (Script Python)</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/2021/11/mikrotik_bgp_zabbix.png" alt="" width="750" height="375" class="alignnone size-full wp-image-6091" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/mikrotik_bgp_zabbix.png 750w, https://blog.remontti.com.br/wp-content/uploads/2021/11/mikrotik_bgp_zabbix-300x150.png 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></p>
<p>Neste tutorial vamos aprender a monitorar o status da sessão BGP no RouterOS/Mikrotik, bem como receber notificações se a sessão cair ou reconectar.</p>
<p><font color="red">PARA PARA PARA&#8230;.</font> Quando escrevi este tutorial não existia esse <a href="https://blog.remontti.com.br/6175" rel="noopener" target="_blank">tutorial aqui</a>, recomendo você lêr ele, pois descobrimos outra forma mais simples.</p>
<p>Como a mikrotik não disponibiliza essas informações via SNMP (até o momento, esperaça de pobre é a ultima que morre) teremos que usar das artimanhas, então nosso amigo <a target="_blank" href="https://github.com/gtkpad" rel="noopener">Gabriel Vargas Padilha</a> fez um script em python <a target="_blank" href="https://github.com/gtkpad/mikrotikBgpZabbixScript" rel="noopener">mikrotikBgpZabbixScript</b></a> para buscar as informações, eu montei a parte do <a target="_blank" href="https://github.com/remontti/Zabbix-Templates/edit/main/Mikrotik/BGP_ROUTEROS/" rel="noopener">Zabbix</b></a>. </p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/dados.png" alt="" width="1305" height="272" class="alignnone size-full wp-image-6077" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/dados.png 1305w, https://blog.remontti.com.br/wp-content/uploads/2021/11/dados-300x63.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/dados-1024x213.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/11/dados-768x160.png 768w" sizes="auto, (max-width: 1305px) 100vw, 1305px" /></p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/graficos_bgp.png" alt="" width="1666" height="724" class="alignnone size-full wp-image-6078" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/graficos_bgp.png 1666w, https://blog.remontti.com.br/wp-content/uploads/2021/11/graficos_bgp-300x130.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/graficos_bgp-1024x445.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/11/graficos_bgp-768x334.png 768w, https://blog.remontti.com.br/wp-content/uploads/2021/11/graficos_bgp-1536x668.png 1536w" sizes="auto, (max-width: 1666px) 100vw, 1666px" /></p>
<p>Se aida não tem o Zabbix instalado siga: <a target="_blank" href="https://blog.remontti.com.br/5517" rel="noopener">Instalação do Zabbix 5 LTS + Grafana + NGINX + PostgreSQL + Telegram</a></p>
<h1>Configuração</h2>
<p><strong>Requisitos: </strong><br />
&#8211; RouterOS 6.48 ou maior<br />
&#8211; Zabbix Server 5.x<br />
&#8211; Distribuição: Debian 10/11</p>
<h4>Configuração no RouterOS/Mikrotik</h4>
<p>Será necessário criar um usuário com permissões somente de leitura bem como restringindo o acesso para somente o IP do Zabbix, para fazer a conexão para coletas de dados.</p>
<pre class="remontti-code">/user add group=read address=IP_ZABBIX name=SEU_USUARIO password=SUA_SENHA</pre>
<p>Se desejar desativar as infomação de login. Isso fará com que você não veja mais nenhum login feito no router.</p>
<pre class="remontti-code">/system logging set 0 topics=info,!account</pre>
<p>OBS: Não use espaço e caracter especial nos nomes dos Peer&#8217;s e tenha nomes diferentes para cada Peer.</p>
<h4>Zabbix Serve/Linux</h4>
<p>Pacotes necessários:</p>
<pre class="remontti-code-plain"># apt install python3-pip
# pip3 install librouteros</pre>
<p>Acesse o diretório externalscripts e faça download.</p>
<pre class="remontti-code"># cd /usr/lib/zabbix/externalscripts/</pre>
<p>Faça download dos scripts </p>
<pre class="remontti-code"># apt install wget 
# wget https://raw.githubusercontent.com/gtkpad/mikrotikBgpZabbixScript/main/main.py -O mikrotikBgp.py
# wget https://raw.githubusercontent.com/gtkpad/mikrotikBgpZabbixScript/main/Mikrotik.py</pre>
<p>De permissão para os arquivos para execução e altere o dono para o usuário zabbix.</p>
<pre class="remontti-code"># touch mikrotikBgp.log 
# chmod +x mikrotikBgp.py 
# chown zabbix. mikrotikBgp.py Mikrotik.py mikrotikBgp.log 
# systemctl  restart zabbix-server</pre>
<p>Informações de uso do script:</p>
<pre class="remontti-code"># ./mikrotikBgp.py &lt;IP&gt; &lt;USER&gt; &lt;PASS&gt; &lt;API_PORT&gt; &lt;METHOD&gt;
# ./mikrotikBgp.py &lt;IP&gt; &lt;USER&gt; &lt;PASS&gt; &lt;API_PORT&gt; &lt;METHOD&gt; &lt;PEER_NAME&gt;
# ./mikrotikBgp.py &lt;IP&gt; &lt;USER&gt; &lt;PASS&gt; &lt;API_PORT&gt; &lt;METHOD&gt; &lt;PEER_NAME&gt; &lt;PEER_INFO&gt;</pre>
<p><strong>METHOD&#8217;s</strong><br />
<strong>getPeer</strong> &#8211; Retorna todos os peerings em formato json.<br />
<strong>getPeerInfo</strong> &#8211; Retorna o valor especifico de um peer.</p>
<p>Exemplos de uso:</p>
<pre class="remontti-code"># cd /usr/lib/zabbix/externalscripts
# ./mikrotikBgp.py 10.20.30.40 usuario senha 8728 getPeers</pre>
<pre class="remontti-code-plain">{
   &quot;data&quot;:[
      {
         &quot;{#PEER_NAME}&quot;:&quot;VS_BORDA_IPV4&quot;,
         &quot;{#PEER_AS}&quot;:12345,
         &quot;{#PEER_ADDR}&quot;:&quot;10.20.30.5&quot;
      },
      {
         &quot;{#PEER_NAME}&quot;:&quot;VS_BORDA_IPV6&quot;,
         &quot;{#PEER_AS}&quot;:12345,
         &quot;{#PEER_ADDR}&quot;:&quot;fd00:bacb:20:30::1&quot;
      },
      {
         &quot;{#PEER_NAME}&quot;:&quot;NAT_PPPOES_IPV4&quot;,
         &quot;{#PEER_AS}&quot;:65530,
         &quot;{#PEER_ADDR}&quot;:&quot;10.20.30.14&quot;
      }
   ]
}</pre>
<pre class="remontti-code">
# ./mikrotikBgp.py 10.20.30.40 usuario senha 8728 getPeerInfo VS_BORDA_IPV4
# ./mikrotikBgp.py 10.20.30.40 usuario senha 8728 getPeerInfo VS_BORDA_IPV4 name
# ./mikrotikBgp.py 10.20.30.40 usuario senha 8728 getPeerInfo VS_BORDA_IPV4 instance
# ./mikrotikBgp.py 10.20.30.40 usuario senha 8728 getPeerInfo VS_BORDA_IPV4 remote-address
# ./mikrotikBgp.py 10.20.30.40 usuario senha 8728 getPeerInfo VS_BORDA_IPV4 remote-as
# ./mikrotikBgp.py 10.20.30.40 usuario senha 8728 getPeerInfo VS_BORDA_IPV4 uptime
# ./mikrotikBgp.py 10.20.30.40 usuario senha 8728 getPeerInfo VS_BORDA_IPV4 established
# ./mikrotikBgp.py 10.20.30.40 usuario senha 8728 getPeerInfo VS_BORDA_IPV4 prefix-count
# ./mikrotikBgp.py 10.20.30.40 usuario senha 8728 getPeerInfo VS_BORDA_IPV4 advertisements</pre>
<p>Agora acesse seu Zabbix, e importe o Template:<br />
Faça download do template <a href="https://raw.githubusercontent.com/remontti/Zabbix-Templates/main/Mikrotik/BGP_ROUTEROS/RR%20Mikrotik%20-%20BGP%20-%20Script%20Python.xml" rel="noopener" target="_blank"><strong>RR Mikrotik &#8211; BGP &#8211; Script Python.xml</strong></a> e importe.</p>
<p>Crie um novo host, ou inclua o agent.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/zb1.png" alt="" width="1283" height="673" class="alignnone size-full wp-image-6081" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/zb1.png 1283w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb1-300x157.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb1-1024x537.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb1-768x403.png 768w" sizes="auto, (max-width: 1283px) 100vw, 1283px" /></p>
<p>Selecione o Template RR Mikrotik &#8211; BGP &#8211; Script. Você encontra <a href="https://github.com/remontti/Zabbix-Templates/tree/main/Mikrotik" rel="noopener" target="_blank">outros templates aqui</a> também.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/zb2.png" alt="" width="1016" height="237" class="alignnone size-full wp-image-6082" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/zb2.png 1016w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb2-300x70.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb2-768x179.png 768w" sizes="auto, (max-width: 1016px) 100vw, 1016px" /></p>
<p>Por fim, herde os macros do template, e clique em modificar para informar os seus dados em seguida clique em salvar<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/zb3.png" alt="" width="1200" height="596" class="alignnone size-full wp-image-6083" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/zb3.png 1200w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb3-300x149.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb3-1024x509.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb3-768x381.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></p>
<p>OBS: A descoberta esta ajustada para 6h, se desejar que seja mais rápido execute manualmente, para realizar esse procedimento faça:<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/zb4.png" alt="" width="1618" height="484" class="alignnone size-full wp-image-6085" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/zb4.png 1618w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb4-300x90.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb4-1024x306.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb4-768x230.png 768w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb4-1536x459.png 1536w" sizes="auto, (max-width: 1618px) 100vw, 1618px" /></p>
<h4>Grafana Modelo</h4>
<p>Apenas uma idéia para você montar uma dash bacaninha:<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/zb5.png" alt="" width="1779" height="288" class="alignnone size-full wp-image-6086" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/zb5.png 1779w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb5-300x49.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb5-1024x166.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb5-768x124.png 768w, https://blog.remontti.com.br/wp-content/uploads/2021/11/zb5-1536x249.png 1536w" sizes="auto, (max-width: 1779px) 100vw, 1779px" /></p>
<p>Vou deixar aqui <a href="https://raw.githubusercontent.com/remontti/Zabbix-Templates/main/Mikrotik/BGP_ROUTEROS/Grafana_Modelo.json">dash Modelo</a><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/grafana.png" alt="" width="1090" height="218" class="alignnone size-full wp-image-6087" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/grafana.png 1090w, https://blog.remontti.com.br/wp-content/uploads/2021/11/grafana-300x60.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/grafana-1024x205.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/11/grafana-768x154.png 768w" sizes="auto, (max-width: 1090px) 100vw, 1090px" /></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><br />
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>O post <a href="https://blog.remontti.com.br/6075">Monitorando no Zabbix as sessões BGP do RouterOS/Mikrotik (Script Python)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6075/feed</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title>TR-069 &#8211; Instalação do  GenieACS no Debian 11 Bullseye</title>
		<link>https://blog.remontti.com.br/6001</link>
					<comments>https://blog.remontti.com.br/6001#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 29 Oct 2021 19:56:25 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Bullseye]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian 11]]></category>
		<category><![CDATA[fiberhome]]></category>
		<category><![CDATA[GenieACS]]></category>
		<category><![CDATA[intelbras]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[tp-link]]></category>
		<category><![CDATA[tplink]]></category>
		<category><![CDATA[tr-069]]></category>
		<category><![CDATA[tr069]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6001</guid>

					<description><![CDATA[<p>Cliente TR-069 (Relatório Técnico 069) é uma implementação do CWMP (CPE WAN Management Protocol) para gerenciar dispositivos de usuários finais de forma centralizada. Este CWMP é executado em uma rede IP usando HTTP ou&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6001">TR-069 &#8211; Instalação do  GenieACS no Debian 11 Bullseye</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/2021/10/genieacs_debian_11.png" alt="" width="750" height="375" class="alignnone size-full wp-image-6013" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11.png 750w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11-300x150.png 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></p>
<p>Cliente TR-069 (Relatório Técnico 069) é uma implementação do CWMP (CPE WAN Management Protocol) para gerenciar dispositivos de usuários finais de forma centralizada. Este CWMP é executado em uma rede IP usando HTTP ou HTTPS para se comunicar com dispositivos ACS (Sistema de configuração automática), onde ACS é um sistema usado para monitorar, configurar e atualizar o firmware de dispositivos remotos.</p>
<p>Em geral, a função do TR-069 é mais amplamente usada em ISPs para gerenciamento de dispositivos do usuário final. Alguns dispositivos que estão atualmente começando a implementar as funções do TR-069, como FTTH CPE/ONT, WIMAX CPE, também podem ser usados ​​para monitoramento de VoIP ou CFTV. E no próprio MikroTik, a função Cliente TR-069 também foi adicionada a partir do RouterOS versão 6.38.</p>
<p><strong>Requesitos:</strong><br />
<strong><a href="https://blog.remontti.com.br/5792" rel="noopener noreferrer" target="_blank">Debian 11 Bullseye &#8211; Instalação Limpa</a></strong></p>
<p><strong>Leitura recomendada:</strong><br />
<a href="https://blog.remontti.com.br/5848" rel="noopener" target="_blank"><strong>Configurando interface de rede no Debian 11</strong></a><br />
<a href="https://blog.remontti.com.br/5867" rel="noopener" target="_blank"><strong>Como melhorar a produtividade no seu Debian após instalação</strong></a></p>
<p>Ajustando o repositório</p>
<pre class="remontti-code"># vim /etc/apt/sources.list</pre>
<p>Adicione <strong>contrib non-free </strong>aos repositórios</p>
<pre class="remontti-code-plain"># deb http://YOUR_MIRROR/debian/ bullseye main contrib non-free
# deb-src http://YOUR_MIRROR/debian/ bullseye main contrib non-free

deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main contrib non-free

deb http://security.debian.org/debian-security bullseye-security main contrib non-free
deb-src http://security.debian.org/debian-security bullseye-security main contrib non-free

deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye-updates main contrib non-free</pre>
<p>Atualize o repositório:</p>
<pre class="remontti-code"># apt update</pre>
<p>Se tiver algum pacote para atualização também faça:</p>
<pre class="remontti-code"># apt upgrade -y</pre>
<p>Intale os firmware-linux*</p>
<pre class="remontti-code"># apt install firmware-linux firmware-linux-free firmware-linux-nonfree -y</pre>
<p>Reinicie seu servidor para carregar os novos módulos do kernel</p>
<pre class="remontti-code"># reboot</pre>
<p><strong>Pré-requisitos:</strong><br />
&#8211; Node.js<br />
&#8211; MongoDB</p>
<p><a href="https://genieacs.com" rel="noopener" target="_blank">https://genieacs.com</a><br />
<a href="http://docs.genieacs.com/" rel="noopener" target="_blank">http://docs.genieacs.com/</a></p>
<pre class="remontti-code"># apt install curl gnupg2 wget</pre>
<h3>Instalção do Node.js</h3>
<p>Repositório Node Js</p>
<pre class="remontti-code"># curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
# apt install nodejs -y</pre>
<p>Verifique a versão</p>
<pre class="remontti-code"># npm -v</pre>
<p>Veja se não tem atualização</p>
<pre class="remontti-code"># npm search -g npm</pre>
<p>Exemplo colocando a para atualizar (Ajuste a versão)</p>
<pre class="remontti-code"># npm install -g npm@9.6.7</pre>
<h3>Instalação do MongoDB</h3>
<p>Adicione o repositorio do MongoD (Sim é Buster Bullseye até o momento out/2021 não tem)</p>
<p><strong><a href="https://docs.mongodb.com/v5.0/tutorial/install-mongodb-on-debian/" rel="noopener" target="_blank">Versão 5</a></strong> (Recomendada)</p>
<pre class="remontti-code"># cd /tmp
# echo &quot;deb http://repo.mongodb.org/apt/debian buster/mongodb-org/5.0 main&quot; | tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# curl -sSL https://www.mongodb.org/static/pgp/server-5.0.asc  -o mongoserver.asc
# gpg --no-default-keyring --keyring ./mongo_key_temp.gpg --import ./mongoserver.asc
# gpg --no-default-keyring --keyring ./mongo_key_temp.gpg --export &gt; ./mongoserver_key.gpg
# mv mongoserver_key.gpg /etc/apt/trusted.gpg.d/</pre>
<p><strong><a href="https://docs.mongodb.com/v4.4/tutorial/install-mongodb-on-debian/" target="_blank" rel="noopener">Versão 4</a></strong> (Alguns relatos que no vmware não teve jeito de fazer o mongodb iniciar e a v4 funcionou)</p>
<pre class="remontti-code"># cd /tmp
# echo &quot;deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main&quot; | tee /etc/apt/sources.list.d/mongodb-org-4.4.list
# wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add - </pre>
<p>Atualize o repositório e instale o mongodb bem como a estensão do nodejs</p>
<pre class="remontti-code"># apt update
# apt install mongodb-org node-mongodb</pre>
<p>Ative o serviço para iniciar com o boot, inicie o serviço e verifique se o mesmo iniciou com êxito. </p>
<pre class="remontti-code"># systemctl enable mongod
# systemctl start mongod
# systemctl status mongod</pre>
<h3>Instalação do GenieACS</h3>
<p>Procure se o pacote existe:</p>
<pre class="remontti-code"># npm search -g genieacs</pre>
<pre class="remontti-code-plain">NAME                      | DESCRIPTION          | AUTHOR          | DATE       | VERSION  | KEYWORDS       
genieacs                  | A TR-069 Auto…       | =zaidka         | 2022-08-22 | 1.2.9    | TR-069 CWMP ACS
@anlix-io/genieacs-sim    | TR-069 client…       | =anlix-io       | 2023-05-30 | 1.4.0    | TR-069 CWMP ACS Simulator
genieacs-sim              | TR-069 client…       | =zaidka         | 2017-02-05 | 0.9.0    | TR-069 CWMP ACS</pre>
<p>Instale o genieacs</p>
<pre class="remontti-code"># npm install -g genieacs</pre>
<pre class="remontti-code-plain">added 129 packages in 8s

12 packages are looking for funding
  run `npm fund` for details
</pre>
<p>Crie um usuário do sistema para executar daemons GenieACS</p>
<pre class="remontti-code"># useradd --system --no-create-home --user-group genieacs</pre>
<p>Crie um diretório para salvar extensões e arquivo de ambiente<br />
Usaremos o diretório /opt/genieacs/ext/ para armazenar scripts de extensão (se houver).</p>
<pre class="remontti-code"># mkdir /opt/genieacs
# mkdir /opt/genieacs/ext</pre>
<p>Crie o arquivo /opt/genieacs/genieacs.envpara que irá conter as opções de configuração, que passamos ao GenieACS como variáveis de ambiente. </p>
<pre class="remontti-code"># vim /opt/genieacs/genieacs.env</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">GENIEACS_CWMP_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-cwmp-access.log
GENIEACS_NBI_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-nbi-access.log
GENIEACS_FS_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-fs-access.log
GENIEACS_UI_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-ui-access.log
GENIEACS_DEBUG_FILE=/var/log/genieacs/genieacs-debug.yaml
NODE_OPTIONS=--enable-source-maps
GENIEACS_EXT_DIR=/opt/genieacs/ext
GENIEACS_UI_JWT_SECRET=secret</pre>
<p>Defina a propriedade e as permissões do arquivo:</p>
<pre class="remontti-code"># chown genieacs. /opt/genieacs -R
# chmod 600 /opt/genieacs/genieacs.env</pre>
<p>Criar diretório de logs</p>
<pre class="remontti-code"># mkdir /var/log/genieacs
# chown genieacs. /var/log/genieacs</pre>
<p>Configure os serviços no systemd</p>
<pre class="remontti-code"># systemctl edit --force --full genieacs-cwmp</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">[Unit]
Description=GenieACS CWMP
After=network.target

[Service]
User=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
ExecStart=/usr/bin/genieacs-cwmp

[Install]
WantedBy=default.target</pre>
<pre class="remontti-code"># systemctl edit --force --full genieacs-nbi</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">[Unit]
Description=GenieACS NBI
After=network.target

[Service]
User=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
ExecStart=/usr/bin/genieacs-nbi

[Install]
WantedBy=default.target</pre>
<pre class="remontti-code"># systemctl edit --force --full genieacs-fs</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">[Unit]
Description=GenieACS FS
After=network.target

[Service]
User=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
ExecStart=/usr/bin/genieacs-fs

[Install]
WantedBy=default.target</pre>
<pre class="remontti-code"># systemctl edit --force --full genieacs-ui</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">[Unit]
Description=GenieACS UI
After=network.target

[Service]
User=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
ExecStart=/usr/bin/genieacs-ui

[Install]
WantedBy=default.target</pre>
<p>Configure o logrotate para rotação dos log gerados</p>
<pre class="remontti-code"># vim /etc/logrotate.d/genieacs</pre>
<pre class="remontti-code-plain">/var/log/genieacs/*.log /var/log/genieacs/*.yaml {
    daily
    rotate 30
    compress
    delaycompress
    dateext
}</pre>
<p>Ative e inicie serviços, e revise a mensagem de status de cada um para verificar se os serviços estão sendo executados com êxito.</p>
<pre class="remontti-code"># systemctl enable genieacs-cwmp genieacs-nbi genieacs-fs genieacs-ui
# systemctl start genieacs-cwmp genieacs-nbi genieacs-fs genieacs-ui
# systemctl status genieacs-cwmp genieacs-nbi genieacs-fs genieacs-ui --no-pager</pre>
<pre class="remontti-code-plain">
● genieacs-cwmp.service - GenieACS CWMP
     Loaded: loaded (/etc/systemd/system/genieacs-cwmp.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-10-29 11:33:02 -03; 12s ago
   Main PID: 2487 (node)
      Tasks: 25 (limit: 2305)
     Memory: 155.5M
        CPU: 4.957s
     CGroup: /system.slice/genieacs-cwmp.service
             ├─2487 node /usr/bin/genieacs-cwmp
             ├─2494 /usr/bin/node /usr/bin/genieacs-cwmp
             └─2495 /usr/bin/node /usr/bin/genieacs-cwmp

● genieacs-nbi.service - GenieACS NBI
     Loaded: loaded (/etc/systemd/system/genieacs-nbi.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-10-29 11:33:30 -03; 11ms ago
   Main PID: 2531 (node)
      Tasks: 6 (limit: 2305)
     Memory: 840.0K
        CPU: 3ms
     CGroup: /system.slice/genieacs-nbi.service
             └─2531 node /usr/bin/genieacs-nbi

● genieacs-fs.service - GenieACS FS
     Loaded: loaded (/etc/systemd/system/genieacs-fs.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-10-29 11:33:41 -03; 12ms ago
   Main PID: 2596 (node)
      Tasks: 6 (limit: 2305)
     Memory: 840.0K
        CPU: 3ms
     CGroup: /system.slice/genieacs-fs.service
             └─2596 node /usr/bin/genieacs-fs

● genieacs-ui.service - GenieACS UI
     Loaded: loaded (/etc/systemd/system/genieacs-ui.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-10-29 11:33:51 -03; 28ms ago
   Main PID: 2639 (node)
      Tasks: 7 (limit: 2305)
     Memory: 7.7M
        CPU: 20ms
     CGroup: /system.slice/genieacs-ui.service
             └─2639 node /usr/bin/genieacs-ui</pre>
<p>Acesse em seu navegador: <strong>http://IP:3000 </strong></p>
<p>Clique em: <strong>ABRACADABRA! </strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_1.png" alt="" width="1194" height="446" class="alignnone size-full wp-image-6003" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_1.png 1194w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_1-300x112.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_1-1024x382.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_1-768x287.png 768w" sizes="auto, (max-width: 1194px) 100vw, 1194px" /></p>
<p>Clique em: <strong>Open Sesame!</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_2.png" alt="" width="1194" height="446" class="alignnone size-full wp-image-6004" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_2.png 1194w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_2-300x112.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_2-1024x382.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_2-768x287.png 768w" sizes="auto, (max-width: 1194px) 100vw, 1194px" /></p>
<p>Entre com: <strong>admin/admin</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_3.png" alt="" width="1194" height="386" class="alignnone size-full wp-image-6005" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_3.png 1194w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_3-300x97.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_3-1024x331.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_3-768x248.png 768w" sizes="auto, (max-width: 1194px) 100vw, 1194px" /></p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_4.png" alt="" width="1194" height="483" class="alignnone size-full wp-image-6006" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_4.png 1194w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_4-300x121.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_4-1024x414.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/10/genieacs_debian_11_4-768x311.png 768w" sizes="auto, (max-width: 1194px) 100vw, 1194px" /></p>
<p>Grupo do telegram: <strong><a href="https://t.me/acsbrasil" rel="noopener" target="_blank">ACS/CWMP &#8211; TR069 &#8211; Brasil (PT-Br)</a></strong></p>
<p>Gostou? Quer ajudar manter o blog? <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><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>O post <a href="https://blog.remontti.com.br/6001">TR-069 &#8211; Instalação do  GenieACS no Debian 11 Bullseye</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6001/feed</wfw:commentRss>
			<slash:comments>35</slash:comments>
		
		
			</item>
		<item>
		<title>Configurando interface de rede no Debian 10/11/12/13</title>
		<link>https://blog.remontti.com.br/5848</link>
					<comments>https://blog.remontti.com.br/5848#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Sat, 18 Sep 2021 20:14:42 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Active-backup]]></category>
		<category><![CDATA[Administração de Rede]]></category>
		<category><![CDATA[Administração de Sistemas]]></category>
		<category><![CDATA[Administração de Sistemas Linux]]></category>
		<category><![CDATA[Agregação de Portas]]></category>
		<category><![CDATA[Alta Disponibilidade]]></category>
		<category><![CDATA[Balance-alb]]></category>
		<category><![CDATA[Balance-rr]]></category>
		<category><![CDATA[Balance-tlb]]></category>
		<category><![CDATA[Balance-xor]]></category>
		<category><![CDATA[Bonding]]></category>
		<category><![CDATA[Bullseye]]></category>
		<category><![CDATA[buster]]></category>
		<category><![CDATA[CLI Linux]]></category>
		<category><![CDATA[configuração de rede]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Ethernet]]></category>
		<category><![CDATA[Gerenciamento de Servidor]]></category>
		<category><![CDATA[ifenslave]]></category>
		<category><![CDATA[LACP]]></category>
		<category><![CDATA[Linux Networking]]></category>
		<category><![CDATA[Otimização de Rede]]></category>
		<category><![CDATA[placa]]></category>
		<category><![CDATA[Protocolos de Rede]]></category>
		<category><![CDATA[rede]]></category>
		<category><![CDATA[Redundância de Rede]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[Segurança de Rede]]></category>
		<category><![CDATA[Soluções de Networking]]></category>
		<category><![CDATA[Stretch]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=5848</guid>

					<description><![CDATA[<p>Neste tutorial vamos aprender a configurar nossas interfaces de rede no Debian e estar pensando um pouco mais para fazer uma boa escolha na hora de realizar suas configurações. Antes de mais nada você&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/5848">Configurando interface de rede no Debian 10/11/12/13</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-7830" src="https://blog.remontti.com.br/wp-content/uploads/2021/09/debian_network_config.webp" alt="" width="1792" height="1024" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/09/debian_network_config.webp 1792w, https://blog.remontti.com.br/wp-content/uploads/2021/09/debian_network_config-300x171.webp 300w, https://blog.remontti.com.br/wp-content/uploads/2021/09/debian_network_config-1024x585.webp 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/09/debian_network_config-768x439.webp 768w, https://blog.remontti.com.br/wp-content/uploads/2021/09/debian_network_config-1536x878.webp 1536w" sizes="auto, (max-width: 1792px) 100vw, 1792px" /></p>
<p>Neste tutorial vamos aprender a configurar nossas interfaces de rede no Debian e estar pensando um pouco mais para fazer uma boa escolha na hora de realizar suas configurações.</p>
<p>Antes de mais nada você precisa saber o que você quer!? Qual será o cenário!? Vejo muitas pessoas cometerem um desastre nos dias hoje quando se trata em colocar um simples IP público em um servidor. E por isso escrevo este &#8220;artigo&#8221; meio que tutorial.</p>
<p>No Debian você pode configurar os endereços IPs bem como algumas regras no arquivo <strong>/etc/network/interfaces</strong>, irei levar como base uma instalação recém-feita:</p>
<p>&#8211; <a href="https://blog.remontti.com.br/8267" target="_blank" rel="noopener">Instalação do Debian 13 Trixie</a><br />
&#8211; <a href="https://blog.remontti.com.br/7236" target="_blank" rel="noopener">Instalação do Debian 12 Bookworm</a><br />
&#8211; <a href="https://blog.remontti.com.br/5792" target="_blank" rel="noopener">Instalação do Debian 11 Bullseye</a><br />
&#8211; <a href="https://blog.remontti.com.br/2966" target="_blank" rel="noopener">Instalação do Debian 10 Buster</a></p>
<p>Irei usar o editor nano que é o que já vem instalado, mas você pode usar o editor de sua escolha.</p>
<pre class="remontti-code"># nano /etc/network/interfaces</pre>
<p>Se em sua instalação você informou o endereço IPv4 seu arquivo será algo como este, ressaltando que <strong>ens18</strong> é o nome da interface, e ela pode ser outra.</p>
<pre class="remontti-code"># This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug ens18
iface ens18 inet static
        address 192.168.87.3/24
        gateway 192.168.87.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 1.1.1.1 8.8.8.8
</pre>
<h4>Alterar DNS</h4>
<p>Por mais que vimos dns-nameserver nesta parte da configuração de rede, o servidor não irá usa-los, o arquivo qual será levado em conta é o <strong>/etc/resolv.conf </strong></p>
<pre class="remontti-code"># nano /etc/resolv.conf</pre>
<pre class="remontti-code">nameserver 1.1.1.1
nameserver 1.0.0.1
nameserver 2606:4700:4700::1111
nameserver 2606:4700:4700::1001</pre>
<p>Se sua instalação foi feita com DHCP ativo, sua configuração será:</p>
<pre class="remontti-code"># This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug ens18
iface ens18 inet dhcp</pre>
<h3>E ai, o que queremos ?</h3>
<p>Planejar, é claro! Se você esta montando seu data center onde terá vários servidores, o que será melhor adorar? Quebrar um prefixo /30 para cada servidor que eu for implementar? <strong>NÃO!</strong>. Quer me ver com os olhos sangrando é ver alguém que tem vários servidores e para cada servidor o mesmo quebrou um /30 público. Pense comigo você tem 2 servidores você precisa 2 IPs, se você quebrou 2 /30 você terá sim seus 2 IPs públicos mas você acabou de jogar no LIXO outros 6 endereços IPs, e nos dias de hoje 1 único IP publico é quase como o ditado: <em>Em terra de cego, quem tem um olho é rei?</em></p>
<p>Então o que fazer, o mais sensato é você pensar e quebrar um prefixo maior para que você não precise estar quebrando prefixos a cada servidor. Antes de mais nada imagine onde você quer chegar! Quantos servidores irá montar, quantos IPs publicos e privados irá precisar&#8230; Sempre que dou uma consultoria essa é a primeira coisa faço, &#8220;sento&#8221; com o cliente e estudo. E com base neste estudo reservamos já um/dois prefixo /29, /28 ou 27 até mesmo um /24 público/privado, vai depender muito de cada cenário, se meu cliente tem milhares de hospedagem com certeza o número de servidores em seu data center é enorme.</p>
<p>Outro grande erro em servidores é o <strong>NAT mal aplicado</strong>! Muitas pessoas principalmente pessoal de provedor ainda tem costume de colocar em seu Mikrotik de borda um belo NAT para fornecer internet a um servidor, ou apenas para fazer um redirecionamento de portas. Quando aplicamos regras de NAT em um roteadores causamos muitos malefícios para o bichinho! Então vamos para de fazer isso? Vou lhe ajudar!</p>
<p>É claro que isso é muito relativo de cada empresa, já fiz NAT com borda? Já! Depende do tamanho da empresa e organização de cada um. <strong>Então não leve ao pé da letra! Estou tentando lhe dizer o que é o melhor a ser feito!</strong></p>
<p>Já fui criticado por pedir para cliente comprar uma roteador para ser apenas o gateway dos servidores. <em>&#8220;Rudimar é louco&#8221;</em>. E eu digo: <em>Mais louco é quem faz NAT em roteador de borda! </em>. Em alguns casos eu recomendo um router para ligar os servidores, pois você pode ter diversos recursos na manga, e basta você fechar um iBGP/OSPF entre seu roteador de borda com seu roteador &#8220;data&#8221;.</p>
<h1>Exemplos</h1>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5860" src="https://blog.remontti.com.br/wp-content/uploads/2021/09/teste.drawio.png" alt="" width="809" height="372" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/09/teste.drawio.png 809w, https://blog.remontti.com.br/wp-content/uploads/2021/09/teste.drawio-300x138.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/09/teste.drawio-768x353.png 768w" sizes="auto, (max-width: 809px) 100vw, 809px" /></p>
<h4>Receber IP via DHCP</h4>
<p>O mais simples a ser feito quando seu servidor ira receber IP automaticamente.</p>
<pre class="remontti-code">allow-hotplug ens18
iface ens18 inet dhcp</pre>
<h4>Fixando IPv4 e IPv6</h4>
<p>Basicamente o que iremos usar em 95% das vezes</p>
<pre class="remontti-code">allow-hotplug ens18
iface ens18 inet static
        address 200.200.200.2/28
        gateway 200.200.200.1

iface ens18 inet6 static
        pre-up modprobe ipv6
        address 2804:bebe:cafe::2/64
        gateway 2804:bebe:cafe::1</pre>
<h4>Adicionando Multiplos IPs</h4>
<p>Quando quiser mais de um IP no mesmo servidor, caso for outras interfaces basta ajustar para o nome da interface</p>
<pre class="remontti-code">allow-hotplug ens18
iface ens18 inet static
        address 200.200.200.2/28
        gateway 200.200.200.1

iface ens18 inet static
        address 200.200.200.3/28

iface ens18 inet static
        address 200.200.201.1/32

iface ens18 inet6 static
        pre-up modprobe ipv6
        address 2804:bebe:cafe::2/64
        gateway 2804:bebe:cafe::1

iface ens18 inet6 static
        pre-up modprobe ipv6
        address 2804:bebe:cafe::3/64

iface ens18 inet6 static
        pre-up modprobe ipv6
        address 2804:bebe:ffff:ffff::ffff
        netmask 128</pre>
<h4>IP na Loopback</h4>
<p>Você pode usar quando estiver roteando um IP (OSFP/iBGP), exemplo com <a href="https://blog.remontti.com.br/4771" target="_blank" rel="noopener">FRR</a>, porém neste caso estaria fazendo a adição dos IPs pelo próprio FRR.<br />
Mas se você fará algum tipo de rota estática com intuito exemplo de fazer ECMP (Equal Cost Multi-Path), é importante que os IPs de anycast estejam na interface de loopback para que não tenha conflito.</p>
<pre class="remontti-code">auto lo 
iface lo inet loopback

iface lo inet static
        address 200.200.200.200/32</pre>
<h4>Ponto a ponto &#8211; Pointopoint</h4>
<p>Aqui muitos ficam bugado, no meu cenário perceba que temos um servidor conectado ao roteador de borda, agora imagine, que neste roteador de borda não tem nenhum IP público por politicas de segurança, mas ai vem o estagiário e e te diz: Vamos quebrar um /30 pub! Então saiba que você não precisa fazer isso, você pode adicionar um IP ponto a ponto, onde temos IP diferente dos dois lados, então como no exemplo a baixo podemos add no nosso roteador de borda 10.50.50.1 e no nosso servidor 200.200.200.0.</p>
<pre class="remontti-code">allow-hotplug ens18
iface ens18 inet static
        address 200.200.200.0
        pointopoint 10.50.50.1
        netmask 255.255.255.255
        gateway 10.50.50.1
</pre>
<p>Isso funciona? É claro! E você não irá precisar deixar seu roteador de borda com IP público acessível pelo mundo, e muito menos fazer um NAT! Como sou bonzinho vou deixar aqui como você configuraria isso no seu Mikrotikão! Ficaria assim:</p>
<pre class="remontti-code">RouterOS# /ip address
RouterOS# add address=10.50.50.1 comment=Pointopoint interface=ether1 network=200.200.200.0</pre>
<p>Simples não?! Testa ai! Depois me conta!</p>
<h4>Privado com saída em origem Público</h4>
<p>Quase que como o exemplo do pointopoint, porem em alguns roteadores não temos o suporte para fazer pointopoint, uma saída é você quebrar um prefixo privado (estou usando /30, mas se tivesses vários servidores junto faria já um prefixo maior). No exemplo então meu IP público é o 200.200.200.200/32 qual irei colocar na mesma interface da WAN que tenho o 10.33.33.2/30, logo o roteador é o 10.33.33.1. Desta forma você tem uma conversa entre as interfaces por IP privado, porem os pacotes são originados com o endereço de IP público.</p>
<pre class="remontti-code">allow-hotplug ens18
iface ens18 inet static
    address 200.200.200.200/32
iface ens18 inet static
    address 10.33.33.2/30
    post-up ip route add default via 10.33.33.1 src 200.200.200.200</pre>
<p>Mas ai temos um problema, seu servidor irá gerar os pacotes de origem publico, e irá enviar para internet, mas quando o pacote estiver voltando ao chegar em seu roteador de borda é necessário que você tenha uma rotá para o mesmo. Então crie um rota estática dizendo que Destino 200.200.200.200 o gateway é 10.33.33.2 IP este do seu servidor. Ex.:</p>
<p>Exemplo RouterOS:</p>
<pre class="remontti-code">RouterOS# /ip address add address=10.33.33.1/30 interface=ether2
RouterOS# /ip route add dst-address=200.200.200.200/32 gateway=10.33.33.2</pre>
<p>Exemplo Huawei:</p>
<pre class="remontti-code">ip route-static 200.200.200.200 32 10.33.33.2 preference 1 description SERVIDOR</pre>
<p>É possível fazer isso para IPv6 também? É claro!</p>
<pre class="remontti-code">allow-hotplug ens18

#IPv6 Público
iface ens18 inet6 static
        pre-up modprobe ipv6
        address 2804:bebe:cafe::cafe
        netmask 128

# IPv6 Privado
iface ens18 inet6 static
        pre-up modprobe ipv6
        address fd00:a::2/64
        post-up ip -6 route add default via fd00:a::1 src 2804:bebe:cafe::cafe</pre>
<p>Exemplo RouterOS:</p>
<pre class="remontti-code">RouterOS# /ipv6 address add address=fd00:a::1/64 advertise=no interface=ether2
RouterOS# /ipv6 route add dst-address=2804:bebe:cafe::cafe/128 gateway=fd00:a::2</pre>
<p>Exemplo Huawei:</p>
<pre class="remontti-code">ipv6 route-static 2804:bebe:cafe::cafe 128 fd00:a::2 preference 1 description SERVIDOR</pre>
<h5>Possível problema: Resolução ARP/ND na Inicialização</h5>
<p>Em alguns casos, pode acontecer do IP /32 (no IPv4) ou /128 (no IPv6) só começar a funcionar após um primeiro <em>ping</em> interno. Isso não significa que a configuração da rede esteja errada, mas sim que o kernel e o roteador precisam “descobrir” via ARP/ND como chegar a esse endereço adicional.</p>
<p>Esse comportamento ocorre porque, ao usar um endereço /32 (IPv4) ou /128 (IPv6), o roteador e o kernel do Linux não enviam nem respondem a requisições ARP/ND de forma “espontânea” para esse IP adicional. Somente quando há tráfego partindo do servidor (por exemplo, um ping), a troca de ARP/ND é feita e o roteador “aprende” para onde enviar os pacotes que chegam nesse IP público. Sem essa “ativação” inicial, o roteador não tem como saber que aquele IP /32 ou /128 está associado à interface do servidor.</p>
<p>No Debian 13 eu contornei desta forma:</p>
<pre class="remontti-code-blue">allow-hotplug ens18
iface ens18 inet static
    address 200.200.200.200/32
    up ip addr add 10.33.33.200/24 dev $IFACE
    up ip route replace default via 10.33.33.1 dev $IFACE  src 200.200.200.200
    down ip route del default via 10.33.33.1 dev $IFACE || true
    down ip addr del 10.33.33.2/24 dev $IFACE || true

iface ens18 inet6 static
    address 2804:bebe:cafe::cafe/128
    up ip -6 addr add fd00:a::2/64 dev $IFACE
    up ip -6 route replace default via fd00:a::1 dev $IFACE
    down ip -6 route del default via fd00:a::1 dev $IFACE || true
    down ip -6 addr del fd00:a::1/64 dev $IFACE || true
</pre>
<p>Se ainda não resolver tente com o script:</p>
<p>Crie o serviço systemd</p>
<pre class="remontti-code"># vim /etc/systemd/system/meu_script_rede.service</pre>
<p>Adicione:</p>
<pre class="remontti-code-blue">[Unit]
Description=Rodar script após inicialização da rede
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/meu_script.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
</pre>
<p>Crie o script, nele vamos incluir um ping</p>
<pre class="remontti-code"># vim /usr/local/bin/meu_script.sh</pre>
<p>Ajuste <strong>IPV4_GATEWAY</strong> e <strong>IPV6_GATEWAY</strong> para seus gateway.</p>
<pre class="remontti-code-blue">#!/bin/bash

# IPs
IPV4_GATEWAY=&quot;10.33.33.1&quot;
IPV6_GATEWAY=&quot;fd00:cafe::1&quot;

# Nº de pings
NPING=5

# Registro no log
date &gt; /var/log/rede_inicializada.log
echo &quot;A placa de rede foi inicializada&quot; &gt;&gt; /var/log/rede_inicializada.log

# Enviar pings para forçar ARP/ND
ping -O -4 -c $NPING $IPV4_GATEWAY &gt;&gt; /var/log/rede_inicializada.log
ping -O -6 -c $NPING $IPV6_GATEWAY &gt;&gt; /var/log/rede_inicializada.log

# Espera 1 segundo
sleep 1
</pre>
<p>Dê permissão de execução:</p>
<pre class="remontti-code"># chmod +x /usr/local/bin/meu_script.sh</pre>
<p>Ative o serviço no systemd e reinicie</p>
<pre class="remontti-code"># systemctl daemon-reload
# systemctl enable meu_script_rede
# systemctl start meu_script_rede
# systemctl status meu_script_rede</pre>
<p>Agora, toda vez que o servidor inicializar, este script rodará e enviará alguns pings para “ativar” as tabelas ARP e ND. Você poderá verificar o arquivo /var/log/rede_inicializada.log para ver a saída dos pings. `cat /var/log/rede_inicializada.log`</p>
<h4>Criando VLAN e adicionado IP nela</h4>
<p>Para adicionar um IP a uma VLAN precisamos carregar o módulo 8021q, e coloca-lo para iniciar com sistema.</p>
<pre class="remontti-code"># modprobe 8021q
# echo &quot;8021q&quot; &gt;&gt; /etc/modules</pre>
<p>Agora basta editar sua interface e incluir um ponto e o numero da VLAN. No exemplo VLAN 171</p>
<pre class="remontti-code">allow-hotplug ens18.171
iface ens18.171 inet static
       address 10.88.88.2/24</pre>
<h4>PBR &#8211; Roteamento baseado em políticas</h4>
<p>Eu particularmente uso em Accel-ppp para separar o trafego de IPs publicos de Privados, direcionando apenas os IPs de NAT para a caixa do CGNAT. É necessário criar uma nova tabela de rotas, irei chamar de cgnat no exemplo.</p>
<pre class="remontti-code"># echo &quot;100 cgnat&quot; &gt;&gt; /etc/iproute2/rt_tables
# cat /etc/iproute2/rt_tables
# ip route list table main</pre>
<p>Fecho um /30 entre router e servidor e digo que todos os IPs que 100.64.0.0./10 deve sair pela tabela de rotas com o CGNAT.</p>
<pre class="remontti-code">allow-hotplug ens18
iface ens18 inet static
    address 10.200.200.2/30
    post-up ip route add default via 10.200.200.1 dev ens18 table cgnat
    post-up ip rule add from 100.64.0.0/10 lookup cgnat</pre>
<h4>Blackhole</h4>
<p>Normalmente útil em casos que você usa seu servidor como roteador. Você irá colocar após as configurações da interface o post-up passando o prefixo ou ip qual irá subir em blackhole</p>
<pre class="remontti-code">allow-hotplug ens18
iface ens18 inet static
    address 10.33.33.2/30
    post-up ip route add blackhole 200.200.200.128/26 metric 250 || true</pre>
<h4>Agregação</h4>
<p>Instalar o ifenslave: Este pacote permite configurar a agregação de portas no Linux.</p>
<pre class="remontti-code"># apt install ifenslave</pre>
<p>Carregar o Módulo de Bonding</p>
<pre class="remontti-code"># echo &quot;bonding&quot; | tee -a /etc/modules
# modprobe bonding</pre>
<p>Verificar se o módulo foi carregado corretamente:</p>
<pre class="remontti-code"># lsmod | grep bonding</pre>
<p><strong>802.3ad (LACP):</strong> Ideal para aumentar a largura de banda e fornecer redundância quando conectado a um switch que suporta LACP.<br />
<strong>balance-xor:</strong> Útil para balanceamento de carga baseado em XOR, adequado para ambientes que não suportam LACP.<br />
<strong>balance-rr (Round Robin):</strong> Simples e eficaz para cargas de trabalho que exigem balanceamento de carga sem configuração específica do switch.<br />
<strong>active-backup:</strong> Fornece redundância sem aumento de largura de banda, útil quando a continuidade do serviço é mais crítica do que a capacidade.<br />
<strong>balance-tlb (Transmit Load Balancing) e balance-alb (Adaptive Load Balancing):</strong> Ambos são bons para ambientes onde a configuração do switch não pode ser alterada ou não suporta LACP. O ALB também tenta balancear o tráfego de entrada.</p>
<p>Aqui estão exemplos para vários modos de bonding</p>
<pre class="remontti-code"># vim /etc/network/interfaces</pre>
<h5>802.3ad (LACP)</h5>
<p><em>Aplicação: Ideal para ambientes de alta disponibilidade e alta largura de banda, como data centers ou servidores que precisam de conexões robustas e de alta capacidade. É necessário que ambos os lados (o Debian e o switch/router) suportem LACP.</em></p>
<pre class="remontti-code">auto bond0
iface bond0 inet static
    address 192.168.0.2/24
    bond-slaves enp4s0f0 enp4s0f1
    bond-miimon 100
    bond-mode 802.3ad
    bond-xmit-hash-policy layer2+3
</pre>
<h5>Balance-xor</h5>
<p><em>Aplicação: Bom para ambientes onde o tráfego de rede tem padrões conhecidos que podem ser distribuídos de forma eficaz usando XOR. Pode ser usado para melhorar o desempenho quando LACP não é suportado.</em></p>
<pre class="remontti-code">auto bond0
iface bond0 inet static
    address 192.168.0.2/24
    bond-slaves enp4s0f0 enp4s0f1
    bond-miimon 100
    bond-mode balance-xor
    bond-xmit-hash-policy layer2+3
</pre>
<h5>Balance-rr (Round Robin)</h5>
<p><em>Aplicação: Simples e eficaz para distribuir cargas de forma equitativa sobre as interfaces físicas. Útil em ambientes onde a ordem de chegada dos pacotes não é crítica.</em></p>
<pre class="remontti-code">auto bond0
iface bond0 inet static
    address 192.168.0.2/24
    bond-slaves enp4s0f0 enp4s0f1
    bond-miimon 100
    bond-mode balance-rr
</pre>
<h5>Active-backup</h5>
<p><em>Aplicação: Ideal para redundância sem aumentar a largura de banda. Se a interface primária falhar, outra assumirá. Recomendado para serviços críticos que precisam de alta disponibilidade mais do que de alta capacidade.</em></p>
<pre class="remontti-code">auto bond0
iface bond0 inet static
    address 192.168.0.2/24
    bond-slaves enp4s0f0 enp4s0f1
    bond-miimon 100
    bond-mode active-backup
    bond-primary enp4s0f0
</pre>
<h5>Balance-tlb (Transmit Load Balancing)</h5>
<p><em>Aplicação: Útil quando a modificação de configuração do switch não é possível. Realiza o balanceamento de carga de saída de acordo com a carga atual de cada interface. Não requer suporte específico do switch.</em></p>
<pre class="remontti-code">auto bond0
iface bond0 inet static
    address 192.168.0.2/24
    bond-slaves enp4s0f0 enp4s0f1
    bond-miimon 100
    bond-mode balance-tlb
</pre>
<h5>Balance-alb (Adaptive Load Balancing)</h5>
<p><em>Aplicação: Similar ao balance-tlb, mas também tenta balancear o tráfego de entrada, o que pode ser útil em servidores web ou de aplicativos. Essa modalidade não requer configuração especial do switch.</em></p>
<pre class="remontti-code">auto bond0
iface bond0 inet static
    address 192.168.0.2/24
    bond-slaves enp4s0f0 enp4s0f1
    bond-miimon 100
    bond-mode balance-alb
</pre>
<p>Reiniciar o sistema para aplicar as alterações:</p>
<pre class="remontti-code"># reboot</pre>
<p>Verificar o status do serviço de rede para garantir que não houve erros, e a configuração de bonding.</p>
<pre class="remontti-code"># systemctl status networking
# journalctl -u networking.service
# cat /proc/net/bonding/bond0</pre>
<h4>Considerações finais</h4>
<p>Sempre que editar o arquivo /etc/network/interfaces para que as configurações sejam carregadas será necessário reiniciar seu servidor, você até pode subir a interface com auto ao invés de allow-hotplug, mas não irei abordar aqui.</p>
<p>Caso você queira adicionar/remover IPs manualmente (em memória/perde ao reiniciar) você pode usar o comando <strong>ip</strong>, segue exemplo, onde <strong>ens18</strong> é o nome da interface.<br />
Adicionar:</p>
<pre class="remontti-code"># ip addr add 192.168.7.7/32 dev ens18
# ip -6 addr add 2001:db8:1::1/128 dev ens18</pre>
<p>Visualizar:</p>
<pre class="remontti-code"># ip address</pre>
<p>Remover:</p>
<pre class="remontti-code"># ip addr del 192.168.7.7/32 dev ens18
# ip -6 addr del 2001:db8:1::1/128 dev ens18</pre>
<p>Exibe interfaces / Endereços IPs</p>
<pre class="remontti-code"># ip -br a
# ip -br addr show
# ip -br link
# ip -br link show</pre>
<p>Exibir informações sobre todas as interfaces de rede:</p>
<pre class="remontti-code"># ip a
# ip addr
# ip addr show</pre>
<p>Exibir informações sobre todas as interfaces de rede IPv4:</p>
<pre class="remontti-code"># ip -4 a</pre>
<p>Exibir informações sobre todas as interfaces de rede IPv6:</p>
<pre class="remontti-code"># ip -6 a</pre>
<p>Exibir informações sobre uma interface de rede específica:</p>
<pre class="remontti-code"># ip a show eth0
# ip a list eth0
# ip a show dev eth0</pre>
<p>Mostrar apenas interfaces em execução</p>
<pre class="remontti-code"># ip link ls up</pre>
<p>Adicionar um endereço IPv4/IPv6:</p>
<pre class="remontti-code"># ip a add {ip_addr/mask} dev {interface}
# ip a add 10.0.1.200/255.255.255.0 dev eth0
# ip a add 10.0.1.200/24 dev eth0</pre>
<p>Remover endereço IP</p>
<pre class="remontti-code"># ip a del {ipv6_addr_OR_ipv4_addr} dev {interface}
# ip a del 10.0.1.200/24 dev eth0</pre>
<p>Desligando a interface</p>
<pre class="remontti-code"># ip link set dev eth1 down</pre>
<p>Ligando a interface</p>
<pre class="remontti-code"># ip link set dev eth1 up</pre>
<p>Ajusda</p>
<pre class="remontti-code"># man ip
# ip --help</pre>
<p>Comandos antigos X Novo comando</p>
<pre class="remontti-code">Velho # ifconfig -a
 Novo # ip a

Velho # ifconfig eth0 down
 Novo # ip link set eth0 down

Velho # ifconfig eth0 up
 Novo # ip link set eth0 up

Velho # ifconfig eth0 10.0.2.24
 Novo # ip addr add 10.0.2.24/24 dev eth0

Velho # ifconfig eth0 netmask 255.255.255.0
 Novo # ip addr add 10.0.1.1/24 dev eth0

Velho # ifconfig eth0 mtu 9000
 Novo # ip link set eth0 mtu 9000

Velho # ifconfig eth0:0 10.0.2.25
 Novo # ip addr add 10.0.2.25/24 dev eth0

Velho # netstat -g
 Novo # ip maddr

Velho # route
 Novo # ip r

Velho # route add -net 10.0.2.0 netmask 255.255.255.0 dev eth0
 Novo # ip route add 10.0.2.0/24 dev eth0

Velho # route add default gw 10.0.2.254
 Novo # ip route add default via 10.0.2.254

Velho # arp -a
 Novo # ip neigh

Velho # arp -v
 Novo # ip -s neigh

Velho # arp -s 10.0.2.33 01:02:03:04:05:06
 Novo # ip neigh add 10.0.3.33 lladdr 01:02:03:04:05:06 dev eth0

Velho # arp -i eth0 -d 10.0.2.254
 Novo # ip neigh del 10.0.2.254 dev eth0

Velho # netstat
 Novo # ss

Velho # netstat -tulpn
 Novo # ss -tulpn

Velho # netstat -neopa
 Novo # ss -neopa</pre>
<p>Espero ter colaborado com uma pequena parcela em seu conhecimento! Desculpa o português e as palavras faltando letras, é difícil conseguir tempo para vir aqui escrever e revisar, então abro meu &#8220;bloco de notas&#8221; e vou escrevendo&#8230;</p>
<p>Curtiu o conteúdo? Quer me ajudar manter o blog? <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><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>Participe do canal no <a href="https://t.me/blogremontti" target="_blank" rel="noopener noreferrer">telegram</a> para ficar atualizado sempre que publicar um novo tutorial.</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" target="_blank" rel="noopener noreferrer">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/5848">Configurando interface de rede no Debian 10/11/12/13</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/5848/feed</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
		<item>
		<title>Port knocking, aprenda a melhorar as política de segurança de seu firewall Linux e Mikrotik</title>
		<link>https://blog.remontti.com.br/5390</link>
					<comments>https://blog.remontti.com.br/5390#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Sat, 13 Mar 2021 21:23:34 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[knocking]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[pptp]]></category>
		<category><![CDATA[proteção]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[vpn]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=5390</guid>

					<description><![CDATA[<p>Port knocking é um método de abrir portas externamente em um firewall, realizando tentativas de conexões em uma sequemcia de portas fechadas pré-especificadas, e depois que esta sequência estiver correta as regras de firewall&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/5390">Port knocking, aprenda a melhorar as política de segurança de seu firewall Linux e Mikrotik</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Port knocking é um método de abrir portas externamente em um firewall, realizando tentativas de conexões em uma sequemcia de portas fechadas pré-especificadas, e depois que esta sequência estiver correta as regras de firewall são modificadas temporariamente para permitir que o host que &#8220;bateu&#8221; nas portas tenha acesso. </p>
<p>Vou ensinar realizar Port knocking no Linux com <strong>nftables</strong> e <strong>iptables</strong> e <strong>Mikrotik</strong> <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>Primeiramente precisamos escolher 4 portas que iremos bater para ganhar acesso.<br />
No meu exemplo irei usar as portas: <strong>52341, 28001, 60541, 30951</strong></p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/03/toctoc.png" alt="" width="651" height="182" class="alignnone size-full wp-image-5392" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/03/toctoc.png 651w, https://blog.remontti.com.br/wp-content/uploads/2021/03/toctoc-300x84.png 300w" sizes="auto, (max-width: 651px) 100vw, 651px" /></p>
<p>Neste exemplo vou estar liberando as portas 22 e 23 após &#8220;batermos&#8221; nas portas 52341, 28001, 60541, 30951, e por 1min após bater nas portas teremos acesso as portas 22 e 23. </p>
<p>Se você é amante de linux, e seu desktop é um lindo linux instale o &#8220;batedor&#8221; knockd, não vamos usa-lo ainda, mas já podemos instala-lo!</p>
<pre class="remontti-code">$ sudo apt install knockd
$ knock -h
  -u, --udp       make all ports hits use UDP (default is TCP)
  -d, --delay &lt;t&gt;      wait &lt;t&gt; milliseconds between port hits
  -v, --verbose   be verbose
  -V, --version   display version
  -h, --help      this help</pre>
<p>Ele funciona assim:</p>
<pre class="remontti-code">$ knock -d 500 -v 192.168.1.1 52341 28001 60541 30951
hitting tcp 192.168.1.1:52341
hitting tcp 192.168.1.1:28001
hitting tcp 192.168.1.1:60541
hitting tcp 192.168.1.1:30951</pre>
<h3>Linux Nftables</h3>
<p>Primeiramente tenha o nftables instalado. Para distribuição baseadas em Debian use:</p>
<pre class="remontti-code"># apt install nftables
# systemctl enable nftables.service</pre>
<p>O arquivo de configuração padrão do nftables fica em /etc/nftables.conf, então vamos edita-lo:</p>
<pre class="remontti-code"># vim /etc/nftables.conf</pre>
<p>Lembre-se de criar o seu padrão de sequencia e portas, e adicione ao final do arquivo:</p>
<pre class="remontti-code">define protege_portas = {22,23}

table inet portknock {
   set clientes_ipv4 {
      type ipv4_addr
      flags timeout
   }

   set clientes_ipv6 {
      type ipv6_addr
      flags timeout
   }

   set toctoc_aberta_ipv4 {
      type ipv4_addr . inet_service
      flags timeout
   }

   set toctoc_aberta_ipv6 {
      type ipv6_addr . inet_service
      flags timeout
   }

   chain input {
      type filter hook input priority -10; policy accept;

      iifname &quot;lo&quot; return

      tcp dport 52341 add @toctoc_aberta_ipv4 {ip  saddr . 28001 timeout 60s}
      tcp dport 52341 add @toctoc_aberta_ipv6 {ip6 saddr . 28001 timeout 60s}
      tcp dport 28001 ip  saddr . tcp dport @toctoc_aberta_ipv4 add @toctoc_aberta_ipv4 {ip  saddr . 60541 timeout 60s}
      tcp dport 28001 ip6 saddr . tcp dport @toctoc_aberta_ipv6 add @toctoc_aberta_ipv6 {ip6 saddr . 60541 timeout 60s}
      tcp dport 60541 ip  saddr . tcp dport @toctoc_aberta_ipv4 add @toctoc_aberta_ipv4 {ip  saddr . 30951 timeout 60s}
      tcp dport 60541 ip6 saddr . tcp dport @toctoc_aberta_ipv6 add @toctoc_aberta_ipv6 {ip6 saddr . 30951 timeout 60s}
      tcp dport 30951 ip  saddr . tcp dport @toctoc_aberta_ipv4 add @clientes_ipv4 {ip  saddr timeout 10s} log prefix &quot;Portknock bem-sucedido: &quot;
      tcp dport 30951 ip6 saddr . tcp dport @toctoc_aberta_ipv6 add @clientes_ipv6 {ip6 saddr timeout 10s} log prefix &quot;Portknock bem-sucedido: &quot;

      tcp dport { $protege_portas } ip  saddr @clientes_ipv4 counter accept
      tcp dport { $protege_portas } ip6 saddr @clientes_ipv6 counter accept
      tcp dport { $protege_portas } ct state established,related counter accept
      tcp dport { $protege_portas } counter reject with tcp reset
   }
}
</pre>
<p>Restarte o nftables</p>
<pre class="remontti-code"># systemctl enable nftables.service</pre>
<p>Se você não usa linux em seu deskop <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> para usar o knock, basta você jogar no seu navegador ip:porta, ex 192.168.1.1:52341 192.168.1.1:28001 192.168.1.1:60541 192.168.1.1:30951, lembre-se que você tem 1 minuto para bater nas portas e realizar sua conexão. Já já ensino como ter um servido web e liberar a porta em um click!</p>
<pre class="remontti-code">$ knock -d 500 -v 192.168.1.1 52341 28001 60541 30951</pre>
<p>Para acompanhar os logs:</p>
<pre class="remontti-code">#  tail -f /var/log/messages</pre>
<p>Realize o SSH (ou acesse o a porta que tenha protegido para testar)</p>
<h3>Linux Iptables</h3>
<p>Vou deixar um modelo com iptables, mas recomendo você ir migrando para nftables que em um futuro sera seu sucessor. Não esqueça de alterar as portas para sua realidade, em seu arquivo de firewall tenha:</p>
<pre class="remontti-code">#!/bin/bash
iptables -F
iptables -X
iptables -Z

iptables -N INTO-TOCTOC2
iptables -A INTO-TOCTOC2 -m recent --name TOCTOC1 --remove
iptables -A INTO-TOCTOC2 -m recent --name TOCTOC2 --set

iptables -N INTO-TOCTOC3
iptables -A INTO-TOCTOC3 -m recent --name TOCTOC2 --remove
iptables -A INTO-TOCTOC3 -m recent --name TOCTOC3 --set

iptables -N INTO-TOCTOC4
iptables -A INTO-TOCTOC4 -m recent --name TOCTOC3 --remove
iptables -A INTO-TOCTOC4 -m recent --name TOCTOC4 --set
iptables -A INTO-TOCTOC4 -j LOG --log-prefix &quot;Portknock bem-sucedido: &quot;

iptables -A INPUT -m recent --update --name TOCTOC1

iptables -A INPUT -p tcp --dport 52341 -m recent --set --name TOCTOC1
iptables -A INPUT -p tcp --dport 28001 -m recent --rcheck --seconds 30 --name TOCTOC1 -j INTO-TOCTOC2
iptables -A INPUT -p tcp --dport 60541 -m recent --rcheck --seconds 30 --name TOCTOC2 -j INTO-TOCTOC3
iptables -A INPUT -p tcp --dport 30951 -m recent --rcheck --seconds 60 --name TOCTOC3 -j INTO-TOCTOC4

# Para uma unica porta
#iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 60 --name TOCTOC4 -j ACCEPT
#iptables -A INPUT -p tcp --dport 22 -j DROP

# Multiplas portas
iptables -A INPUT -p tcp -m multiport --dport 22,23 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 22,23 -m recent --rcheck --seconds 60 --name TOCTOC4 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 22,23 -j DROP</pre>
<p>Pode realizar os mesmo procedimento anteriores</p>
<h3>Mikrotik</h3>
<p>Aqui vai uma observação muito importante para quem usa routerOS, FIREWALL TEM LUGAR PARA SER FEITO, então não sai aplicando Port Knocking em todo o lugar. Por exemplo, muitos provedores tem o costume de deixar na sua borda routerOS o serviço PPTP ativo para fazer uma conexão quando esta fora da sua rede, este é um bom exemplo de NÃO se seguir, routerOS tem q ter muito cuidado quando se cria firewall, recomendo que para esse tipo de serviço como PPTP Server, seja rodado em um router paralelo (pode ser uma hAP lite, uma VM com o routerOS mas nunca em uma borda) até por que é muito fácil de quebrar o PPTP, então para não deixar a porta 1723/PPTP aberta iremos realizar o Port Knocking, aproveitei e inclui a porta 22, altere de acordo com suas necessidades. </p>
<pre class="remontti-code">/ip firewall filter
add action=add-src-to-address-list address-list=toc_toc_1  \
    address-list-timeout=30s chain=input comment=&quot;Port Knocking&quot;  \
    connection-state=new dst-port=52341 protocol=tcp
add action=add-src-to-address-list address-list=toc_toc_2  \
    address-list-timeout=30s chain=input connection-state=new dst-port=28001  \
    protocol=tcp src-address-list=toc_toc_1
add action=add-src-to-address-list address-list=toc_toc_3  \
    address-list-timeout=30s chain=input connection-state=new dst-port=60541  \
    protocol=tcp src-address-list=toc_toc_2
add action=add-src-to-address-list address-list=toc_toc_4 address-list-timeout=2m  \
    chain=input connection-state=new dst-port=30951 log=yes log-prefix=&quot;Portknock bem-sucedido&quot;  \
    protocol=tcp src-address-list=toc_toc_3
add action=drop chain=input connection-state=new dst-port=1723,22  \
    protocol=tcp src-address-list=!toc_toc_4</pre>
<p>Se você não usa linux em seu deskop <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> para usar o knock, basta você jogar no seu navegador ip:porta, ex 192.168.1.1:52341 192.168.1.1:28001 192.168.1.1:60541 192.168.1.1:30951, lembre-se que você tem 1 minuto para bater nas portas e realizar sua conexão. Já já ensino como ter um servido web e liberar a porta em um click!</p>
<pre class="remontti-code">$ knock -d 500 -v 192.168.1.1 52341 28001 60541 30951</pre>
<p>para acompanhar, abra os <strong>Log</strong> sempre que um host acertar as sequencias de porta um log com <strong>Portknock bem-sucedido</strong> será exibido. Verifique também em IP-> Firewall -> Address List.</p>
<p>Realize o sua conexão PPTP ou SSH (ou acesse o a porta que tenha protegido para testar)</p>
<h3>Que tal uma central &#8220;toc toc&#8221; para nosso Port knocking <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h3>
<p>Leituras recomendadas:<br />
<strong><a href="https://blog.remontti.com.br/3464" rel="noopener" target="_blank">Como ter diversos sub/domínios no mesmo servidor?</a></strong><br />
<strong><a href="https://blog.remontti.com.br/3006" rel="noopener" target="_blank">Passo-a-passo como criar um servidor WEB</a></strong><br />
<strong><a href="https://blog.remontti.com.br/3086" rel="noopener" target="_blank">Servidor DNS seguro com Bind9</a></strong><br />
Crie um subdomínio em exemplo toctoc em seu servidor DNS apontando para algum servidor web que você tenha rodando.<br />
Ajustes o subdomíno em seu servidor web, neste ex com apache estou estarei incluído uma senha para acesso.</p>
<pre class="remontti-code"># mkdir /var/www/toctoc/
# htpasswd -c /var/www/toctoc/.htpasswd admin</pre>
<p>E defina a senha para seu acesso.</p>
<pre class="remontti-code"># vim /etc/apache2/sites-available/toctoc.conf</pre>
<pre class="remontti-code">&lt;virtualhost *:80&gt;
   ServerName toctoc.remontti.com.br
   ServerAdmin noc@remontti.com.br
   DocumentRoot /var/www/toctoc
   &lt;Directory /var/www/toctoc/&gt;
      Options FollowSymLinks
      AllowOverride All
      Require all denied
      &lt;RequireAll&gt;
          Require valid-user
          AuthBasicProvider file
          AuthType Basic
          AuthName &quot;Login&quot;
          AuthUserFile /var/www/toctoc/.htpasswd
      &lt;/RequireAll&gt;
   &lt;/Directory&gt; 
   ErrorLog ${APACHE_LOG_DIR}/error_toctoc.log
   CustomLog ${APACHE_LOG_DIR}/access_toctoc.log combined
&lt;/VirtualHost&gt;</pre>
<p>Criei uma paginazinha com php + javascript para executar nosso trabalho para não precisar decorar portas, sinta-se a vontade para melhorar o código: <a href="https://github.com/remontti/PortKnockingPHP" rel="noopener" target="_blank">https://github.com/remontti/PortKnockingPHP</a><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/03/toctoc-pork-knocking.png" alt="" width="1366" height="793" class="alignnone size-full wp-image-5402" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/03/toctoc-pork-knocking.png 1366w, https://blog.remontti.com.br/wp-content/uploads/2021/03/toctoc-pork-knocking-300x174.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/03/toctoc-pork-knocking-1024x594.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/03/toctoc-pork-knocking-768x446.png 768w" sizes="auto, (max-width: 1366px) 100vw, 1366px" /></p>
<pre class="remontti-code"># cd /var/www/toctoc/
# wget https://raw.githubusercontent.com/remontti/PortKnockingPHP/main/index.php</pre>
<p>Edite o arquivo index.php e altere a lista de seus servidores&#8230;</p>
<pre class="remontti-code"> # Nome - IP - Porta 1 - Porta 2 - Porta 3 - Porta 4 #
$array = [
    [&quot;RouterOS PPTP&quot;,&quot;192.168.1.1&quot;,&quot;1000&quot;,&quot;2000&quot;,&quot;3000&quot;,&quot;4000&quot;],
    [&quot;Servicor 2&quot;,&quot;192.168.2.1&quot;,&quot;111&quot;,&quot;222&quot;,&quot;333&quot;,&quot;4444&quot;],
    [&quot;Servicor 3&quot;,&quot;192.168.3.1&quot;,&quot;1000&quot;,&quot;2000&quot;,&quot;3000&quot;,&quot;4000&quot;],
    [&quot;Servicor 4&quot;,&quot;192.168.4.1&quot;,&quot;1000&quot;,&quot;2000&quot;,&quot;3000&quot;,&quot;4000&quot;],
];</pre>
<p>Agora acesse seu &#8220;<em><strong>toctoc.remontti.com.br</strong></em>&#8221; e seja feliz, e não se preocupe em estar decorando portas, basta você clicar em <strong>Toc Toc</strong>.</p>
<h4>Aplicativos para Celular/PC Windows</h4>
<p><em>Dica dos leitores</em><br />
<strong>Para iPhone:</strong> <a href="https://apps.apple.com/us/app/knockond/id333206277" rel="noopener" target="_blank">https://apps.apple.com/us/app/knockond/id333206277</a><br />
<strong>Para Android:</strong> <a href="https://play.google.com/store/apps/details?id=com.xargsgrep.portknocker&#038;hl=pt_BR&#038;gl=US" rel="noopener" target="_blank">https://play.google.com/store/apps/details?id=com.xargsgrep.portknocker&#038;hl=pt_BR&#038;gl=US</a><br />
<strong>Para PC Win.:</strong> <a href="http://gregsowell.com/?p=2020" rel="noopener" target="_blank">http://gregsowell.com/?p=2020</a></p>
<p>Espero que tenha gostado! <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><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>Participe do canal no <a href="https://t.me/blogremontti" rel="noopener noreferrer" target="_blank">telegram</a> para ficar atualizado sempre que publicar um novo tutorial. </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>O post <a href="https://blog.remontti.com.br/5390">Port knocking, aprenda a melhorar as política de segurança de seu firewall Linux e Mikrotik</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/5390/feed</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Monitoramento com o Observium no Debian 10</title>
		<link>https://blog.remontti.com.br/5103</link>
					<comments>https://blog.remontti.com.br/5103#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 20 Oct 2020 20:03:05 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[buster]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Huawei]]></category>
		<category><![CDATA[monitoramento]]></category>
		<category><![CDATA[observium]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[rrd]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=5103</guid>

					<description><![CDATA[<p>Observium é uma ferramenta de gerenciamento e monitoramento de rede gratuita e de código aberto que pode ser usada para monitorar todos os dispositivos de rede. Ele é escrito em PHP e usa SNMP&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/5103">Monitoramento com o Observium no Debian 10</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/2020/10/observium-remontti-capa.png" alt="" width="720" height="340" class="alignnone size-full wp-image-5117" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/10/observium-remontti-capa.png 720w, https://blog.remontti.com.br/wp-content/uploads/2020/10/observium-remontti-capa-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/10/observium-remontti-capa-520x245.png 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /><br />
<a href="https://www.observium.org/" rel="noopener noreferrer" target="_blank">Observium</a> é uma ferramenta de gerenciamento e monitoramento de rede gratuita e de código aberto que pode ser usada para monitorar todos os dispositivos de rede. Ele é escrito em PHP e usa SNMP para coletar os dados do dispositivo conectado e monitorá-los usando uma interface da web. </p>
<p>Observium oferece suporte a vários hardwares de rede e sistemas operacionais, incluindo Linux, Windows, FreeBSD, Cisco, Dell, Netscaler, Huawei, Mikrotik e muito mais. O Observium oferece uma interface poderosa, simples e fácil de usar para monitorar a saúde e o status de sua rede.</p>
<p>Profissionalmente desenvolvido e mantido por uma equipe de experientes engenheiros de rede e administradores de sistemas, o Observium é uma plataforma projetada e construída por seus usuários.</p>
<p>A <strong>Comunidade Observium </strong>está disponível <strong>gratuitamente</strong> para todos e recebe atualizações e recursos duas vezes por ano. O <strong>Observium Professional </strong>adiciona acesso prioritário a atualizações diárias e novos recursos por uma pequena <strong>taxa anual</strong>.</p>
<h3>Requisitos:</h3>
<p><a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">* Debian 10 (Buster) -> Instalação Limpa</a><br />
<a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">* Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP”</a><br />
A instalação do <strong>phpMyAdmin não é necessária</strong>.</p>
<p>Instale os pacotes necessários:</p>
<pre class="remontti-code"># apt install snmp fping python-mysqldb rrdtool subversion whois mtr-tiny ipmitool graphviz imagemagick wget</pre>
<p>Crie o banco de dados do observium </p>
<pre class="remontti-code"># mariadb -u root -p</pre>
<p>Não esqueça de alterar <strong>SUA_SENHA</strong></p>
<pre class="remontti-code">CREATE DATABASE observium DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON observium.* TO &#039;observium&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA&#039;;
FLUSH PRIVILEGES;
QUIT;</pre>
<p>Edições Observium</p>
<p>Como dito o Observium vem em duas edições, uma Open Source Community Edition lançada em um ciclo semestral e uma edição com recursos adicionais, correções rápidas de bugs e melhorias de recursos diariamente. Caso queira a versão &#8220;Pro&#8221; acesse <a href="https://www.observium.org/" rel="noopener noreferrer" target="_blank">https://www.observium.org/</a></p>
<p>Como a a gente é pobre <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (zueira) vamos instalar a versão <strong>Community Edition</strong><br />
Se desejar instalar o Community Edition, instale usando a versão .tar.gz mais recente.</p>
<p>Baixe o .tar.gz mais recente do Observium e descompacte:</p>
<pre class="remontti-code"># cd /var/www/
# wget http://www.observium.org/observium-community-latest.tar.gz
# tar zxvf observium-community-latest.tar.gz</pre>
<p>Crie o diretório para armazenar RRDs e ous logs:</p>
<pre class="remontti-code"># mkdir /var/www/observium/rrd 
# mkdir /var/www/observium/logs</pre>
<p>Ajustes as permissões:</p>
<pre class="remontti-code"># chown www-data. /var/www/observium/ -R </pre>
<p>Crie uma cópia do config.php.default para config.php e ajustes os valores do banco de dados colocando os valores criado no passo anterior:</p>
<pre class="remontti-code"># cp /var/www/observium/config.php.default /var/www/observium/config.php
# vim /var/www/observium/config.php</pre>
<pre class="remontti-code">$config[&#039;db_extension&#039;] = &#039;mysqli&#039;;
$config[&#039;db_host&#039;]      = &#039;localhost&#039;;
$config[&#039;db_user&#039;]      = &#039;observium&#039;;
$config[&#039;db_pass&#039;]      = &#039;SUA_SENHA&#039;;
$config[&#039;db_name&#039;]      = &#039;observium&#039;;</pre>
<p>Configure o banco de dados:</p>
<pre class="remontti-code"># php /var/www/observium/discovery.php -u </pre>
<p>Retornará:</p>
<pre class="remontti-code">  ___   _                              _
 / _ \ | |__   ___   ___  _ __ __   __(_) _   _  _ __ ___
| | | || &#039;_ \ / __| / _ \| &#039;__|\ \ / /| || | | || &#039;_ ` _ \
| |_| || |_) |\__ \|  __/| |    \ V / | || |_| || | | | | |
 \___/ |_.__/ |___/ \___||_|     \_/  |_| \__,_||_| |_| |_|
                     Observium Community Edition 20.9.10731
                                  https://www.observium.org

Install initial database schema ... done.
-- Updating database/file schema
416 -&gt; 417 # (db) .. Done (0s).
417 -&gt; 418 # (db) . Done (0s).
418 -&gt; 419 # (db) .... Done (1s).
419 -&gt; 420 # (db) .. Done (0s).
420 -&gt; 421 # (db) ... Done (0s).
421 -&gt; 422 # (db) .. Done (0s).
422 -&gt; 423 # (db) ...... Done (0s).
423 -&gt; 424 # (php)  Done (0s).
424 -&gt; 425 # (db) . Done (0s).
425 -&gt; 426 # (db) ............... Done (0s).
426 -&gt; 427 # (db) ... Done (0s).
427 -&gt; 428 # (db) ... Done (0s).
428 -&gt; 429 # (db) ... Done (0s).
429 -&gt; 430 # (db) (WARNING! Required MySQL version 5.6+ or MariaDB 10.0+).... Done (0s).
430 -&gt; 431 # (db) ..... Done (0s).
431 -&gt; 432 # (php)  Done (0s).
432 -&gt; 433 # (db) ......... Done (0s).
433 -&gt; 434 # (db) ... Done (0s).
434 -&gt; 435 # (db) . Done (0s).
-- Done.</pre>
<p>Como o php-mcrypt não está mais no repositório do Debian 10 (php.7.3) vamos instala-lo na mão:</p>
<pre class="remontti-code"># apt install php-dev libmcrypt-dev mcrypt
# pecl channel-update pecl.php.net
# pecl install channel://pecl.php.net/mcrypt-1.0.2</pre>
<p>Edite o php.ini</p>
<pre class="remontti-code"># vim /etc/php/7.3/cli/php.ini</pre>
<p>Inclua:</p>
<pre class="remontti-code">extension=mcrypt.so</pre>
<p>Verifique se a extensão esta sendo carregada, deve retornar o valor mcrypt.</p>
<pre class="remontti-code"># php -m | grep mcrypt</pre>
<p>Faremos a configuração do apache para que quando o servidor for acessado no navegado o mesmo já abra o Observium, caso você esteja instalando com outros serviços web, ou gosta das coisas organizadas pode pular para o próximo exemplo.</p>
<pre class="remontti-code"># vim /etc/apache2/sites-available/000-default.conf</pre>
<p>Ajuste para:</p>
<pre class="remontti-code">&lt;VirtualHost *:80&gt;
    ServerAdmin noc@remontti.com.br

    DocumentRoot /var/www/observium/html

    &lt;FilesMatch \.php$&gt;
      SetHandler application/x-httpd-php
    &lt;/FilesMatch&gt;

    &lt;Directory /&gt;
            Options FollowSymLinks
            AllowOverride None
    &lt;/Directory&gt;

    &lt;Directory /var/www/observium/html/&gt;
            DirectoryIndex index.php
            Options FollowSymLinks MultiViews
            AllowOverride All
            Require all granted
    &lt;/Directory&gt;

    ErrorLog  ${APACHE_LOG_DIR}/error_observium.log    
    CustomLog  ${APACHE_LOG_DIR}/access_observium.log combined
    ServerSignature On

&lt;/VirtualHost&gt;</pre>
<p>Caso você queira proteger para algumas classes de IPs e usar um subdomíno pode usar este modelo. (Mas você pode filtrar por IP também no modelo anterior ajustando os &#8220;Require&#8221;)</p>
<pre class="remontti-code"># vim /etc/apache2/sites-available/observium.conf</pre>
<pre class="remontti-code">&lt;virtualhost *:80&gt;
   ServerName observium.remontti.com.br
   ServerAdmin noc@remontti.com.br

   # Sem permissões será redirecionada para
   ErrorDocument 403 http://www.remontti.com.br
 
   DocumentRoot /var/www/observium/html

    &lt;FilesMatch \.php$&gt;
      SetHandler application/x-httpd-php
    &lt;/FilesMatch&gt;

    &lt;Directory /&gt;
      Options FollowSymLinks
      AllowOverride None
    &lt;/Directory&gt;
 
   &lt;Directory /var/www/observium/html/&gt;
      DirectoryIndex index.php
      Options FollowSymLinks MultiViews
      AllowOverride All
      Require all denied
      &lt;RequireAll&gt;
         &lt;RequireAny&gt;
            Require ip 127.0.0.1 ::1 45.80.51.0/29 2804:f123:bebe:c0ca::/64
         &lt;/RequireAny&gt;
      &lt;/RequireAll&gt;
   &lt;/Directory&gt;
 
   ErrorLog ${APACHE_LOG_DIR}/error_observium.log
   CustomLog ${APACHE_LOG_DIR}/access_observium.log combined
 
&lt;/VirtualHost&gt;</pre>
<p>Habilite a configuração criada acima:</p>
<pre class="remontti-code"># a2ensite observium</pre>
<p>Habilite o o modulo rewrite</p>
<pre class="remontti-code"># a2enmod rewrite</pre>
<p>Reinicie o serviço do apache</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>Vamos utilizar as MIBs do Observium, para isso vamos chama-las (Você pode adicionar outras, verifique quais disponiveis em /var/www/observium/mibs). </p>
<pre class="remontti-code"># vim /etc/snmp/snmp.conf</pre>
<p>Ajuste:</p>
<pre class="remontti-code">mibs : /var/www/observium/mibs/rfc:/var/www/observium/mibs/net-snmp:/var/www/observium/mibs/mikrotik:/var/www/observium/mibs/huawei</pre>
<p>Precisamos ajustar </p>
<p>Observium opera em uma frequência de poller fixa de 5 minutos ou 300 segundos. O processo poller-wrapper deve ser executado nesta frequência NÃO funcionará de outra forma. então vamos criar o /etc/cron.d/observium </p>
<pre class="remontti-code"># vim /etc/cron.d/observium</pre>
<p>Adicione:</p>
<pre class="remontti-code"># Execute uma descoberta completa de todos os dispositivos uma vez a cada 6 horas
# Run a complete discovery of all devices once every 6 hours
33  */6   * * *   root    /var/www/observium/discovery.php -h all &gt;&gt; /dev/null 2&gt;&amp;1

# Execute a descoberta automática de dispositivos recém-adicionados a cada 5 minutos
# Run automated discovery of newly added devices every 5 minutes
*/5 *     * * *   root    /var/www/observium/discovery.php -h new &gt;&gt; /dev/null 2&gt;&amp;1

# Execute o multithreaded poller wrapper a cada 5 minutos
# Run multithreaded poller wrapper every 5 minutes
*/5 *     * * *   root    /var/www/observium/poller-wrapper.py &gt;&gt; /dev/null 2&gt;&amp;1

# Execute o script de manutenção diariamente para syslog, log de eventos e log de alerta
# Run housekeeping script daily for syslog, eventlog and alert log
13 5      * * *   root    /var/www/observium/housekeeping.php -ysel &gt;&gt; /dev/null 2&gt;&amp;1

# Execute o script de manutenção diariamente para rrds, portas, entradas órfãs no banco de dados e dados de desempenho
# Run housekeeping script daily for rrds, ports, orphaned entries in the database and performance data
47 4      * * *   root    /var/www/observium/housekeeping.php -yrptb &gt;&gt; /dev/null 2&gt;&amp;1</pre>
<p>Reinicie o Cron:</p>
<pre class="remontti-code"># systemctl restart cron</pre>
<p>Adicione o primeiro usuário, use o level 10 para o administrador:</p>
<pre class="remontti-code"># php /var/www/observium/adduser.php &lt;usuario&gt; &lt;senha&gt; &lt;level&gt;</pre>
<p>Ex.:</p>
<pre class="remontti-code"># php /var/www/observium/adduser.php admin suasenha 10</pre>
<p>Adicione um primeiro dispositivo para monitorar: (Não esqueça de configurar o SNMP)</p>
<pre class="remontti-code"># php /var/www/observium/add_device.php &lt;hostname&gt; &lt;community&gt; v2c
# php /var/www/observium/add_device.php 10.0.0.100 publicsnmp v2c</pre>
<p>Agora acesse seu servidor em seu navegador e entre com usuário e senha criado.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/10/observium_debian_buster.png" alt="" width="1019" height="489" class="alignnone size-full wp-image-5112" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/10/observium_debian_buster.png 1019w, https://blog.remontti.com.br/wp-content/uploads/2020/10/observium_debian_buster-300x144.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/10/observium_debian_buster-768x369.png 768w" sizes="auto, (max-width: 1019px) 100vw, 1019px" /></p>
<p>Parabéns!<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/10/observium_home_debian_buster.png" alt="" width="1345" height="919" class="alignnone size-full wp-image-5113" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/10/observium_home_debian_buster.png 1345w, https://blog.remontti.com.br/wp-content/uploads/2020/10/observium_home_debian_buster-300x205.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/10/observium_home_debian_buster-1024x700.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/10/observium_home_debian_buster-768x525.png 768w" sizes="auto, (max-width: 1345px) 100vw, 1345px" /></p>
<p>Espero que tenha lhe instigado/inspirado a buscar mais aprender um pouquinho +</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>Participe do canal no <a href="https://t.me/blogremontti" rel="noopener noreferrer" target="_blank">telegram</a> para ficar atualizado sempre que publicar um novo tutorial. </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><strong>Fonte:</strong><br />
<a href="https://docs.observium.org/install_debian/" rel="noopener noreferrer" target="_blank">https://docs.observium.org/install_debian/</a><br />
<a href="https://docs.observium.org/web_config/" rel="noopener noreferrer" target="_blank">https://docs.observium.org/web_config/</a><br />
<a href="https://docs.observium.org/dashboard/" rel="noopener noreferrer" target="_blank">https://docs.observium.org/dashboard/</a></p>
<p>O post <a href="https://blog.remontti.com.br/5103">Monitoramento com o Observium no Debian 10</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/5103/feed</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação do FRRouting (FRR) &#8211; Roteamento dinâmico no seu linux +Bônus iBGP</title>
		<link>https://blog.remontti.com.br/4771</link>
					<comments>https://blog.remontti.com.br/4771#respond</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Sun, 20 Sep 2020 18:20:40 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[babel]]></category>
		<category><![CDATA[bgp]]></category>
		<category><![CDATA[frr]]></category>
		<category><![CDATA[frrouting]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[ospf]]></category>
		<category><![CDATA[ospf6]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[routing]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=4771</guid>

					<description><![CDATA[<p>FRRouting (FRR) é um conjunto de protocolos de roteamento IP para plataformas Linux e Unix que inclui daemons de protocolo para BGP, IS-IS, LDP, OSPF, PIM e RIP. A integração perfeita do FRR com&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/4771">Instalação do FRRouting (FRR) &#8211; Roteamento dinâmico no seu linux +Bônus iBGP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://frrouting.org/" target="_blank" rel="noopener noreferrer">FRRouting</a> (FRR) é um conjunto de protocolos de roteamento IP para plataformas Linux e Unix que inclui daemons de protocolo para BGP, IS-IS, LDP, OSPF, PIM e RIP.</p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-remontti.png" alt="" width="700" height="274" class="alignnone size-full wp-image-5085" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-remontti.png 700w, https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-remontti-300x117.png 300w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>A integração perfeita do FRR com as pilhas de rede IP Linux/Unix nativas o torna aplicável a uma ampla variedade de casos de uso.</p>
<p>FRR tem suas raízes no projeto Quagga (Fork do Quagga). Na verdade, ele foi iniciado por muitos desenvolvedores de Quagga de longa data que combinaram seus esforços para melhorar a base bem estabelecida do Quagga para criar a melhor pilha de protocolo de roteamento disponível.</p>
<p>Uma ótima apresentação foi feita pelo <a href="https://www.linkedin.com/in/jrcorazza/" target="_blank" rel="noopener noreferrer">Junior Corazza</a>. no GTER 46.<br />
<strong><a href="https://www.youtube.com/watch?v=4-77r2PGKB4" target="_blank" rel="noopener noreferrer">BSDRP &#8211; Uma opção de softrouter com FRR</a></strong><br />
<iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/4-77r2PGKB4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="allowfullscreen"></iframe><br />
Apresentação: <a href="ftp://ftp.registro.br/pub/gter/gter46/11-BSDRP.pdf" target="_blank" rel="noopener noreferrer">ftp://ftp.registro.br/pub/gter/gter46/11-BSDRP.pdf</a></p>
<p><strong>Requesitos</strong>:<br />
<a href="https://blog.remontti.com.br/2966" target="_blank" rel="noopener noreferrer">Debian 10 Stretch – Instalação Limpa</a><br />
<a href="https://blog.remontti.com.br/5792" target="_blank" rel="noopener noreferrer">Debian 11 Bullseye – Instalação Limpa</a></p>
<p>Antes de começar não esqueça de virar root da forma correta e atualizar os pacotes, e instalar alguns pacotes que serão necessários.</p>
<pre class="remontti-code"># su -
# apt update
# apt upgrade
# apt install curl apt-transport-https gnupg2 lsb-release tree net-tools</pre>
<h4>Instalação do Free Range Routing</h4>
<p>Pacotes presente do FRR no repositório do Debian 10 estão na versão 6.x.x, e Debian 11 na 7.5.x vou ir além e usar o repositório mais atualizado do FRR disponíveis em <a href="https://deb.frrouting.org" target="_blank" rel="noopener noreferrer">https://deb.frrouting.org</a>, mas fica a seu critério se desejar usar o repositório &#8220;default&#8221;.</p>
<p>Para usar pacotes do <a href="https://deb.frrouting.org/" rel="noopener" target="_blank">repositório FFR</a> faça:</p>
<pre class="remontti-code"># curl -s https://deb.frrouting.org/frr/keys.asc | apt-key add -</pre>
<p>Iremos usar a versão estável oficial mais recente &#8220;<strong>frr-stable</strong>&#8221; na variável &#8220;FRRVER&#8221;, mas é possíveis para também: <strong>frr-6 frr-7 frr-8 frr-stable</strong>.</p>
<pre class="remontti-code"># FRRVER=&quot;frr-stable&quot;
# echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) $FRRVER | tee -a /etc/apt/sources.list.d/frr.list
# apt update</pre>
<p>Podemos entrar agora em nosso respositório varios pacores FRR:</p>
<pre class="remontti-code"># apt search frr</pre>
<p><strong>frr</strong> &#8211; FRRouting suite<br />
<strong>frr-doc</strong> &#8211; Manual<br />
<strong>frr-rpki-rtrlib</strong> &#8211; Suporte BGP RPKI<br />
<strong>frr-rpki-rtrlib-dbgsym</strong> &#8211; Debug do pacote frr-rpki-rtrlib<br />
<strong>frr-snmp </strong>&#8211; Suporte SNMP<br />
<strong>frr-snmp-dbgsym</strong> &#8211; Debug do pacote frr-snmp<br />
<strong>frr-pythontools</strong> &#8211; Python tools</p>
<p>Instalarei alguns mas fique a seu critério/necessidade.</p>
<pre class="remontti-code"># apt install frr frr-doc frr-pythontools frr-rpki-rtrlib frr-snmp</pre>
<p>Após instalação o diretorio /etc/ffr/ será criado juntamente com seus arquivos de configuração. Arquitetura do diretório:</p>
<pre class="remontti-code"># tree /etc/frr/</pre>
<pre class="remontti-code-plain">/etc/frr/
├── daemons
├── frr.conf
├── support_bundle_commands.conf
└── vtysh.conf</pre>
<p>Como de costume vamos fazer um backup dos arquivos originais caso cometermos alguma &#8220;cagada&#8221; <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="remontti-code"># mkdir /etc/frr/backups
# cp /etc/frr/daemons /etc/frr/backups/
# cp /etc/frr/frr.conf /etc/frr/backups/
# cp /etc/frr/vtysh.conf /etc/frr/backups/
# cp /etc/frr/support_bundle_commands.conf /etc/frr/backups/</pre>
<p>Antes de mais nada vamos entender um pouco como a aplicação funciona.</p>
<p>No FRR o roteamento é diferente de um roteamento tradicional, ele tem um conjunto de daemons que trabalham juntos para construir a tabela de roteamento.</p>
<p>Cada protocolo principal é implementado em seu próprio daemon, e esses daemons se comunicam com um daemon intermediário (zebra), que é responsável por coordenar as decisões de roteamento.</p>
<p>Esta arquitetura permite alta resiliência, uma vez que um erro, travamento ou exploração em um daemon de protocolo geralmente não afetará os outros. Também é flexível e extensível, uma vez que a modularidade torna mais fácil implementar novos protocolos e vinculá-los ao conjunto. Além disso, cada daemon implementa um sistema de plug-in permitindo que novas funcionalidades sejam carregadas em tempo de execução.</p>
<p>Ilustração da arquitetura em grande escala:</p>
<pre class="remontti-code-plain">+----+  +----+  +-----+  +----+  +----+  +----+  +-----+
|bgpd|  |ripd|  |ospfd|  |ldpd|  |pbrd|  |pimd|  |.....|
+----+  +----+  +-----+  +----+  +----+  +----+  +-----+
     |       |        |       |       |       |        |
+----v-------v--------v-------v-------v-------v--------v
|                                                      |
|                         Zebra                        |
|                                                      |
+------------------------------------------------------+
       |                    |                   |
       |                    |                   |
+------v------+   +---------v--------+   +------v------+
|             |   |                  |   |             |
| *NIX Kernel |   | Remote dataplane |   | ........... |
|             |   |                  |   |             |
+-------------+   +------------------+   +-------------+</pre>
<p>Todos os daemons FRR podem ser gerenciados por meio de um único shell de interface de usuário integrado chamado vtysh. O vtysh se conecta a cada daemon através de um soquete de domínio UNIX e então funciona como um proxy para a entrada do usuário. Além de um front-end unificado, o vtysh também oferece a capacidade de configurar todos os daemons usando um único arquivo de configuração por meio do modo de configuração integrado. Isso evita a sobrecarga de manter um arquivo de configuração separado para cada daemon.</p>
<p>Você encontra mais informações em: <a href="http://docs.frrouting.org/en/latest/overview.html" target="_blank" rel="noopener noreferrer">http://docs.frrouting.org/en/latest/overview.html</a></p>
<h4>Módulos do kernel</h4>
<p>Na <a href="http://docs.frrouting.org/en/latest/installation.html#linux-notes" target="_blank" rel="noopener noreferrer">documentação oficial de instalação</a> é recomendado fazer alguns ajustes nas configurações de sysctl do Linux, caso para sua realidade não seja necessário pule esta parte.</p>
<p>Os itens a seguir são definidos para habilitar o encaminhamento de IP no kernel:</p>
<p><strong>Encaminhamento IPv4 e IPv6</strong></p>
<pre class="remontti-code"># vim /etc/sysctl.conf</pre>
<p>Descomente:</p>
<pre class="remontti-code">net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1</pre>
<p><strong>Encaminhamento MPLS</strong> <em>(Ative se achar necessário)</em><br />
O suporte MPLS básico foi introduzido no kernel na versão 4.1 e recursos adicionais foram introduzidos na 4.3 e 4.5.</p>
<pre class="remontti-code"># vim /etc/modules-load.d/modules.conf</pre>
<p>Adicione</p>
<pre class="remontti-code"># Load MPLS Kernel Modules
mpls_router
mpls_iptunnel</pre>
<p>Veja quais o(s) nome(s) de sua(s) interface(s) e adicione:</p>
<pre class="remontti-code"># ip -br link |grep -v lo |awk &#039;{print $1}&#039;
# vim /etc/sysctl.conf</pre>
<p>Adicione ao final do arquivo (Anteção para o nome das interfaces: net.mpls.conf.[INTERFACE].input)</p>
<pre class="remontti-code"># Habilite o processamento de rótulo MPLS em todas as interfaces
net.mpls.conf.enp0s3.input=1
net.mpls.platform_labels=100000</pre>
<p><strong>Encaminhamento VRF </strong> (Ative se achar necessário)<br />
O seguinte impacta como os soquetes BGP TCP são gerenciados em VRFs:</p>
<pre class="remontti-code">net.ipv4.tcp_l3mdev_accept=0</pre>
<p>Com essa configuração, um soquete BGP TCP é aberto por VRF. Essa configuração garante que outros serviços TCP, como SSH, fornecidos para fins não VRF, sejam bloqueados nas interfaces Linux associadas a VRF.</p>
<pre class="remontti-code">net.ipv4.tcp_l3mdev_accept=1</pre>
<p>Reinicie seu servidor para carregar as novas configurações de kernel.</p>
<pre class="remontti-code"># reboot</pre>
<p>Acesse novamente seu servidor, não esqueça de virar root com o comando &#8220;su -&#8221;</p>
<p>Após instalado o FRR não fará nada. Isso ocorre porque os daemons devem ser ativados e até o momento não temos nenhum, para ativar edite o arquivo /etc/frr/daemons e determine quais daemons serão ativados colocando um <strong>yes</strong> no daemon desejado. No meu exemplo vou ativar o bgpd qual deixarei uma &#8220;brincadeira&#8221; de exemplo ao final.</p>
<pre class="remontti-code"># vim /etc/frr/daemons</pre>
<pre class="remontti-code-plain"># Para habilitar um daemon específico, simplesmente altere o &#039;no&#039; correspondente para &#039;yes&#039;, e será necessário reiniciar o serviço.
bgpd=yes 	# BGP
ospfd=no 	# OSPFD (OSPFv2 - IPv4)
ospf6d=no 	# OSPF6D (OSPFv3 - IPv6)
ripd=no 	# RIPD (RIPv2 - IPv4)
ripngd=no 	# RIPNGD (RIPv3 - IPv6)
isisd=no 	# ISISD (IS-IS - Protocolo igp Cisco)
pimd=no 	# PIMD (PIM - Roteamento Multicast)
ldpd=no 	# LDPD (LDP - Labels MPLS para rotas igp)
nhrpd=no 	# NHRPD (NHRP - roteamento entre tuneis)
eigrpd=no 	# EIGRPD (EIGRP - protocolo igp Cisco)
babeld=no 	# BABELD (BABEL - protocolo igp dual-stack)
sharpd=no 	# SHARPD (SHARP - protocolo exemplo zclient)
pbrd=no 	# PBRD (PBR - gestao de regras para Police Based Routing)
bfdd=no 	# BFDD (BFD - protocolo de adjacencia instantanea)
fabricd=no 	# FABRICD (OpenFabric)
vrrpd=no 	# VRRPD (Virtual Router Redundancy Protocol Deamon)

# Como o nome diz, isso faz com que o VTYSH aplique a configuração ao iniciar aos daemons. 
vtysh_enable=yes 

# O próximo conjunto de linhas controla quais opções são passadas aos daemons quando iniciados. 
zebra_options=&quot;  -A 127.0.0.1 -s 90000000&quot;
bgpd_options=&quot;   -A 127.0.0.1&quot;
ospfd_options=&quot;  -A 127.0.0.1&quot;
ospf6d_options=&quot; -A ::1&quot;
ripd_options=&quot;   -A 127.0.0.1&quot;
ripngd_options=&quot; -A ::1&quot;
isisd_options=&quot;  -A 127.0.0.1&quot;
pimd_options=&quot;   -A 127.0.0.1&quot;
ldpd_options=&quot;   -A 127.0.0.1&quot;
nhrpd_options=&quot;  -A 127.0.0.1&quot;
eigrpd_options=&quot; -A 127.0.0.1&quot;
babeld_options=&quot; -A 127.0.0.1&quot;
sharpd_options=&quot; -A 127.0.0.1&quot;
pbrd_options=&quot;   -A 127.0.0.1&quot;
staticd_options=&quot;-A 127.0.0.1&quot;
bfdd_options=&quot;   -A 127.0.0.1&quot;
fabricd_options=&quot;-A 127.0.0.1&quot;
vrrpd_options=&quot;  -A 127.0.0.1&quot;</pre>
<p>Como este tutorial é um laboratório irei ativar os daemons <strong>OSPFv2, OSPFv3, BABEL e BGP</strong>, (em produção ative somente o necessário) pois em seguida teremos alguns exemplos contribuídos pelo <a href="http://www.patrickbrandao.com/" target="_blank" rel="noopener noreferrer">Patrick Brandão</a>.</p>
<p>Alterações feitas no /etc/frr/daemons vamos reiniciar o FRR</p>
<pre class="remontti-code"># systemctl restart frr</pre>
<p>Verifique se o mesmo está ok</p>
<pre class="remontti-code"># systemctl status frr</pre>
<pre class="remontti-code-plain">● frr.service - FRRouting
   Loaded: loaded (/lib/systemd/system/frr.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-08-11 14:00:29 -03; 41s ago
     Docs: https://frrouting.readthedocs.io/en/latest/setup.html
  Process: 665 ExecStart=/usr/lib/frr/frrinit.sh start (code=exited, status=0/SUCCESS)
   Status: &quot;FRR Operational&quot;
    Tasks: 18 (limit: 1150)
   Memory: 24.2M
   CGroup: /system.slice/frr.service
           ├─674 /usr/lib/frr/watchfrr -d -F traditional zebra bgpd ospfd ospf6d babeld staticd
           ├─699 /usr/lib/frr/zebra -d -F traditional -A 127.0.0.1 -s 90000000
           ├─704 /usr/lib/frr/bgpd -d -F traditional -A 127.0.0.1
           ├─712 /usr/lib/frr/ospfd -d -F traditional -A 127.0.0.1
           ├─716 /usr/lib/frr/ospf6d -d -F traditional -A ::1
           ├─720 /usr/lib/frr/babeld -d -F traditional -A 127.0.0.1
           └─724 /usr/lib/frr/staticd -d -F traditional -A 127.0.0.1

ago 11 14:00:29 frr zebra[699]: client 47 says hello and bids fair to announce only static routes vrf=0
set 23 15:44:11 accel watchfrr[1220]: zebra state -&gt; up : connect succeeded
set 23 15:44:11 accel watchfrr[1220]: bgpd state -&gt; up : connect succeeded
set 23 15:44:11 accel watchfrr[1220]: ospfd state -&gt; up : connect succeeded
set 23 15:44:11 accel watchfrr[1220]: ospf6d state -&gt; up : connect succeeded
set 23 15:44:11 accel watchfrr[1220]: staticd state -&gt; up : connect succeeded
set 23 15:44:11 accel watchfrr[1220]: all daemons up, doing startup-complete notify
ago 11 14:00:29 frr frrinit.sh[665]: Started watchfrr.
ago 11 14:00:29 frr systemd[1]: Started FRRouting.</pre>
<p>Pode também conferir se o serviço de cada daemons ativos foi iniciado:</p>
<pre class="remontti-code"># netstat -putan</pre>
<pre class="remontti-code-plain">Proto Recv-Q Send-Q Endereço Local          Endereço Remoto         Estado      PID/Program name    
tcp        0      0 127.0.0.1:2601          0.0.0.0:*               OUÇA       699/zebra           
tcp        0      0 127.0.0.1:2604          0.0.0.0:*               OUÇA       712/ospfd           
tcp        0      0 127.0.0.1:2605          0.0.0.0:*               OUÇA       704/bgpd            
tcp        0      0 127.0.0.1:2616          0.0.0.0:*               OUÇA       724/staticd         
tcp6       0      0 ::1:2606                :::*                    OUÇA       716/ospf6d</pre>
<p>Lista completa das portas:</p>
<pre class="remontti-code-plain">zebrasrv      2600/tcp    # zebra service
zebra         2601/tcp    # zebra vty
ripd          2602/tcp    # RIPd vty
ripngd        2603/tcp    # RIPngd vty
ospfd         2604/tcp    # OSPFd vty
bgpd          2605/tcp    # BGPd vty
ospf6d        2606/tcp    # OSPF6d vty
ospfapi       2607/tcp    # ospfapi
isisd         2608/tcp    # ISISd vty
babeld        2609/tcp    # BABELd vty
nhrpd         2610/tcp    # nhrpd vty
pimd          2611/tcp    # PIMd vty
ldpd          2612/tcp    # LDPd vty
eigprd        2613/tcp    # EIGRPd vty
bfdd          2617/tcp    # bfdd vty
fabricd       2618/tcp    # fabricd vty
vrrpd         2619/tcp    # vrrpd vty</pre>
<h4>Entrado no Shell VTY</h4>
<p>Vtysh fornece um frontend combinado para todos os daemons FRR em uma única sessão combinada.</p>
<pre class="remontti-code"># vtysh</pre>
<pre class="remontti-code-plain">Hello, this is FRRouting (version 7.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

frr# show running-config
Building configuration...

Current configuration:
!
frr version 7.3.1
frr defaults traditional
hostname frr
log syslog informational
service integrated-vtysh-config
!
line vty
!
end
frr# exit</pre>
<p>vtysh tem um arquivo de configuração /etc/frr/vtysh.conf que contém opções que controlam o comportamento da autenticação. Este arquivo também não será escrito por comandos de salvamento de configuração, ele deve ser atualizado manualmente.</p>
<p>Isso também significa que os comandos hostname e (que têm efeito para vtysh) precisam ser atualizados manualmente no vtysh.conf</p>
<p>Todas as configurações salvas (<strong>write</strong>) no terminal do vtysh são escritas no arquivo <strong>frr.conf</strong>. </p>
<p>A documentação também ressalta que é possível salvar os arquivos separados por daemons, para alterar esse comportamento é precisamos editar o /etc/frr/vtysh.conf <em>(Fica a seu critério também, eu particularmente não altero)</em></p>
<pre class="remontti-code"># vim /etc/frr/vtysh.conf</pre>
<p>Estão o que isso faz?<br />
<strong>service integrated-vtysh-config </strong><br />
&#8211; O vtysh sempre salvará no frr.conf.</p>
<p><strong>no service integrated-vtysh-config </strong><br />
&#8211; vtysh nunca vai salvar no frr.conf, em vez disso, ele pedirá aos daemons que escrevam/crie seus arquivos de configuração individuais.</p>
<p>Se fizer a altração reinicie a aplicação</p>
<pre class="remontti-code"># systemctl restart frr</pre>
<p>Mais sobre vtysh: <a href="http://docs.frrouting.org/en/latest/vtysh.html" target="_blank" rel="noopener noreferrer">http://docs.frrouting.org/en/latest/vtysh.html</a></p>
<p>Acessamos o terminal do vtysh e usamos o comando write (salvar).</p>
<pre class="remontti-code"># vtysh</pre>
<pre class="remontti-code-plain">Hello, this is FRRouting (version 7.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

frr# write 
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Warning: /etc/frr/frr.conf.sav unlink failed
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
frr# exit</pre>
<p>Na próxima vez que salvar (write) um &#8220;____.<strong>conf.sav</strong>&#8221; será criado também preservando a configuração posterior.</p>
<p>Você também pode acessar o terminal vtysh (zebra) por telnet, lembra que vimos as porta que cada serviço estava rodando, logo o zebra roda na porta 2601(tcp), porém responde apenas localmente (localhost/127.0.0.1) caso você deseje abrir esse acesso externamente (restringi-lo por firewall o acesso a determinados IPs é uma boa prática) faça e alteração no arquivo daemons.</p>
<pre class="remontti-code"># vim /etc/frr/daemons</pre>
<p>Encontre:</p>
<pre class="remontti-code">zebra_options=&quot;  -A 127.0.0.1 -s 90000000&quot;</pre>
<p>E altere por:</p>
<pre class="remontti-code">zebra_options=&quot;  -A 0.0.0.0 -s 90000000&quot;</pre>
<p>Se você desejar alterar esta porta basta incluir &#8220;-P porta&#8221;</p>
<pre class="remontti-code">zebra_options=&quot;  -A 0.0.0.0 -s 90000000 -P 40023&quot;</pre>
<p>Salve e reinicie o FRR</p>
<pre class="remontti-code"># systemctl restart frr</pre>
<p>Porém se você tentar acessar mesmo que localmente não será possível, pois uma senha não foi definida.</p>
<pre class="remontti-code-plain"># telnet localhost 40023
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is &#039;^]&#039;.
Vty password is not set.
Connection closed by foreign host.</pre>
<p>Para configura as senha de login e de enable:</p>
<pre class="remontti-code"># vtysh</pre>
<pre class="remontti-code"># configure terminal 
# password senha_de_login
# enable password senha_para_enable
# service password-encryption
# line vty 
# login 
# end 
# write
# exit</pre>
<p>Ex.:</p>
<pre class="remontti-code-plain">frr# configure terminal 
frr(config)# password remontti
frr(config)# enable password remontti
frr(config)# service password-encryption
frr(config)# line vty 
frr(config-line)# login 
frr(config-line)# end 
frr# write 
Note: this version of vtysh never writes vtysh.conf
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
frr# exit</pre>
<p>Faça um teste localmente ou externamente caso tenha liberado o acesso:</p>
<pre class="remontti-code"># telnet localhost 40023</pre>
<pre class="remontti-code-plain">Trying 127.0.0.1...
Connected to localhost.
Escape character is &#039;^]&#039;.

Hello, this is FRRouting (version 7.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

User Access Verification

Password: 
frr&gt; enable 
Password: 
frr# exit</pre>
<p>Por mais inseguro que seja o uso do telnet, em alguns casos é comum o acesso de servidores Looking Glass publicamente. Para tornar o acesso telnet público (não vai exigir senha) apenas leitura, basta remove a senha. (Ainda assim é possível ter poderes com em enable+senha)</p>
<p>Removendo senha:</p>
<pre class="remontti-code"># configure terminal
# no password
# line vty
# no login
# end
# write
# exit
</pre>
<pre class="remontti-code-plain">Hello, this is FRRouting (version 7.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

frr# configure terminal
frr(config)# no password
Please be aware that removing the password is a security risk and you should think twice about this command.
frr(config)# line vty
frr(config-line)# no login
frr(config-line)# end
frr# write 
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
frr# exit</pre>
<h4>Zerando as configurações</h4>
<p>Caso você queira começar tudo do zero, basta remover todos os .conf e copiar os arquivos originais que estão na pasta backup, e dar suas devidas permissões!<br />
Ex.:</p>
<pre class="remontti-code"># rm /etc/frr/*.conf
# rm /etc/frr/*.sav
# rm /etc/frr/daemons
# cp /etc/frr/backups/* /etc/frr/
# chown frr. /etc/frr/ -R</pre>
<h3>Modelos de configurações:</h3>
<p>Alguns exemplos de configurações para os daemons podem ser encontrados em:</p>
<pre class="remontti-code-plain"># tree /usr/share/doc/frr/examples/
├── babeld.conf.sample
├── bfdd.conf.sample
├── bgpd.conf.sample
├── bgpd.conf.sample2
├── bgpd.conf.vnc.sample
├── eigrpd.conf.sample
├── isisd.conf.sample
├── ldpd.conf.sample
├── ospf6d.conf.sample
├── ospfd.conf.sample
├── pbrd.conf.sample
├── pimd.conf.sample
├── ripd.conf.sample
├── ripngd.conf.sample
├── staticd.conf.sample
├── vtysh.conf.sample
└── zebra.conf.sample</pre>
<p>Em <a href="http://docs.frrouting.org/en/latest/" rel="noopener noreferrer" target="_blank">http://docs.frrouting.org/en/latest/</a> você encontra uma ampla documentação com muitos exemplos. </p>
<h4>Bônus iBGP</h4>
<p>Vou deixar aqui um modelo simples iBGP entre um servidor Linux vs Mikrotik.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-bgp-mikrotik-1.png" alt="" width="706" height="261" class="alignnone size-full wp-image-5076" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-bgp-mikrotik-1.png 706w, https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-bgp-mikrotik-1-300x111.png 300w" sizes="auto, (max-width: 706px) 100vw, 706px" /></p>
<p>Exemplo para iBGP para um DNS Anycast distribuído, usando os IPs do DNS Google, <strong>mas não estou incentivando a fazer isso</strong> é apenas um exemplo! </p>
<p><strong>Configuração Linux DNS</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/09/a.png" alt="" width="225" height="121" class="alignnone size-full wp-image-5090" /></p>
<pre class="remontti-code"># vtysh</pre>
<p>Nesta configuração vamos adicionar os IPs de loopbacks em seguida fechar os peers IPv4 e IPv6, e finalizando configurando os filtros para receber rota default (Logo no RouterOS será necessário envia) e ensinar apenas as IPs de lo. Este é apenas um exemplo para você começar a brincar e estudar mais sobre o assunto.</p>
<pre class="remontti-code">configure terminal
!
interface lo
 ip address 8.8.8.8/32
 ipv6 address 2001:4860:4860::8888/128
!
router bgp 65530
 bgp router-id 10.1.0.2
 neighbor 10.1.0.1 remote-as 65530
 neighbor 10.1.0.1 description &quot;iBGP_DNS_IPv4&quot;
 neighbor 2001:db8:1::1 remote-as 65530
 neighbor 2001:db8:1::1 description &quot;iBGP_DNS_IPv6&quot;
 !
 address-family ipv4 unicast
  redistribute kernel
  redistribute connected
  redistribute static
  neighbor 10.1.0.1 prefix-list RR-IPV4-IN in
  neighbor 10.1.0.1 prefix-list RR-IPV4-OUT out
 exit-address-family
 !
 address-family ipv6 unicast
  redistribute kernel
  redistribute connected
  redistribute static
  neighbor 2001:db8:1::1 activate
  neighbor 2001:db8:1::1 prefix-list RR-IPV6-IN in
  neighbor 2001:db8:1::1 prefix-list RR-IPV6-OUT out
 exit-address-family
!
ip prefix-list RR-IPV4-IN seq 5 permit 0.0.0.0/0
ip prefix-list RR-IPV4-OUT seq 5 permit 8.8.8.8/32
!
ipv6 prefix-list RR-IPV6-IN seq 5 permit ::/0
ipv6 prefix-list RR-IPV6-OUT seq 5 permit 2001:4860:4860::8888/128
!
line vty
!
end
write</pre>
<p><strong>Configuração no Mikrotik/RouterOS (Gateway DNS)</strong></p>
<pre class="remontti-code">/routing bgp instance
add client-to-client-reflection=no name=iBGP-DNS router-id=10.1.0.1

/routing bgp peer
add default-originate=always instance=iBGP-DNS name=DNS-FRR-IPv4 remote-address=10.1.0.2 remote-as=65530
add default-originate=always instance=iBGP-DNS name=DNS-FRR-IPv6 remote-address=2001:db8:1::2 remote-as=65530 address-families=ipv6
</pre>
<p><strong>Configuração Linux Accel-PPP</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/09/b.png" alt="" width="258" height="154" class="alignnone size-full wp-image-5089" /></p>
<pre class="remontti-code"># vtysh</pre>
<p>Nesta configuração vamos fechar os peers IPv4 e IPv6, e configurar os filtros para receber rota default (Logo no RouterOS será necessário envia) e ensinar apenas as IPs possíveis ips dinâmicos desta rede (45.0.0.0/22, 100.64.0.0/10). Lembrando que este é apenas um exemplo simples para você começar a brincar e estudar mais sobre o assunto.</p>
<pre class="remontti-code">configure terminal
!
router bgp 65530
 bgp router-id 10.1.0.2
 neighbor 10.2.0.1 remote-as 65530
 neighbor 10.2.0.1 description &quot;iBGP_ACCEL_IPv4&quot;
 neighbor 2001:db8:2::1 remote-as 65530
 neighbor 2001:db8:2::1 description &quot;iBGP_ACCEL_IPv6&quot;
 !
 address-family ipv4 unicast
  redistribute kernel
  redistribute connected
  redistribute static
  neighbor 10.2.0.1 prefix-list FILTRO-RR-IPV4-IN in
  neighbor 10.2.0.1 prefix-list FILTRO-RR-IPV4-OUT out
 exit-address-family
 !
 address-family ipv6 unicast
  redistribute kernel
  redistribute connected
  redistribute static
  neighbor 2001:db8:2::1 activate
  neighbor 2001:db8:2::1 prefix-list FILTRO-RR-IPV6-IN in
  neighbor 2001:db8:2::1 prefix-list FILTRO-RR-IPV6-OUT out
 exit-address-family
!
ip prefix-list FILTRO-RR-IPV4-IN seq 5 permit 0.0.0.0/0
ip prefix-list FILTRO-RR-IPV4-OUT seq 5 permit 100.64.0.0/10 le 32
ip prefix-list FILTRO-RR-IPV4-OUT seq 10 permit 45.0.0.0/22 le 32
ip prefix-list FILTRO-RR-IPV4-OUT seq 15 permit 10.0.0.0/8 le 32
!
ipv6 prefix-list FILTRO-RR-IPV6-IN seq 5 permit ::/0
ipv6 prefix-list FILTRO-RR-IPV6-OUT seq 10 permit 2001:db8::/32 le 128
!
line vty
!
end
write</pre>
<p><strong>Configuração no Mikrotik/RouterOS (Gateway Accel-PPP)</strong></p>
<pre class="remontti-code">/routing bgp instance
add client-to-client-reflection=no name=iBGP-Accel router-id=10.2.0.2

/routing bgp peer
add default-originate=always instance=iBGP-Accel name=DNS-FRR-IPv4 remote-address=10.2.0.2 remote-as=65530
add default-originate=always instance=iBGP-Accel name=DNS-FRR-IPv6 remote-address=2001:db8:2::2 remote-as=65530 address-families=ipv6
</pre>
<p>Espero que tenha lhe instigado a buscar mais sobre o FRR.</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>Participe do canal no <a href="https://t.me/blogremontti" rel="noopener noreferrer" target="_blank">telegram</a> para ficar atualizado sempre que publicar um novo tutorial. </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>Deixo aqui agradecimento ao Patrick Brandão que está elaborando um belo <a href="http://www.patrickbrandao.com/?p=artigos&#038;a=frr#frr" rel="noopener noreferrer" target="_blank">tutorial com muitos exemplos</a>. </p>
<p>Fontes:<br />
<a href="https://frrouting.org/" rel="noopener noreferrer" target="_blank">https://frrouting.org/</a><br />
<a href="http://docs.frrouting.org/" rel="noopener noreferrer" target="_blank">http://docs.frrouting.org/</a></p>
<p>O post <a href="https://blog.remontti.com.br/4771">Instalação do FRRouting (FRR) &#8211; Roteamento dinâmico no seu linux +Bônus iBGP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/4771/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Servidor Looking Glass simples e rápido!</title>
		<link>https://blog.remontti.com.br/4243</link>
					<comments>https://blog.remontti.com.br/4243#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 27 Mar 2020 20:54:36 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bgp]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[Comware]]></category>
		<category><![CDATA[Huawei]]></category>
		<category><![CDATA[juniper]]></category>
		<category><![CDATA[lg]]></category>
		<category><![CDATA[looking glass]]></category>
		<category><![CDATA[OpenBGPD]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Quagga]]></category>
		<category><![CDATA[RADb]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[Zebra]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=4243</guid>

					<description><![CDATA[<p>Um servidor Looking Glass (ou servidor LG) é muito útil para acesso remoto com o objetivo de disponibilizar informações de roteamento publicamente. O servidor atua como um portal limitado e somente leitura para roteadores&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/4243">Servidor Looking Glass simples e rápido!</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Um servidor Looking Glass (ou servidor LG) é muito útil para acesso remoto com o objetivo de disponibilizar informações de roteamento publicamente. O servidor atua como um portal limitado e somente leitura para roteadores de qualquer organização que esteja executando o servidor LG.</p>
<p>Para montar o servidor vamos usar um projeto muito simples que basicamente tem 2 arquivos, o <a href="https://github.com/remontti/lg" rel="noopener noreferrer" target="_blank">PHP Looking Glass</a> qual é um fork do projeto russo <a href="https://github.com/hsdn/lg" rel="noopener noreferrer" target="_blank">hsdn</a>.<br />
<center><a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/Looking_Glass_debina_10_graph.png" data-rel="lightbox-gallery-vTcTbhCk" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/Looking_Glass_debina_10_graph-300x265.png" alt="" width="300" height="265" class="alignnone size-medium wp-image-4254" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/Looking_Glass_debina_10_graph-300x265.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/Looking_Glass_debina_10_graph-768x677.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/03/Looking_Glass_debina_10_graph.png 848w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/show-ip-bgp.png" data-rel="lightbox-gallery-vTcTbhCk" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/show-ip-bgp-300x265.png" alt="" width="300" height="265" class="alignnone size-medium wp-image-4256" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/show-ip-bgp-300x265.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/show-ip-bgp-768x677.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/03/show-ip-bgp.png 862w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></center></p>
<p>Você encontra outros projetos legais também como o da <a href="https://github.com/respawner/looking-glass" rel="noopener noreferrer" target="_blank">respawner</a> qual o pessoal da <a href="https://wiki.brasilpeeringforum.org/w/Como_Ter_Seu_Proprio_Looking_Glass" rel="noopener noreferrer" target="_blank">BPF</a> já fez tutorial sobre o mesmo. </p>
<h3>Características do PHP Looking Glass</h3>
<p>Suporte a Telnet e SSH (plink ou sshpass).<br />
Suporte aos roteadores <strong>Cisco, MikroTik (RouterOS), Juniper, Huawei (Comware), Quagga (Zebra) e OpenBGPD</strong>.<br />
Suppores aos protocolos IPv4 e IPv6.<br />
Conversão automática de IPs em sub-redes usando Merit RADb para MikroTik (http://www.ra.net/).<br />
Desenho do gráfico BGP AS usando o kit de ferramentas GraphViz.<br />
Funciona no php 5.2.0 e superiores.</p>
<p>Para subir o projeto em seu servidor você precisa ter um serviço web como apache por exemplo e PHP basicamente. Você pode subir ele em um servido já em produção, não é necessário criar um servidor apenas para essa finalidade. (Porém fica a seu critério) </p>
<p>Vou trazer uma instalação limpa com base na <a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">instalação zerada do Debian 10</a>. </p>
<p>Com Debian instalado vamos instalar os pacotes necessários:</p>
<pre class="remontti-code"># apt install apache2 apache2-utils sshpass graphviz
# apt install libapache2-mod-php php php-cli php-pear php-gmp php-gd php-bcmath php-mbstring php-curl php-xml php-zip
# pear install Image_GraphViz-1.3.0</pre>
<p>Vou colocar o projeto no diretório padrão do apache /var/www/html/, mas você pode criar um <a href="https://blog.remontti.com.br/3464" rel="noopener noreferrer" target="_blank">domínio virtual </a>para isso ficar muito mais legal e ainda criar um <a href="https://blog.remontti.com.br/3548" rel="noopener noreferrer" target="_blank">certificado gratuitamente</a> com o  Let’s Encrypt</p>
<pre class="remontti-code"># mkdir /var/www/html/lg
# cd /var/www/html/lg
# apt install wget
# wget https://github.com/remontti/lg/raw/master/htdocs/favicon.ico
# wget https://github.com/remontti/lg/raw/master/htdocs/lg_logo.gif
# wget https://raw.githubusercontent.com/remontti/lg/master/htdocs/index.php
# wget https://raw.githubusercontent.com/remontti/lg/master/htdocs/lg_config.php</pre>
<p>Agora basta vocÊ editar o arquivo <strong>lg_config.php</strong> e alterar os valores das variáveis:</p>
<p><strong>$_CONFIG[&#8216;asn&#8217;]</strong> &#8211; Seu AS para exibição na página LG.<br />
<strong>$_CONFIG[&#8216;company&#8217;]</strong> &#8211; Nome da empresa para exibição na página LG.<br />
<strong>$_CONFIG[&#8216;logo&#8217;]</strong> &#8211; O logotipo da sua empresa para exibição na página LG.<br />
<strong>$_CONFIG[&#8216;color&#8217;]</strong> &#8211; Cor principal dos elementos de design na página LG.</p>
<p>A configuração dos roteadores é especificada em $_CONFIG[&#8216;routers&#8217;], no seguinte formato:</p>
<pre class="remontti-code-plain">$_CONFIG[&#039;routers&#039;] = array
(
    &#039;router1&#039; = array
    (
        // Router valores
    ),
    &#039;router2&#039; = array
    (
        // Router valores
    ),
    // etc.
);</pre>
<p>No nosso arquivo atual já consta com 3 exemplos sendo um o do IX.BR (SP). Basta você configurar seu roteado seguindo os padrões:</p>
<p><strong>url</strong> &#8211; Endereço no formato: [ssh|telnet]://[login]:[password]@[host]:[port].<br />
<strong>pingtraceurl</strong> &#8211; Endereço URL para ferramentas de ping e traceroute para roteadores Quagga (ou * FALSE *).<br />
<strong>description</strong> &#8211; Descrição do roteador.<br />
<strong>group</strong> &#8211; Nome do grupo de roteadores (AS) (ou FALSE).<br />
<strong>ipv6</strong> &#8211; Suporte IPv6? (TRUE ou FALSE).<br />
<strong>os</strong> &#8211; Tipo do Router (ios, mikrotik, quagga, junos, openbgpd, huawei).</p>
<p>Configurações ajustada basta acessar o endereço http://ip-servidor/lg ou se você fez bonitinho via domínio <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;" /><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/Looking_Glass_debina_10.png" data-rel="lightbox-gallery-vTcTbhCk" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/Looking_Glass_debina_10.png" alt="" width="978" height="544" class="alignnone size-full wp-image-4250" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/Looking_Glass_debina_10.png 978w, https://blog.remontti.com.br/wp-content/uploads/2020/03/Looking_Glass_debina_10-300x167.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/Looking_Glass_debina_10-768x427.png 768w" sizes="auto, (max-width: 978px) 100vw, 978px" /></a></p>
<p>Curtiu o conteúdo? Quer me ajudar? <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><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento! (Esse deu trabalho!)</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>Participe do canal no <a href="https://t.me/blogremontti" rel="noopener noreferrer" target="_blank">telegram</a> para ficar atualizado sempre que publicar um novo tutorial. </p>
<p>Abraço!</p>
<p><strong>Demos</strong><br />
<a href="http://dev.hsdn.org/lg/" rel="noopener noreferrer" target="_blank">http://dev.hsdn.org/lg/</a><br />
<a href="http://lg.campus-rv.net/" rel="noopener noreferrer" target="_blank">http://lg.campus-rv.net/</a><br />
<a href="http://lg.lankabell.com/" rel="noopener noreferrer" target="_blank">http://lg.lankabell.com/</a></p>
<p><strong>Gráfico da demonstração (BGP AS)</strong><br />
<a href="http://dev.hsdn.org/lg/?command=graph&#038;protocol=ipv4&#038;query=8.8.8.8&#038;router=example1" rel="noopener noreferrer" target="_blank">http://dev.hsdn.org/lg/?command=graph&#038;protocol=ipv4&#038;query=8.8.8.8&#038;router=example1</a></p>
<p>O post <a href="https://blog.remontti.com.br/4243">Servidor Looking Glass simples e rápido!</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/4243/feed</wfw:commentRss>
			<slash:comments>36</slash:comments>
		
		
			</item>
		<item>
		<title>Entendendo o funcionamento do FreeRadius e fazendo autenticações PPPoE, Hotspot e Wireless PSK/EAP (Lab Mikrotik/Ubiquiti)</title>
		<link>https://blog.remontti.com.br/4085</link>
					<comments>https://blog.remontti.com.br/4085#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 13 Mar 2020 20:33:59 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[autenticação]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[eap]]></category>
		<category><![CDATA[freeradius]]></category>
		<category><![CDATA[hotspot]]></category>
		<category><![CDATA[laboratório]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[pppoe]]></category>
		<category><![CDATA[psk]]></category>
		<category><![CDATA[radius]]></category>
		<category><![CDATA[ubiquiti]]></category>
		<category><![CDATA[wireless]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=4085</guid>

					<description><![CDATA[<p>Neste tutorial você irá aprender como integrar o freeradius 3.0.>16 para fazer autenticações PPPoE, Hotspot, Wireless PSK/EAP entre outras. Aprendendo mais sobre os atributos do banco de dados radius. Para demonstrar irei criar um&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/4085">Entendendo o funcionamento do FreeRadius e fazendo autenticações PPPoE, Hotspot e Wireless PSK/EAP (Lab Mikrotik/Ubiquiti)</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/2020/03/freeradius-3-debian10-integracoes.png" alt="" width="900" height="428" class="alignnone size-full wp-image-4223" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius-3-debian10-integracoes.png 900w, https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius-3-debian10-integracoes-300x143.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius-3-debian10-integracoes-768x365.png 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /><br />
Neste tutorial você irá aprender como integrar o freeradius 3.0.>16 para fazer autenticações PPPoE, Hotspot, Wireless PSK/EAP entre outras. Aprendendo mais sobre os atributos do banco de dados radius. </p>
<p>Para demonstrar irei criar um <strong>cenário ilustrativo</strong> de &#8220;nossa rede&#8221; com Mikrotik e Ubiquiti mas basicamente as autenticações podem serem para outras marcas. <em>(Com algumas exceções para os atributos da Mikrotik)</em></p>
<h3>Cenário ilustrativo</h3>
<pre class="remontti-code"># Servidores
FreeRadius: 180.255.0.3

# Concentradores
MK HotSpot: 180.255.1.1
MK PPPoE: 180.255.1.3

# Torre 1 
UBNT AP1 WPA EAP: 10.0.0.2
UBNT AP2 WPA EAP: 10.0.0.3
UBNT AP3 WPA EAP: 10.0.0.4

# Torre 2 
MK AP1 WPA PSK: 10.1.0.2
MK AP2 WPA PSK: 10.1.0.3
MK AP3 WPA PSK: 10.1.0.4</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius_debian_10_buster_mikrotik.jpg" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius_debian_10_buster_mikrotik.jpg" alt="" width="1051" height="845" class="alignnone size-full wp-image-4213" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius_debian_10_buster_mikrotik.jpg 1051w, https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius_debian_10_buster_mikrotik-300x241.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius_debian_10_buster_mikrotik-1024x823.jpg 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius_debian_10_buster_mikrotik-768x617.jpg 768w" sizes="auto, (max-width: 1051px) 100vw, 1051px" /></a></p>
<p>Vou tomar como base a <strong>instalação do FreeRadius</strong> no tutorial: (<strong><em>requisito</em></strong>)<br />
<a href="https://blog.remontti.com.br/4063" rel="noopener noreferrer" target="_blank">Criando um servidor de autenticação com FreeRadius 3.0.x no Debian Buster</a></p>
<h3>Entendo as tabelas do banco de dados</h3>
<p><strong>• nas</strong><br />
A tabela NAS contém dados de hosts clientes, seria uma &#8220;substituição&#8221; do arquivo clients.conf. É muito mais fácil alimentar os hosts clientes no banco de dados do que dentro do arquivo de configuração. Então quem do nosso cenário será vamos incluir nesta tabela? Todos os equipamentos que precisarem comunicar com seu servidor para de alguma forma fazer a autenticação. Para inserir os dados na tabela <strong>nas</strong> você pode usar o terminal ou então acessando o phpMyAdmin:<br />
Os principais campos são:<br />
‣ nasname: IP Adress (Único)<br />
‣ shortname: Nome (Único)<br />
‣ type: Tipo [other]<br />
‣ secret: Sua &#8220;senha de autorização&#8221;<br />
‣ description: Obs</p>
<p>Em nosso exemplo serão os dois concentradores e os APs das torres que serão inseridos em nossa tabela nas. Ex.:</p>
<pre class="remontti-code">INSERT INTO `nas` (`nasname`, `shortname`, `type`, `ports`, `secret`, `server`, `community`, `description`) VALUES
-- Mikrotik PPPoE Server --
(&#039;180.255.1.1&#039;, &#039;RB-RouterOS-PPPoE&#039;, &#039;other&#039;, NULL, &#039;SEU_SECRET&#039;, NULL, NULL, &#039;RouterOS PPPoE&#039;),
-- Mikrotik Hotspot Server --
(&#039;180.255.1.3&#039;, &#039;RB-RouterOS-HotSpot&#039;, &#039;other&#039;, NULL, &#039;SEU_SECRET&#039;, NULL, NULL, &#039;RouterOS HotSpot&#039;),
-- Torre Ubiquiti --
(&#039;10.0.0.2&#039;, &#039;UBNT-AP-A&#039;, &#039;other&#039;, NULL, &#039;SEU_SECRET&#039;, NULL, NULL, &#039;U-POP1-A&#039;),
(&#039;10.0.0.3&#039;, &#039;UBNT-AP-B&#039;, &#039;other&#039;, NULL, &#039;SEU_SECRET&#039;, NULL, NULL, &#039;U-POP1-B&#039;),
(&#039;10.0.0.4&#039;, &#039;UBNT-AP-C&#039;, &#039;other&#039;, NULL, &#039;SEU_SECRET&#039;, NULL, NULL, &#039;U-POP1-C&#039;),
-- Torre Mikrotik  --
(&#039;10.1.0.2&#039;, &#039;MK-AP-A&#039;, &#039;other&#039;, NULL, &#039;SEU_SECRET&#039;, NULL, NULL, &#039;M-POP2-A&#039;),
(&#039;10.1.0.3&#039;, &#039;MK-AP-B&#039;, &#039;other&#039;, NULL, &#039;SEU_SECRET&#039;, NULL, NULL, &#039;M-POP2-B&#039;),
(&#039;10.1.0.4&#039;, &#039;MK-AP-C&#039;, &#039;other&#039;, NULL, &#039;SEU_SECRET&#039;, NULL, NULL, &#039;M-POP2-B&#039;);</pre>
<p>Algo <strong>extremamente importa</strong> é que sempre que adicionar, editar ou apagar dados da tabela <strong>NAS</strong> é necessário <strong>reiniciar o serviço</strong> FreeRadius para atualizar os hosts clientes, está é a unica tabela que é necessário um restart no serviço.</p>
<pre class="remontti-code"># systemctl restart freeradius</pre>
<p>Dando continuidade as demais tabelas:</p>
<p><strong>• radcheck </strong>&#8211; Armazena os registo de cada usuário com os respectivos atributos associados. Exemplo o usuário vs senha, usuário vs MAC.</p>
<p><strong>• radgroupcheck</strong> – Associa atributos a um determinado grupo de usuários.</p>
<p><strong>• radgroupreply</strong> – Armazena os atributos que são devolvidos a todos os usuários de um grupo.</p>
<p><strong>• radusergroup</strong> &#8211; Associa um usuário a um grupo (radgroupcheck/radgroupreply) simplificando os insert em suas tabelas.</p>
<p><strong>• radreply</strong> – Contém lista de atributos enviados a um único usuário.</p>
<p><strong>• radpostauth</strong> – Armazena informações acerca das respostas enviadas para os usuários (Desativada).</p>
<p><strong>• radacct</strong> &#8211; Se encontra toda a informação de contabilização, é dela que você consultará por exemplo um extrato de conexões, descobrir qual IP estava sendo utilizado por um usuário.</p>
<h4>Vamos começar configurando o RouterOS/Mikrotik para fazer autenticações PPPoE (Básico)</h4>
<p>&#8211; Criamos uma <strong>pool</strong> chamada failover (pode ser qualquer nome) nesse primeiro momento. <em>Mais a frente veremos como configurar usando a radippool.</em></p>
<pre class="remontti-code">/ip pool
add name=failover ranges=100.100.100.0/23</pre>
<p>&#8211; Criar um <strong>profile</strong> informando nossa pool, bem como DNS e velocidades. <em>(Tudo isso migraremos para as tabelas mais a frente)</em></p>
<pre class="remontti-code">/ppp profile
add dns-server=8.8.8.8,8.8.4.4 local-address=180.255.1.1 name=Profile50M rate-limit=50M/50M remote-address=failover</pre>
<p>&#8211; Criamos o <strong>PPPoE Server</strong> em uma de suas interfaces que está ouvindo os roteadores que irão &#8220;discar&#8221;, bem como informando o profile que foi<br />
criado.</p>
<pre class="remontti-code">/interface pppoe-server server
add authentication=pap,chap disabled=no keepalive-timeout=30 service-name=pppoe-service default-profile=Profile50M interface=ether2</pre>
<p>&#8211; Configuramos os <strong>usuários</strong> para serem buscado do freeradius, bem como que que o intervalo de atualização das tabelas seja de 5min.</p>
<pre class="remontti-code">/ppp aaa
set interim-update=5m use-radius=yes</pre>
<p>&#8211; Adicionamos nossa <strong>conexão o servidor radius</strong> informando os tipos de autenticações que serão utilizados.</p>
<pre class="remontti-code">/radius
add address=180.255.0.3 secret=&quot;SEU_SECRET&quot; service=ppp</pre>
<p>Vamos autenticar nosso primeiro usuário o jose@provedor.com o &#8220;plano/profile&#8221; 50Mb. Para isso insira em seu banco de dados:</p>
<pre class="remontti-code">INSERT INTO `radcheck` (`username`, `attribute`, `op`, `value`) VALUES
(&#039;jose@provedor.com&#039;, &#039;Cleartext-Password&#039;, &#039;:=&#039;, &#039;senha_do_usuario&#039;);</pre>
<p>Agora configuro em nosso roteador que irá autenticar o pppoe-cliente, exemplo em um outro Mikroik:</p>
<pre class="remontti-code">/interface pppoe-client
add add-default-route=yes disabled=no interface=ether1 name=pppoe-out1 password=senha_do_usuario use-peer-dns=yes user=jose@provedor.com</pre>
<p>Acessando seu concentrador já é possível ver nosso usuário jose@provedor.com autenticado:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/pppo_cliente.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/pppo_cliente.png" alt="" width="616" height="264" class="alignnone size-full wp-image-4128" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/pppo_cliente.png 616w, https://blog.remontti.com.br/wp-content/uploads/2020/03/pppo_cliente-300x129.png 300w" sizes="auto, (max-width: 616px) 100vw, 616px" /></a></p>
<p>Bom até aí nenhum mistério, mas é <strong>extremamente perigoso você ter um usuário em seu banco de dados radius sem nenhum outro atributo</strong>, pois o com apenas usuário e senha poderia ser feito qualquer autenticação sem exigir muito mais, conheço muitos sistemas que fazem isso!</p>
<p>Vamos supor que na conexão com o radius você tenha marcado login, e nos usuário tenha marcado para autenticar via radius <em>(Já vi sistemas bem famosos fazerem isso!)</em></p>
<pre class="remontti-code">/radius
add address=180.255.0.3 secret=&quot;SEU_SECRET&quot; service=ppp,login
/user aaa
set use-radius=yes</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/radiu_perigos.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/radiu_perigos.png" alt="" width="677" height="444" class="alignnone size-full wp-image-4129" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/radiu_perigos.png 677w, https://blog.remontti.com.br/wp-content/uploads/2020/03/radiu_perigos-300x197.png 300w" sizes="auto, (max-width: 677px) 100vw, 677px" /></a><br />
Vamos ao teste? Abra seu winbox e tente acessar seu router:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/radiu_perigos2.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/radiu_perigos2.png" alt="" width="778" height="484" class="alignnone size-full wp-image-4130" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/radiu_perigos2.png 778w, https://blog.remontti.com.br/wp-content/uploads/2020/03/radiu_perigos2-300x187.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/radiu_perigos2-768x478.png 768w" sizes="auto, (max-width: 778px) 100vw, 778px" /></a><br />
Bingo! Respiramos aliviado em ver que é apenas um usuário de leitura, mas não seria nada legal alguém acessar seu router, e além do mais esse usuário somente leitura em [AAA] &#8211;> <strong>Default Group</strong> poderia ter sido alterado para <strong>full</strong> e a M* estaria feita. Mas quem sabe você queira ter seus usuários do router no radius, então para isso precisamos pensar na segurança e adicionar outros atributos que prendam ele a este serviço. Veja como ficaria um exemplo seguro onde o atributo <strong>Service-Type</strong> prende o mesmo ao tipo <strong>Login-User</strong>, e na tabela <strong>radreply</strong> insira o atributo <strong>Mikrotik-Group</strong> informando qual o seu grupo de permissões (full/write/read/personalizada)</p>
<pre class="remontti-code">INSERT INTO `radcheck` (`id`, `username`, `attribute`, `op`, `value`) VALUES 
(NULL, &#039;usuario_router&#039;, &#039;Cleartext-Password&#039;, &#039;:=&#039;, &#039;senha_do_usuario&#039;),
(NULL, &#039;usuario_router&#039;, &#039;Service-Type&#039;, &#039;==&#039;, &#039;Login-User&#039;);

INSERT INTO `radreply` (`id`, `username`, `attribute`, `op`, `value`) VALUES
(NULL, &#039;usuario_router&#039;, &#039;Mikrotik-Group&#039;, &#039;:=&#039;, &#039;full&#039;);</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_login_mikrotik.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_login_mikrotik.png" alt="" width="590" height="178" class="alignnone size-full wp-image-4131" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_login_mikrotik.png 590w, https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_login_mikrotik-300x91.png 300w" sizes="auto, (max-width: 590px) 100vw, 590px" /></a></p>
<p>Da para melhorar isso? Claro! Podemos dizer que este usuário só pode ser acessado de um determinado IP, ex.: &#8220;180.255.3.33&#8221;</p>
<pre class="remontti-code">INSERT INTO `radcheck` (`id`, `username`, `attribute`, `op`, `value`) VALUES 
(NULL, &#039;usuario_router&#039;, &#039;Calling-Station-Id&#039;, &#039;==&#039;, &#039;180.255.3.33&#039;);</pre>
<p>Também pode informar que este usuário só poderá acessar somente o IP deste concentrador</p>
<pre class="remontti-code">INSERT INTO `radcheck` (`id`, `username`, `attribute`, `op`, `value`) VALUES 
(NULL, &#039;usuario_router&#039;, &#039;NAS-IP-Address&#039;, &#039;==&#039;, &#039;180.255.1.1&#039;);</pre>
<p>Agora que já aprendemos como deixar nosso login seguro, não podemos esquecer que os o jose@provedor.com ainda consegue logar no seu router, pois ele não tem nenhum outro atributo vinculado, entendeu o perigo? Isso que não chegamos na parte do WPA-EAP, ele poderia ser utilizado lá também.</p>
<p>Bom para nossa segurança vamos incluir os atributos <strong>Service-Type</strong> com valor <strong>Framed-User</strong> e <strong>Framed-Protocol</strong> com valor <strong>PPP</strong></p>
<pre class="remontti-code">INSERT INTO `radcheck` (`id`, `username`, `attribute`, `op`, `value`) VALUES 
(NULL, &#039;jose@provedor.com&#039;, &#039;Service-Type&#039;, &#039;==&#039;, &#039;Framed-User&#039;),
(NULL, &#039;jose@provedor.com&#039;, &#039;Framed-Protocol&#039;, &#039;:=&#039;, &#039;PPP&#039;);
</pre>
<p>E porque não prender nosso usuário ao MAC Adress dele?</p>
<pre class="remontti-code">INSERT INTO `radcheck` (`id`, `username`, `attribute`, `op`, `value`) VALUES 
(NULL, &#039;jose@provedor.com&#039;, &#039;Calling-Station-Id&#039;, &#039;==&#039;, &#039;08:00:00:00:00:B2&#039;);</pre>
<p>Fazendo um SELECT em nossa tabelas temos 4 atributos atrelado ao nosso usuário jose@provedor.com que deixam de certa foma muito mais seguro. Existe ainda o atributo Simultaneous-Use que falarei dele mais a frente.</p>
<pre class="remontti-code-plain">MariaDB [radius]&gt; SELECT * FROM `radcheck` WHERE `username` = &#039;jose@provedor.com&#039;;
+----+-------------------+--------------------+----+-------------------+
| id | username          | attribute          | op | value             |
+----+-------------------+--------------------+----+-------------------+
|  1 | jose@provedor.com | Cleartext-Password | := | senha_do_usuario  |
|  2 | jose@provedor.com | Service-Type       | == | Framed-User       |
|  3 | jose@provedor.com | Framed-Protocol    | := | PPP               |
|  4 | jose@provedor.com | Calling-Station-Id | == | 08:00:00:00:00:B2 |
+----+-------------------+--------------------+----+-------------------+
4 rows in set (0.001 sec)</pre>
<p>Para que nosso controle de banda (queues) também seja configurado através do freeradius, o mikrotik possui uma bliblioteca Mikrotik-Rate-Limit.<br />
Para demonstrar que realmente o jose@provedor.com não irá mais pegar os 50MB do profile irei colocar no valor 100Mb de Donw e 30 de Upload.</p>
<pre class="remontti-code">INSERT INTO `radreply` (`id`, `username`, `attribute`, `op`, `value`) VALUES
(NULL, &#039;jose@provedor.com&#039;, &#039;Mikrotik-Rate-Limit&#039;, &#039;:=&#039;, &#039;30M/100M&#039;);</pre>
<p>Desconecte o usuário jose@provedor.com para que as novas configurações sejam atribuidas:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/queues_radius.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/queues_radius.png" alt="" width="473" height="324" class="alignnone size-full wp-image-4132" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/queues_radius.png 473w, https://blog.remontti.com.br/wp-content/uploads/2020/03/queues_radius-300x205.png 300w" sizes="auto, (max-width: 473px) 100vw, 473px" /></a></p>
<p>E se a velocidade utilizar <strong>Burst</strong>? Exemplo você quer mandar no seu plano de de 10Mb Up/50Mb Down, uma experiencia que por 1 minuto ele tenha o dobro da velocidade.</p>
<pre class="remontti-code">INSERT INTO `radreply` (`id`, `username`, `attribute`, `op`, `value`) VALUES
(NULL, &#039;jose@provedor.com&#039;, &#039;Mikrotik-Rate-Limit&#039;, &#039;:=&#039;, &#039;10M/50M 20M/100M 10M/50M 120/120 0&#039;);</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/queues__burst_radius.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/queues__burst_radius.png" alt="" width="468" height="328" class="alignnone size-full wp-image-4133" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/queues__burst_radius.png 468w, https://blog.remontti.com.br/wp-content/uploads/2020/03/queues__burst_radius-300x210.png 300w" sizes="auto, (max-width: 468px) 100vw, 468px" /></a></p>
<pre class="remontti-code">INSERT INTO `radreply` (`id`, `username`, `attribute`, `op`, `value`) VALUES
(NULL, &#039;jose@provedor.com&#039;, &#039;Framed-IP-Address&#039;, &#039;:=&#039;, &#039;180.255.0.150&#039;);</pre>
<p>Infelizmente o Mikrotik ainda não compreende o atributo <strong>Delegated-IPv6-Prefix</strong> (IPv6PD da LAN do cliente), no <a href="https://forum.mikrotik.com/viewtopic.php?t=89443" rel="noopener noreferrer" target="_blank">forum</a> foram proposto algumas gambiarras pela própria mikrotik como criando script para deixar estatico os IPv6s (gambiarra que na maoria das vezes nada da certo dependendo do modelo do router) no entanto ele aceita os atributo <strong>Framed-IPv6-Prefix</strong> (IPv6 WAN) e o <strong>Mikrotik-Delegated-IPv6-Pool</strong> com o nome do da Pool que foi criada manualmente lá no seu router.</p>
<pre class="remontti-code">INSERT INTO `radreply` (`id`, `username`, `attribute`, `op`, `value`) VALUES
-- IPv6 WAN --
(NULL, &#039;jose@provedor.com&#039;, &#039;Framed-IPv6-Prefix&#039;, &#039;:=&#039;, &#039;2001:db8:A:B::/64&#039;),
-- IPv6PD LAN Nome da Pool --
(NULL, &#039;jose@provedor.com&#039;, &#039;Mikrotik-Delegated-IPv6-Pool&#039;, &#039;=&#039;, &#039;nome_da_pool6&#039;);</pre>
<p>Lembrando q Delegated-IPv6-Prefix não funciona no Mikrotik (hj), oremos para que um dia seja implementado <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ficaria assim:</p>
<pre class="remontti-code">INSERT INTO `radreply` (`id`, `username`, `attribute`, `op`, `value`) VALUES
(NULL, &#039;jose@provedor.com&#039;, &#039;Delegated-IPv6-Prefix&#039;, &#039;=&#039;, &#039;2001:db8:C::/56&#039;);</pre>
<p>Se você deseja saber mais acesse o tutorial:<br />
<a href="https://blog.remontti.com.br/3931" rel="noopener noreferrer" target="_blank">Como entregar IPv6+IPv4 no Mikrotik/RouterOS através de PPPoE/DHCPv6 PD e registrando os logs em um banco de dados</a></p>
<p><strong>Entregando os DNS pelo radius</strong>, lembra que em nosso profile configuramos para entregar 8.8.8.8 e 8.8.4.4? Vamos entregar agora ao usuário jose@provedor.com os DNS 1.1.1.1 e 9.9.9.9, para isso adicione a tabela radreply os atributos <strong>MS-Primary-DNS-Server</strong> e <strong>MS-Secondary-DNS-Server</strong>.</p>
<pre class="remontti-code">INSERT INTO `radreply` (`id`, `username`, `attribute`, `op`, `value`) VALUES
(NULL, &#039;jose@provedor.com&#039;, &#039;MS-Primary-DNS-Server&#039;, &#039;:=&#039;, &#039;1.1.1.1&#039;),
(NULL, &#039;jose@provedor.com&#039;, &#039;MS-Secondary-DNS-Server&#039;, &#039;:=&#039;, &#039;9.9.9.9&#039;);</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_pppoe_cliente_dns.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_pppoe_cliente_dns.png" alt="" width="837" height="469" class="alignnone size-full wp-image-4134" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_pppoe_cliente_dns.png 837w, https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_pppoe_cliente_dns-300x168.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_pppoe_cliente_dns-768x430.png 768w" sizes="auto, (max-width: 837px) 100vw, 837px" /></a></p>
<p>Fazendo um SELECT na tabelas radreply temos 4 atributos vinculados a configurações que serão entregue ao usuário jose@provedor.com.</p>
<pre class="remontti-code-plain">MariaDB [radius]&gt; SELECT * FROM `radreply` WHERE `username` = &#039;jose@provedor.com&#039;;
+----+-------------------+-------------------------+----+----------------------------------+
| id | username          | attribute               | op | value                            |
+----+-------------------+-------------------------+----+----------------------------------+
|  3 | jose@provedor.com | Mikrotik-Rate-Limit     | := | 10M/50M 20M/100M 10M/50M 120/120 |
|  6 | jose@provedor.com | MS-Primary-DNS-Server   | := | 1.1.1.1                          |
|  7 | jose@provedor.com | MS-Secondary-DNS-Server | := | 9.9.9.9                          |
|  8 | jose@provedor.com | Framed-IP-Address       | := | 180.255.0.150                    |
+----+-------------------+-------------------------+----+----------------------------------+
4 rows in set (0.001 sec)</pre>
<p>Podemos dispensar as configurações feita no profile já que o controle de banda e DNS são entregues pelo radius? Sim, porém  eu particularmente deixo os DNS como uma especie de &#8220;failover&#8221; caso não seja informado, apesar que no caso do Mikrotik se o DNS não estiver informado no Profile ele irá usar o DNS do router (/ip dns). Normalmente no concentrador PPPoE eu tenho apenas um profile qual é usado para todos PPPoE Servers onde altero o Rate Limit (rx/tx) para uma velocidade extremamente baixa (100k/100k), pois assim se algum usuário autenticar e não receber as configurações de banda do radius ele estará autenticando com velocidade ilimitada.</p>
<pre class="remontti-code"># No seu RouteOS
/ppp profile set Profile50M rate-limit=100k/100k</pre>
<p><strong>Iremos ver agora como buscar nosso IPv4 através da pool do radius, tabela <strong>radippool</strong></strong><br />
Vamos inserir apenas 3 entradas para demonstrar sendo 3 de IPs Validos e 3 para bloqueios. No seu caso você irá inserir todos seus IPs um a um.</p>
<pre class="remontti-code">INSERT INTO `radippool` 
(`pool_name`, `framedipaddress`, `calledstationid`, `callingstationid`, `username`, `pool_key`) VALUES
(&#039;pool_valido&#039;, &#039;180.255.3.128&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;0&#039;),
(&#039;pool_valido&#039;, &#039;180.255.3.129&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;0&#039;),
(&#039;pool_valido&#039;, &#039;180.255.3.130&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;0&#039;),
(&#039;pool_bloq&#039;,&#039;100.127.0.0&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;0&#039;),
(&#039;pool_bloq&#039;,&#039;100.127.0.1&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;0&#039;),
(&#039;pool_bloq&#039;,&#039;100.127.0.2&#039;,&#039;&#039;,&#039;&#039;,&#039;&#039;,&#039;0&#039;);</pre>
<p>Agora para testarmos vamos remover primeiro o IP 180.255.0.150 que setamos para o usuário jose@provedor.com anteriormente, pois se você utilizar o atributo Framed-IP-Address ele terá prioridade a pool. </p>
<pre class="remontti-code">DELETE FROM `radreply` WHERE `username` LIKE &#039;jose@provedor.com&#039; AND `attribute` LIKE &#039;Framed-IP-Address&#039;</pre>
<p>Para entregar ao usuário jose@provedor.com a pool_valido utilizaremos o atributo <strong>Pool-Name</strong></p>
<pre class="remontti-code">INSERT INTO `radcheck` (`id`, `username`, `attribute`, `op`, `value`) VALUES 
(NULL, &#039;jose@provedor.com&#039;, &#039;Pool-Name&#039;, &#039;:=&#039;, &#039;pool_valido&#039;);</pre>
<p>Desconectamos nosso usuário para ver qual IP ele vai receber.</p>
<p>RouterOS</p>
<pre class="remontti-code-plain">[usuario_router@PPP-SERVER-LAB] &gt; ppp active print
Flags: R - radius
 #   NAME         SERVICE CALLER-ID         ADDRESS         UPTIME   ENCODING 
 0 R jose@prov... pppoe   08:00:00:00:00:B2 45.250.3.129    7m51s</pre>
<p>Radius</p>
<pre class="remontti-code-plain">MariaDB [radius]&gt; SELECT pool_name,framedipaddress,username,pool_key FROM `radippool`;
+-------------+-----------------+-------------------+-------------------+
| pool_name   | framedipaddress | username          | pool_key          |
+-------------+-----------------+-------------------+-------------------+
| pool_valido | 45.250.3.128    |                   | 0                 |
| pool_valido | 45.250.3.129    | jose@provedor.com | 08:00:00:00:00:B2 |
| pool_valido | 45.250.3.130    |                   | 0                 |
| pool_bloq   | 100.127.0.0     |                   | 0                 |
| pool_bloq   | 100.127.0.1     |                   | 0                 |
| pool_bloq   | 100.127.0.2     |                   | 0                 |
+-------------+-----------------+-------------------+-------------------+</pre>
<p>Podemos ver que o usuário jose@provedor.com recebeu o IP 45.250.3.129. Lembrando que esse endereço IP é entregue randomicamente, configurado lá no tutorial: <a href="https://blog.remontti.com.br/4063" rel="noopener noreferrer" target="_blank">Criando um servidor de autenticação com FreeRadius 3.0.x no Debian Buster</a><br />
Se você quiser bloquear o cliente basta alterar sua Pool-Name para pool_bloq. </p>
<p>Talvez você esteja pensando: <em>&#8220;Putz mas para cada usuário vai ter vários inserts!&#8221;</em>. E é por isso que as tabelas <strong>radgroupcheck</strong> , <strong>radgroupreply</strong> e <strong>radusergroup</strong> existem para simplificar. É nela então que vamos criar nossos &#8220;planos&#8221;, onde podemos agrupar os atributos Service-Type, Framed-Protocol, Mikrotik-Rate-Limit, MS-Primary-DNS-Server e MS-Secondary-DNS-Server assim não sendo mais necessário informar para cada usuário.</p>
<p>Vamos então criar nosso <strong>Plano 10MB</strong>. Teremos um novo atributo que acho importante o uso, o <strong>Acct-Interim-Interval</strong>, ele se &#8220;equivale&#8221; ao interim-update=5m lá do mikrotik &#8220;/ppp aaa&#8221;, isso fará que se o mikrotik não atualizar os valores o freeradius solicite, em uma tradução simples é o tempo em que a tabela radacct é atualizada.</p>
<pre class="remontti-code">INSERT INTO `radgroupcheck` (`groupname`, `attribute`, `op`, `value`) VALUES
(&#039;PLANO_10MB&#039;, &#039;Service-Type&#039;, &#039;==&#039;, &#039;Framed-User&#039;),
(&#039;PLANO_10MB&#039;, &#039;Framed-Protocol&#039;, &#039;:=&#039;, &#039;PPP&#039;),
(&#039;PLANO_10MB&#039;, &#039;Pool-Name&#039;, &#039;:=&#039;, &#039;pool_valido&#039;);

INSERT INTO `radgroupreply` (`groupname`, `attribute`, `op`, `value`) VALUES
(&#039;PLANO_10MB&#039;, &#039;Acct-Interim-Interval&#039;, &#039;:=&#039;, &#039;300&#039;),
(&#039;PLANO_10MB&#039;, &#039;Mikrotik-Rate-Limit&#039;, &#039;:=&#039;, &#039;5M/10M&#039;),
(&#039;PLANO_10MB&#039;, &#039;MS-Primary-DNS-Server&#039;, &#039;:=&#039;, &#039;9.9.9.9&#039;),
(&#039;PLANO_10MB&#039;, &#039;MS-Secondary-DNS-Server&#039;, &#039;:=&#039;, &#039;149.112.112.112&#039;);</pre>
<p>Aproveitando irei criar um Plano de bloqueio.</p>
<pre class="remontti-code">INSERT INTO `radgroupcheck` (`groupname`, `attribute`, `op`, `value`) VALUES
(&#039;BLOQUEADO&#039;, &#039;Service-Type&#039;, &#039;==&#039;, &#039;Framed-User&#039;),
(&#039;BLOQUEADO&#039;, &#039;Framed-Protocol&#039;, &#039;:=&#039;, &#039;PPP&#039;),
(&#039;BLOQUEADO&#039;, &#039;Pool-Name&#039;, &#039;:=&#039;, &#039;pool_bloq&#039;);

INSERT INTO `radgroupreply` (`groupname`, `attribute`, `op`, `value`) VALUES
(&#039;BLOQUEADO&#039;, &#039;Acct-Interim-Interval&#039;, &#039;:=&#039;, &#039;300&#039;),
(&#039;BLOQUEADO&#039;, &#039;Mikrotik-Rate-Limit&#039;, &#039;:=&#039;, &#039;666k/666k&#039;),
(&#039;BLOQUEADO&#039;, &#039;MS-Primary-DNS-Server&#039;, &#039;:=&#039;, &#039;8.8.8.8&#039;),
(&#039;BLOQUEADO&#039;, &#039;MS-Secondary-DNS-Server&#039;, &#039;:=&#039;, &#039;8.8.4.4&#039;);</pre>
<p>Para melhor entendimento e simplificar vamos apagar do usuário jose@provedor.com das tabelas radcheck e radreply.</p>
<pre class="remontti-code">DELETE FROM `radcheck` WHERE `username` LIKE &#039;jose@provedor.com&#039;;
DELETE FROM `radreply` WHERE `username` LIKE &#039;jose@provedor.com&#039;;</pre>
<p>Logo nossa radcheck precisa se preocupar com apenas de dois atributos Cleartext-Password (usuário vs senha) e Calling-Station-Id (usuário vs MAC), adicionamos então:</p>
<pre class="remontti-code">INSERT INTO `radcheck` (`username`, `attribute`, `op`, `value`) VALUES
(&#039;jose@provedor.com&#039;, &#039;Cleartext-Password&#039;, &#039;:=&#039;, &#039;senha_do_usuario&#039;),
(&#039;jose@provedor.com&#039;, &#039;Calling-Station-Id&#039;, &#039;==&#039;, &#039;08:00:00:00:00:B2&#039;);</pre>
<p>Se nesse momento o usuário conectar ele estaria sem um grupo e as configurações que estaria recebendo seriam as do profile do mikrotik (IP/DNS/Velocidade). Como fazer? Simples, você irá usar a tabela radusergroup onde você irá inserir o nome do usuário e qual o nome do grupo ele pertence. Muito mais simples não?!</p>
<pre class="remontti-code">INSERT INTO `radusergroup` (`username`, `groupname`) VALUES 
(&#039;jose@provedor.com&#039;, &#039;PLANO_10MB&#039;);</pre>
<p>Desconecte o usuário e verifique se o mesmo irá receber as novas configurações com base em grupos.<br />
PPPoE Server: IP Randômico [OK] / Controle de Banda [OK]<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mikrotik_pppoe_server.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mikrotik_pppoe_server.png" alt="" width="621" height="235" class="alignnone size-full wp-image-4144" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mikrotik_pppoe_server.png 621w, https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mikrotik_pppoe_server-300x114.png 300w" sizes="auto, (max-width: 621px) 100vw, 621px" /></a></p>
<p>PPPoE Cliente: IP [OK] / DNS [OK]<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mikrotik_pppoe_client.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mikrotik_pppoe_client.png" alt="" width="545" height="416" class="alignnone size-full wp-image-4145" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mikrotik_pppoe_client.png 545w, https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mikrotik_pppoe_client-300x229.png 300w" sizes="auto, (max-width: 545px) 100vw, 545px" /></a></p>
<p>Agora para bloquear o usuário basta fazer um <strong>UPDATE</strong>  trocando o plano do usuário para <strong>BLOQUEADO</strong>.</p>
<pre class="remontti-code">UPDATE `radusergroup` SET `groupname` = &#039;BLOQUEADO&#039; WHERE `username` LIKE &#039;jose@provedor.com&#039;;</pre>
<p>Desconectamos novamente e verificamos as configurações recebidas.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mk_bloqueio_server.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mk_bloqueio_server.png" alt="" width="607" height="235" class="alignnone size-full wp-image-4147" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mk_bloqueio_server.png 607w, https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mk_bloqueio_server-300x116.png 300w" sizes="auto, (max-width: 607px) 100vw, 607px" /></a></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mk_bloqueio_cliente.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mk_bloqueio_cliente.png" alt="" width="534" height="417" class="alignnone size-full wp-image-4146" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mk_bloqueio_cliente.png 534w, https://blog.remontti.com.br/wp-content/uploads/2020/03/radius_mk_bloqueio_cliente-300x234.png 300w" sizes="auto, (max-width: 534px) 100vw, 534px" /></a></p>
<p>Podemos ver que nossas regras estão funcionado. Vale lembrar que se for bloquear um usuário qual esteja com o atributo <strong>Framed-IP-Address</strong> onde você setou um IP fixo para o mesmo será necessário remover, caso contrario o cliente não irá receber o IP da faixa bloqueada.</p>
<p>Qualquer atributo que você queira que sobrescreva a radusergroup basta adicionar diretamente nas tabelas, como é o exemplo do IP fixo, vamos supor que um determinado usuário queira receber um DNS personalizado, basta adicionar o usuário dele na radreply.</p>
<p>Vamos ver como estão nossas tabelas até o momento:</p>
<pre class="remontti-code-plain">MariaDB [radius]&gt; SELECT * FROM `radgroupcheck`;
+----+------------+-----------------+----+-------------+
| id | groupname  | attribute       | op | value       |
+----+------------+-----------------+----+-------------+
|  1 | PLANO_10MB | Service-Type    | == | Framed-User |
|  2 | PLANO_10MB | Framed-Protocol | := | PPP         |
|  3 | PLANO_10MB | Pool-Name       | := | pool_valido |
|  4 | BLOQUEADO  | Service-Type    | == | Framed-User |
|  5 | BLOQUEADO  | Framed-Protocol | := | PPP         |
|  6 | BLOQUEADO  | Pool-Name       | := | pool_bloq   |
+----+------------+-----------------+----+-------------+
6 rows in set (0.000 sec)

MariaDB [radius]&gt; SELECT * FROM `radgroupreply`;
+----+------------+-------------------------+----+-----------------+
| id | groupname  | attribute               | op | value           |
+----+------------+-------------------------+----+-----------------+
|  1 | PLANO_10MB | Acct-Interim-Interval   | := | 300             |
|  2 | PLANO_10MB | Mikrotik-Rate-Limit     | := | 5M/10M          |
|  3 | PLANO_10MB | MS-Primary-DNS-Server   | := | 9.9.9.9         |
|  4 | PLANO_10MB | MS-Secondary-DNS-Server | := | 149.112.112.112 |
|  5 | BLOQUEADO  | Acct-Interim-Interval   | := | 300             |
|  6 | BLOQUEADO  | Mikrotik-Rate-Limit     | := | 666k/666k       |
|  7 | BLOQUEADO  | MS-Primary-DNS-Server   | := | 8.8.8.8         |
|  8 | BLOQUEADO  | MS-Secondary-DNS-Server | := | 8.8.4.4         |
+----+------------+-------------------------+----+-----------------+
8 rows in set (0.000 sec)

MariaDB [radius]&gt; SELECT * FROM `radcheck` WHERE `username` = &#039;jose@provedor.com&#039;;
+----+-------------------+--------------------+----+-------------------+
| id | username          | attribute          | op | value             |
+----+-------------------+--------------------+----+-------------------+
| 15 | jose@provedor.com | Cleartext-Password | := | senha_do_usuario  |
| 16 | jose@provedor.com | Calling-Station-Id | == | 08:00:00:00:00:B2 |
+----+-------------------+--------------------+----+-------------------+
2 rows in set (0.000 sec)

MariaDB [radius]&gt; SELECT * FROM `radusergroup`;
+----+-------------------+-----------+----------+
| id | username          | groupname | priority |
+----+-------------------+-----------+----------+
|  1 | jose@provedor.com | BLOQUEADO |        1 |
+----+-------------------+-----------+----------+
1 row in set (0.000 sec)</pre>
<h3>Simultaneous-Use</h3>
<p>Existe um atributo chamado <strong>Simultaneous-Use</strong> qual você pode limitar o número de vezes que aquele usuário pode autenticar, aplicando na radgroupcheck ficaria: </p>
<pre class="remontti-code">INSERT INTO `radgroupcheck` (`groupname`, `attribute`, `op`, `value`) VALUES
(&#039;PLANO_X&#039;, &#039;Simultaneous-Use&#039;, &#039;:=&#039;, &#039;1&#039;);</pre>
<p>Porém para funcionar o Simultaneous-Use é necessário ajustes em dois arquivos:<br />
 &#8211; /etc/freeradius/3.0/sites-enabled/inner-tunnel<br />
 &#8211; /etc/freeradius/3.0/sites-enabled/default<br />
Incluindo dentro de <strong>session</strong> o valor <strong>radutmp</strong></p>
<pre class="remontti-code-plain">session { 
    radutmp
    sql
}</pre>
<p>Mas <strong>é extremamente importante você saber</strong> que qualquer falha de comunicação entre o roteador e o servidor a conexão ira ficar &#8220;<strong>pendurada</strong>&#8220;, como vimos na radacct todas as conexões são registradas lá, logo quando um cliente está conectado o campo de stop ainda não foi atualizado, então imagine que seu router sofreu uma falha elétrica e desligou, logo nenhuma informação será enviada para o servidor deixando todas as conexões em aberta, ao iniciar novamente o roteador todos usuários não irão conseguir logar, pois já existe uma conexão. Resumindo se você não estiver preparado para esse tipo de situação é melhor não utiliza-lo. Eu costumo deixar no pppoe server a opção <strong>one-session-per-host=yes</strong> assim apenas um login pode acessar (que vai fazer a mesma coisa) o ponto negativo é que em distintos concentradores seria possível logar. Mas se você é um cara inteligente você facilmente monta um script para verificar se o existe por exemplo dois usuários iguais na <strong>radippool</strong> vindo de diferentes <strong>nasipaddress</strong> e podendo executar uma ação, ex envia um alerta de gatonet <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<h3>radippool Duplicando IPs</h3>
<p>Um outro ponto frequente que me perguntam é sobre a <strong>radippool e o problema com duplicidades de IPs</strong>. Sim existia alguns problemas em versões mais antigas. Como no caso de uma falha elétrica ou um rompimento irá causar falha de comunicação entre servidor e concentrador. Após a versão 3.0.16 o freeradius teve alguma melhorias. Na radippool existe um campo chamado <strong>expiry_time</strong> que por padrão é de <strong>1 hora</strong>.</p>
<p>Lembra que configuramos o <strong>interim-update</strong> no mikrotik e <strong>Acct-Interim-Interval</strong> na tabela radgroupreply qual montamos o &#8220;plano&#8221; com valores de 5 minutos? Logo o valor de expiry_time sempre será atualizado a cada 5 min (acrecentando o valor do lease_duration)  e o prazo de expiração passará ser de +1h, porém se a falta de comunicação for por um curto tempo inferior à 1h e o mesmo usuário reautenticar ele vai manter o IP antigo pois ele ainda não expirou, e o usuário vai receber um novo IP, então o IP antigo só irá sair da tabela na próxima vez que o usuário autenticar e o prazo for maior que 1h, sabemos que uma nova autenticação pode até levar dias para acontecer novamente, e quando der um problema normalmente são muitos usuários, e com isso nossa tabelas de ips acabará facilmente ficando sem IPs livres na pool. </p>
<p>Oque fazer então? Este tempo pode ser ajustado no arquivo /etc/freeradius/3.0/mods-available/sqlippool na variável <strong>lease_duration = 3600</strong>, eu irei alterar para 10 min, assim será dificil algum usuário autenticar sem remover seu antigo IP alocado. Mas você pode ajustar de acordo com suas necessidades/realidade. </p>
<pre class="remontti-code"># sed -i &#039;s/lease_duration = 3600/lease_duration = 600/&#039; /etc/freeradius/3.0/mods-available/sqlippool
# systemctl restart freeradius</pre>
<p>Algo que você pode criar é uma rotina com um script de sua linguagem preferia, fazendo um simples select na radippool e verifica se existe dois usuários, e tomando uma ação.</p>
<p>Porém é interessante você ajustar as querys em <strong>/etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</strong> Eu levei um bom tempo para deixar isso funcionando de forma que não tivesse mais dor de cabeça, (não irei compartilhar pois é algo que é bem para minha realidade, mais pode me chama no telegram @remontti)</p>
<p>Uma solução simples que encontrei para resolver isso no passado foi criar um script executado a cada 5 min no concentrador PPPoE, onde ele verifica se a conexão com o IP do servidor freeradius está respondendo, e caso não responda ele desative/ative os pppoe-servers fazendo com que os clientes desconectem <em>(Na minha situação quando o concentrador não tem comunicação com o freeradius o cliente também não tem)</em> assim quando estabilizar a comunicação todos irão reautenticar novamente. Tenho isso até hoje, confesso que me sinto mais confortável, caso deseje saber como ele é segue o script:</p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/script_radius.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/script_radius.png" alt="" width="526" height="587" class="alignnone size-full wp-image-4150" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/script_radius.png 526w, https://blog.remontti.com.br/wp-content/uploads/2020/03/script_radius-269x300.png 269w" sizes="auto, (max-width: 526px) 100vw, 526px" /></a></p>
<p>Altere 180.255.0.3 para o IP do seu servidor Freeradius. O script vai disparar 10 ping e caso não responde ele irá então desativar e ativar todos os pppoe-server. Lembre-se de não pode nenhum firewall bloqueando ICMP.</p>
<pre class="remontti-code">/system scheduler
add interval=5m name=checa-radius on-event=&quot;{ \r\
    \n  :local cont 0\r\
    \n  :local services [/interface pppoe-server server print count-only]\r\
    \n  /interface pppoe-server server print\r\
    \n  :if ([/ping 180.255.0.3 count=10] = 0) do={\r\
    \n    :log error message=\&quot;COMUNICACAO RADIUS [ OFF ]\&quot;;\r\
    \n    :while (\$cont &lt; \$services) do={\r\
    \n      /interface pppoe-server server disable numbers=\$cont\r\
    \n      /interface pppoe-server server enable numbers=\$cont\r\
    \n      :set cont (\$cont+1)\r\
    \n    }\r\
    \n  }\r\
    \n}&quot; policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup</pre>
<pre class="remontti-code-plain">{ 
  :local cont 0
  :local services [/interface pppoe-server server print count-only]
  /interface pppoe-server server print
  :if ([/ping 180.255.0.3 count=10] = 0) do={
    :log error message=&quot;COMUNICACAO RADIUS [ OFF ]&quot;;
    :while ($cont &lt; $services) do={
      /interface pppoe-server server disable numbers=$cont
      /interface pppoe-server server enable numbers=$cont
      :set cont ($cont+1)
    }
  }
}</pre>
<h3>Personalizando a alocação dos IPS para escolher uma Pool padrão quando esgotar uma Pool-Name. `Opcional`</h3>
<p>Ao término de uma pools na maioria dos casos (provedores) subentender-se que acabou os IPs válidos e será necessários entregar IPs inválidos para fazer o CGNAT. Então porque não ajustar o <strong>allocate_find</strong> para que se caso uma Pool-Name não contenha mais IPs disponível ela lhe entregar os de uma nova Pool? Bom vale lembrar para nunca deixar a pool de bloqueio/aviso/etc faltar IPs pois se isso acontecer o cliente vai receber um IP de CGNAT. Eu particularmente gosto assim, quanto menos informação no roteador mais controle se tem.</p>
<p>Se desejar fazer isso vamos editar o /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf.</p>
<pre class="remontti-code"># vim /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</pre>
<p>Comentando as linhas atuais da variável <strong>allocate_find</strong>:</p>
<pre class="remontti-code">##allocate_find = &quot;\
##        SELECT framedipaddress FROM ${ippool_table} \
##        WHERE pool_name = &#039;%{control:Pool-Name}&#039; \
##        AND expiry_time IS NULL \
##        ORDER BY \
##                RAND() \
##        LIMIT 1 \
##        FOR UPDATE&quot;</pre>
<p>E adicionando as seguintes: (Perceba que o nome da pool alternativa/failover/backup é <strong>pool_cgnat</strong>)</p>
<pre class="remontti-code">allocate_find = &quot;\
    SELECT framedipaddress FROM ${ippool_table} \
    WHERE ( \
    CASE WHEN (SELECT COUNT(framedipaddress) FROM ${ippool_table} WHERE pool_name = &#039;%{control:Pool-Name}&#039; AND expiry_time IS NULL LIMIT 1) &gt; 0 THEN \
    (pool_name = &#039;%{control:Pool-Name}&#039; AND expiry_time IS NULL) \
    ELSE \
    (pool_name = &#039;pool_cgnat&#039; AND expiry_time IS NULL) \
    END) \
    ORDER BY RAND() \
    LIMIT 1 \
    FOR UPDATE&quot;
</pre>
<p>Lembre-se que toda a ateração nos arquivos de configurações é necessário reiniciar o serviço.</p>
<pre class="remontti-code"># systemctl restart freeradius</pre>
<p>Você vai precisar adicionar agora todos seus IPs de CGNAT (<a rel="noopener noreferrer" target="_blank" href="https://blog.remontti.com.br/wp-content/uploads/2020/03/radippool_cgnat.sql_.txt">cgnat.sql</a>) ex.:</p>
<pre class="remontti-code">INSERT INTO `radippool` 
(`pool_name`, `framedipaddress`, `nasipaddress`, `calledstationid`, `callingstationid`, `expiry_time`, `username`, `pool_key`) VALUES
(&#039;pool_cgnat&#039;, &#039;100.64.0.0&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, NULL, &#039;&#039;, &#039;0&#039;),
(&#039;pool_cgnat&#039;, &#039;100.64.0.1&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, NULL, &#039;&#039;, &#039;0&#039;),
(&#039;pool_cgnat&#039;, &#039;100.64.0.2&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, NULL, &#039;&#039;, &#039;0&#039;),
(&#039;pool_cgnat&#039;, &#039;100.64.0.3&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, NULL, &#039;&#039;, &#039;0&#039;);</pre>
<p>Agora em seu laboratório você pode deixar apenas 1 IP válido e autenticar mais usuários para ver se a regra funcionou.</p>
<h3> Autenticação Wireless</h3>
<p>Conheço muitos provedores que tem apenas uma senha para todos seus POPs, ou uma diferente para cada, mas são fixas e isso é muito perigoso!!!<br />
Vamos pensar agora só pelas piores possibilidades OK? Imagine um funcionário seu que saiu da sua empresa sabendo a senha de todas as setoriais de suas torres. Imaginou? Você pode até me dizer: "-Grande coisa ele não vai saber meus usuários e senhas dos PPPoE." Realmente ele pode não saber (mas eu nem estou preocupado com isso, pois eu prendo usuário ao MAC, agora se seu sistema não faz isso pode brotar uns gatinhos ai na rede) mas o que realmente me preocupa é o fato das "malvadezas" que podem serem feitas, vamos para primeira? Pego um NanoStation e conecto em sua setorial (para piorar essa setorial esta em bridge com mais alguma coisa... quem sabe com toda a rede?), agora que estou "dentro" da rede posso criar um pppoe-server e autenticar todas as solicitações (é só configurar para ignorar as senhas) toda vez q um um cliente solicita uma conexão um pacote broadcast é enviado na rede e quem responde primeiro ganha, posso ainda gerar um alto trafego (DDoS) bagunçar. Ai você me diz: "-Mas aqui na minha cidade o pessoal nem sabe fazer isso." Realmente, mas se esse infeliz agora pegar e conectar outro NanoStation e interligar um NanoStation no outro? Precisa ser inteligente para fazer isso? (Putz posso estar dando idéias, não faça isso com seu concorrente)  Um loop esta feito, e toda essa rede vai parar de funcionar. (Conheco uma galera que usa ONUs na sua rede GPON em brid e esquece isso da para fazer também)... Parei se não vou acabar ser acusado, mas o que quero alertar é que existe uma infinidade de possibilidades ao deixar uma pessoa maliciosa conectar em sua rede.</p>
<h3>WPA-PSK</h3>
<p>É por isso que uma autenticação com o radius para sua rede wireless é o melhor caminho. Como isso funciona? Para cada dispositivo/antena que for conectar você terá uma <strong>senha exclusiva</strong> só para ela, vou começar explicando como fazer isso com senhas PSK com o atributo <strong>Mikrotik-Wireless-PSK</strong> da Mikrotik.</p>
<p>Com base no nosso diagrama da rede vamos ver como seria para autenticar o usuário joao@provedor.com, primeiramente vamos configurar nosso AP-Mikrotik.</p>
<p>Crie um novo profile de segurança</p>
<pre class="remontti-code">/interface wireless security-profiles 
add name=WPA2-PSK-Radius \
    mode=dynamic-keys management-protection=allowed \
    authentication-types=wpa2-psk radius-called-format=ssid \
    radius-mac-authentication=yes \
    wpa2-pre-shared-key=dZluej6SCdcFvRWd</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/psk-mk-radius.jpeg" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/psk-mk-radius.jpeg" alt="" width="870" height="429" class="alignnone size-full wp-image-4188" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/psk-mk-radius.jpeg 870w, https://blog.remontti.com.br/wp-content/uploads/2020/03/psk-mk-radius-300x148.jpeg 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/psk-mk-radius-768x379.jpeg 768w" sizes="auto, (max-width: 870px) 100vw, 870px" /></a></p>
<p>Configurando a interface wireless "<strong>wlan1</strong>" setamos o <strong>security-profile</strong> para <strong>WPA2-PSK-Radius</strong> que acabamos de criar e darei o nome do sinal (ssid) de <strong>SSID-PSK-Radius</strong>.</p>
<pre class="remontti-code">/interface wireless
set [ find default-name=wlan1 ] \
    disabled=no mode=ap-bridge \
    security-profile=WPA2-PSK-Radius \
    ssid=SSID-PSK-Radius</pre>
<p>Fizemos a nossa conexão com o radius, informando que vamos usar neste caso apenas o serviço wireless.</p>
<pre class="remontti-code">/radius
add address=180.255.0.3 secret=SEU_SECRET service=wireless</pre>
<p>Não esqueça que sempre que adicionar um novo autenticador ao seu servidor é necessário que o mesmo seja adicionado a tabela NAS e restartado o freeradius, ex:</p>
<pre class="remontti-code">INSERT INTO `nas` (`nasname`, `shortname`, `type`, `ports`, `secret`, `server`, `community`, `description`) VALUES
(&#039;10.1.0.4&#039;, &#039;MK-AP-C&#039;, &#039;other&#039;, NULL, &#039;SEU_SECRET&#039;, NULL, NULL, &#039;SSID-PSK-Radius&#039;);</pre>
<pre class="remontti-code"># systemctl restart freeradius</pre>
<p>Para você que está estudando é sempre deixar o radius parado e rado-lo em modo debug com o comando `freeradius -X` e observar tudo que rola. Para minha bancada estou usando um mikrotik hAp e vou tentar conectar meu celular, sem cadastrar nada no radius ainda, logo em algumas linhas veremos o seguinte:</p>
<pre class="remontti-code-plain">(16)   Service-Type = Framed-User
(16)   NAS-Port-Id = &quot;wlan1&quot;
(16)   NAS-Port-Type = Wireless-802.11
(16)   User-Name = &quot;44:45:4D:45:4B:4D&quot;
(16)   Calling-Station-Id = &quot;44-45-4D-45-4B-4D&quot;
(16)   Called-Station-Id = &quot;SSID-PSK-Radius&quot;
(16)   User-Password = &quot;&quot;
(16)   NAS-Identifier = &quot;MikroTik&quot;
(16)   NAS-IP-Address = 10.1.0.4</pre>
<p>Podemos observar que chegaram informações como o nome da interface wireless <strong>NAS-Port-Id = "wlan1"</strong>, o tipo da autenticação <strong>NAS-Port-Type = Wireless-802.11</strong>, o mac do dispositivo <strong>User-Name = "44:45:4D:45:4B:4D"</strong>, o nome do sinal <strong>Called-Station-Id = "SSID-PSK-Radius"</strong>, o nome da router (system -> identity) <strong>NAS-Identifier = "MikroTik"</strong>, e o IP <strong>NAS-IP-Address = 10.1.0.4</strong>.</p>
<p>Com base nessas informações vamos alimentar nossa base de dados, e é claro que pensando na segurança! Lembra criar usuário sem prender ele a outros atributos é um perigo!</p>
<p>Primeiro atributo então é os Mikrotik-Wireless-PSK que vamos gravar na radreply, logo nosso usuário será nosso MAC. (Estou usando o <strong>MAC Format</strong> lá do profile separado por dois pontos, mas se necessário para sua aplicação existe outros formatos `"XX XX XX XX XX XX"  XX-XX-XX-XX-XX-XX  XX:XX:XX:XX:XX:XX  XXXX:XXXX:XXXX  XXXXXX-XXXXXX  XXXXXX:XXXXXX  XXXXXXXXXXXX`)</p>
<pre class="remontti-code">INSERT INTO `radreply` (`username`, `attribute`, `op`, `value`) VALUES
(&#039;44:45:4D:45:4B:4D&#039;, &#039;Mikrotik-Wireless-PSK&#039;, &#039;:=&#039;, &#039;3ZKEG5mMq0ZRSUQy&#039;); </pre>
<p>Na radcheck vamos então primeiro autorizar a autenticação Auth-Type (Se só gravar isso na tabela seria um perigo pois você esta autorizando esse MAC que é um usuário a autenticar mesmo sem senha) e é por isso que vamos definir que NAS-Port-Type vai ser Wireless-802.11m assim esse user só pode autenticar vindo de uma conexão wireless, e por ultimo você também pode informar que ele só irá poder conectar no SSID com nome <em>"SSID-PSK-Radius"</em>.</p>
<pre class="remontti-code">INSERT INTO `radcheck` (`username`, `attribute`, `op`, `value`) VALUES
(&#039;44:45:4D:45:4B:4D&#039;, &#039;Auth-Type&#039;, &#039;:=&#039;, &#039;Accept&#039;),
(&#039;44:45:4D:45:4B:4D&#039;, &#039;NAS-Port-Type&#039;, &#039;==&#039;, &#039;Wireless-802.11&#039;),
(&#039;44:45:4D:45:4B:4D&#039;, &#039;Called-Station-Id&#039;, &#039;==&#039;, &#039;SSID-PSK-Radius&#039;);</pre>
<p>Seria ainda possível prender ao Identity (NAS-Identifier) do MK, bem como o IP dele (NAS-IP-Address), mas eu acho mais complicado, mas é possível! Caso você queira que o cliente consiga se conectar em qualquer sinal basta não gravar o atributo Called-Station-Id.</p>
<h3>WPA-EAP</h3>
<p>No mikrotik:<br />
Crie um novo profile de segurança, para diferenciar usarei o mac-format=XXXXXXXXXXXX. Vale lembrar que tem outras formas de configurar o EAP, mas para nosso lab podemos subi-lo da forma mais simples.</p>
<pre class="remontti-code">/interface wireless security-profiles
add authentication-types=wpa2-eap \
    management-protection=allowed mode=dynamic-keys \
    name=WPA2-EAP-Radius radius-called-format=ssid \
    radius-eap-accounting=yes radius-mac-format=XXXXXXXXXXXX\
    supplicant-identity=MikroTik
</pre>
<p>Ajuste sua interface</p>
<pre class="remontti-code">/interface wireless
set [ find default-name=wlan1 ] disabled=no \
    mode=ap-bridge security-profile=WPA2-EAP-Radius ssid=WPA2-EAP-Radius</pre>
<p>Conecte ao radius.</p>
<pre class="remontti-code">/radius
add address=180.255.0.3 secret=SEU_SECRET service=wireless</pre>
<p>No Ubiquiti (Não tem suporte PSK com Radius):<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/screencapture-172-30-67-194-2020-03-12-14_42_47.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/screencapture-172-30-67-194-2020-03-12-14_42_47.png" alt="" width="987" height="530" class="alignnone size-full wp-image-4194" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/screencapture-172-30-67-194-2020-03-12-14_42_47.png 987w, https://blog.remontti.com.br/wp-content/uploads/2020/03/screencapture-172-30-67-194-2020-03-12-14_42_47-300x161.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/screencapture-172-30-67-194-2020-03-12-14_42_47-768x412.png 768w" sizes="auto, (max-width: 987px) 100vw, 987px" /></a></p>
<p>No EAP não é necessariamente ser o MAC o usuário, mas fica mais pratico até para programar, logo precisamos de um usuário e senha e prender ele ao tipo EAP. Eu particularmente NÃO uso EAP no mikrotik, por mais que PSK seja mais facil quebrar com o uso do radius fica muito complicado, e além do mais fica exclusivo ao MAC, já no EAP poderá autenticar com a mesma senha em vários dispositivos. </p>
<p>Inseremos então nosso user EAP no banco de dados.</p>
<pre class="remontti-code">INSERT INTO `radcheck` (`username`, `attribute`, `op`, `value`) VALUES
(&#039;44454D454B4D&#039;, &#039;Cleartext-Password&#039;, &#039;:=&#039;, &#039;enIkMVfhq3WIqyKq&#039;),
(&#039;44454D454B4D&#039;, &#039;Auth-Type&#039;, &#039;:=&#039;, &#039;eap&#039;);</pre>
<h2>Hotspot</h2>
<p>Vamos falar primeiro do módulo contador (<strong><a href="https://wiki.freeradius.org/modules/Rlm_sqlcounter" rel="noopener noreferrer" target="_blank">sqlcounter</a></strong>). O módulo sqlcounter permite um contador de pacotes usando registros contábeis gravados no banco de dados. </p>
<p>Com este módulo é possível criar alguns cenários de interessantes no mundo do Hotspot, exemplo:<br />
 - limitar o tempo de conexão (ex.: 2h por dia/mês/único vez)</p>
<p>Se desejar habilite o mod sqlcounter.</p>
<pre class="remontti-code"># ln -s /etc/freeradius/3.0/mods-available/sqlcounter /etc/freeradius/3.0/mods-enabled/sqlcounter</pre>
<p>Adicione em instantiate {...} dailycounter, monthlycounter e noresetcounter do arquivo /etc/freeradius/3.0/radiusd.conf</p>
<pre class="remontti-code"># sed -i &#039;683i\        dailycounter&#039; /etc/freeradius/3.0/radiusd.conf
# sed -i &#039;684i\        monthlycounter&#039; /etc/freeradius/3.0/radiusd.conf
# sed -i &#039;685i\        noresetcounter&#039; /etc/freeradius/3.0/radiusd.conf</pre>
<p>Adicione em authorize {...} dailycounter, monthlycounter e noresetcounter do arquivo /etc/freeradius/3.0/sites-enabled/default</p>
<pre class="remontti-code"># sed -i &#039;406i\        dailycounter&#039; /etc/freeradius/3.0/sites-enabled/default
# sed -i &#039;407i\        monthlycounter&#039; /etc/freeradius/3.0/sites-enabled/default
# sed -i &#039;408i\        noresetcounter&#039; /etc/freeradius/3.0/sites-enabled/default</pre>
<p>Restart o freeradius</p>
<pre class="remontti-code"># systemctl restart freeradius</pre>
<p>Aproveitando o Mk hAp do nosso Lab vou criar um hotspot server.</p>
<p>Com o comando /ip hotspot setup  demos um inicio a um "wizard" que fará toda as configurações automaticamente.</p>
<pre class="remontti-code">/ip hotspot setup  
Select interface to run HotSpot on 

hotspot interface: wlan1 #--&gt; Defina a interface que vai rodar o server
Set HotSpot address for interface 

local address of network: 10.5.50.1/24 #--&gt; Informe o IP/mascara da rede
masquerade network: yes #--&gt; Ativa o NAT já para a classe
Set pool for HotSpot addresses 

address pool of network: 10.5.50.2-10.5.50.254 #--&gt; Range da pool de IPs 
Select hotspot SSL certificate 

select certificate: no #--&gt; Sem certificado
Select SMTP server 

ip address of smtp server: 0.0.0.0 #--&gt; Pode deixar 0.0.0.0
Setup DNS configuration 

dns servers: 8.8.8.8,1.1.1.1 #--&gt; Servidores DNS
DNS name of local hotspot server 

dns name: hotspot.remontti.com.br #--&gt; Domínio qualquer (Se acessado irá mostrar o status)
Create local hotspot user 

name of local hotspot user: admin #--&gt; Vai ser necessário criar um usuario
password for the user: admin #--&gt; que vamos remover</pre>
<p>Remova o usuário admin criado no wizard, defina o porfile para usar o radius e na conexão com o radius marque hotspot.</p>
<pre class="remontti-code">/ip hotspot user remove admin 

/ip hotspot profile
set hsprof1 use-radius=yes

/radius
add address=180.255.0.3 secret=SEU_SECRET service=hotspot</pre>
<p>Caso você ira programar um sistema para fazer cadastro lembre-se de liberar o IP do servidor em walled-garden, assim não é necessário estar autenticado para o usuário acessar-la. Ex onde seria no mesmo serivor, irei permitir a consultas de DNS també.</p>
<pre class="remontti-code">/ip hotspot walled-garden ip
add action=accept disabled=no \
    dst-address=180.255.0.3 !dst-port !protocol !src-address
add action=accept disabled=no !dst-address \
    !dst-address-list dst-port=53 protocol=udp \
    !src-address !src-address-list</pre>
<p>Com nosso AP configurado acessamos:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/hotspot_mikrotik_login_radius.jpg" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/hotspot_mikrotik_login_radius.jpg" alt="" width="300" height="362" class="alignnone size-full wp-image-4209" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/hotspot_mikrotik_login_radius.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/hotspot_mikrotik_login_radius-249x300.jpg 249w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Vou tentar logar com tadeu@remontti.com.br com qualquer senha e visualizar no freeradius -X (debug) o que chega lá:</p>
<pre class="remontti-code-plain">(6)   NAS-Port-Type = Wireless-802.11
(6)   Calling-Station-Id = &quot;44:45:4D:45:4B:4D&quot;
(6)   Called-Station-Id = &quot;hotspot1&quot;
(6)   NAS-Port-Id = &quot;wlan1&quot;
(6)   User-Name = &quot;tadeu@remontti.com.br&quot;
(6)   NAS-Port = 2151677963
(6)   Acct-Session-Id = &quot;8040000b&quot;
(6)   Framed-IP-Address = 10.5.50.254
(6)   Mikrotik-Host-IP = 10.5.50.254
(6)   CHAP-Challenge = 0xaf9b9672cf915d68fd7244fc43035d7a
(6)   CHAP-Password = 0x647d5c258b16ca7841803bfb3b0d376b79
(6)   Service-Type = Login-User
(6)   WISPr-Logoff-URL = &quot;http://10.5.50.1/logout&quot;
(6)   NAS-Identifier = &quot;LAB&quot;
(6)   NAS-IP-Address = 180.255.1.3
</pre>
<p>Vimos que chegaram alguns valores interessantes, podemos fazer filtro com MAC <strong>Calling-Station-Id = "44:45:4D:45:4B:4D"</strong>, nome do serviço do hotspot <strong>Called-Station-Id = "hotspot1"</strong>, nome da interface, nome da interface <strong>NAS-Port-Id = "wlan1"</strong> entre outros.</p>
<p>Agora criamos nosso usuário na tabela radcheck.</p>
<pre class="remontti-code">INSERT INTO `radcheck` (`username`, `attribute`, `op`, `value`) VALUES
(&#039;tadeu@remontti.com.br&#039;, &#039;Cleartext-Password&#039;, &#039;:=&#039;, &#039;enIkMVfhq3WIqyKq&#039;);</pre>
<p>Vamos ao teste:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/login_ok.jpg" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/login_ok.jpg" alt="" width="300" height="296" class="alignnone size-full wp-image-4210" /></a></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/03/hotspot_radius.png" data-rel="lightbox-gallery-tsIUtwmi" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/03/hotspot_radius.png" alt="" width="795" height="255" class="alignnone size-full wp-image-4211" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/hotspot_radius.png 795w, https://blog.remontti.com.br/wp-content/uploads/2020/03/hotspot_radius-300x96.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/hotspot_radius-768x246.png 768w" sizes="auto, (max-width: 795px) 100vw, 795px" /></a></p>
<p>100% funcionando, agora que já conhecemos os outros comandos poremos prender o usuário ao  NAS-Port-Type para Wireless-802.11, criando um grupo, já vou criar 4 grupos "planos".<br />
1º - Plano 30 minutos ao diários - Velocidade 2Mb/8Mb<br />
3º - Plano 7 horas por mês - Velocidade 3Mb/10Mb<br />
2º - Plano 2 Horas unica - Velocidade 8Mb/20Mb<br />
4º - Plano Ilimitado - Velocidade 10Mb/30Mb</p>
<pre class="remontti-code">INSERT INTO `radgroupcheck` (`groupname`, `attribute`, `op`, `value`) VALUES
(&#039;30MIN-DIA&#039;, &#039;Max-Daily-Session&#039;, &#039;:=&#039;, &#039;1800&#039;),
(&#039;30MIN-DIA&#039;, &#039;NAS-Port-Type&#039;, &#039;==&#039;, &#039;Wireless-802.11&#039;),
(&#039;7h-MES&#039;, &#039;Max-Monthly-Session&#039;, &#039;:=&#039;, &#039;25200&#039;),
(&#039;7h-MES&#039;, &#039;NAS-Port-Type&#039;, &#039;==&#039;, &#039;Wireless-802.11&#039;),
(&#039;2h-UNICA&#039;, &#039;Max-All-Session&#039;, &#039;:=&#039;, &#039;7200&#039;),
(&#039;2h-UNICA&#039;, &#039;NAS-Port-Type&#039;, &#039;==&#039;, &#039;Wireless-802.11&#039;),
(&#039;ILIMITADO&#039;, &#039;NAS-Port-Type&#039;, &#039;==&#039;, &#039;Wireless-802.11&#039;);

INSERT INTO `radgroupreply` (`groupname`, `attribute`, `op`, `value`) VALUES
(&#039;30MIN-DIA&#039;, &#039;Acct-Interim-Interval&#039;, &#039;:=&#039;, &#039;300&#039;),
(&#039;30MIN-DIA&#039;, &#039;Mikrotik-Rate-Limit&#039;, &#039;:=&#039;, &#039;2M/8M&#039;),
(&#039;7h-MES&#039;, &#039;Acct-Interim-Interval&#039;, &#039;:=&#039;, &#039;300&#039;),
(&#039;7h-MES&#039;, &#039;Mikrotik-Rate-Limit&#039;, &#039;:=&#039;, &#039;3072K/10240K&#039;),
(&#039;2h-UNICO&#039;, &#039;Acct-Interim-Interval&#039;, &#039;:=&#039;, &#039;300&#039;),
(&#039;2h-UNICO&#039;, &#039;Mikrotik-Rate-Limit&#039;, &#039;:=&#039;, &#039;8M/20240K&#039;),
(&#039;ILIMITADO&#039;, &#039;Acct-Interim-Interval&#039;, &#039;:=&#039;, &#039;300&#039;),
(&#039;ILIMITADO&#039;, &#039;Mikrotik-Rate-Limit&#039;, &#039;:=&#039;, &#039;10M/30M&#039;);</pre>
<p>Agora vamos vincular o usuário a um grupo.</p>
<pre class="remontti-code">INSERT INTO `radusergroup` (`username`, `groupname`) VALUES 
(&#039;tadeu@remontti.com.br&#039;, &#039;30MIN-DIA&#039;);</pre>
<p>No caso dos planos com contabilidade de tempo ao término do seu tempo o login não conseguirá mais logar. Essas verificação de tempo é realizada na bom base na tabela radacct.</p>
<p>Um dica final é: Nunca use o mesmo freeradius para PPPoE e Hotspot, crie servidores separados, pois é muito fácil de bagunçar e qualquer inser feita indevida você pode está deixando uma brecha de segurança. </p>
<h3>Bônus - Logs: Framed-IPv6-Prefix e  Delegated-IPv6-Prefix</h3>
<p><strong><font color="red">Só realize isso em versões antigas do freeradius, a versão do freeradius no Debian 11 por exemplo já foram implementadas as tabelas para registro de IPv6.</font></strong></p>
<p>Em algumas autenticações (Ex accel-ppp) passam os valores de IPv6, para poder registrar os mesmo serão necessários criar os campos na radacct e ajustar o arquivo de queries.</p>
<pre class="remontti-code">mariadb -p -u radius</pre>
<p>Crie dois campos framedipv6prefix e delegatedipv6prefix</p>
<pre class="remontti-code">USE radius;
ALTER TABLE `radacct` 
ADD `framedipv6prefix` VARCHAR(41) NULL DEFAULT NULL AFTER `framedipaddress`, 
ADD `delegatedipv6prefix` VARCHAR(41) NULL DEFAULT NULL AFTER `framedipv6prefix`;</pre>
<p>Agora ajuste as queries em queries.conf</p>
<pre class="remontti-code"># vim /etc/freeradius/3.0/mods-config/sql/main/mysql/queries.conf</pre>
<p>Vou destacar as linhas que foram alteradas, ajuste seu arquivo: (linhas 208,262-264,292-294,331-333,382-384)</p>
<pre class="remontti-code"># -*- text -*-
#
#  main/mysql/queries.conf-- MySQL configuration for default schema (schema.sql)
#
#  $Id: 40508024d5fd6a319bbb85775c3fe1e8388be656 $

# Safe characters list for sql queries. Everything else is replaced
# with their mime-encoded equivalents.
# The default list should be ok
#safe_characters = &quot;@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /&quot;

#######################################################################
#  Connection config
#######################################################################
# The character set is not configurable. The default character set of
# the mysql client library is used. To control the character set,
# create/edit my.cnf (typically in /etc/mysql/my.cnf or /etc/my.cnf)
# and enter
# [client]
# default-character-set = utf8
#

#######################################################################
#  Query config:  Username
#######################################################################
# This is the username that will get substituted, escaped, and added
# as attribute &#039;SQL-User-Name&#039;. &#039;%{SQL-User-Name}&#039; should be used below
# everywhere a username substitution is needed so you you can be sure
# the username passed from the client is escaped properly.
#
# Uncomment the next line, if you want the sql_user_name to mean:
#
#	Use Stripped-User-Name, if it&#039;s there.
#	Else use User-Name, if it&#039;s there,
#	Else use hard-coded string &quot;DEFAULT&quot; as the user name.
#sql_user_name = &quot;%{%{Stripped-User-Name}:-%{%{User-Name}:-DEFAULT}}&quot;
#
sql_user_name = &quot;%{User-Name}&quot;

#######################################################################
# Default profile
#######################################################################
# This is the default profile. It is found in SQL by group membership.
# That means that this profile must be a member of at least one group
# which will contain the corresponding check and reply items.
# This profile will be queried in the authorize section for every user.
# The point is to assign all users a default profile without having to
# manually add each one to a group that will contain the profile.
# The SQL module will also honor the User-Profile attribute. This
# attribute can be set anywhere in the authorize section (ie the users
# file). It is found exactly as the default profile is found.
# If it is set then it will *overwrite* the default profile setting.
# The idea is to select profiles based on checks on the incoming packets,
# not on user group membership. For example:
# -- users file --
# DEFAULT	Service-Type == Outbound-User, User-Profile := &quot;outbound&quot;
# DEFAULT	Service-Type == Framed-User, User-Profile := &quot;framed&quot;
#
# By default the default_user_profile is not set
#
#default_user_profile = &quot;DEFAULT&quot;

#######################################################################
# NAS Query
#######################################################################
# This query retrieves the radius clients
#
# 0. Row ID (currently unused)
# 1. Name (or IP address)
# 2. Shortname
# 3. Type
# 4. Secret
# 5. Server
#######################################################################

client_query = &quot;\
	SELECT id, nasname, shortname, type, secret, server \
	FROM ${client_table}&quot;

#######################################################################
# Authorization Queries
#######################################################################
# These queries compare the check items for the user
# in ${authcheck_table} and setup the reply items in
# ${authreply_table}. You can use any query/tables
# you want, but the return data for each row MUST
# be in the following order:
#
# 0. Row ID (currently unused)
# 1. UserName/GroupName
# 2. Item Attr Name
# 3. Item Attr Value
# 4. Item Attr Operation
#######################################################################
# Use these for case sensitive usernames.

#authorize_check_query = &quot;\
#	SELECT id, username, attribute, value, op \
#	FROM ${authcheck_table} \
#	WHERE username = BINARY &#039;%{SQL-User-Name}&#039; \
#	ORDER BY id&quot;

#authorize_reply_query = &quot;\
#	SELECT id, username, attribute, value, op \
#	FROM ${authreply_table} \
#	WHERE username = BINARY &#039;%{SQL-User-Name}&#039; \
#	ORDER BY id&quot;

#
#  The default queries are case insensitive. (for compatibility with
#  older versions of FreeRADIUS)
#
authorize_check_query = &quot;\
	SELECT id, username, attribute, value, op \
	FROM ${authcheck_table} \
	WHERE username = &#039;%{SQL-User-Name}&#039; \
	ORDER BY id&quot;

authorize_reply_query = &quot;\
	SELECT id, username, attribute, value, op \
	FROM ${authreply_table} \
	WHERE username = &#039;%{SQL-User-Name}&#039; \
	ORDER BY id&quot;

#
#  Use these for case sensitive usernames.
#
#group_membership_query = &quot;\
#	SELECT groupname \
#	FROM ${usergroup_table} \
#	WHERE username = BINARY &#039;%{SQL-User-Name}&#039; \
#	ORDER BY priority&quot;

group_membership_query = &quot;\
	SELECT groupname \
	FROM ${usergroup_table} \
	WHERE username = &#039;%{SQL-User-Name}&#039; \
	ORDER BY priority&quot;

authorize_group_check_query = &quot;\
	SELECT id, groupname, attribute, \
	Value, op \
	FROM ${groupcheck_table} \
	WHERE groupname = &#039;%{${group_attribute}}&#039; \
	ORDER BY id&quot;

authorize_group_reply_query = &quot;\
	SELECT id, groupname, attribute, \
	value, op \
	FROM ${groupreply_table} \
	WHERE groupname = &#039;%{${group_attribute}}&#039; \
	ORDER BY id&quot;

#######################################################################
# Simultaneous Use Checking Queries
#######################################################################
# simul_count_query	- query for the number of current connections
#			- If this is not defined, no simultaneous use checking
#			- will be performed by this module instance
# simul_verify_query	- query to return details of current connections
#				for verification
#			- Leave blank or commented out to disable verification step
#			- Note that the returned field order should not be changed.
#######################################################################

simul_count_query = &quot;\
	SELECT COUNT(*) \
	FROM ${acct_table1} \
	WHERE username = &#039;%{SQL-User-Name}&#039; \
	AND acctstoptime IS NULL&quot;

simul_verify_query = &quot;\
	SELECT \
		radacctid, acctsessionid, username, nasipaddress, nasportid, framedipaddress, \
		callingstationid, framedprotocol \
	FROM ${acct_table1} \
	WHERE username = &#039;%{SQL-User-Name}&#039; \
	AND acctstoptime IS NULL&quot;

#######################################################################
# Accounting and Post-Auth Queries
#######################################################################
# These queries insert/update accounting and authentication records.
# The query to use is determined by the value of &#039;reference&#039;.
# This value is used as a configuration path and should resolve to one
# or more &#039;query&#039;s. If reference points to multiple queries, and a query
# fails, the next query is executed.
#
# Behaviour is identical to the old 1.x/2.x module, except we can now
# fail between N queries, and query selection can be based on any
# combination of attributes, or custom &#039;Acct-Status-Type&#039; values.
#######################################################################
accounting {
	reference = &quot;%{tolower:type.%{Acct-Status-Type}.query}&quot;

	# Write SQL queries to a logfile. This is potentially useful for bulk inserts
	# when used with the rlm_sql_null driver.
#	logfile = ${logdir}/accounting.sql

	column_list = &quot;\
		acctsessionid,		acctuniqueid,		username, \
		realm,			nasipaddress,		nasportid, \
		nasporttype,		acctstarttime,		acctupdatetime, \
		acctstoptime,		acctsessiontime, 	acctauthentic, \
		connectinfo_start,	connectinfo_stop, 	acctinputoctets, \
		acctoutputoctets,	calledstationid, 	callingstationid, \
		acctterminatecause,	servicetype,		framedprotocol, \
        framedipaddress,    framedipv6prefix,   delegatedipv6prefix&quot;

	type {
		accounting-on {
			#
			#  Bulk terminate all sessions associated with a given NAS
			#
			query = &quot;\
				UPDATE ${....acct_table1} \
				SET \
					acctstoptime = FROM_UNIXTIME(\
						%{integer:Event-Timestamp}), \
					acctsessiontime	= &#039;%{integer:Event-Timestamp}&#039; \
						- UNIX_TIMESTAMP(acctstarttime), \
					acctterminatecause = &#039;%{%{Acct-Terminate-Cause}:-NAS-Reboot}&#039; \
				WHERE acctstoptime IS NULL \
				AND nasipaddress   = &#039;%{NAS-IP-Address}&#039; \
				AND acctstarttime &lt;= FROM_UNIXTIME(\
					%{integer:Event-Timestamp})&quot;
		}

		accounting-off {
			query = &quot;${..accounting-on.query}&quot;
		}

		start {
			#
			#  Insert a new record into the sessions table
			#
			query = &quot;\
				INSERT INTO ${....acct_table1} \
					(${...column_list}) \
				VALUES \
					(&#039;%{Acct-Session-Id}&#039;, \
					&#039;%{Acct-Unique-Session-Id}&#039;, \
					&#039;%{SQL-User-Name}&#039;, \
					&#039;%{Realm}&#039;, \
					&#039;%{NAS-IP-Address}&#039;, \
					&#039;%{%{NAS-Port-ID}:-%{NAS-Port}}&#039;, \
					&#039;%{NAS-Port-Type}&#039;, \
					FROM_UNIXTIME(%{integer:Event-Timestamp}), \
					FROM_UNIXTIME(%{integer:Event-Timestamp}), \
					NULL, \
					&#039;0&#039;, \
					&#039;%{Acct-Authentic}&#039;, \
					&#039;%{Connect-Info}&#039;, \
					&#039;&#039;, \
					&#039;0&#039;, \
					&#039;0&#039;, \
					&#039;%{Called-Station-Id}&#039;, \
					&#039;%{Calling-Station-Id}&#039;, \
					&#039;&#039;, \
					&#039;%{Service-Type}&#039;, \
					&#039;%{Framed-Protocol}&#039;, \
					&#039;%{Framed-IP-Address}&#039;, \
                    &#039;%{Framed-IPv6-Prefix}&#039;, \
                    &#039;%{Delegated-IPv6-Prefix}&#039;)&quot;

			#
			#  Key constraints prevented us from inserting a new session,
			#  use the alternate query to update an existing session.
			#
			query = &quot;\
				UPDATE ${....acct_table1} SET \
					acctstarttime	= FROM_UNIXTIME(%{integer:Event-Timestamp}), \
					acctupdatetime	= FROM_UNIXTIME(%{integer:Event-Timestamp}), \
					connectinfo_start = &#039;%{Connect-Info}&#039; \
				WHERE AcctUniqueId = &#039;%{Acct-Unique-Session-Id}&#039;&quot;
		}

		interim-update {
			#
			#  Update an existing session and calculate the interval
			#  between the last data we received for the session and this
			#  update. This can be used to find stale sessions.
			#
			query = &quot;\
				UPDATE ${....acct_table1} \
				SET \
					acctupdatetime  = (@acctupdatetime_old:=acctupdatetime), \
					acctupdatetime  = FROM_UNIXTIME(\
						%{integer:Event-Timestamp}), \
					acctinterval    = %{integer:Event-Timestamp} - \
						UNIX_TIMESTAMP(@acctupdatetime_old), \
					framedipaddress = &#039;%{Framed-IP-Address}&#039;, \
                    framedipv6prefix = &#039;%{Framed-IPv6-Prefix}&#039;, \
                    delegatedipv6prefix = &#039;%{Delegated-IPv6-Prefix}&#039;, \
					acctsessiontime = %{%{Acct-Session-Time}:-NULL}, \
					acctinputoctets = &#039;%{%{Acct-Input-Gigawords}:-0}&#039; \
						&lt;&lt; 32 | &#039;%{%{Acct-Input-Octets}:-0}&#039;, \
					acctoutputoctets = &#039;%{%{Acct-Output-Gigawords}:-0}&#039; \
						&lt;&lt; 32 | &#039;%{%{Acct-Output-Octets}:-0}&#039; \
				WHERE AcctUniqueId = &#039;%{Acct-Unique-Session-Id}&#039;&quot;

			#
			#  The update condition matched no existing sessions. Use
			#  the values provided in the update to create a new session.
			#
			query = &quot;\
				INSERT INTO ${....acct_table1} \
					(${...column_list}) \
				VALUES \
					(&#039;%{Acct-Session-Id}&#039;, \
					&#039;%{Acct-Unique-Session-Id}&#039;, \
					&#039;%{SQL-User-Name}&#039;, \
					&#039;%{Realm}&#039;, \
					&#039;%{NAS-IP-Address}&#039;, \
					&#039;%{%{NAS-Port-ID}:-%{NAS-Port}}&#039;, \
					&#039;%{NAS-Port-Type}&#039;, \
					FROM_UNIXTIME(%{integer:Event-Timestamp} - %{%{Acct-Session-Time}:-0}), \
					FROM_UNIXTIME(%{integer:Event-Timestamp}), \
					NULL, \
					%{%{Acct-Session-Time}:-NULL}, \
					&#039;%{Acct-Authentic}&#039;, \
					&#039;%{Connect-Info}&#039;, \
					&#039;&#039;, \
					&#039;%{%{Acct-Input-Gigawords}:-0}&#039; &lt;&lt; 32 | &#039;%{%{Acct-Input-Octets}:-0}&#039;, \
					&#039;%{%{Acct-Output-Gigawords}:-0}&#039; &lt;&lt; 32 | &#039;%{%{Acct-Output-Octets}:-0}&#039;, \
					&#039;%{Called-Station-Id}&#039;, \
					&#039;%{Calling-Station-Id}&#039;, \
					&#039;&#039;, \
					&#039;%{Service-Type}&#039;, \
					&#039;%{Framed-Protocol}&#039;, \
					&#039;%{Framed-IP-Address}&#039;, \
                    &#039;%{Framed-IPv6-Prefix}&#039;, \
                    &#039;%{Delegated-IPv6-Prefix}&#039;)&quot;
		}

		stop {
			#
			#  Session has terminated, update the stop time and statistics.
			#
			query = &quot;\
				UPDATE ${....acct_table2} SET \
					acctstoptime	= FROM_UNIXTIME(\
						%{integer:Event-Timestamp}), \
					acctsessiontime	= %{%{Acct-Session-Time}:-NULL}, \
					acctinputoctets	= &#039;%{%{Acct-Input-Gigawords}:-0}&#039; \
						&lt;&lt; 32 | &#039;%{%{Acct-Input-Octets}:-0}&#039;, \
					acctoutputoctets = &#039;%{%{Acct-Output-Gigawords}:-0}&#039; \
						&lt;&lt; 32 | &#039;%{%{Acct-Output-Octets}:-0}&#039;, \
					acctterminatecause = &#039;%{Acct-Terminate-Cause}&#039;, \
					connectinfo_stop = &#039;%{Connect-Info}&#039; \
				WHERE AcctUniqueId = &#039;%{Acct-Unique-Session-Id}&#039;&quot;

			#
			#  The update condition matched no existing sessions. Use
			#  the values provided in the update to create a new session.
			#
			query = &quot;\
				INSERT INTO ${....acct_table2} \
					(${...column_list}) \
				VALUES \
					(&#039;%{Acct-Session-Id}&#039;, \
					&#039;%{Acct-Unique-Session-Id}&#039;, \
					&#039;%{SQL-User-Name}&#039;, \
					&#039;%{Realm}&#039;, \
					&#039;%{NAS-IP-Address}&#039;, \
					&#039;%{%{NAS-Port-ID}:-%{NAS-Port}}&#039;, \
					&#039;%{NAS-Port-Type}&#039;, \
					FROM_UNIXTIME(%{integer:Event-Timestamp} - %{%{Acct-Session-Time}:-0}), \
					FROM_UNIXTIME(%{integer:Event-Timestamp}), \
					FROM_UNIXTIME(%{integer:Event-Timestamp}), \
					%{%{Acct-Session-Time}:-NULL}, \
					&#039;%{Acct-Authentic}&#039;, \
					&#039;&#039;, \
					&#039;%{Connect-Info}&#039;, \
					&#039;%{%{Acct-Input-Gigawords}:-0}&#039; &lt;&lt; 32 | &#039;%{%{Acct-Input-Octets}:-0}&#039;, \
					&#039;%{%{Acct-Output-Gigawords}:-0}&#039; &lt;&lt; 32 | &#039;%{%{Acct-Output-Octets}:-0}&#039;, \
					&#039;%{Called-Station-Id}&#039;, \
					&#039;%{Calling-Station-Id}&#039;, \
					&#039;%{Acct-Terminate-Cause}&#039;, \
					&#039;%{Service-Type}&#039;, \
					&#039;%{Framed-Protocol}&#039;, \
					&#039;%{Framed-IP-Address}&#039;, \
                    &#039;%{Framed-IPv6-Prefix}&#039;, \
                    &#039;%{Delegated-IPv6-Prefix}&#039;)&quot;
		}
	}
}


#######################################################################
# Authentication Logging Queries
#######################################################################
# postauth_query	- Insert some info after authentication
#######################################################################

post-auth {
	# Write SQL queries to a logfile. This is potentially useful for bulk inserts
	# when used with the rlm_sql_null driver.
#	logfile = ${logdir}/post-auth.sql

	query =	&quot;\
		INSERT INTO ${..postauth_table} \
			(username, pass, reply, authdate) \
		VALUES ( \
			&#039;%{SQL-User-Name}&#039;, \
			&#039;%{%{User-Password}:-%{Chap-Password}}&#039;, \
			&#039;%{reply:Packet-Type}&#039;, \
			&#039;%S&#039;)&quot;
}</pre>
<p>Espero que tenha aprendido um pouco mais de como o FreeRadius funciona. </p>
<p>Curtiu o conteúdo? Quer me ajudar? <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><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento! (Esse deu trabalho!)</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>Participe do canal no <a href="https://t.me/blogremontti" rel="noopener noreferrer" target="_blank">telegram</a> para ficar atualizado sempre que publicar um novo tutorial. </p>
<p>Abraço!</p>
<p>Fontes:<br />
<a href="https://wiki.freeradius.org/guide/SQL-HOWTO" rel="noopener noreferrer" target="_blank">https://wiki.freeradius.org/guide/SQL-HOWTO</a><br />
<a href="https://wiki.freeradius.org/modules/Rlm_sql" rel="noopener noreferrer" target="_blank">https://wiki.freeradius.org/modules/Rlm_sql</a><br />
<a href="https://wiki.freeradius.org/modules/Rlm_sqlippool" rel="noopener noreferrer" target="_blank">https://wiki.freeradius.org/modules/Rlm_sqlippool</a><br />
<a href="https://wiki.freeradius.org/modules/Rlm_sqlcounter" rel="noopener noreferrer" target="_blank">https://wiki.freeradius.org/modules/Rlm_sqlcounter</a></p>
<p>O post <a href="https://blog.remontti.com.br/4085">Entendendo o funcionamento do FreeRadius e fazendo autenticações PPPoE, Hotspot e Wireless PSK/EAP (Lab Mikrotik/Ubiquiti)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/4085/feed</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title>Criando um servidor de autenticação com FreeRadius no Debian 10 Buster (Extra sqlippool)</title>
		<link>https://blog.remontti.com.br/4063</link>
					<comments>https://blog.remontti.com.br/4063#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 13 Mar 2020 20:25:16 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[3.0.16]]></category>
		<category><![CDATA[3.0.17]]></category>
		<category><![CDATA[autenticar]]></category>
		<category><![CDATA[buster]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[eap]]></category>
		<category><![CDATA[freeradius]]></category>
		<category><![CDATA[hotspot]]></category>
		<category><![CDATA[ppp]]></category>
		<category><![CDATA[pppo]]></category>
		<category><![CDATA[pptp]]></category>
		<category><![CDATA[psk]]></category>
		<category><![CDATA[radius]]></category>
		<category><![CDATA[ubiquiti]]></category>
		<category><![CDATA[wpa]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=4063</guid>

					<description><![CDATA[<p>Esse tutorial é ideal para provedores que desejam criar seu próprio sistema de autenticação com freeradius, fazendo autenticação do tipo PPPoE, hotspot, Wireless (PSK/EAP) entre outras. Neste tutorial iremos instalar e configurar o FreeRadius&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/4063">Criando um servidor de autenticação com FreeRadius no Debian 10 Buster (Extra sqlippool)</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/2020/03/freeradius-3-debian10-instalacao.png" alt="" width="900" height="428" class="alignnone size-full wp-image-4221" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius-3-debian10-instalacao.png 900w, https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius-3-debian10-instalacao-300x143.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/03/freeradius-3-debian10-instalacao-768x365.png 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /><br />
Esse tutorial é ideal para provedores que desejam criar seu próprio sistema de autenticação com freeradius, fazendo autenticação do tipo PPPoE, hotspot, Wireless (PSK/EAP)  entre outras.</p>
<p>Neste tutorial iremos instalar e configurar o FreeRadius 3.0.x sobre o Debina 10, com integração dos na base de dados MariaDB (frok do MySQL), ativaremos ainda o módulos SQLIPPOOL para armazenar nossa pool de IPs na base de dados. </p>
<p><strong>REQUISITOS</strong><br />
1 – <a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Debian 10 bustes &#8211; Instalação limpa</a><br />
2 – <a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP” </a> (Se desejar usar o phpMyAdmin)</p>
<p><strong>Instalação do FreeRadius 3.0.`>17`</strong></p>
<p>Primeiramente iremos criar o banco de dados e usuário e conceder as permissões de acesso.</p>
<p>Abra o terminal de comando do MariaDB e crie a base e o usuario chamados de radius e defina a senha para este usuário.</p>
<pre class="remontti-code"># mariadb -u root</pre>
<p>Altere <strong>SENHA_USER_RADIUS</strong>. Você pode gerar uma senha forte e segura em <a href="https://senhasegura.remontti.com.br/" rel="noopener noreferrer" target="_blank">https://senhasegura.remontti.com.br</a></p>
<pre class="remontti-code">CREATE DATABASE radius;
GRANT ALL PRIVILEGES ON radius.* TO &#039;radius&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SENHA_USER_RADIUS&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Instale os pacotes do <strong>freeradius</strong></p>
<pre class="remontti-code"># apt install freeradius freeradius-mysql freeradius-utils</pre>
<p>Com o o banco de dados radius criado iremos importar as tabelas padrões do freeradius:</p>
<pre class="remontti-code"># mariadb -u radius -p radius &lt; /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
# mariadb -u radius -p radius &lt; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/schema.sql</pre>
<p>Após comando será solicitado a senha do usuario radius (SENHA_USER_RADIUS).</p>
<p>Caso deseje logs mais detalhados (recomendo) edite o arquivo /etc/freeradius/3.0/radiusd.conf, mas antes faça um backup do mesmo.</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/radiusd.conf /etc/freeradius/3.0/radiusd.conf.orig
# vim /etc/freeradius/3.0/radiusd.conf</pre>
<p>Localize as variáveis e altere para yes  </p>
<pre class="remontti-code">[...]
log {
    [...]
        stripped_names = yes
        auth = yes
        auth_badpass = yes
        auth_goodpass = yes
    [...]
}
[...]</pre>
<p>Ajustaremos o <a href="https://wiki.freeradius.org/guide/SQL-HOWTO-for-freeradius-3.x-on-Debian-Ubuntu" rel="noopener noreferrer" target="_blank">mod SQL</a> para trabalhar com conexão do tipo mysql, e informamos os dados para conexão com o banco de dados. Arquivo /etc/freeradius/3.0/mods-available/sql.orig</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-available/sql.orig</pre>
<p>Usarei o comando <strong>sed</strong> para facilitar sua vida <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;" /> mas preste atenção nos comandos, se desejar pode editar o arquivo manualmente e alterar as entradas.</p>
<pre class="remontti-code"># sed -i &#039;s/driver = &quot;rlm_sql_null&quot;/driver = &quot;rlm_sql_mysql&quot;/&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;s/dialect = &quot;sqlite&quot;/dialect = &quot;mysql&quot;/&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;/server = &quot;localhost&quot;/s/^#//g&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;/port = 3306/s/^#//g&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;/login = &quot;radius&quot;/s/^#//g&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;/password = &quot;radpass&quot;/s/^#//g&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;/read_clients = yes/s/^#//g&#039; /etc/freeradius/3.0/mods-available/sql</pre>
<p>No próximo comando altere <strong>SENHA_USER_RADIUS</strong> para a senha de conexão do usuário radius.</p>
<pre class="remontti-code"># sed -i &#039;s/radpass/SENHA_USER_RADIUS/&#039; /etc/freeradius/3.0/mods-available/sql</pre>
<p>Habilite o mod:</p>
<pre class="remontti-code"># ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/sql</pre>
<p>Agora no arquivo /etc/freeradius/3.0/sites-enabled/default vamos comentar alguns componentes que não nos interessa (Se você entrar no arquivo e editar manualmente ele está todo comentado, auto explicativo.) e incluir alguns componentes como o SQL.</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/sites-available/default  /etc/freeradius/3.0/sites-available/default.org</pre>
<pre class="remontti-code"># sed -i &#039;/digest/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/suffix/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/files/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/ldap/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/exec/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/detail/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/unix/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/attr_filter.accounting_response/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;s/-sql/sql/&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;682 s/# *//&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;829,849 {s/^/##/}&#039; /etc/freeradius/3.0/sites-available/default</pre>
<p>Habilitando o mod <strong> <a href="http://sqlippool" rel="noopener noreferrer" target="_blank">sqlippool</a></strong><br />
Como o mod sqlippool você poderá ter sua pool de IPs direto no banco de dados.</p>
<pre class="remontti-code"># ln -s /etc/freeradius/3.0/mods-available/sqlippool /etc/freeradius/3.0/mods-enabled/sqlippool</pre>
<p>Vou alterar (Descomentando e comentado) a chave pool_key = "<strong>%{NAS-Port}</strong>" por "<strong>%{Calling-Station-Id}</strong>", desta forma a chave será o MAC, e "allow_duplicates = no" para não termos duplicidades de IPs. Mais adiante iremos também ajustar o allocate_clear.</p>
<pre class="remontti-code"># sed -i &#039;65 {s/^/#/}&#039; /etc/freeradius/3.0/mods-available/sqlippool
# sed -i &#039;66 s/# *//&#039; /etc/freeradius/3.0/mods-available/sqlippool
# sed -i &#039;58 s/# *//&#039; /etc/freeradius/3.0/mods-available/sqlippool</pre>
<p>Precisamos adicionar o mod sqlippool no nosso arquivo default, você acrescentará sqlippool em <strong>accounting</strong> {...} e <strong>post-auth</strong> {...} logo abaixo de <strong>sql</strong>: </p>
<pre class="remontti-code"># sed -i &#039;641i\        sqlippool&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;734i\        sqlippool&#039; /etc/freeradius/3.0/sites-available/default</pre>
<p>Verifique com o comando abaixo se a saída do seu arquivo ficou assim:</p>
<pre class="remontti-code"># cat /etc/freeradius/3.0/sites-enabled/default |grep -v &quot;#&quot; |awk &#039;NF&gt;0&#039;</pre>
<pre class="remontti-code">server default {
listen {
        type = auth
        ipaddr = *
        port = 0
        limit {
              max_connections = 16
              lifetime = 0
              idle_timeout = 30
        }
}
listen {
        ipaddr = *
        port = 0
        type = acct
        limit {
        }
}
listen {
        type = auth
        port = 0
        limit {
              max_connections = 16
              lifetime = 0
              idle_timeout = 30
        }
}
listen {
        ipv6addr = ::
        port = 0
        type = acct
        limit {
        }
}
authorize {
        filter_username
        preprocess
        chap
        mschap
        eap {
                ok = return
        }
        sql
        expiration
        logintime
        pap
}
authenticate {
        Auth-Type PAP {
                pap
        }
        Auth-Type CHAP {
                chap
        }
        Auth-Type MS-CHAP {
                mschap
        }
        mschap
        eap
}
preacct {
        preprocess
        acct_unique
}
accounting {
        sql
        sqlippool
}
session {
        sql
}
post-auth {
        update {
                &amp;reply: += &amp;session-state:
        }
        sql
        sqlippool
        remove_reply_message_if_eap
}
pre-proxy {
}
post-proxy {
        eap
}
}
</pre>
<p>Faremos os ajustes no arquivo <strong>inner-tunnel</strong></p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/sites-available/inner-tunnel /etc/freeradius/3.0/sites-available/inner-tunnel.org</pre>
<pre class="remontti-code"># sed -i &#039;/suffix/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;/files/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;/-ldap/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;s/-sql/sql/&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;s/radutmp/#radutmp/&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;269 s/# *//&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;331,356 {s/^/##/}&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;365,376 {s/^/##/}&#039; /etc/freeradius/3.0/sites-available/inner-tunnel</pre>
<p>Verifique com o comando abaixo se a saída do seu arquivo ficou assim:</p>
<pre class="remontti-code"># cat /etc/freeradius/3.0/sites-enabled/inner-tunnel |grep -v &quot;#&quot; |awk &#039;NF&gt;0&#039;</pre>
<pre class="remontti-code">server inner-tunnel {
listen {
       ipaddr = 127.0.0.1
       port = 18120
       type = auth
}
authorize {
        filter_username
        chap
        mschap
        update control {
                &amp;Proxy-To-Realm := LOCAL
        }
        eap {
                ok = return
        }
        sql
        expiration
        logintime
        pap
}
authenticate {
        Auth-Type PAP {
                pap
        }
        Auth-Type CHAP {
                chap
        }
        Auth-Type MS-CHAP {
                mschap
        }
        mschap
        eap
}
session {
        sql
}
post-auth {
        sql
}
pre-proxy {
}
post-proxy {
        eap
}</pre>
<p>Uma alteração que acho válida é para que para cada alocação de <strong>IP</strong> ela seja <strong>randômica</strong>, isso pode solucionar alguns problemas como o balanceamento dos prefixo no seu BGP, ou daqueles clientes que jogam online, fazem download e até mesmo que estão sofrendo algum ataque. Assim ao reiniciar seu equipamento o mesmo irá receber um novo endereço IP. Para que funcione desta forma iremos apenas comentar algumas linhas e descomentar outras, pois em /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf variável <strong>allocate_find</strong> já vem com o modelo pronto <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>Comentar:</p>
<pre class="remontti-code"># sed -i &#039;41,50 {s/^/##/}&#039; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</pre>
<pre class="remontti-code-plain">##allocate_find = &quot;\
##      SELECT framedipaddress FROM ${ippool_table} \
##      WHERE pool_name = &#039;%{control:Pool-Name}&#039; \
##      AND (expiry_time &lt; NOW() OR expiry_time IS NULL) \
##      ORDER BY \
##              (username &lt;&gt; &#039;%{User-Name}&#039;), \
##              (callingstationid &lt;&gt; &#039;%{Calling-Station-Id}&#039;), \
##              expiry_time \
##      LIMIT 1 \
##      FOR UPDATE&quot;</pre>
<p>Descomentar:</p>
<pre class="remontti-code"># sed -i &#039;55,62 s/# *//&#039; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</pre>
<pre class="remontti-code-plain">allocate_find = &quot;\
        SELECT framedipaddress FROM ${ippool_table} \
        WHERE pool_name = &#039;%{control:Pool-Name}&#039; \
        AND expiry_time IS NULL \
        ORDER BY \
                RAND() \
        LIMIT 1 \
        FOR UPDATE&quot;</pre>
<p>Como alteramos a pool_key para Calling-Station-Id  em /etc/freeradius/3.0/mods-enabled/sqlippool vamos ajustar o <strong>allocate_clear</strong> para quando for liberar um IP use a chave pool_key e não a NAS, caso contrário ira liberar IPs indevidos que estão sendo utilizado por usuários ativos e assim evitamos que surjam IPs duplicados, para isso:</p>
<p>Comentar:</p>
<pre class="remontti-code"># sed -i &#039;26,35 {s/^/##/}&#039; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</pre>
<pre class="remontti-code-plain">##allocate_clear = &quot;\
##      UPDATE ${ippool_table} \
##      SET \
##              nasipaddress = &#039;&#039;, \
##              pool_key = 0, \
##              callingstationid = &#039;&#039;, \
##              username = &#039;&#039;, \
##              expiry_time = NULL \
##      WHERE expiry_time &lt;= NOW() - INTERVAL 1 SECOND \
##      AND nasipaddress = &#039;%{%{Nas-IP-Address}:-%{Nas-IPv6-Address}}&#039;&quot;</pre>
<p>Descomentar</p>
<pre class="remontti-code"># sed -i &#039;10,18 s/# *//&#039; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</pre>
<pre class="remontti-code-plain">allocate_clear = &quot;\
        UPDATE ${ippool_table} \
        SET \
                nasipaddress = &#039;&#039;, \
                pool_key = 0, \
                callingstationid = &#039;&#039;, \
                username = &#039;&#039;, \
                expiry_time = NULL \
        WHERE pool_key = &#039;${pool_key}&#039;&quot;</pre>
<p>É interessante você ajustar o tempo <strong>lease_duration = 3600</strong> no arquivo /etc/freeradius/3.0/mods-available/sqlippool talvez para um menor intervalo,porém sempre respeitando que o <strong>Acct-Interim-Interval</strong> seja um tempo menor, para não ter duplicidades de ips. Falo sobre isso no tutorial <a href="https://blog.remontti.com.br/4085" rel="noopener noreferrer" target="_blank">https://blog.remontti.com.br/4085</a> recomendo a leitura!</p>
<p><strong>Opcional</strong><br />
Eu particularmente não gosto da ideia da tabela radusergroup não ter um ID, em alguma programação ela pode ser útil, então para fazer isso se desejar faça:</p>
<pre class="remontti-code"># mariadb -u radius -p</pre>
<p>Entre com suasenha do usuário radius.</p>
<pre class="remontti-code">USE radius;
ALTER TABLE `radusergroup` ADD `id` INT(20) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (`id`) ;
ALTER TABLE `radusergroup` ADD UNIQUE(`id`);
quit;</pre>
<p>Caso você tenha uma alta demanda de requisições você pode fazer algumas alterações no radiusd.conf.<br />
Altere conforme sua necessidade, e hardware de seu servidor. Vale lembrar que fazendo essas alterações pode ser necessário alterar o limite de conexões ao MariaDB. Não abuse nessas configurações recomendo ler a documentação.</p>
<pre class="remontti-code"># vim /etc/freeradius/3.0/radiusd.conf</pre>
<p>Você pode começar dobrando os valores, ex.:</p>
<pre class="remontti-code">[...]
thread pool {
        start_servers = 10
        max_servers = 64
        min_spare_servers = 6
        max_spare_servers = 20
        max_queue_size = 131072
        max_requests_per_server = 0
        auto_limit_acct = no
}
[...]</pre>
<h3>Finalizando</h3>
<p>Habilite o freeradius para começar junto com a inicialização do sistema</p>
<pre class="remontti-code"># systemctl enable freeradius</pre>
<p>Pare o serviço e inicie em modo debug</p>
<pre class="remontti-code"># systemctl stop freeradius
# freeradius -X</pre>
<p>Se nenhum erro acontecer uma mensagem com: <strong>Ready to process requests</strong> aparecer parabéns seu freeradius está funcionando. Através do comando debug você consegue acompanhar as ações que o freeradius irá fazer, ótimo para estudos e entendimento. Para encerrar o modo debig use Crtl+c, e então inicie o serviço de forma normal.</p>
<pre class="remontti-code"># systemctl start freeradius</pre>
<p>Para <strong>integrar</strong> seu servidor freeradius para fazer autenticações PPPoE, Hotspot, Wireless PSK/EAP entre outras, você precisa aprender mais sobre as <strong>tabelas</strong> do <strong>banco de dados</strong> e quais <strong>atributos</strong> usar em cada situação sempre pensando na segurança. Você pode acessar <a href="https://blog.remontti.com.br/4085" rel="noopener noreferrer" target="_blank">https://blog.remontti.com.br/4085</a> onde irá encontra alguns modelos de autenticação que atente praticamente todos os cenários de provedores. </p>
<p>Gostou? Quer me ajudar? <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><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>Participe do canal no <a href="https://t.me/blogremontti" rel="noopener noreferrer" target="_blank">telegram</a> para ficar atualizado sempre que publicar um novo tutorial. </p>
<p>Abraço!</p>
<p>Fonte:<br />
<a href="https://wiki.freeradius.org/guide/SQL-HOWTO" rel="noopener noreferrer" target="_blank">https://wiki.freeradius.org/guide/SQL-HOWTO</a><br />
<a href="https://wiki.freeradius.org/modules/Rlm_sql" rel="noopener noreferrer" target="_blank">https://wiki.freeradius.org/modules/Rlm_sql</a><br />
<a href="https://wiki.freeradius.org/modules/Rlm_sqlippool" rel="noopener noreferrer" target="_blank">https://wiki.freeradius.org/modules/Rlm_sqlippool</a></p>
<p>O post <a href="https://blog.remontti.com.br/4063">Criando um servidor de autenticação com FreeRadius no Debian 10 Buster (Extra sqlippool)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/4063/feed</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>Proteja-se de ataques DoS/DDoS mitigando com FastNetMon e anuncie os prefixos atacados (blackholes) para sua operadora, usando Mikrotik :-)</title>
		<link>https://blog.remontti.com.br/3981</link>
					<comments>https://blog.remontti.com.br/3981#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Sat, 25 Jan 2020 02:28:33 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[ataques]]></category>
		<category><![CDATA[bgp]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debina 10]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[exabgp]]></category>
		<category><![CDATA[fastnetmon]]></category>
		<category><![CDATA[ibgp]]></category>
		<category><![CDATA[mitigação]]></category>
		<category><![CDATA[notificações]]></category>
		<category><![CDATA[proteção]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[telegram]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3981</guid>

					<description><![CDATA[<p>Existe um tutorial mais atualizado acesse: Fortalecendo a Resiliência da Rede: Detecção de Ataques DDoS com FastNetMon, FRRouting, Grafana e Implementação em Debian 12 com Huawei &#038; RouterOS 👆 👆 👆 👆 👆 👆&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3981">Proteja-se de ataques DoS/DDoS mitigando com FastNetMon e anuncie os prefixos atacados (blackholes) para sua operadora, usando Mikrotik :-)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><font color="red">Existe um tutorial mais atualizado acesse:</font></h2>
<p><a href="https://blog.remontti.com.br/7322">Fortalecendo a Resiliência da Rede: Detecção de Ataques DDoS com FastNetMon, FRRouting, Grafana e Implementação em Debian 12 com Huawei &#038; RouterOS</a><br />
 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="remontti-code">#
#
#
#
#
#
#
#
</pre>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-3991" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p>Neste tutorial vamos aprender como identificar os ataques Dos/DDoS e anunciar os prefixo atacados (ou atacantes) <strong>de seu AS</strong> em envia-los para uma blackhole, e repassar os mesmo para sua operadora. (Acordo)</p>
<p>Vamos utilizar o <a href="https://github.com/pavel-odintsov/fastnetmon/" rel="noopener noreferrer" target="_blank">FastNetMon</a> que é um analisador de carga DoS/DDoS de alto desempenho, construído sobre vários mecanismos de captura de pacotes (NetFlow, IPFIX, sFlow, AF_PACKET, SnabbSwitch, netmap, PF_RING, PCAP). </p>
<p>Farei a instalação do FastNetMon no Debian 10 (Instalação Limpa)</p>
<p>Você irá precisar configurar o envido dos Flows em seu roteador de bora. Vou deixar aqui um exemplo de como configurar com o routerOS/Mikrotik.</p>
<p><strong>Cenário Ex.:</strong><br />
AS &#8211; 15169<br />
172.31.31.1/30 &#8211; RouterOS/Mikrotik<br />
172.31.31.2/30 &#8211; Servidor FastNetMon<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp.png" data-rel="lightbox-gallery-QM69vpW4" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp.png" alt="" width="1332" height="606" class="alignnone size-full wp-image-3984" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp.png 1332w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp-300x136.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp-1024x466.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_mikrotik_bgp-768x349.png 768w" sizes="auto, (max-width: 1332px) 100vw, 1332px" /></a></p>
<p>Ative o envido dos flows em seu routerOS/Mikrotik, selecionando as interfaces de entrada (WAN) ex suas operadoras, PTTs (No exemplo sfp1,VLAN.1234-PTT) <em>observe que não irei usar a porta padrão 2055 e sim 62055.</em></p>
<pre class="remontti-code">/ip traffic-flow set active-flow-timeout=1m cache-entries=4k enabled=yes interfaces=&quot;sfp1,VLAN.1234-PTT&quot;
/ip traffic-flow target add dst-address=172.31.31.2 port=62055</pre>
<h3>Instalação FastNetMon</h3>
<p>Antes de iniciar a instalação do seu do seu servidor em nosso exemplo estou usando o IP 172.31.31.2/30, porém eu NUCA recomendaria você fazer NAT em seu roteador de borda ainda mais ele sendo um Mikrotik, a performasse estaria comprometida, quem tem NAT estude de uma pesquisada sobrem IPv4 Fast Path,  IPv4 Fasttrack, Connection Tracking. Quando você compreender esses &#8220;caras&#8221; e aplicar dentro de sua rede, vai descobrir que o mikrotik não é tão ruim quanto falam por ai kkkkk. (Quem sabe um dia escrevo algo sobre), mas voltando&#8230; Porque utilizar o IP 172.31.31.2 então? Primeiramente por que ele não é acessível pelo mundo, logo não pode ser atacado, mas por outro lado se ele não tiver internet você não poderá por exemplo configurar para receber uma notificação (que neste tutorial vou explicar como fazer para enviar alertas no telegram) então como proceder, se você manja já deve ter pensado em uma solução. No meu caso eu sempre divido a a rede, o que é borda é borda, nunca ligo um servidor nela! O ideal é termos um router apenas para os servidores, ou então ligado quem sabe no concentrador de NAT, então nesse caso você pode fazer uma NAT para seu servidor, na pior das hipóteses use um ip válido. Você pode também fechar uma sessão <strong>multihop</strong>. Bom de seus pulos, ai já é engenharia de redes! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>O pacote do fastnetmon já se encontra no repositório do debian, juntamente algumas pacotes extras que vamos utilizar em seguida.</p>
<pre class="remontti-code"># apt install fastnetmon zip curl wget python-pip socat -y</pre>
<p>Adicione todos os prefixos de se AS, são esses os IPs que ele fará analise. </p>
<pre class="remontti-code"># vim /etc/networks_list</pre>
<p>Exemplo</p>
<pre class="remontti-code">216.58.192.0/22
2800:3f0::/32</pre>
<p>Ajustes as configurações</p>
<pre class="remontti-code"># vim /etc/fastnetmon.conf</pre>
<p>Exlplicarei nos comentários</p>
<pre class="remontti-code"># Quantos pacotes serão coletados do tráfego de ataque
# Aumentamos para ter um log com mais informações
ban_details_records_count = 1000

# Defina por quanto tempo você irá ficar anunciando seu IP atacado a blackhole 
ban_time = 600

# Ative o rastreamento de conexão
enable_connection_tracking = on

# Ativaremos a detecção de ataques, por pacotes por/s, por limite de banda e pro flows.
ban_for_pps = on
ban_for_bandwidth = on
ban_for_flows = on

# Limites de pacotes
threshold_pps = 20000
# Limite de banda (Pode pegar como base o cliente/ plano com mair trafego 
# cuidado com ips de cgnat, eles terão bem mais consumo. 
threshold_mbps = 1000
# Limite por flows
threshold_flows = 3500

# Você pode desativar o sflow (Já que com RouterOS não vamos utiliza-lo)
sflow = off

# Ative o netflow
netflow = on

# Ative o exabgp (É com ele que vamos fechamos nosso per com a borda)
exabgp = on
# Defina para 60 o mesmo tempo setado la no Router (active-flow-timeout=1m)
average_calculation_time = 60

# Altere a porta para mesma que configuramos no Router
netflow_port = 62055

# Informe o IP da sua interface do servidor
exabgp_next_hop = 172.31.31.2

# Script que será executado sempre quer um banir/desbanir
notify_script_path = /usr/local/bin/notify_about_attack.sh</pre>
<p>O fastnetmon sempre que identificar um ataque irá executar <strong>notify_script_path</strong>, identificando o IP da sua rede que está sofrendo <strong>(incoming)</strong> o ataque ou que está cometendo <strong>(outgoing)</strong> o ataque. Ele <strong>NÃO</strong> irá identificar os IPs de origem. Em um futuro quando tivermos mais testes elaborados eu juntamente com o Gabriel Vargas Padilha estamos estudando os logs e através desses com um script (python) analisarmos a fundo vamos armazena-los em uma base de dados bem como identificar (porem no momento ainda tem falsos positivos), mas a ideia e saber a origem e através de um outro script notificar os IPs de origens enviando os logs para o dono do IP para que ele tome suas providencias, e por que não anunciar também nas blackholes.  </p>
<p>Criaremos então nosso arquivo chamado pelo opção &#8220;notify_script_path&#8221;, mas antes vamos criar um script para enviar notificações (mensagens) e arquivos pelo Telegram. Vai ser necessário criar um bot do telegram para o uso do mesmo. Se você não sabe como criar um Bot para telegram veja como fazer o mesmo no início do tutorial que já postei de como enviar alertas pelo zabbix, <a href="https://blog.remontti.com.br/3053" rel="noopener noreferrer" target="_blank">Zabbix 4.2 enviando alertas no Telegram via Bot (Debian 10)</a>, lá no ínico do tutorial explica como criar o bot, pegar o token e como descobrir o ID de um usuário ou grupo. </p>
<pre class="remontti-code"># cd /tmp/
# wget https://github.com/remontti/TelegramCMD/archive/master.zip
# unzip /tmp/master.zip
# chmod a+x /tmp/TelegramCMD-master/telegram
# mv /tmp/TelegramCMD-master/telegram* /usr/local/bin/</pre>
<p>Não esqueça de alterar o TOKEN para o do seu bot.</p>
<pre class="remontti-code"># vim /usr/local/bin/telegram.conf/token.conf</pre>
<pre class="remontti-code">######################################
# Telegram bot                       #
# Create a new bot with @BotFather   #
# get TOKEN                          #
######################################

TOKEN=&quot;000000000:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF&quot;</pre>
<p>Como usar? É importante você saber que o IDs de grupos tem um &#8220;-&#8221; no inicio do ID, já usuários direto não.</p>
<pre class="remontti-code">Uso: telegram [Opções]
  -m: Para enviar uma mensagem
     ex: telegram -m &quot;ID Chat&quot; &quot;Meu assunto&quot; &quot;Minha mensagem...&quot;
     ex: telegram -m &quot;-123456789&quot; &quot;Notificação&quot; &quot;Mensagem para um grupo ID&quot;
     ex: telegram -m &quot;123456789&quot; &quot;Notificação&quot; &quot;Mensagem para direta/privado&quot;

  -f: Para enviar um arquivo
     ex: telegram -f &quot;ID Chat&quot; &quot;/diretorio/arquivo&quot; &quot;nome do arquivo zip&quot; &quot;Comentário&quot;
     ex: telegram -f &quot;12345689&quot; /var/log/syslog syslog &quot;Logs do sistema para user privado&quot;</pre>
<p>     ex: telegram -f &#8220;-12345689&#8221; /var/log/syslog syslog &#8220;Logs do sistema para um grupo&#8221;</p>
<p>Bot funcionando, criamos então uma pasta onde os logs de ataques que terminaram vão ser movidos, e o script que será executado sempre que um ataque for identificado (BAN/UNBAN).</p>
<pre class="remontti-code"># mkdir /var/log/fastnetmon_attacks/ataques
# vim /usr/local/bin/notify_about_attack.sh</pre>
<pre class="remontti-code">
#!/usr/bin/env bash

# This script will get following params:
#  $1 client_ip_as_string
#  $2 data_direction
#  $3 pps_as_string
#  $4 action (ban or unban)

# Desbanindo um IP
if [ &quot;$4&quot; = &quot;unban&quot; ]; then
    /usr/local/bin/telegram -m &quot;-12345678&quot; &quot;UNBAN: $2 Ataque&quot; &quot;&lt;code&gt;IP $1&lt;/code&gt; removido da blackhole&quot;
    # Movemos os logs para pasta ataques pois não queremos mais receber elas.
    mv /var/log/fastnetmon_attacks/$1* /var/log/fastnetmon_attacks/ataques
    # Unban actions if used
    exit 0
fi

# Banindo
if [ &quot;$4&quot; = &quot;ban&quot; ]; then
    /usr/local/bin/telegram -m &quot;-12345678&quot; &quot;BAN: $2 ataque&quot; &quot;&lt;code&gt;IP $1&lt;/code&gt; prefixo anunciado a blackhole&quot;
    /usr/local/bin/telegram -f &quot;-12345678&quot; /var/log/fastnetmon_attacks/$1* $1 &quot;Logs do ataque ao IP $1&quot;
    exit 0
fi

if [ &quot;$4&quot; == &quot;attack_details&quot; ]; then    
    #/usr/local/bin/telegram -m &quot;-12345678&quot; &quot;BAN&quot; &quot;&lt;code&gt;FastNetMon: IP $1 blocked because $2 attack with power $3 pps&lt;/code&gt;&quot;
    exit 0
fi</pre>
<pre class="remontti-code"># chmod a+x /usr/local/bin/notify_about_attack.sh</pre>
<p>Restarte o fastnetmon</p>
<pre class="remontti-code"># systemctl restart fastnetmon</pre>
<h3>Instalação do exaBGP</h3>
<p>Iremos utilizar o <a href="https://github.com/Exa-Networks/exabgp" rel="noopener noreferrer" target="_blank">exaBGP</a> fechar nossa conexão BGP para realizar os anúncios dos prefixos atacados.</p>
<pre class="remontti-code"># pip install exabgp==3.4.20</pre>
<p>Configure o arquivo para fechar o peer.</p>
<pre class="remontti-code"># vim /etc/exabgp.conf</pre>
<pre class="remontti-code">group RouterBorda {
    hold-time 180;
    # AS do nosso ExaBGP (Pode deixar 65001)
    local-as 65001;
    # AS Remoto (Seu AS pois você vai estar fechando com seu roteador de borda)
    peer-as 15169;
    # ID do ExaBGP router (use o mesmo IP da sua placa de rede)
    router-id 172.31.31.2;
    graceful-restart 1200;
    # Remote peer
    neighbor 172.31.31.1 {
        # Endereço IP da interface desse servidor
        local-address 172.31.31.2;
        description &quot;ExaBGP&quot;;
        family {
            ipv4 unicast;
            ipv6 unicast;
        }
    }
    # Processo que vai receber as linhas de comandos para adicionar ou excluir uma prefixo
    process service-dynamic {
        run /usr/bin/socat stdout pipe:/var/run/exabgp.cmd;
    }
}</pre>
<p>Antes de iniciar o exaBGP você precisa criar um peer e alguns filtros em seu roteador de borda, no nosso exemplo routerOS/Mikrotik.</p>
<p><strong>Filtros</strong>:<br />
Crie um filtro de entrada que todas as rotas aprendida do fastnetmon seja setadas como blackhole, e não ensine nada para ele.</p>
<pre class="remontti-code">/routing filter
add action=accept chain=FastNetMon-IN set-type=blackhole
add action=discard chain=FastNetMon-OUT</pre>
<p><strong>Peer</strong>:<br />
Atenção para a <strong>instance</strong> que deve estar selecionada corretamente (use a mesma que você usa com sua operadora). Caso seu servidor não esteja com um conexão direta a borda poe usar multihop=<strong>yes</strong>, como comentado anteriormente.</p>
<pre class="remontti-code">/routing bgp peer
add name=FastNetMon instance=default remote-as=65001 multihop=no  \
 in-filter=FastNetMon-IN out-filter=FastNetMon-OUT \
 remote-address=172.31.31.2 update-source=172.31.31.1</pre>
<p>Para não ter que carregar na mão o exabgp, criaremos um script para inicialização do exaBGP automaticamente.</p>
<pre class="remontti-code"># vim /etc/init.d/exabgp </pre>
<pre class="remontti-code">#!/bin/bash
### BEGIN INIT INFO
# Provides:          exabgp
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
### END INIT INFO

VERMELHO=&#039;\033[1;31m&#039;
VERDE=&#039;\033[1;32m&#039;
NC=&#039;\033[0m&#039;

PROCESSO=$(ps -x |grep -v &quot;grep&quot; |grep -v &quot;/bin/bash&quot; |grep exabgp |wc -l); 

function startExaBGP(){
    if [  $PROCESSO -eq 0 ]
    then
        echo &quot;Iniciandos...&quot;;
        env exabgp.daemon.user=root \
          exabgp.daemon.daemonize=true \
          exabgp.daemon.pid=/var/run/exabgp.pid \
          exabgp.log.destination=/var/log/exabgp.log \
          exabgp /etc/exabgp.conf
        sleep 0.3
        echo -e &quot;ExaBGP [${VERDE} Iniciado ${NC}] &quot;;
    else
        echo -e &quot;ExaBGP já exstá em execuxão. [${VERDE} Ativo ${NC}] &quot;;
    fi
}
 
function stopExaBGP(){
    if [  $PROCESSO -eq 0 ]
    then
        echo -e &quot;ExaBGP não está sendo executado. [${VERMELHO} Parado ${NC}]&quot;;
        
    else 
        echo &quot;Parando...&quot;;
        kill -9 `cat /var/run/exabgp.pid` &amp;&gt;/dev/null
        echo -e &quot;ExaBGP [${VERMELHO} Parado ${NC}] &quot;;
    fi
}

function statusExaBGP(){
    if [  $PROCESSO -eq 0 ]
    then
        echo -e &quot;ExaBGP está [${VERMELHO} Parado ${NC}]&quot;;
    else 
        echo -e &quot;ExaBGP está [${VERDE} Ativo ${NC}]&quot;;
    fi
    echo 
    echo &quot;Logs:&quot;
    tail /var/log/exabgp.log
}

case &quot;$1&quot; in
    start )
        startExaBGP
        ;;
 
    stop )
        stopExaBGP
        ;;
 
    restart )
        stopExaBGP
        sleep 1
        startExaBGP
        ;;
 
    status )
        statusExaBGP      
        ;;
 
    * )
        echo &quot;Opção inválida, use start | stop | restart | status&quot;
        ;;
esac</pre>
<p>De permissão para execução</p>
<pre class="remontti-code"># chmod a+x /etc/init.d/exabgp</pre>
<p>Crie o arquivo de serviço para o programa exabgp.</p>
<pre class="remontti-code"># vim /lib/systemd/system/exabgp.service</pre>
<p>Adicione</p>
<pre class="remontti-code">[Unit]
Description=ExaBGP
After=network.target remote-fs.target

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/etc/init.d/exabgp start
ExecStop=/etc/init.d/exabgp stop
ExecReload=/etc/init.d/exabgp restart
 
[Install]
WantedBy=multi-user.target</pre>
<p>Recarregue a nova definição do serviço:</p>
<pre class="remontti-code"># systemctl daemon-reload</pre>
<p>Ative o novo serviço, e verifique se o mesmo foi ativado</p>
<pre class="remontti-code"># systemctl enable exabgp
# systemctl list-unit-files | grep exabgp</pre>
<p>Reinicie seu servidor</p>
<pre class="remontti-code"># reboot</pre>
<p>Verifique se o exabgp foi carregado na inicialização, e seu peer estabilizou.</p>
<pre class="remontti-code"># systemctl status exabgp</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik.png" data-rel="lightbox-gallery-QM69vpW4" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik.png" alt="" width="1639" height="381" class="alignnone size-full wp-image-3894" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik.png 1639w, https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik-300x70.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik-1024x238.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik-768x179.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/12/exabgp_fastnetmon_mikrotik-1536x357.png 1536w" sizes="auto, (max-width: 1639px) 100vw, 1639px" /></a></p>
<p>Para iniciar/reiniciar os exabgp pode usar os seguintes comandos:</p>
<pre class="remontti-code"># systemctl stop exabgp
# systemctl start exabgp
# systemctl restart exabgp</pre>
<p>Para acompanhar a coleta de flows use o comando:</p>
<pre class="remontti-code"># fastnetmon_client</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon.png" data-rel="lightbox-gallery-QM69vpW4" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon.png" alt="" width="661" height="610" class="alignnone size-full wp-image-3986" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon.png 661w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon-300x277.png 300w" sizes="auto, (max-width: 661px) 100vw, 661px" /></a></p>
<p>Você vai encontrar tutoriais como integrar com grafana&#8230;. mas para mim isso é perfumaria, o mais legal é ver o processamento sem frescura, e saber que pode ser implementado com uma minimo de hardware, essa mesma analise de flows do gráfico assim que está na casa dos 3GBps de tráfego temos o seguinte uso do hasrdware:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop.png" data-rel="lightbox-gallery-QM69vpW4" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop.png" alt="" width="1114" height="277" class="alignnone size-full wp-image-3987" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop.png 1114w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop-300x75.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop-1024x255.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/fastnetmon_htop-768x191.png 768w" sizes="auto, (max-width: 1114px) 100vw, 1114px" /></a></p>
<p>Se quiser fazer algum teste, para anunciar uma rotas manualmente user os seguintes comandos:</p>
<pre class="remontti-code"># echo &quot;announce route 100.101.255.200 next-hop 172.31.31.2 community 65001:666&quot; &gt; /var/run/exabgp.cmd</pre>
<p>E para remover:</p>
<pre class="remontti-code"># echo &quot;withdraw route 100.101.255.200 next-hop 172.31.31.2&quot;  &gt; /var/run/exabgp.cmd</pre>
<h3>Acordo de communities com sua operadora</h3>
<p>Não vai adiantar muito você identificar o IP que está tomando o ataque se você não repassar o mesmo para sua operadora e ela o mesmo. Como você identificou o IP que esta recebendo o ataque (ou ate mesmo atacando) o mesmos vai subir na sua tabela de rotas como tipo blackhole, logo seu roteador não vai mais responder para esse IP. <strong>Sim esse IP não terá mais internet </strong>(clientes, servidor&#8230;.) sim não terá! rsrs, por isso é importante receber o alerta, para saber qual medidas realizar. Nas configurações do fastnetmon existe um arquivo de <strong>lista branca /etc/networks_whitelist</strong> se desejar você pode incluir os IPs que não quer que o fastnetmon analise (logo não ira bani-lo) porém você também não vai saber se ele foi atacado, eu prefiro deixar esse networks_whitelist vazio e criar então um filtro no roteador para descartar os IPs que não quero que ele jogue na blackhole, assim eu sou notificado, e se o bicho realmente estiver pegando eu deixo passar o ip do servidor e penso no que vou fazer hehehe.</p>
<p>As grande operadoras normalmente tem uma politica de communities que aceita você repassar prefixos /32 com a communities onde em quase todos os casos é AS:666 ou 65xxx:666, então o que você precisa fazer é primeira mente entrar em contato com a mesma para pegar essas informações, caso ela não saiba do que você está falando manda esse o link  deste tutorial <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Bom, vamos imaginar que sua operadora senha o AS28146 (olha o marketing ai de graça/patrocina eu MH) e seu bloco seja 200.200.200.0/22, como ficaria seu filtro no seu MK? </p>
<pre class="remontti-code">/routing filter
add action=accept  chain=AS28146-IPv4-OUT bgp-communities=65001:666 prefix-length=32 set-bgp-communities=28146:666
add action=accept  chain=AS28146-IPv4-OUT prefix=45.189.228.0/22 prefix-length=22-23
add action=discard chain=AS28146-IPv4-OUT</pre>
<p>Explicando a primiera linha:<br />
<strong>action=accept</strong> &#8211;> aceita<br />
<strong>chain=AS28146-IPv4-OUT</strong> &#8211;> nome do seu filtro<br />
<strong>bgp-communities=65001:666</strong> -> todas as rotas marcadas com a communities=65001:666 (as q o fastnetmon nos enviou)<br />
<strong>prefix-length=32</strong> &#8211;> com prefixo apenas /32<br />
set-bgp-communities=28146:666 &#8211;> seta a communitie que você verificou com sua operadora</p>
<p>Se você quiser descartar algum IP, ex um servidor (como comentei anteriormente) apenas para a operadora você precisa colocar antes das regras (antes da linha 1). Ex servidor 200.200.200.7 quero descartar para não cair na blackhole:</p>
<pre class="remontti-code">/routing filter
add action=discard chain=AS28146-IPv4-OUT prefix=45.189.228.7/32 prefix-length=32 
add action=accept  chain=AS28146-IPv4-OUT bgp-communities=65001:666 prefix-length=32 set-bgp-communities=28146:666
add action=accept  chain=AS28146-IPv4-OUT prefix=45.189.228.0/22 prefix-length=22-23
add action=discard chain=AS28146-IPv4-OUT</pre>
<p>Agora se você simplesmente não quer que seja bloqueado de forma alguma é só add no filtro do peer com o fastnetmon.</p>
<pre class="remontti-code">/routing filter
add action=discard chain=FastNetMon-IN prefix=45.189.228.7/32 prefix-length=32
add action=accept  chain=FastNetMon-IN set-type=blackhole
add action=discard chain=FastNetMon-OUT</pre>
<p>Seria interessante fazer alguns teste de ataques (coisa pequena) de dentro da sua rede e de fora, escolha uma IP que não esteja em uso para tal! Para realizar esse ataque user o a ferramenta criada pelo ekovegeance:<br />
<a href="https://github.com/ekovegeance/DDOS" rel="noopener noreferrer" target="_blank">https://github.com/ekovegeance/DDOS</a></p>
<p>Em um servidor/desktop linux  vai precisar ter instalado os pacotes bash sudo curl netcat hping3 openssl stunnel nmap whois dnsutils.<br />
<a href="https://github.com/ekovegeance/DDOS/archive/v1.2.4.zip">Baixe os arquivos</a>, extraia entre em sua pasta e execute o arquivo ddos.</p>
<pre class="remontti-code">$ wget https://github.com/ekovegeance/DDOS/archive/v1.2.4.zip
$ unzip v1.2.4.zip 
$ cd DDOS-1.2.4/
$ ./ddos</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos.png" data-rel="lightbox-gallery-QM69vpW4" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos.png" alt="" width="676" height="881" class="alignnone size-full wp-image-3988" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos.png 676w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ddos-230x300.png 230w" sizes="auto, (max-width: 676px) 100vw, 676px" /></a></p>
<p>Gostou? Se sentindo mais seguro agora?</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/3981">Proteja-se de ataques DoS/DDoS mitigando com FastNetMon e anuncie os prefixos atacados (blackholes) para sua operadora, usando Mikrotik :-)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3981/feed</wfw:commentRss>
			<slash:comments>47</slash:comments>
		
		
			</item>
		<item>
		<title>Como entregar IPv6+IPv4 no Mikrotik/RouterOS através de PPPoE/DHCPv6 PD e registrando os logs em um banco de dados</title>
		<link>https://blog.remontti.com.br/3931</link>
					<comments>https://blog.remontti.com.br/3931#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 22 Jan 2020 02:28:36 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian 10]]></category>
		<category><![CDATA[Delegated-IPv6-Prefix]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[ppp]]></category>
		<category><![CDATA[pppoe]]></category>
		<category><![CDATA[Prefix-Delegated]]></category>
		<category><![CDATA[routeos]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3931</guid>

					<description><![CDATA[<p>Neste tutorial vamos aprender como entregar IPv6 para clientes finais utilizando RouterOS/Mikrotik (Concentrador PPPoE) e registrar os logs dos prefixos IPv6 entregue na WAN (Remote IPv6 Prefix Pool) e na LAN (DHCPv6 PD Pool).&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3931">Como entregar IPv6+IPv4 no Mikrotik/RouterOS através de PPPoE/DHCPv6 PD e registrando os logs em um banco de dados</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/2020/01/banner_ipv6_log_mk.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-3950" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/banner_ipv6_log_mk.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2020/01/banner_ipv6_log_mk-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/banner_ipv6_log_mk-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /><br />
Neste tutorial vamos aprender como entregar IPv6 para clientes finais utilizando RouterOS/Mikrotik (Concentrador PPPoE) e registrar os logs dos prefixos IPv6 entregue na WAN (Remote IPv6 Prefix Pool) e na LAN (DHCPv6 PD Pool).</p>
<p>Ainda hoje encontramos alguns bugs no Mikrotik, e um dos maiores motivos de buscar essa solução foi que freeradius não registra os logs de IPv6 PD (Mikrotik), o IPv6 que vai se configurar na LAN cliente (o mais importante a ser guardado), seria muito mais fácil para muitos sistemas se implementassem o Delegated-IPv6-Prefix, mas já faz 6 anos (jan/2020) que é motivo de discussão lá no <a href="https://forum.mikrotik.com/viewtopic.php?t=89443" rel="noopener noreferrer" target="_blank">forum</a>. E para variar a solução é dar aquele jeitinho&#8230;. (Popular gambiarra) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Para montar esse servidor de logs você precisa apenas de um serviço WEB (Apache/NGINX) PHP7+ e um banco de dados MySQL/MariaDB.</p>
<p><strong>Requisito para montar um servidor do zero</strong>:<br />
<a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">&#8211; Debian 10 Stretch / Instalação Limpa</a><br />
<a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">&#8211; Como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP”</a></p>
<p>Você precisa ter um pouquinho de conhecimento em IPv6 e saber dividir as subclasses. Recomendo dar uma olhadinha no <a href="http://ipv6.nic.br/" rel="noopener noreferrer" target="_blank">http://ipv6.nic.br/</a> lá irá encontrar cursos do NIC.BR.</p>
<p>Recomendo você instalar uma calculadora de IPv6. Aqui vai uma calculador muito boa que uso no dia a dia.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc.png" alt="" width="1680" height="1008" class="alignnone size-full wp-image-3933" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc.png 1680w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-300x180.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-1024x614.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-768x461.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-1536x922.png 1536w" sizes="auto, (max-width: 1680px) 100vw, 1680px" /></a></p>
<pre class="remontti-code"># apt install wget python-ipaddr
# wget https://blog.remontti.com.br/arquivos/Home/ip6calc -O /bin/ip6calc
# chmod +x /bin/ip6calc</pre>
<p>Para fazer o calculo use ex.:</p>
<pre class="remontti-code"># ip6calc 2001:db8:abcd::/48</pre>
<p>Para esse projeto desenvolvi em PHP alguns arquivos onde fica &#8220;ouvido&#8221; os logs que o Mikrotik irá enviar e uma telinha simples para fazer buscas dos IPs nesse banco de dados. Já disponibilizei ele lá no <a href="https://github.com/remontti/LogIPv6RouterOS" rel="noopener noreferrer" target="_blank">github</a>.</p>
<p>Com seu servidor web configurado, <a href="https://blog.remontti.com.br/3464" rel="noopener noreferrer" target="_blank">seria bacana criar um host no seu dns e configurar nesse seu servdor web um domínio virtual</a> ex.: log6.seudominio.com.br onde você irá jogar os arquivos do projeto. Mas como muitos não tem essa facilidade vou tentar deixar aqui a forma mais simples, que é jogar os arquivos no diretório padrão do apache &#8220;/var/www/html&#8221;, assim qualquer um consegue montar <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>Acessamos o diretório base então</p>
<pre class="remontti-code"># cd /var/www/html
# wget https://github.com/remontti/LogIPv6RouterOS/archive/master.zip
# apt install unzip
# unzip master.zip 
# mv LogIPv6RouterOS-master logs6
# cd logs6</pre>
<p>Por segurança crie/edite um .htaccess para proteger que apenas determinados IPs tenham acesso. (apensar de ter um token)</p>
<pre class="remontti-code"># vim .htaccess</pre>
<p>Altere pelo IPs que você deseja que tenham acesso. (Seus router e seu NOC)</p>
<pre class="remontti-code">Options -Indexes
&lt;RequireAll&gt;
    &lt;RequireAny&gt;
        Require ip 200.200.200.0/24
        Require ip 192.168.0.0/26
        Require ip 2001:db8::/32
    &lt;/RequireAny&gt;
&lt;/RequireAll&gt;</pre>
<p>Precisaremos criar um banco de dados e nossa tabela. Para gerar suas senhas/token recomendo <a href="https://senhasegura.remontti.com.br/" rel="noopener noreferrer" target="_blank">https://senhasegura.remontti.com.br/</a> e gerar algo aleatório.</p>
<pre class="remontti-code"># mariadb -p</pre>
<p>Crie o banco de dados, não esqueça de alterar a senha (SUA_SENHA_DA_CONEXAO)</p>
<pre class="remontti-code">CREATE DATABASE logs6;
GRANT ALL PRIVILEGES ON logs6.* TO &#039;logs6&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA_DA_CONEXAO&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Importe a tabela utilizando a senha criada anteriormente</p>
<pre class="remontti-code"># mariadb -u logs6 logs6 &lt; logs6_mikrotik.sql -p</pre>
<p>Agora altere no arquivo <strong>config.php</strong> o <strong>token</strong> para validar seu envio de dados e acessar o interface simples que desenvolvi para buscas, e a senha de conexão com banco (db_password).</p>
<pre class="remontti-code">
?php
/* Your security token  */
$token = &#039;xxxxxxxxxxxxx&#039;;

/* Set langage */
// Portugês Brasil: pt-br
// English:  en
$lang = &#039;pt-br&#039;;

/* Db conect */
$db_host = &#039;localhost&#039;;
$db_user = &#039;logs6&#039;;
$db_password = &#039;SUA_SENHA_DA_CONEXAO&#039;;
$db_name = &#039;logs6&#039;;
</pre>
<p>Agora acesse sua <strong>http(s)://URL/logs6/</strong>. Você deve receber a seguinte tela.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6.png" alt="" width="965" height="243" class="alignnone size-full wp-image-3971" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6.png 965w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6-300x76.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6-768x193.png 768w" sizes="auto, (max-width: 965px) 100vw, 965px" /></a></p>
<p>Já pode autenticar com seu token (ainda não terá logs, então não adianta querer fazer buscas rsrsrs)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search.png" alt="" width="991" height="253" class="alignnone size-full wp-image-3974" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search.png 991w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search-300x77.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search-768x196.png 768w" sizes="auto, (max-width: 991px) 100vw, 991px" /></a></p>
<p>Se alguém tiver ideias melhores/criticas todas são bem vindas, sinta-se a vontade para criar forks do projeto. </p>
<p>Para entregar IPv6 em seu Mk é claro que  precisa ter conectividade v6 em seu concentrador PPPoE (Não vou entrar em detalhes nessa parte pois entraria na questão roteamento da sua rede, mas se vale de ajuda como dica um iBGP/OSPF resolve fácil)</p>
<p>Servidor preparado para receber os logs vamos ao routerOS/Mikrotik. Você precisará criar duas Pool, uma para <strong>WAN</strong> outra para a <strong>LAN</strong>, como recomendação do nic.br para LAN do cliente devemos enviar um prefixo /56 (mas isso não é uma regra). A calcular pode ajudar muito nessa parte. No meu exemplo vou reservar um <strong>prefixo /48</strong> para entregar <strong>prefixos /64 na WAN</strong> (65.536 prefixos/64), e um <strong>prefixo /45</strong> entregando <strong>prefixos /56</strong> oque daria 2.048 prefixos (clientes).</p>
<p>Ex 2001:db8:1000::/48 (WAN)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1.png" alt="" width="1568" height="814" class="alignnone size-full wp-image-3939" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1.png 1568w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-300x156.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-1024x532.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-768x399.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-1536x797.png 1536w" sizes="auto, (max-width: 1568px) 100vw, 1568px" /></a></p>
<p>Ex 2001:db8:2000::/45 (LAN)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2.png" alt="" width="1571" height="831" class="alignnone size-full wp-image-3940" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2.png 1571w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-300x159.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-1024x542.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-768x406.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-1536x812.png 1536w" sizes="auto, (max-width: 1571px) 100vw, 1571px" /></a></p>
<p><strong>IPv6 -> Pool</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6.png" alt="" width="538" height="182" class="alignnone size-full wp-image-3942" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6.png 538w, https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6-300x101.png 300w" sizes="auto, (max-width: 538px) 100vw, 538px" /></a></p>
<p>Alteramos no profile. Menu PPP aba Profiles.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1.png" alt="" width="1138" height="658" class="alignnone size-full wp-image-3943" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1.png 1138w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1-300x173.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1-1024x592.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1-768x444.png 768w" sizes="auto, (max-width: 1138px) 100vw, 1138px" /></a><br />
<strong>Remote IPv6 Prefix Pool</strong> selecione sua <strong>pool_wan</strong> e <strong>DHCPv6 PD Pool </strong>sua <strong>pool_lan</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2.png" alt="" width="546" height="250" class="alignnone size-full wp-image-3944" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2.png 546w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2-300x137.png 300w" sizes="auto, (max-width: 546px) 100vw, 546px" /></a><br />
Na abra Protocol, Use IPv6 selecione yes.</p>
<p>Vamos ao pulo do gato na aba <strong>Scripts</strong>. A ideia aqui é toda vez que um  PPPoE conectar ou desconectar ele execute um script. Vai ser necessário que você altere o TOKEN que você configurou lá no <strong>config.php</strong>, informe a URL (URLUP) correta que encontrará seu arquivo log6.php e em <strong>checkconnection</strong> informe o IP do seu servidor (explico o motivo a seguir).</p>
<pre class="remontti-code">:global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;;
:global URLUP &quot;http://logs6.remontti.com.br/log6.php&quot;;
:global checkconnection &quot;200.200.200.200&quot;;</pre>
<p>A lógica é: Antes de tentar enviar as informações/valores (via post ao log6.php) fazer uma verificação se a conexão exite com o servidor de log, isso foi necessário ao simular uma "queda de energia", as vezes ele pode autenticar antes de conseguir uma conexão (se seu o usuários estiver no routerOS e ai perdemos todos os logs) nesse caso ele fica aguardando por até 5 min na tentativa (ping ao ip checkconnection) antes prosseguir, caso exista uma conexão (checkconnection) então prossegue com o script coletando as informações. </p>
<p>Eu aproveitei coletar IPv4 como <strong>localAddr</strong> (NAS), <strong>remoteAddr</strong> (IPv4 entregue ao cliente) isso vai facilitar também em uma analise se você quiser bater com os dados do freeradius (radacct), já aproveitei também para capturar o <strong>callerId</strong> (MAC), serviço PPP <strong>calledId</strong>. Acredito que com essas informações podem ser uteis para outros fins. Seguindo o script todo o PPPoE que subir ele vai criar um prefixo (WAN) <strong>RemoteIPv6</strong> e em seguida precisei fazer um while que setei 60 seg para que a cada segundo ele tente identificar em <strong>/ipv6 dhcp-server binding</strong> se o cliente solicitou o prefixo que ele vai auto se configurar em sua LAN, passando por esses requisitos ele irai gerar um LOG (<a href="https://blog.remontti.com.br/2674" rel="noopener noreferrer" target="_blank">que você também pode estar salvando em um servidor de log remoto</a>) e finalizando fará um fetch com os dados do binding caso ele consiga ou enviará null para a URL e assim o servidor salva-lo no banco de dados. Você verá dois logs na tela de logs, um azul quando uma conexão subir e um vermelho quando desconectar, se você desejar não ter esses logs é só remover as linha "<em>log warning message=..... / :log error message=.....</em>"</p>
<p>Acesse PPP vá até a aba profile e configure os script do profile. Não esqueça de alterar as variáveis globais.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script-300x171.png" alt="" width="300" height="171" class="alignnone size-medium wp-image-3935" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script-300x171.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script-768x439.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script.png 814w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
<strong>On UP</strong></p>
<pre class="remontti-code">{
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;;
  :global URLUP &quot;http://________________/logs6/log6.php&quot;;
  :global checkconnection &quot;200.200.200.200&quot;;
  :local ii 0;
  :local tt 300; # Aguarda até 5min para tentar 
  while ( $ii &lt; $tt &#038;&#038; ([/ping $checkconnection count=1]=0) ) do={
    :put $ii
    :set $ii ($ii + 1)
    :delay delay-time=1s
    :log error &quot;Awaiting connection ... $checkconnection&quot;;
  }
  :local localAddr $&quot;local-address&quot;
  :local remoteAddr $&quot;remote-address&quot;
  :local callerId $&quot;caller-id&quot;
  :local calledId $&quot;called-id&quot;
  :local interfaceName [/interface get $interface name]
  :local RemoteIPv6 [/ipv6 nd prefix get value-name=prefix [find interface=$interfaceName]]
  :local i 0;
  :local x 1;  
  :local t 60; # Segundos aguardando ipv6 ser configurado no cliente
  while ($i &lt; $t &#038;&#038; [ :len [/ipv6 dhcp-server binding find server=$interfaceName] ] &lt; $x) do={
    :put $i
    :set $i ($i + 1)
    :delay delay-time=1s
  }
  if ($i = $t) do={
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | NULL&quot;
    /tool fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&#038;token=$TOKEN&#038;user=$user&#038;mac=$callerId&#038;nas=$localAddr&#038;service=$calledId&#038;ipv4=$remoteAddr&#038;remoteipv6=$RemoteIPv6&quot; http-method=post
  } else={
    :local DHCPv6PD [/ipv6 dhcp-server binding get value-name=address [find server=$interfaceName]]
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | $DHCPv6PD&quot;
    /tool fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&#038;token=$TOKEN&#038;user=$user&#038;mac=$callerId&#038;nas=$localAddr&#038;service=$calledId&#038;ipv4=$remoteAddr&#038;remoteipv6=$RemoteIPv6&#038;dhcpv6pd=$DHCPv6PD&quot; http-method=post
  }
  file remove log6.php
}</pre>
<p>E ao desconectar vamos enviar ao servidor que o mesmo descontou.<br />
<strong>On Down</strong></p>
<pre class="remontti-code">{
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;
  :global URLDOWN &quot;http://________________/logs6/log6.php&quot;
  :local localAddr $&quot;local-address&quot;
  :local callerId $&quot;caller-id&quot;
  /tool fetch url=&quot;$URLDOWN&quot; http-data=&quot;action=u&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&quot; http-method=post
  :log warning message=&quot;DOWN: $user | $callerId | $localAddr&quot;
  file remove log6.php
}</pre>
<p>Para concluir em IPv6 -> ND<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/ipv6_nd.png" alt="" width="668" height="472" class="alignnone size-full wp-image-3957" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/ipv6_nd.png 668w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ipv6_nd-300x212.png 300w" sizes="auto, (max-width: 668px) 100vw, 668px" /><br />
Marque todas as opções.</p>
<p>No menu <strong>IP -> DNS </strong>também informe os DNS IPv6. Só assim o cliente irá aprender um DNSv6 (<em>Advertise DNS</em>)</p>
<p>Agora todo PPPoE que autenticar um log será registrado, o legal aqui é que se alguém não utiliza Radius poderá também ter um log <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>No arquivo log6.php que recebe os logs sempre que um usuário conectar ele irá verificar se não existe uma conexão em aberta, pois em casos de quedas de energia não vai existir tempo para ele informar que o pppoe desconectou, então ele fecha a conexão com a hora da nova conexão, logo esse IP pode ter sido utilizado por algum outro usuário, neste caso ele registra a hora que fechou a conexão com "falha" (<strong>failure</strong>), para no caso de uma investigação você observar se o mesmo ip não teve algum outro usuário que usou na horário solicitado.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti.png" alt="" width="1661" height="398" class="alignnone size-full wp-image-3946" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti.png 1661w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-300x72.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-1024x245.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-768x184.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-1536x368.png 1536w" sizes="auto, (max-width: 1661px) 100vw, 1661px" /></a></p>
<p>Pelo phpMyAdmin também fica muito fácil de fazer buscas.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-300x178.png" alt="" width="300" height="178" class="alignnone size-medium wp-image-3959" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-300x178.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-1024x607.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-768x455.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6.png 1408w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Para quem deseja bloquear um cliente IPv6, uma solução é no Router criar outra Pool6 com uma classe "invalida" por exemplo 2001:db8:6666::/48, e no freeradius usar o attibute <strong>Mikrotik-Delegated-IPv6-Pool</strong>, pode ser na tabela radreply (dizendo para qual usuário) ou para um  grupo de configurações (radgroupreply) "plano".</p>
<p>Mikrotik:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6.png" data-rel="lightbox-gallery-l556YP7r" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6.png" alt="" width="544" height="292" class="alignnone size-full wp-image-3963" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6.png 544w, https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6-300x161.png 300w" sizes="auto, (max-width: 544px) 100vw, 544px" /></a></p>
<p>Freeradius<br />
Ex.: <strong>radreply </strong></p>
<pre class="remontti-code">INSERT INTO `radreply` (`username`, `attribute`, `op`, `value`) VALUES
(&#039;nome_user&#039;, &#039;Mikrotik-Delegated-IPv6-Pool&#039;, &#039;=&#039;, &#039;ipv6_drop&#039;);</pre>
<p>Ex.: <strong>radgroupreply</strong></p>
<pre class="remontti-code">INSERT INTO `radgroupreply` (`groupname`, `attribute`, `op`, `value`) VALUES
(&#039;PLANO_BLOQUEADO&#039;, &#039;Mikrotik-Delegated-IPv6-Pool&#039;, &#039;=&#039;, &#039;ipv6_drop&#039;);</pre>
<p>Desta forma o routerOS interpretará o nome da pool pelo atriburo Mikrotik-Delegated-IPv6-Pool, e assim que o cliente logar ele não pegará do bloco válido. <em>Até poderia usar uma válido e bloquear no firewall (mas isso é coisa de sistema amador #ficadica).</em>  </p>
<p>Se seu freradius é antigo (v2.x) precisará ter o <a href="https://wiki.mikrotik.com/wiki/Manual:RADIUS_Client/vendor_dictionary" rel="noopener noreferrer" target="_blank">dictionary</a> atualizado.</p>
<p>Vou deixar um exemplo de como configurar um pppoe cliente em um mikrotik, já que percebi um bug quando ele precisa renovar seu IPv6.</p>
<pre class="remontti-code">/interface pppoe-client
add add-default-route=yes disabled=no interface=ether1 name=pppoe-out1 password=SENHA use-peer-dns=yes user=SENHA

/ipv6 dhcp-client
add interface=pppoe-out1 pool-name=DHCPv6PD pool-prefix-length=56 request=prefix

/ipv6 address
add advertise=yes from-pool=DHCPv6PD interface=INTERFACE_LAN

/ppp profile
set *0 on-up=&quot;{\r\
    \n  /delay delay-time=5s\r\
    \n  /ipv6 dhcp-client renew numbers=0\r\
    \n  /delay delay-time=2s\r\
    \n  /ipv6 dhcp-client renew numbers=0\r\
    \n}&quot;
/ipv6 firewall mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu passthrough=yes \
    protocol=tcp tcp-flags=syn
</pre>
<p>Gambiarazinha no profile para renovar o IP sem dor de cabeça toda vez que ele autenticar (bugs)</p>
<pre class="remontti-code">{
  /delay delay-time=5s
  /ipv6 dhcp-client renew numbers=0
  /delay delay-time=2s
  /ipv6 dhcp-client renew numbers=0
}</pre>
<p>Gostou? Espero que você consiga implementar seu IPv6 e esteja seguro com os logs armazenado! </p>
<p>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!<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>
<h3> RouterOS v7</h3>
<p>Descomente os <strong># :log warning "DEBUG>...."</strong> se precisar debugar o script, ou remova para deixar mais enxuto o script.</p>
<p><strong>UP</strong></p>
<pre class="remontti-code-blue">
{
  # :log warning &quot;DEBUG&gt; UP: Iniciando o script logs6&quot;;
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;;
  :global URLUP &quot;http://logs6.remontti.com.br/log6.php&quot;;
  :global checkconnection &quot;10.0.0.1&quot;;
  :local ii 0;
  :local tt 60;
  while ( $ii &lt; $tt &#038;&#038; ([/ping $checkconnection count=1]=0) ) do={
    :put $ii
    :set $ii ($ii + 1)
    :delay delay-time=1s
    :log error &quot;Aguardando conexao com servidor... $checkconnection&quot;;
  }
  :local localAddr $&quot;local-address&quot;
  # :log warning &quot;DEBUG&gt; localAddr = $localAddr&quot;;
  :local remoteAddr $&quot;remote-address&quot;
  # :log warning &quot;DEBUG&gt; remoteAddr = $remoteAddr&quot;;
  :local callerId $&quot;caller-id&quot;
  # :log warning &quot;DEBUG&gt; callerId = $callerId&quot;;
  :local calledId $&quot;called-id&quot;
  # :log warning &quot;DEBUG&gt; calledId = $calledId&quot;;
  :local userName $&quot;user&quot;
  # :log warning &quot;DEBUG&gt; userName = $userName&quot;;
  :local interfaceID $&quot;interface&quot;
  # :log warning &quot;DEBUG&gt; interfaceID = $interfaceID&quot;;
  :local interfaceName [/interface get $interfaceID name]  
  # :log warning &quot;DEBUG&gt; interfaceName = $interfaceName&quot;;
  :local RemoteIPv6 [/ipv6 nd prefix get value-name=prefix [find interface=$interfaceName]]
  # :log warning &quot;DEBUG&gt; RemoteIPv6 = $RemoteIPv6&quot;;
  :local i 0;
  :local x 1;  
  :local t 60;
  while ($i &lt; $t &#038;&#038; [ :len [/ipv6 dhcp-server binding find server=$interfaceName] ] &lt; $x) do={    
    :put $i    
    :set $i ($i + 1)
    :delay delay-time=1s
    # :log warning &quot;DEBUG&gt; Aguardando IPv6 da LAN de $userName ($i)s&quot;;
  }
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove log6.php
  }  
  if ($i = $t) do={
    # :log warning &quot;DEBUG&gt; IPv6 LAN: não descoberto descoberto&quot;;
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | NULL&quot;
    # :log warning &quot;DEBUG&gt; Executando fetch UP: $URLUP http-data=action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6 http-method=post&quot;
    /tool/fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6&quot; http-method=post
  } else={    
    :local DHCPv6PD [/ipv6 dhcp-server binding get value-name=address [find server=$interfaceName]]
    # :log warning &quot;DEBUG&gt; IPv6 LAN: Descoberto descoberto $DHCPv6PD&quot;;
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | $DHCPv6PD&quot;
    # :log warning &quot;DEBUG&gt; Executando fetch UP: $URLUP http-data=action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6&amp;dhcpv6pd=$DHCPv6PD http-method=post&quot;;
    /tool/fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6&amp;dhcpv6pd=$DHCPv6PD&quot; http-method=post
  }
  :delay delay-time=1s
  # :log warning &quot;DEBUG&gt; Removendo arquivo log6.php&quot;;
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove log6.php
  }
  # :log warning &quot;DEBUG&gt; Script concluído.&quot;
}
</pre>
<p><strong>DOWN</strong></p>
<pre class="remontti-code-blue">
{
  # :log warning &quot;DEBUG&gt; DOWN: Iniciando o script logs6&quot;;
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;
  :global URLDOWN &quot;http://logs6.remontti.com.br/log6.php&quot;
  :local localAddr $&quot;local-address&quot;
  # :log warning &quot;DEBUG&gt; localAddr = $localAddr&quot;;
  :local callerId $&quot;caller-id&quot;
  # :log warning &quot;DEBUG&gt; calledId = $calledId&quot;;
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove log6.php
  }  
  # :log warning &quot;DEBUG&gt; Executando fetch DOWN: $URLDOWN http-data=action=u&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr http-method=post&quot;;
  /tool/fetch url=&quot;$URLDOWN&quot; http-data=&quot;action=u&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&quot; http-method=post
  :log warning message=&quot;DOWN: $user | $callerId | $localAddr&quot;
  :delay delay-time=1s
  # :log warning &quot;DEBUG&gt; Removendo arquivo log6.php&quot;;
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove $file
  }
  # :log warning &quot;DEBUG&gt; Script concluído.&quot;
}
</pre>
<p>O post <a href="https://blog.remontti.com.br/3931">Como entregar IPv6+IPv4 no Mikrotik/RouterOS através de PPPoE/DHCPv6 PD e registrando os logs em um banco de dados</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3931/feed</wfw:commentRss>
			<slash:comments>42</slash:comments>
		
		
			</item>
		<item>
		<title>Criando backup do RouterOS/Mikrotik via FTP</title>
		<link>https://blog.remontti.com.br/3878</link>
					<comments>https://blog.remontti.com.br/3878#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 18 Dec 2019 00:40:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[backuk]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[pure-ftpd]]></category>
		<category><![CDATA[routeos]]></category>
		<category><![CDATA[salvar]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[seguro]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3878</guid>

					<description><![CDATA[<p>Neste exemplo vou ensinar como fazer um backup do seu routerOS/Mikroitk via FTP. Testei com as versões > 6.48.x e > 7.6 Requisitos ter um servidor FTP 😛 Sugestão: Como criar um servidor FTP&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3878">Criando backup do RouterOS/Mikrotik via FTP</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/2019/12/mikrotik_backup_ftp.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-3886" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/12/mikrotik_backup_ftp.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2019/12/mikrotik_backup_ftp-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2019/12/mikrotik_backup_ftp-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /><br />
Neste exemplo vou ensinar como fazer um backup do seu routerOS/Mikroitk via FTP.</p>
<p>Testei com as versões > 6.48.x  e > 7.6</p>
<p>Requisitos ter um servidor FTP <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />
Sugestão: <a href="https://blog.remontti.com.br/3865" rel="noopener noreferrer" target="_blank">Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados (MariaDB) usando Debian 10</a></p>
<p>Vamos ao script, você precisa alterar:<br />
:global host <strong>____IP/DNS_SERVIDOR_FTP____</strong><br />
:global usuario <strong>____USER____</strong><br />
:global senha<strong> ____SENHA____</strong><br />
:global diretorio<strong> ____pastaX____</strong></p>
<p>Acesse o menu: <strong>System</strong> >> <strong>Script</strong> e depois em [+]<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp.png" data-rel="lightbox-gallery-Qslnszt7" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp.png" alt="" width="1680" height="909" class="alignnone size-full wp-image-3882" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp.png 1680w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp-300x162.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp-1024x554.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp-768x416.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp-1536x831.png 1536w" sizes="auto, (max-width: 1680px) 100vw, 1680px" /></a></p>
<p>O nome do arquivo será o mesmo que você definiu em <strong>System</strong> >> <strong>Identity</strong>, serão criado dois arquivos, uma backup e um export (AAAA-MM-DD.NOME.backup AAAA-MM-DD.NOME.rsc) </p>
<pre class="remontti-code">:log warning &quot;***************************************&quot;
# Conexão FTP
:global host ____IP/DNS_SERVIDOR_FTP____
:global usuario ____USER____
:global senha ____SENHA____
:global diretorio ____pastaX____
# Pega o nome do Router
:global identifica [/system identity get name ];
# Gera data no formato AAAA-MM-DD
:global data [/system clock get date]
:global meses (&quot;jan&quot;,&quot;feb&quot;,&quot;mar&quot;,&quot;apr&quot;,&quot;may&quot;,&quot;jun&quot;,&quot;jul&quot;,&quot;aug&quot;,&quot;sep&quot;,&quot;oct&quot;,&quot;nov&quot;,&quot;dec&quot;);
:global ano ([:pick $data 7 11])
:global mestxt ([:pick $data 0 3])
:global mm ([ :find $meses $mestxt -1 ] + 1);
:if ($mm &lt; 10) do={ :set mm (&quot;0&quot; . $mm); }
:global mes ([:pick $ds 7 11] . $mm . [:pick $ds 4 6])
:global dia ([:pick $data 4 6])
:log info &quot;Gerando backup: $ano-$mes-$dia.$identifica.backup&quot;;
/system backup save name=&quot;$ano-$mes-$dia.$identifica&quot;;
:log info &quot;Gerando export: $ano-$mes-$dia.$identifica.rsc&quot;;
/export file=&quot;$ano-$mes-$dia.$identifica&quot;
:log info &quot;Processando...&quot;;
:delay 5s
:log info &quot;Conectando FTP Server...&quot;;
:log info &quot;Enviando Backup [$ano-$mes-$dia.$identifica.backup] ...&quot;;
/tool fetch address=$host src-path=&quot;$ano-$mes-$dia.$identifica.backup&quot; user=&quot;$usuario&quot; password=&quot;$senha&quot; port=21 upload=yes mode=ftp dst-path=&quot;$diretorio/$ano-$mes-$dia.$identifica.backup&quot;
:log info &quot;Enviando Export [$ano-$mes-$dia.$identifica.rsc] ...&quot;;
/tool fetch address=$host src-path=&quot;$ano-$mes-$dia.$identifica.rsc&quot; user=&quot;$usuario&quot; password=&quot;$senha&quot; port=21 upload=yes mode=ftp dst-path=&quot;$diretorio/$ano-$mes-$dia.$identifica.rsc&quot;
:delay 1
:log info &quot;Backup enviado com sucesso...&quot;;
:log info &quot;Removendo arquivos...&quot;;
 /file remove &quot;$ano-$mes-$dia.$identifica.backup&quot;
 /file remove &quot;$ano-$mes-$dia.$identifica.rsc&quot;
:log info &quot;Rotina de backup finalizada...&quot;;
:log warning &quot;***************************************&quot;;</pre>
<p>Agora será preciso agenda-lo para execução a cada X período, no meu exemplo vou definir que todos os meio dias a cada 3 dias. Ajuste de acordo com suas necessidades:<br />
Acesse o menu: <strong>System</strong> >> <strong>Scheduler</strong> [+]<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2.png" data-rel="lightbox-gallery-Qslnszt7" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2.png" alt="" width="1353" height="785" class="alignnone size-full wp-image-3884" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2.png 1353w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2-300x174.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2-1024x594.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2-768x446.png 768w" sizes="auto, (max-width: 1353px) 100vw, 1353px" /></a></p>
<p>Se estiver com preguiça <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> pode copiar as linhas abaixo e colar no terminal, depois só alterar as variáveis.</p>
<pre class="remontti-code">/system script
add dont-require-permissions=no name=backup_ftp owner=remontti policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=&quot;:log warning \&quot;***************************************\&quot;\r\
    \n# Conex\E3o FTP\r\
    \n:global host ____IP/DNS_SERVIDOR_FTP____\r\
    \n:global usuario ___USUARIO___\r\
    \n:global senha ___SENHA___\r\
    \n:global diretorio ___NOME_DA_PASTA___\r\
    \n# Pega o nome do Router\r\
    \n:global identifica [/system identity get name ];\r\
    \n# Gera data no formato AAAA-MM-DD\r\
    \n:global data [/system clock get date]\r\
    \n:global meses (\&quot;jan\&quot;,\&quot;feb\&quot;,\&quot;mar\&quot;,\&quot;apr\&quot;,\&quot;may\&quot;,\&quot;jun\&quot;,\&quot;jul\&quot;,\&quot;aug\&quot;,\&quot;sep\&quot;,\&quot;oct\&quot;,\&quot;nov\&quot;,\&quot;dec\&quot;);\r\
    \n:global ano ([:pick \$data 7 11])\r\
    \n:global mestxt ([:pick \$data 0 3])\r\
    \n:global mm ([ :find \$meses \$mestxt -1 ] + 1);\r\
    \n:if (\$mm &lt; 10) do={ :set mm (\&quot;0\&quot; . \$mm); }\r\
    \n:global mes ([:pick \$ds 7 11] . \$mm . [:pick \$ds 4 6])\r\
    \n:global dia ([:pick \$data 4 6])\r\
    \n:log info \&quot;Gerando backup: \$ano-\$mes-\$dia.\$identifica.backup\&quot;;\r\
    \n/system backup save name=\&quot;\$ano-\$mes-\$dia.\$identifica\&quot;;\r\
    \n:log info \&quot;Gerando export: \$ano-\$mes-\$dia.\$identifica.rsc\&quot;;\r\
    \n/export file=\&quot;\$ano-\$mes-\$dia.\$identifica\&quot;\r\
    \n:log info \&quot;Processando...\&quot;;\r\
    \n:delay 5s\r\
    \n:log info \&quot;Conectando FTP Server...\&quot;;\r\
    \n:log info \&quot;Enviando Backup [\$ano-\$mes-\$dia.\$identifica.backup] ...\&quot;;\r\
    \n/tool fetch address=\$host src-path=\&quot;\$ano-\$mes-\$dia.\$identifica.backup\&quot; user=\&quot;\$usuario\&quot; password=\&quot;\$senha\&quot; port=21 upload=yes mode=ftp dst-path=\&quot;\$diretorio/\$ano-\$mes-\$dia.\$identifica.backup\&quot;\
    \r\
    \n:log info \&quot;Enviando Export [\$ano-\$mes-\$dia.\$identifica.rsc] ...\&quot;;\r\
    \n/tool fetch address=\$host src-path=\&quot;\$ano-\$mes-\$dia.\$identifica.rsc\&quot; user=\&quot;\$usuario\&quot; password=\&quot;\$senha\&quot; port=21 upload=yes mode=ftp dst-path=\&quot;\$diretorio/\$ano-\$mes-\$dia.\$identifica.rsc\&quot;\r\
    \n:delay 1\r\
    \n:log info \&quot;Backup enviado com sucesso...\&quot;;\r\
    \n:log info \&quot;Removendo arquivos...\&quot;;\r\
    \n /file remove \&quot;\$ano-\$mes-\$dia.\$identifica.backup\&quot;\r\
    \n /file remove \&quot;\$ano-\$mes-\$dia.\$identifica.rsc\&quot;\r\
    \n:log info \&quot;Rotina de backup finalizada...\&quot;;\r\
    \n:log warning \&quot;***************************************\&quot;;&quot;

/system scheduler
add interval=3d name=backup_ftp on-event=backup_ftp policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=dec/17/2019 start-time=12:00:00</pre>
<p>Simples né! Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!<br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/3878">Criando backup do RouterOS/Mikrotik via FTP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3878/feed</wfw:commentRss>
			<slash:comments>19</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação do Elastic Stack 7 + ElastiFlow no Debian 10 Buster (Bônus Traffic Flow Mikrotik/RouterOS)</title>
		<link>https://blog.remontti.com.br/3368</link>
					<comments>https://blog.remontti.com.br/3368#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 16 Aug 2019 18:06:41 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian buster]]></category>
		<category><![CDATA[debian10]]></category>
		<category><![CDATA[Elasticsearch]]></category>
		<category><![CDATA[ElastiFlow]]></category>
		<category><![CDATA[IPFIX]]></category>
		<category><![CDATA[Kibana]]></category>
		<category><![CDATA[Logstash]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Netflow]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[sFlow]]></category>
		<category><![CDATA[Traffic Flow]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3368</guid>

					<description><![CDATA[<p>Para um tutorial mais atualizado acesse: https://blog.remontti.com.br/6255 Neste tutorial abordaremos a instalação e configuração do Elastic Stack 7.x, que será usado para alimentar a solução ElastiFlow. Elastic Stack consiste no Elasticsearch, Logstash e Kibana.&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3368">Instalação do Elastic Stack 7 + ElastiFlow no Debian 10 Buster (Bônus Traffic Flow Mikrotik/RouterOS)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Para um tutorial mais atualizado acesse: <a href="https://blog.remontti.com.br/6255" rel="noopener" target="_blank">https://blog.remontti.com.br/6255</a></h3>
<p>Neste tutorial abordaremos a instalação e configuração do Elastic Stack 7.x, que será usado para alimentar a solução ElastiFlow. </p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow-debian-10-buster-1.png" alt="" width="1173" height="720" class="alignnone size-full wp-image-3374" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow-debian-10-buster-1.png 1173w, https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow-debian-10-buster-1-300x184.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow-debian-10-buster-1-768x471.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow-debian-10-buster-1-1024x629.png 1024w" sizes="auto, (max-width: 1173px) 100vw, 1173px" /></p>
<p><strong>Elastic Stack</strong> consiste no Elasticsearch, Logstash e Kibana.<br />
&#8211; <strong>Elasticsearch</strong> é um mecanismo de pesquisa baseado em texto completo.<br />
&#8211; <strong>Logstash</strong> é um mecanismo de coleta de dados e análise de log.<br />
&#8211; <strong>Kibana</strong> é uma plataforma de análise e visualização usada para exibir os painéis do ElastiFlow.<br />
&#8211; <strong>ElastiFlow</strong> fornece coleta e visualização de dados de fluxo de rede usando o Elastic Stack (Elasticsearch, Logstash e Kibana). Suporta os tipos de fluxo Netflow v5/v9, sFlow e IPFIX.</p>
<p>Painéis fornecidos através do ElastiFlow</p>
<p><strong>Visão Global</strong> <em>Overview</em><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/Overview.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/Overview-1024x601.png" alt="" width="1024" height="601" class="alignnone size-large wp-image-3391" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/Overview-1024x601.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Overview-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Overview-768x451.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Overview.png 2032w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><strong>Top-N</strong><br />
Existem painéis Top-N separados para os principais locutores, serviços, conversas e aplicativos.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/Top-N.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/Top-N-1024x601.png" alt="" width="1024" height="601" class="alignnone size-large wp-image-3392" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/Top-N-1024x601.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Top-N-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Top-N-768x451.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Top-N.png 2032w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><strong>Ameaças</strong> <em>Threats</em><br />
O ElastiFlow inclui um dicionário de endereços IP públicos que são conhecidos por terem uma má reputação. Este dicionário é construído a partir de muitas fontes de dados OSINT, normalizadas para uma taxonomia comum. O painel de ameaças usa essas informações de reputação de IP para destacar três tipos de ameaça/risco.<br />
1. Ameaças Públicas &#8211; Clientes públicos com baixa reputação de IP que estão atingindo endereços privados.<br />
2. Servidores em Risco &#8211; Servidores Privados que estão sendo acessados ​​por clientes com baixa reputação de IP.<br />
3. Clientes de alto risco &#8211; Clientes privados que acessam servidores públicos com baixa reputação.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/Threats.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/Threats-1024x601.png" alt="" width="1024" height="601" class="alignnone size-large wp-image-3393" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/Threats-1024x601.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Threats-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Threats-768x451.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Threats.png 2032w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><strong>Fluxos</strong> <em>Flows</em><br />
Existem painéis Sankey separados para as perspectivas Cliente/Servidor, Origem/Destino e Sistema Autônomo. As visualizações sankey são construídas usando o novo plugin de visualização Vega.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/Flows.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/Flows-1024x601.png" alt="" width="1024" height="601" class="alignnone size-large wp-image-3395" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/Flows-1024x601.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Flows-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Flows-768x451.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Flows.png 2032w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><strong>Geo IP</strong><br />
Existem painéis de Geo localização separados para as perspectivas Cliente/Servidor e Origem/Destino (Dados GeoLite2 criados pela MaxMind, disponíveis em <a href="http://www.maxmind.com" rel="noopener noreferrer" target="_blank">http://www.maxmind.com</a>)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/IPGeo.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/IPGeo-1024x601.png" alt="" width="1024" height="601" class="alignnone size-large wp-image-3396" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/IPGeo-1024x601.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/IPGeo-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/IPGeo-768x451.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/IPGeo.png 2032w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><strong>Tráfego por AS</strong><em> AS Traffic</em><br />
Fornece uma visão do tráfego para e de sistemas autônomos (intervalos de IP públicos)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/ASTraffic.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/ASTraffic-1024x601.png" alt="" width="1024" height="601" class="alignnone size-large wp-image-3397" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/ASTraffic-1024x601.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/ASTraffic-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/ASTraffic-768x451.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/ASTraffic.png 2032w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><strong>Exportadores de Fluxo</strong> <em>Flow Exporters</em><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowExporters.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowExporters-1024x601.png" alt="" width="1024" height="601" class="alignnone size-large wp-image-3398" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowExporters-1024x601.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowExporters-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowExporters-768x451.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowExporters.png 2032w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><strong>Detalhes do Trânsito</strong> <em>Traffic Details</em><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/TrafficDetails.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/TrafficDetails-1024x601.png" alt="" width="1024" height="601" class="alignnone size-large wp-image-3399" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/TrafficDetails-1024x601.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/TrafficDetails-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/TrafficDetails-768x451.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/TrafficDetails.png 2032w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><strong>Registros de Fluxo</strong><em> Flow Records</em><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowRecords.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowRecords-1024x601.png" alt="" width="1024" height="601" class="alignnone size-large wp-image-3400" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowRecords-1024x601.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowRecords-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowRecords-768x451.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/FlowRecords.png 2032w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><strong>Ziften ZFlow</strong><br />
O ElastiFlow adicionou suporte para registros IPFIX do agente ZFlow do ZFlow. Além de estar totalmente integrado aos painéis de controle padrão, os painéis ZFlow independentes exibem o tráfego de rede com base nos dados de usuário e de comando fornecidos pelo ZFlow.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/Ziften-ZFlow.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/Ziften-ZFlow-1024x601.png" alt="" width="1024" height="601" class="alignnone size-large wp-image-3401" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/Ziften-ZFlow-1024x601.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Ziften-ZFlow-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Ziften-ZFlow-768x451.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/Ziften-ZFlow.png 2032w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><a href="https://github.com/robcowart/elastiflow/blob/master/INSTALL.md#requirements" rel="noopener noreferrer" target="_blank">Requisitos de Hardware</a>.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow-Requirements.png" alt="" width="682" height="157" class="alignnone size-full wp-image-3375" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow-Requirements.png 682w, https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow-Requirements-300x69.png 300w" sizes="auto, (max-width: 682px) 100vw, 682px" /></p>
<p><em>Meus testes foram realizado em meu computador com VM no Virtualbox sendo 4 CPUs (i7) e 8GB de RAM</em><br />
<div id="attachment_3376" style="width: 310px" class="wp-caption alignnone"><a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/VirtualBox_Debian-10-NetFlow_16_08_2019_10_43_03.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3376" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/VirtualBox_Debian-10-NetFlow_16_08_2019_10_43_03-300x225.png" alt="" width="300" height="225" class="size-medium wp-image-3376" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/VirtualBox_Debian-10-NetFlow_16_08_2019_10_43_03-300x225.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/VirtualBox_Debian-10-NetFlow_16_08_2019_10_43_03-768x576.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/VirtualBox_Debian-10-NetFlow_16_08_2019_10_43_03.png 800w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-3376" class="wp-caption-text">E o bixinho levou um pau!</p></div></p>
<p>Vou utilizar o Debian 10 instalado de forma &#8220;limpa&#8221;, sem nenhum outro pacote, para isso siga o tutorial:<br />
<strong><a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Instalação Debian 10 Buster LIMPA Passo-a-passo</a></strong></p>
<p>Com seu Debian 10 instalado acesse o mesmo e vire root!</p>
<pre class="remontti-code"># su - </pre>
<p>Instale os pacotes básicos necessários</p>
<pre class="remontti-code"># apt install wget apt-transport-https gnupg unzip curl net-tools</pre>
<p>Recomendo a instalacao dos firmwares binário para vários drivers do kernel Linux, para isso adicione contrib non-free ao seu repositório.</p>
<pre class="remontti-code"># vim /etc/apt/sources.list</pre>
<pre class="remontti-code">deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free

deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free

deb http://deb.debian.org/debian/ buster-updates main contrib non-free
deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free</pre>
<pre class="remontti-code"># apt update
# apt install firmware-linux firmware-linux-free firmware-linux-nonfree</pre>
<p>Reinicie para que os novos módulos sejam carregado.</p>
<pre class="remontti-code"># reboot</pre>
<h3>:: Elastic Stack 7 ::</h3>
<p>Será necessário ter o Java instalado.</p>
<pre class="remontti-code"># su -
# apt install default-jre</pre>
<p>Adicione o repositório elastic.</p>
<pre class="remontti-code"># wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# echo &quot;deb https://artifacts.elastic.co/packages/7.x/apt stable main&quot; |  tee -a /etc/apt/sources.list.d/elastic-7.x.list
# apt update</pre>
<p>Faremos a instalação individual dos pacotes elasticsearch, kibana e logstash.</p>
<h3>:: Elasticsearch ::</h3>
<p>Elasticsearch é um mecanismo de pesquisa baseado em texto completo. </p>
<pre class="remontti-code"># apt install elasticsearch</pre>
<p>Após instalação vamos alterar network.host para ouvir apenas localhost, em seguida ativar o serviço e inicia-lo.</p>
<pre class="remontti-code"># sed -i &#039;s/#network.host: 192.168.0.1/network.host: 127.0.0.1/&#039; /etc/elasticsearch/elasticsearch.yml
# systemctl daemon-reload
# systemctl enable elasticsearch
# systemctl start elasticsearch</pre>
<p>Cheque se o mesmo esta funcionando</p>
<pre class="remontti-code"># curl -X GET 127.0.0.1:9200</pre>
<p>Retorno algo como&#8230;.</p>
<pre class="remontti-code">{
  &quot;name&quot; : &quot;lab&quot;,
  &quot;cluster_name&quot; : &quot;elasticsearch&quot;,
  &quot;cluster_uuid&quot; : &quot;-U7i4KbKSxSgChHSxMpcfg&quot;,
  &quot;version&quot; : {
    &quot;number&quot; : &quot;7.3.0&quot;,
    &quot;build_flavor&quot; : &quot;default&quot;,
    &quot;build_type&quot; : &quot;deb&quot;,
    &quot;build_hash&quot; : &quot;de777fa&quot;,
    &quot;build_date&quot; : &quot;2019-07-24T18:30:11.767338Z&quot;,
    &quot;build_snapshot&quot; : false,
    &quot;lucene_version&quot; : &quot;8.1.0&quot;,
    &quot;minimum_wire_compatibility_version&quot; : &quot;6.8.0&quot;,
    &quot;minimum_index_compatibility_version&quot; : &quot;6.0.0-beta1&quot;
  },
  &quot;tagline&quot; : &quot;You Know, for Search&quot;
}</pre>
<p>Caso o comando `curl -X GET 127.0.0.1:9200` retorne algum erro, tente verificar se o serviço esta rodando com o comando `systemctl status elasticsearch`. Verifique nos logs `tail -f /var/log/elasticsearch/elasticsearch.log`se o erro aparece:</p>
<pre class="remontti-code">Failure running machine learning native code. 
This could be due to running on an unsupported OS or distribution, missing OS libraries, 
or a problem with the temp directory. To bypass this problem by running 
Elasticsearch without machine learning functionality set [xpack.ml.enabled: false].&quot;</pre>
<p>Se o mesmo aparecer execute o comando:</p>
<pre class="remontti-code"># echo &quot;xpack.ml.enabled: false&quot; &gt;&gt; /etc/elasticsearch/elasticsearch.yml
# systemctl restart elasticsearch</pre>
<h3>:: kibana ::</h3>
<p>Kibana é uma plataforma de análise e visualização usada para exibir os painéis do ElastiFlow.</p>
<pre class="remontti-code"># apt install kibana</pre>
<p>Após instalação vamos alterar server.host, em seguida ativar o serviço e inicia-lo.</p>
<pre class="remontti-code"># sed -i &#039;s/#server.host: &quot;localhost&quot;/server.host: &quot;0.0.0.0&quot;/&#039; /etc/kibana/kibana.yml
# systemctl daemon-reload
# systemctl enable kibana
# systemctl start kibana</pre>
<p>Aguarde um pouco o serviço iniciar e já será possível acessar Kibana em seu navegador:<br />
http://[IP-SERVIDOR]<strong>:5601</strong></p>
<h3>:: logstash ::</h3>
<p>O Logstash é um mecanismo de coleta de dados e análise de log.</p>
<pre class="remontti-code"># apt install logstash</pre>
<p>Para aumentar o desempenho o ElastiFlow aproveita os recursos de cache e enfileiramento disponíveis em muitos dos plugins do Logstash. Esses recursos aumentam o consumo do heap da JVM. O espaço de heap da JVM usado pelo Logstash é configurado em jvm.options. Recomenda-se que o Logstash receba pelo menos 2GB de heap da JVM. Se todas as opções, incl. Pesquisas DNS estão habilitadas aumente para 4GB. Defina o tamanho de heap da JVM. </p>
<pre class="remontti-code"># vim /etc/logstash/jvm.options</pre>
<p>Altere de a cordo com a necessidades. No meu caso vou resolver nomes então vou usar 4gb</p>
<pre class="remontti-code">-Xms4g
-Xmx4g</pre>
<p>Instale e atualize os plugins necessários pelo Logstash. Para usar o ElastiFlow, você precisará instalar o codec sFlow suportado pela comunidade para o Logstash. Também é recomendável que você sempre use a versão mais recente do codec Netflow, a entrada UDP e o filtro DNS. Isso pode ser conseguido executando os seguintes comandos:</p>
<pre class="remontti-code"># /usr/share/logstash/bin/logstash-plugin install logstash-codec-sflow --no-verify
# /usr/share/logstash/bin/logstash-plugin update logstash-codec-netflow --no-verify
# /usr/share/logstash/bin/logstash-plugin update logstash-input-udp --no-verify
# /usr/share/logstash/bin/logstash-plugin update logstash-input-tcp --no-verify
# /usr/share/logstash/bin/logstash-plugin update logstash-filter-dns --no-verify
# /usr/share/logstash/bin/logstash-plugin update logstash-filter-geoip --no-verify
# /usr/share/logstash/bin/logstash-plugin update logstash-filter-translate --no-verify
# /usr/share/logstash/bin/logstash-plugin install --no-verify

# /usr/share/logstash/bin/logstash-plugin install logstash-codec-sflow
# /usr/share/logstash/bin/logstash-plugin update logstash-codec-netflow
# /usr/share/logstash/bin/logstash-plugin update logstash-input-udp
# /usr/share/logstash/bin/logstash-plugin update logstash-input-tcp
# /usr/share/logstash/bin/logstash-plugin update logstash-filter-dns
# /usr/share/logstash/bin/logstash-plugin update logstash-filter-geoip
# /usr/share/logstash/bin/logstash-plugin update logstash-filter-translate</pre>
<h3>:: elastiflow ::</h3>
<p><a href="https://github.com/robcowart/elastiflow/" rel="noopener noreferrer" target="_blank">ElastiFlow</a> fornece coleta e visualização de dados de fluxo de rede usando o Elastic Stack (Elasticsearch, Logstash e Kibana). Suporta os tipos de fluxo Netflow v5/v9, sFlow e IPFIX. </p>
<pre class="remontti-code"># mkdir /root/flowinstall
# cd /root/flowinstall
# wget https://github.com/robcowart/elastiflow/archive/master.zip
# unzip master.zip
# mv elastiflow-master/logstash/elastiflow/  /etc/logstash/
# mv elastiflow-master/logstash.service.d/ /etc/systemd/system/
# cp /etc/logstash/logstash-sample.conf  /etc/logstash/logstash.conf
</pre>
<p>Adicione o pipeline ElastiFlow aos pipelines.yml</p>
<pre class="remontti-code"># vim  /etc/logstash/pipelines.yml</pre>
<p>Adicione ao final:</p>
<pre class="remontti-code">- pipeline.id: elastiflow
  path.config: &quot;/etc/logstash/elastiflow/conf.d/*.conf&quot;</pre>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/pipelines.yml_.png" alt="" width="796" height="225" class="alignnone size-full wp-image-3379" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/pipelines.yml_.png 796w, https://blog.remontti.com.br/wp-content/uploads/2019/08/pipelines.yml_-300x85.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/pipelines.yml_-768x217.png 768w" sizes="auto, (max-width: 796px) 100vw, 796px" /></p>
<p>Também defino ELASTIFLOW_RESOLVE_IP2HOST como true e defino meu servidor DNS em ELASTIFLOW_NAMESERVER para que os painéis tentem resolver os nomes DNS em vez de exibir apenas o endereço IP. Há um impacto no desempenho por isso será necessário ter RAM sobrando!<br />
Neste exemplo vou aplicar a resolução de nomes.</p>
<pre class="remontti-code"># sed -i &#039;s/ELASTIFLOW_RESOLVE_IP2HOST=false/ELASTIFLOW_RESOLVE_IP2HOST=true/&#039; /etc/systemd/system/logstash.service.d/elastiflow.conf
# sed -i &#039;s/ELASTIFLOW_NAMESERVER=127.0.0.1/ELASTIFLOW_NAMESERVER=1.1.1.1/&#039; /etc/systemd/system/logstash.service.d/elastiflow.conf</pre>
<p>Se desejar pode editar o arquivo /etc/systemd/system/logstash.service.d/elastiflow.conf<br />
E alterar as opções conforme suas necessidades. Os dois comandos acima alteram:<br />
<em>ELASTIFLOW_RESOLVE_IP2HOST=true<br />
ELASTIFLOW_NAMESERVER=1.1.1.1</em></p>
<p>Vamos configurar os arquivos init (system-install) em seguida ativar o serviço para inicialização e starta-lo.</p>
<pre class="remontti-code"># systemctl daemon-reload
# /usr/share/logstash/bin/system-install
# systemctl enable logstash
# systemctl start logstash</pre>
<p>Precisamos configurar os índices do elastiflow-*padrão, execute o seguinte comando: </p>
<p>Atualização: O projeto da data de hoje (20/03/2020) está da versão 7.6.x e em suas releases https://github.com/robcowart/elastiflow/releases alguns arquivos não parecem mais estarem lá, uma das &#8220;gambi&#8221; é pegar esses arquivos de commits antigas. Vamos precisar deles -> <a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow.tar.gz">elastiflow.tar.gz</a></em> (boa sorte)</p>
<pre class="remontti-code"># cd /root/flowinstall
# wget https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow.tar.gz
# tar vxf elastiflow.tar.gz 
# curl -X POST http://127.0.0.1:5601/api/saved_objects/index-pattern/elastiflow-* -H &quot;Content-Type: application/json&quot; -H &quot;kbn-xsrf: true&quot; -d @elastiflow.index_pattern.json</pre>
<p>O arquivo JSON contém a configuração do padrão de índice.</p>
<p>Agora o arquivo elastiflow.kibana.7.0.x.json deveria estar em  <a href="https://github.com/robcowart/elastiflow/tree/master/kibana" rel="noopener noreferrer" target="_blank">https://github.com/robcowart/elastiflow/tree/master/kibana</a> mas não está rsrsrs então baixe ele aqui <a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/elastiflow.kibana.7.0.x.zip">elastiflow.kibana.7.0.x</a> e extraia ele no seu computador. (peguei ele la da v.<a href="https://github.com/robcowart/elastiflow/tree/v3.5.1" rel="noopener noreferrer" target="_blank">3.5.1</a>) </p>
<p>Porém Hoje <strong>31/03/2020 </strong>utilizando o arquivo <a href="https://raw.githubusercontent.com/robcowart/elastiflow/master/kibana/elastiflow.kibana.7.5.x.ndjson" rel="noopener noreferrer" target="_blank">elastiflow.kibana.7.5.x.ndjson</a>  <strong>deu certo</strong>, entao tente importar ele, caso contrario tente o citado acima (P* zona não seguem um padrão fica foda do cara dizer algo rsrsrs) (Versão testada 7.6.1) </p>
<p>Para que os painéis possam ser carregados no Kibana, importando o <strong>elastiflow.kibana.7.0.x.json</strong>. Isso é feito a partir do menu <strong>Management -> Saved Objects</strong>. Abra o kibana<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-1024x492.png" alt="" width="1024" height="492" class="alignnone size-large wp-image-3380" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-1024x492.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-300x144.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-768x369.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-import.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-import-1024x492.png" alt="" width="1024" height="492" class="alignnone size-large wp-image-3381" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-import-1024x492.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-import-300x144.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-import-768x369.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-import.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-1.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-1-1024x763.png" alt="" width="1024" height="763" class="alignnone size-large wp-image-3382" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-1-1024x763.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-1-300x224.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-1-768x572.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/08/kibana-Management-Save_Objects-1.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Configurações Avançadas Recomendadas do Kibana</p>
<p>Modificar algumas das configurações avançadas do Kibana produzirá uma experiência mais amigável ao usar o ElastiFlow. Essas configurações são feitas em Kibana, abaixo <strong>Management -> Advanced Settings</strong>.</p>
<p><strong>doc_table:highlight</strong><br />
<div id="attachment_3383" style="width: 495px" class="wp-caption alignnone"><a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/doc_table.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3383" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/doc_table.png" alt="" width="485" height="156" class="size-full wp-image-3383" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/doc_table.png 485w, https://blog.remontti.com.br/wp-content/uploads/2019/08/doc_table-300x96.png 300w" sizes="auto, (max-width: 485px) 100vw, 485px" /></a><p id="caption-attachment-3383" class="wp-caption-text">Há uma penalidade de desempenho de consulta muito grande que vem com o uso do recurso de destaque. Como não é muito útil para este caso de uso, é melhor simplesmente retirá-lo.</p></div></p>
<p><strong>filters:pinnedByDefault</strong><br />
<div id="attachment_3385" style="width: 555px" class="wp-caption alignnone"><a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/filters.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3385" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/filters.png" alt="" width="545" height="139" class="size-full wp-image-3385" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/filters.png 545w, https://blog.remontti.com.br/wp-content/uploads/2019/08/filters-300x77.png 300w" sizes="auto, (max-width: 545px) 100vw, 545px" /></a><p id="caption-attachment-3385" class="wp-caption-text">Fixar um filtro permitirá que ele persista quando você está mudando de dashbaords. Isso é muito útil ao detalhar algo interessante e você deseja alterar os painéis para uma perspectiva diferente dos mesmos dados. Este é o primeiro cenário que mudo sempre que estou trabalhando com o Kibana.</p></div></p>
<p><strong>state:storeInSessionStorage</strong><br />
<div id="attachment_3386" style="width: 558px" class="wp-caption alignnone"><a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/state.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3386" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/state.png" alt="" width="548" height="182" class="size-full wp-image-3386" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/state.png 548w, https://blog.remontti.com.br/wp-content/uploads/2019/08/state-300x100.png 300w" sizes="auto, (max-width: 548px) 100vw, 548px" /></a><p id="caption-attachment-3386" class="wp-caption-text">Os URLs do Kibana podem ficar muito grandes. Especialmente quando se trabalha com visualizações Vega. Isso provavelmente resultará em mensagens de erro para usuários do Internet Explorer. Usar o armazenamento na sessão corrigirá esse problema para esses usuários.</p></div></p>
<p><strong>timepicker:quickRanges</strong><br />
<div id="attachment_3387" style="width: 702px" class="wp-caption alignnone"><a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/timepicker.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3387" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/timepicker.png" alt="" width="692" height="496" class="size-full wp-image-3387" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/timepicker.png 692w, https://blog.remontti.com.br/wp-content/uploads/2019/08/timepicker-300x215.png 300w" sizes="auto, (max-width: 692px) 100vw, 692px" /></a><p id="caption-attachment-3387" class="wp-caption-text">As opções padrão no Seletor de Tempo são menos que ideais, para a maioria dos casos de uso de registro e monitoramento. Felizmente, o Kibana agora permite que você personalize o selecionador de tempo. Nossas configurações recomendadas podem ser encontradas abaixo.</p></div><br />
timepicker:</p>
<pre class="remontti-code">[
  {
    &quot;from&quot;: &quot;now-15m&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 15 minutes&quot;
  },
  {
    &quot;from&quot;: &quot;now-30m&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 30 minutes&quot;
  },
  {
    &quot;from&quot;: &quot;now-1h&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 1 hour&quot;
  },
  {
    &quot;from&quot;: &quot;now-2h&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 2 hours&quot;
  },
  {
    &quot;from&quot;: &quot;now-4h&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 4 hours&quot;
  },
  {
    &quot;from&quot;: &quot;now-12h&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 12 hours&quot;
  },
  {
    &quot;from&quot;: &quot;now-24h&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 24 hours&quot;
  },
  {
    &quot;from&quot;: &quot;now-48h&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 48 hours&quot;
  },
  {
    &quot;from&quot;: &quot;now-7d&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 7 days&quot;
  },
  {
    &quot;from&quot;: &quot;now-30d&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 30 days&quot;
  },
  {
    &quot;from&quot;: &quot;now-60d&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 60 days&quot;
  },
  {
    &quot;from&quot;: &quot;now-90d&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Last 90 days&quot;
  },
  {
    &quot;from&quot;: &quot;now/d&quot;,
    &quot;to&quot;: &quot;now/d&quot;,
    &quot;display&quot;: &quot;Today&quot;
  },
  {
    &quot;from&quot;: &quot;now/w&quot;,
    &quot;to&quot;: &quot;now/w&quot;,
    &quot;display&quot;: &quot;This week&quot;
  },
  {
    &quot;from&quot;: &quot;now/M&quot;,
    &quot;to&quot;: &quot;now/M&quot;,
    &quot;display&quot;: &quot;This month&quot;
  },
  {
    &quot;from&quot;: &quot;now/d&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Today so far&quot;
  },
  {
    &quot;from&quot;: &quot;now/w&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Week to date&quot;
  },
  {
    &quot;from&quot;: &quot;now/M&quot;,
    &quot;to&quot;: &quot;now&quot;,
    &quot;display&quot;: &quot;Month to date&quot;
  }
]</pre>
<p>Por padrão, os dados de fluxo serão recebidos nas portas padrão para cada tipo de fluxo. Você pode alterar os IPs e as portas usadas modificando as seguintes variáveis em /etc/systemd/system/logstash.service.d/elastiflow.conf.</p>
<p>Se tiver alguma dificuldade verifique os logs do logstash:</p>
<pre class="remontti-code"># tail -f /var/log/logstash/logstash-plain.log</pre>
<p>Use também o tcpdum para verificar se seu roteador está enviando os flows.</p>
<p>Se você instalou não quer atualizar com medo de algum &#8220;BO&#8221; recomendo você desativar o repositório do elastic:</p>
<pre class="remontti-code"># vim /etc/apt/sources.list.d/elastic-7.x.list</pre>
<p>Comente &#8220;# deb https://artifacts.elastic.co/packages/7.x/apt stable main&#8221;</p>
<p><strong>Portas Padrões</strong><br />
Netflow &#8211; IPv4: 2055<br />
Netflow &#8211; IPv6: 52055<br />
sFlow   &#8211; IPv4: 6343<br />
sFlow   &#8211; IPv6: 56343<br />
IPFIX   &#8211; IPv4: 4739<br />
IPFIX   &#8211; IPv6: 54739<br />
Pode ser alterado </p>
<h3>BÔNUS &#8211; Enviando dados do RouterOS/Mikrotik</h3>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/08/ElastiFlow-Mikrotik.png" data-rel="lightbox-gallery-mO6Mawz2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/08/ElastiFlow-Mikrotik.png" alt="" width="962" height="585" class="alignnone size-full wp-image-3389" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/08/ElastiFlow-Mikrotik.png 962w, https://blog.remontti.com.br/wp-content/uploads/2019/08/ElastiFlow-Mikrotik-300x182.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/08/ElastiFlow-Mikrotik-768x467.png 768w" sizes="auto, (max-width: 962px) 100vw, 962px" /></a><br />
Onde ether1 é a interface que vai ser monitorada, no meu caso estou coletando 4k, isso vai depender muito do hardware da sua máquina, e 200.200.200.200 seria o IP do nosso servidor.</p>
<pre class="remontti-code">/ip traffic-flow
set cache-entries=4k enabled=yes interfaces=ether1
/ip traffic-flow target
add dst-address=200.200.200.200 version=5</pre>
<p>Como não tem restrição ao acesso a porta 5601 é interessante você aplicar um firewall em seu servidor<br />
<a href="https://blog.remontti.com.br/2435" rel="noopener noreferrer" target="_blank">Modelo simples e funcional de Firewall com iptables</a></p>
<p>Parabéns! Você concluiu! Gostou?</p>
<p><center><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></center></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>Fonte:<br />
<a href="https://github.com/robcowart/elastiflow/blob/master/INSTALL.md" rel="noopener noreferrer" target="_blank">https://github.com/robcowart/elastiflow/blob/master/INSTALL.md</a><br />
<a href="https://www.elastic.co/guide/en/kibana/current/deb.html" rel="noopener noreferrer" target="_blank">https://www.elastic.co/guide/en/kibana/current/deb.html</a></p>
<p>O post <a href="https://blog.remontti.com.br/3368">Instalação do Elastic Stack 7 + ElastiFlow no Debian 10 Buster (Bônus Traffic Flow Mikrotik/RouterOS)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3368/feed</wfw:commentRss>
			<slash:comments>49</slash:comments>
		
		
			</item>
		<item>
		<title>Servidor de log para registros remoto do RouterOS/Mikrotik Huawei entre outros fabricantes</title>
		<link>https://blog.remontti.com.br/2674</link>
					<comments>https://blog.remontti.com.br/2674#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 12 Sep 2018 13:22:10 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[syslog]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=2674</guid>

					<description><![CDATA[<p>Neste tutorial vamos ver como configurar um servidor de logs para coletar logs de roteadores Mikrotik/RouterOS, porém o mesmo pode ser usado para qualquer roteador/servidor. Antes de mais nada vamos Rsyslog é o sistema&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/2674">Servidor de log para registros remoto do RouterOS/Mikrotik Huawei entre outros fabricantes</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Neste tutorial vamos ver como configurar um servidor de logs para coletar logs de roteadores Mikrotik/RouterOS, porém o mesmo pode ser usado para qualquer roteador/servidor.</p>
<p>Antes de mais nada vamos <a href="https://www.rsyslog.com/guides-for-rsyslog/" rel="noopener noreferrer" target="_blank">Rsyslog</a> é o sistema de log padrão no Debian depois da versao 8 Lenny, substituto para o antigo syslog. Rsyslog conta com suporte para login em bancos de dados (MySQL e PostgreSQL). A configuração usa o dbconfig-common para facilitar a configuração via debconf.</p>
<p><strong>Distribuição testadas: </strong><br />
<a href="https://blog.remontti.com.br/5792" rel="noopener noreferrer" target="_blank">Debian 11</a><br />
<a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Debian 10</a><br />
<a href="https://blog.remontti.com.br/1152" rel="noopener noreferrer" target="_blank">Debian 9</a></p>
<p>Não precisa ser instalado nenhum pacote, apenas ter nosso Debian instalado. Vamos lá!</p>
<pre class="remontti-code"># vim /etc/rsyslog.conf</pre>
<p>Neste arquivo descomente as <em>linhas module(load=&#8221;imudp&#8221;)</em> &#038; <em>input(type=&#8221;imudp&#8221; port=&#8221;514&#8243;)</em>. Se preferir você pode alterar a porta padrão 514, no exemplo vou alterar para 65014.  </p>
<pre class="remontti-code">
	# provides UDP syslog reception
	module(load=&quot;imudp&quot;)
	#input(type=&quot;imudp&quot; port=&quot;514&quot;)
	input(type=&quot;imudp&quot; port=&quot;65014&quot;)
</pre>
<p>Criamos o template que va ireceber os logs remoto e ignoramos os logs de localhost. Para que fique organizados vamos gerar um arquivo de log para cado<strong> Host/IP</strong> dentro do diretório <em>/var/log/minharede/</em></p>
<pre class="remontti-code"># vim /etc/rsyslog.d/minharede.conf</pre>
<pre class="remontti-code">
$template RemoteHost,&quot;/var/log/minharede/%HOSTNAME%.log
:fromhost-ip, !isequal, &quot;127.0.0.1&quot;    ?RemoteHost
</pre>
<p>Reiniciamos o serviço</p>
<pre class="remontti-code"># systemctl restart rsyslog</pre>
<p>Verifique se a porta esta aberta</p>
<pre class="remontti-code"># netstat -putan | grep 65014</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_093229.png" data-rel="lightbox-gallery-nvZe7gLo" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_093229.png" alt="" width="865" height="202" class="alignnone size-full wp-image-2679" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_093229.png 865w, https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_093229-300x70.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_093229-768x179.png 768w" sizes="auto, (max-width: 865px) 100vw, 865px" /></a></p>
<p>Vamos configurar o logrotate para fazer a compressão a cada 7 dias. Você tabém não precisa instalar o pacote pois ele já padrão do sistema.<br />
O logrotate é projetado para simplificar a administração de arquivos de log em um sistema que gera um monte de arquivos de log. O logrotate possibilita a compressão rotativa automática. O logrotate pode ser configurado para manipular um arquivo de log diariamente, semanalmente, mensalmente ou quando o arquivo de log atingir um certo tamanho.</p>
<p> Criaremos o arquivo <em>/etc/logrotate.d/minharede</em></p>
<pre class="remontti-code"># vim /etc/logrotate.d/minharede</pre>
<pre class="remontti-code">/var/log/minharede/*.log {
    monthly
    rotate 12
    missingok
    notifempty
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2&gt; /dev/null` 2&gt; /dev/null || true
    endscript
}</pre>
<p>Para testar execute o comando:</p>
<pre class="remontti-code"># logrotate /etc/logrotate.d/minharede --debug</pre>
<p><em>reading config file /etc/logrotate.d/minharede<br />
Reading state from file: /var/lib/logrotate/status<br />
Allocating hash table for state file, size 64 entries</p>
<p>Handling 1 logs</p>
<p>rotating pattern: /var/log/minharede/*.log  after 1 days (7 rotations)<br />
empty log files are not rotated, old logs are removed<br />
considering log /var/log/minharede/r1.log<br />
Creating new state<br />
  Now: 2018-09-06 14:49<br />
  Last rotated at 2018-09-06 14:00<br />
  log does not need rotating (log has been already rotated)<br />
not running postrotate script, since no logs were rotated</em></p>
<h3>Configurando syslog no RouterOS/Mikoritk</h3>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/log-remote-routeros-mikrotik-.png" data-rel="lightbox-gallery-nvZe7gLo" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/log-remote-routeros-mikrotik-.png" alt="" width="511" height="417" class="alignnone size-full wp-image-2680" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/log-remote-routeros-mikrotik-.png 511w, https://blog.remontti.com.br/wp-content/uploads/2018/09/log-remote-routeros-mikrotik--300x245.png 300w" sizes="auto, (max-width: 511px) 100vw, 511px" /></a></p>
<p>Configure seu agora em seus roteadores</p>
<pre class="remontti-code">/system logging action
add name=RouterLog remote=250.250.250.2 remote-port=65014 target=remote

/system logging
add action=RouterLog topics=info
add action=RouterLog topics=warning
add action=RouterLog topics=critical
add action=RouterLog topics=error</pre>
<h3>Configurando syslog no Huawei</h3>
<pre class="remontti-code">info-center channel 6 name logserver
info-center source default channel 6 log level informational
info-center loghost source LoopBack0
info-center loghost 250.250.250.2 channel 6 facility local2 port 65014</pre>
<p>Agora pode verificar no diretório os arquivos de logs estarão sendo criado.</p>
<pre class="remontti-code"># ls -lh /var/log/minharede/</pre>
<p>Ex para acompanhar o log em tempo real onde r1.log seria o nome do arquivo criado.</p>
<pre class="remontti-code"># tail -f /var/log/minharede/r1.log</pre>
<p>Recomendado ter um firewall nesta porta para deixar apenas IPs de seus roteadores ter acesso.<br />
Neste link tenho um <a href="https://blog.remontti.com.br/2435" rel="noopener noreferrer" target="_blank">modelo simples e funcional de Firewall com iptables</a></p>
<p>Gostou? Deixe seu comentário ficarei feliz em saber que lhe ajudei, e se tiver qualquer pergunta deixe-a também, se preferir acesse o menu Consultoria lá você encontra meios de falar comigo!</p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/2674">Servidor de log para registros remoto do RouterOS/Mikrotik Huawei entre outros fabricantes</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2674/feed</wfw:commentRss>
			<slash:comments>31</slash:comments>
		
		
			</item>
		<item>
		<title>Acessando logs do rsyslog via web com Log Analyzer</title>
		<link>https://blog.remontti.com.br/2687</link>
					<comments>https://blog.remontti.com.br/2687#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 12 Sep 2018 09:05:47 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[analyzer]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Log Analyzer]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rsyslog]]></category>
		<category><![CDATA[syslog]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=2687</guid>

					<description><![CDATA[<p>O projeto LogAnalyzer já é antigo, não tem um interface muito bonita mas fornece um frontend fácil de usar e poderoso, permite pesquisar, revisar e analisar dados de eventos de rede, incluindo syslog. É&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/2687">Acessando logs do rsyslog via web com Log Analyzer</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>O projeto LogAnalyzer já é antigo, não tem um interface muito bonita mas fornece um frontend fácil de usar e poderoso, permite pesquisar, revisar e analisar dados de eventos de rede, incluindo syslog. É um aplicativo gratuito de código aberto GPL escrito principalmente em php. Os dados podem ser obtidos de bancos de dados, mas também de arquivos de texto simples, por exemplo, aqueles que são escritos pelo rsyslog.</p>
<p>Para dar inicio vamos precisar ter um serviço Web rodado em nosso servidor<br />
<strong>Requisitos</strong>: <a href="https://blog.remontti.com.br/2024" rel="noopener" target="_blank">Passo-a-passo como criar um servidor web Apache2, PHP 7.0, MariaDB, PHPMyAdmin “LAMP” no Debian 9 Stretch</a></p>
<p><strong>Sugerido</strong>: <a href="https://blog.remontti.com.br/2674" rel="noopener" target="_blank">Servidor de log para registros remoto do RouterOS/Mikrotik</a></p>
<p>Agora já com nosso servidor LAMP pronto vamos criar nossa base de dados chamada Syslog (sim com S maiúsculo) e criar o usuario rsyslog para acessar esse banco.</p>
<pre class="remontti-code"># mysql -p</pre>
<pre class="remontti-code">
CREATE DATABASE Syslog;
GRANT ALL PRIVILEGES ON Syslog.* TO &#039;rsyslog&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA-SENHA&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Instalaremos o modulo rsyslog-mysql para fazer a integração </p>
<pre class="remontti-code"># apt install rsyslog-mysql</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/1.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/1-300x169.png" alt="" width="300" height="169" class="alignnone size-medium wp-image-2690" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/1-300x169.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/1-768x432.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/1-1024x576.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/1.png 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Responda Sim</p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/2.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/2-300x169.png" alt="" width="300" height="169" class="alignnone size-medium wp-image-2691" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/2-300x169.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/2-768x432.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/2-1024x576.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/2.png 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Informe a senha criada para o usuário rsyslog <em>(&#8216;rsyslog&#8217;@&#8217;localhost&#8217; IDENTIFIED BY &#8216;SUA-SENHA&#8217;)</em></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/3.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/3-300x169.png" alt="" width="300" height="169" class="alignnone size-medium wp-image-2692" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/3-300x169.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/3-768x432.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/3-1024x576.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/3.png 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Repita a senha</p>
<p>Verifique se o arquivo /etc/rsyslog.d/mysql.conf foi criado</p>
<pre class="remontti-code">cat /etc/rsyslog.d/mysql.conf</pre>
<p>Vai retornar:</p>
<pre class="remontti-code">	$ModLoad ommysql
	*.* :ommysql:localhost,Syslog,rsyslog,SUA-SENHA</pre>
<p>Agora reinicie o serviço do rsyslog para atualizar as configurações</p>
<pre class="remontti-code"># /etc/init.d/rsyslog restart</pre>
<p>Pronto seu rsyslog já esta guardado todos os logs no seu banco de dados, agora vamos a instalação e configuração do <a href="https://loganalyzer.adiscon.com/" rel="noopener" target="_blank">LogAnalyzer</a></p>
<p>Na data de hoje o projeto encontra-se na versão 4.1.6<br />
Acesse <a href="https://loganalyzer.adiscon.com/download/" rel="noopener" target="_blank">https://loganalyzer.adiscon.com/download/</a> e verifique se já  não existe uma nova versão.</p>
<p>Nos comandos a seguir vamos fazer o download do projeto, em seguida extrair o mesmo, e mover o projeto para dentro da pasta padrão do servidor web (/var/www/html/) faça de acordo com sua realidade, e ultimo estaremos dando permissões ao usuário apache (www-data) a escrever nos arquviso  .   </p>
<pre class="remontti-code"># cd /tmp/
# wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.6.tar.gz
# tar -vxzf loganalyzer-4.1.6.tar.gz
# cd loganalyzer-4.1.6/
# mv src/ /var/www/html/logs
# chown www-data. /var/www/html/logs -R</pre>
<p>Existe um pacote de tradução, porém o mesmo não foi traduzido, caso tenha interesse em baixar, e fazer a tradução:</p>
<pre class="remontti-code"># cd /tmp/
# wget https://loganalyzer.adiscon.com/plugins/files/translations/loganalyzer_lang_pt_BR_3.2.3.zip
# apt install  unzip
# unzip loganalyzer_lang_pt_BR_3
# unzip loganalyzer_lang_pt_BR_3.2.3.zip
# mv pt_BR /var/www/html/logs/lang/
# chown www-data. /var/www/html/logs -R</pre>
<p>Agora acesse: http://SEU-IP_OU-DOMINIO/logs/<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/4.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/4-300x206.png" alt="" width="300" height="206" class="alignnone size-medium wp-image-2693" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/4-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/4-768x528.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/4-1024x704.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/4.png 1235w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Vamos ser avisados que o sistema precisa ser instalado/configurado. Clique em &#8220;here&#8221;.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/5.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/5-300x206.png" alt="" width="300" height="206" class="alignnone size-medium wp-image-2694" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/5-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/5-768x528.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/5-1024x704.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/5.png 1235w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Next<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/6.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/6-300x206.png" alt="" width="300" height="206" class="alignnone size-medium wp-image-2695" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/6-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/6-768x528.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/6-1024x704.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/6.png 1235w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Next<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/7.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/7-300x206.png" alt="" width="300" height="206" class="alignnone size-medium wp-image-2696" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/7-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/7-768x528.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/7-1024x704.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/7.png 1235w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Selecione YES em Enabled User Database, e configure em Database User o usuário rsyslog e sua senha.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/8.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/8-300x206.png" alt="" width="300" height="206" class="alignnone size-medium wp-image-2697" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/8-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/8-768x528.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/8-1024x704.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/8.png 1235w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Next<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/9.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/9-300x206.png" alt="" width="300" height="206" class="alignnone size-medium wp-image-2698" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/9-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/9-768x528.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/9-1024x704.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/9.png 1235w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Se não tiver nenhum erro, clique em next.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/10.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/10-300x206.png" alt="" width="300" height="206" class="alignnone size-medium wp-image-2699" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/10-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/10-768x528.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/10-1024x704.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/10.png 1235w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Crie um usuário e senha para o administrador<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/11.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/11-300x206.png" alt="" width="300" height="206" class="alignnone size-medium wp-image-2700" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/11-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/11-768x528.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/11-1024x704.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/11.png 1235w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Crie uma fonte de coleta, no nosso caso vamos usar os logs do mysql, siga de acordo com a imagem. Posteriormente você pode criar outras fontes.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/12.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/12-300x206.png" alt="" width="300" height="206" class="alignnone size-medium wp-image-2701" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/12-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/12-768x528.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/12-1024x704.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/12.png 1235w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Next<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_110022.png" data-rel="lightbox-gallery-w518LiE3" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_110022-300x188.png" alt="" width="300" height="188" class="alignnone size-medium wp-image-2703" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_110022-300x188.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_110022-768x480.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_110022-1024x640.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/09/Screenshot_20180912_110022.png 1680w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>  </p>
<p>Parabéns você concluiu! </p>
<p>Gostou? Deixe seu comentário ficarei feliz em saber que lhe ajudei, e se tiver qualquer pergunta deixe-a também, se preferir acesse o menu Consultoria lá você encontra meios de falar comigo!</p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/2687">Acessando logs do rsyslog via web com Log Analyzer</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2687/feed</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
	</channel>
</rss>
