<?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 Debian 12 Bookworm - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/debian-12-bookworm/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/debian-12-bookworm</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Mon, 31 Mar 2025 17:02:53 +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 Debian 12 Bookworm - Remontti</title>
	<link>https://blog.remontti.com.br/tag/debian-12-bookworm</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Guia completo para instalar e configurar Zabbix 7 LTS no Debian 12 Bookworm com NGINX e PostgreSQL</title>
		<link>https://blog.remontti.com.br/7870</link>
					<comments>https://blog.remontti.com.br/7870#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 09 Apr 2024 18:05:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Administração de Sistemas]]></category>
		<category><![CDATA[configuração do NGINX]]></category>
		<category><![CDATA[configuração do Zabbix]]></category>
		<category><![CDATA[Debian 12 Bookworm]]></category>
		<category><![CDATA[gerenciamento de serviços de TI]]></category>
		<category><![CDATA[instalação do Zabbix]]></category>
		<category><![CDATA[monitoramento de rede]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[otimização do BASH]]></category>
		<category><![CDATA[performance do PostgreSQL]]></category>
		<category><![CDATA[PHP 8]]></category>
		<category><![CDATA[PHP para Zabbix]]></category>
		<category><![CDATA[planejamento de capacidade]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[relatórios de monitoramento]]></category>
		<category><![CDATA[segurança em servidores]]></category>
		<category><![CDATA[visualização de dados]]></category>
		<category><![CDATA[zabbix]]></category>
		<category><![CDATA[Zabbix 7 LTS]]></category>
		<category><![CDATA[Zabbix no Debian]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=7870</guid>

					<description><![CDATA[<p>O Zabbix é uma solução de nível empresarial e de código aberto. Ele monitora diversos parâmetros de rede, servidores e a saúde dos serviços, utilizando um mecanismo flexível de notificação. Este mecanismo permite configurar&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7870">Guia completo para instalar e configurar Zabbix 7 LTS no Debian 12 Bookworm com NGINX e PostgreSQL</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/zabbix-7-debian-12-capa.png" alt="" width="1792" height="1024" class="alignnone size-full wp-image-7890" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-capa.png 1792w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-capa-300x171.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-capa-1024x585.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-capa-768x439.png 768w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-capa-1536x878.png 1536w" sizes="(max-width: 1792px) 100vw, 1792px" /></p>
<p>O <strong>Zabbix</strong> é uma solução de nível empresarial e de código aberto. Ele monitora diversos parâmetros de rede, servidores e a saúde dos serviços, utilizando um mecanismo flexível de notificação. Este mecanismo permite configurar alertas, por e-mail e outros meios como Telegram, para quase qualquer evento, facilitando uma rápida resposta a problemas. Além disso, o Zabbix oferece recursos avançados para relatórios e visualização de dados armazenados, sendo ideal para o planejamento de capacidade.</p>
<h3>Requisitos Debian 12 Bookworm </h3>
<p>&#8211; <a href="https://blog.remontti.com.br/7236" rel="noopener" target="_blank">Instalação do Debian 12 Bookworm limpa passo-a-passo</a></p>
<h3>Melhorando o seu BASH</h3>
<p>Para melhorar seu bash e entender o comando a seguir, visite: <a href="https://blog.remontti.com.br/5867" rel="noopener" target="_blank">Como melhorar a produtividade no seu Debian após a instalação</a></p>
<pre class="remontti-code"># apt -y install wget; wget remontti.com.br/debian; bash debian; su -</pre>
<h3>Instalação do NGINX</h3>
<p>Procederemos com a instalação do <a href="https://www.nginx.com" rel="noopener" target="_blank">nginx</a>, ocultando a sua versão como uma boa prática.</p>
<pre class="remontti-code"># apt -y install nginx
# sed -i &#039;s/# server_tokens/server_tokens/&#039; /etc/nginx/nginx.conf
# systemctl restart nginx</pre>
<h3>Instalação PHP 8</h3>
<p>Vamos instalar extensões do PHP usadas pelo Zabbix e evitar a instalação de pacotes recomendados <em>(&#8211;no-install-recommends)</em> para que o Apache não seja instalado.</p>
<pre class="remontti-code">#  apt -y install --no-install-recommends \
 php php-{fpm,cli,mysql,pear,gd,gmp,bcmath,mbstring,curl,xml,zip,json,pgsql}</pre>
<p>Aumentar o limite de tempo de execução e o tamanho máximo de upload no PHP.</p>
<pre class="remontti-code"># vim /etc/php/8.2/fpm/php.ini</pre>
<p>Localize <strong>max_execution_time</strong> e altere para 600 e upload_max_filesize para 100MB</p>
<pre class="remontti-code">max_execution_time = 600
upload_max_filesize = 100M</pre>
<p>Reinicie o serviço do PHP.</p>
<pre class="remontti-code"># systemctl restart php8.2-fpm</pre>
<h3>Instalação do PostgreSQL</h3>
<p>Instalação dos pacotes necessários do PostgreSQL.</p>
<pre class="remontti-code"># apt -y install postgresql postgresql-contrib</pre>
<p>Altere para o usuário postgres.</p>
<pre class="remontti-code"># su - postgres</pre>
<p>Acesse o terminal de comandos do banco de dados.</p>
<pre class="remontti-code">$ psql</pre>
<p>Para definir a senha do usuário postgres e instalar o adminpack.</p>
<pre class="remontti-code">postgres=# \password postgres
Digite nova senha para postgres: 
Digite-a novamente:
postgres=# CREATE EXTENSION adminpack;
CREATE EXTENSION
postgres=# \q 
$ exit</pre>
<p>Realize ajustes no arquivo pg_hba.conf para autenticação com senha.</p>
<pre class="remontti-code"># sed -i &#039;/postgres.*peer/s/peer/md5/&#039; /etc/postgresql/15/main/pg_hba.conf
# sed -i &#039;0,/local\s*all\s*all\s*peer/s/peer/md5/&#039; /etc/postgresql/15/main/pg_hba.conf</pre>
<p>É recomendado ajustar as configurações padrões do PostgreSQL conforme a memória disponível.</p>
<pre class="remontti-code">vim /etc/postgresql/15/main/postgresql.conf</pre>
<pre class="remontti-code">#-----------------------------------------
# 4GB de Memoria RAM
#-----------------------------------------
max_connections = 500
shared_buffers = 1GB
work_mem = 16MB
maintenance_work_mem = 128MB
max_wal_size = 1GB
min_wal_size = 256MB
effective_cache_size = 2GB

#-----------------------------------------
# 8GB de Memoria RAM
#-----------------------------------------
max_connections = 1000
shared_buffers = 2GB
work_mem = 32MB
maintenance_work_mem = 512MB
max_wal_size = 2GB
min_wal_size = 512MB
effective_cache_size = 4GB

#-----------------------------------------
# 16GB de Memoria RAM
#-----------------------------------------
max_connections = 2000
shared_buffers = 4GB
work_mem = 64MB
maintenance_work_mem = 1GB
max_wal_size = 4GB
min_wal_size = 1GB
effective_cache_size = 8GB</pre>
<p>Reinicie o serviço do PostgreSQL.</p>
<pre class="remontti-code"># systemctl  restart postgresql</pre>
<h1>Instalação do Zabbix 7 LTS</h1>
<p>Inclua o repositório oficial do Zabbix versão 7 LTS.</p>
<pre class="remontti-code"># cd /tmp/
# wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_7.0-1+debian12_all.deb
# dpkg -i zabbix-release_7.0-1+debian12_all.deb
# apt update</pre>
<pre class="remontti-code"># apt -y install zabbix-server-pgsql zabbix-frontend-php \
  zabbix-nginx-conf zabbix-sql-scripts zabbix-agent traceroute</pre>
<p>Crie uma base de dados chamada <strong>zabbix</strong> e um usuário também chamado <strong>zabbix</strong> no PostgreSQL. Lembre-se de alterar a senha. Use o gerador de senha: <a href="https://senhasegura.remontti.com.br/" rel="noopener noreferrer" target="_blank">https://senhasegura.remontti.com.br/</a></p>
<pre class="remontti-code"># su - postgres
$ createuser --pwprompt zabbix
Digite a senha para a nova role:  &lt;SENHA ZABBIX&gt;
Digite-a novamente: &lt;SENHA ZABBIX&gt;
Senha: &lt;SENHA POSTGRES CASO TENHA DEFINIDO NA INSTALAÇÃO DO MESMO&gt;

$ createdb -O zabbix zabbix
Senha: &lt;SENHA POSTGRES&gt;</pre>
<p>Importe o esquema inicial e os dados. Você será solicitado a inserir a senha que foi criada anteriormente.</p>
<pre class="remontti-code">$ zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | psql -U zabbix -d zabbix &amp;&gt;/dev/null
Senha para usuário zabbix: : &lt;SENHA ZABBIX&gt;
$ exit</pre>
<p>Configure o arquivo zabbix_server.conf para conectar ao banco de dados PostgreSQL.</p>
<pre class="remontti-code"># vim /etc/zabbix/zabbix_server.conf</pre>
<p>Descomente e defina a senha na linha <strong># DBPassword=</strong>.</p>
<pre class="remontti-code">#...
DBPassword=&lt;SENHA ZABBIX&gt;
#...</pre>
<p>Ajuste o arquivo /etc/zabbix/php-fpm.conf, descomente e defina o fuso horário correto. <a href="https://secure.php.net/manual/pt_BR/timezones.america.php" rel="noopener noreferrer" target="_blank">timezone</a> Sua região</a>.</p>
<pre class="remontti-code"># vim /etc/zabbix/php-fpm.conf</pre>
<p>Adicione timezone, e ajuste upload_max_filesize:</p>
<pre class="remontti-code-plain">php_value[date.timezone] = America/Sao_Paulo
php_value[upload_max_filesize] = 100M</pre>
<p>Configure as definições do nginx.</p>
<pre class="remontti-code"># vim /etc/nginx/conf.d/zabbix.conf </pre>
<p>Deixei algumas linhas comentadas como exemplo, faça de acordo com sua necessidade.</p>
<pre class="remontti-code">server {
        listen 80;
        listen [::]:80;
        server_name    zabbix.remontti.com.br localhost;
        #server_name   OU_SEU_IP;

        # Metodo simples para quem quer rodar em uma determinada porta
        #listen 8181;
        #listen [::]:8181;
        #server_name     _;

        root    /usr/share/zabbix;
        index   index.php;

        # Desmomente para deixar restringido apenas para determinados prefixos
        #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 100M;
 
        location = /favicon.ico {
                log_not_found   off;
        }

        location / {
                try_files       $uri $uri/ =404;
        }

        location /assets {
                access_log      off;
                expires         10d;
        }

        location ~ /\.ht {
                deny            all;
        }

        location ~ /(api\/|conf[^\.]|include|locale) {
                deny            all;
                return          404;
        }

        location ~ [^/]\.php(/|$) {
                fastcgi_pass    unix:/var/run/php/zabbix.sock;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_index   index.php;

                fastcgi_param   DOCUMENT_ROOT   /usr/share/zabbix;
                fastcgi_param   SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name;
                fastcgi_param   PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name;

                include fastcgi_params;
                fastcgi_param   QUERY_STRING    $query_string;
                fastcgi_param   REQUEST_METHOD  $request_method;
                fastcgi_param   CONTENT_TYPE    $content_type;
                fastcgi_param   CONTENT_LENGTH  $content_length;

                fastcgi_intercept_errors        on;
                fastcgi_ignore_client_abort     off;
                fastcgi_connect_timeout         60;
                fastcgi_send_timeout            180;
                fastcgi_read_timeout            180;
                fastcgi_buffer_size             128k;
                fastcgi_buffers                 4 256k;
                fastcgi_busy_buffers_size       256k;
                fastcgi_temp_file_write_size    256k;
        }
}
</pre>
<p>Habilite o Zabbix para iniciar com o sistema.</p>
<pre class="remontti-code"># systemctl enable zabbix-server</pre>
<p>Vamos reiniciar os serviços</p>
<pre class="remontti-code"># systemctl restart zabbix-server zabbix-agent nginx</pre>
<p>Acesse <strong>http://seu_ip:porta</strong> ou <strong>http://zabbix.seudominio.com.br</strong> no navegador.</p>
<p>Siga as instruções de configuração na interface web do Zabbix.</p>
<p><strong>Selecione o idioma, e Próximo passo</strong><br />
<img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-1.png" alt="" width="1268" height="702" class="alignnone size-full wp-image-7878" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-1.png 1268w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-1-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-1-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-1-768x425.png 768w" sizes="(max-width: 1268px) 100vw, 1268px" /></p>
<p>Se tudo estiver ok: <strong>Próximo passo</strong><br />
<img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-2.png" alt="" width="1268" height="1243" class="alignnone size-full wp-image-7879" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-2.png 1268w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-2-300x294.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-2-1024x1004.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-2-768x753.png 768w" sizes="(max-width: 1268px) 100vw, 1268px" /></p>
<p>Selecione <strong>PostgreSQL</strong> e informe a <strong>senha do usuário zabbix </strong>criada anteriormente, clique em <strong>Próximo passo</strong>.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-3.png" alt="" width="1275" height="739" class="alignnone size-full wp-image-7880" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-3.png 1275w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-3-300x174.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-3-1024x594.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-3-768x445.png 768w" sizes="auto, (max-width: 1275px) 100vw, 1275px" /></p>
<p><strong>Defina um nome, e selecione o Tema padrão e clique em Próximo passo</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-4.png" alt="" width="1268" height="702" class="alignnone size-full wp-image-7881" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-4.png 1268w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-4-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-4-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-4-768x425.png 768w" sizes="auto, (max-width: 1268px) 100vw, 1268px" /></p>
<p><strong>Se tudo estiver ok, Próximo passo</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-5.png" alt="" width="1268" height="702" class="alignnone size-full wp-image-7882" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-5.png 1268w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-5-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-5-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-5-768x425.png 768w" sizes="auto, (max-width: 1268px) 100vw, 1268px" /></p>
<p><strong>Fim</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-6.png" alt="" width="1268" height="702" class="alignnone size-full wp-image-7883" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-6.png 1268w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-6-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-6-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-6-768x425.png 768w" sizes="auto, (max-width: 1268px) 100vw, 1268px" /></p>
<p>Entre com Usuário <strong>Admin</strong> e senha <strong>zabbix</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-7.png" alt="" width="1268" height="702" class="alignnone size-full wp-image-7884" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-7.png 1268w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-7-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-7-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-7-768x425.png 768w" sizes="auto, (max-width: 1268px) 100vw, 1268px" /></p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-8-inicial.png" alt="" width="1967" height="937" class="alignnone size-full wp-image-7885" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-8-inicial.png 1967w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-8-inicial-300x143.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-8-inicial-1024x488.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-8-inicial-768x366.png 768w, https://blog.remontti.com.br/wp-content/uploads/2024/04/zabbix-7-debian-12-8-inicial-1536x732.png 1536w" sizes="auto, (max-width: 1967px) 100vw, 1967px" /></p>
<p>Simples né? Gostou e 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>Abraço!</p>
<p>Fontes:<br />
<a href="https://www.zabbix.com/documentation/7.0/" rel="noopener" target="_blank">https://www.zabbix.com/documentation/</a></p>
<p>O post <a href="https://blog.remontti.com.br/7870">Guia completo para instalar e configurar Zabbix 7 LTS no Debian 12 Bookworm com NGINX e PostgreSQL</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/7870/feed</wfw:commentRss>
			<slash:comments>30</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação e Configuração do NetBox no Debian 12: Guia Completo</title>
		<link>https://blog.remontti.com.br/7851</link>
					<comments>https://blog.remontti.com.br/7851#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 05 Apr 2024 15:16:39 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Administração de Sistemas]]></category>
		<category><![CDATA[Configuração do servidor]]></category>
		<category><![CDATA[Configuração NetBox]]></category>
		<category><![CDATA[Debian 12]]></category>
		<category><![CDATA[Debian 12 Bookworm]]></category>
		<category><![CDATA[Debian Bookworm]]></category>
		<category><![CDATA[documentação de rede]]></category>
		<category><![CDATA[gerenciamento de racks]]></category>
		<category><![CDATA[gerenciamento de rede]]></category>
		<category><![CDATA[gestão de rede]]></category>
		<category><![CDATA[Infraestrutura de Rede]]></category>
		<category><![CDATA[infraestrutura de TI]]></category>
		<category><![CDATA[instalação do NetBox]]></category>
		<category><![CDATA[Instalação NetBox]]></category>
		<category><![CDATA[IPAM]]></category>
		<category><![CDATA[IPAM (Gerenciamento de Endereço IP)]]></category>
		<category><![CDATA[netbox]]></category>
		<category><![CDATA[NetBox Debian]]></category>
		<category><![CDATA[NetBox Plugin]]></category>
		<category><![CDATA[NetBox Setup]]></category>
		<category><![CDATA[NetBox Topology Views]]></category>
		<category><![CDATA[Open Source Networking]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Redis]]></category>
		<category><![CDATA[Segurança de Rede]]></category>
		<category><![CDATA[tutorial de TI]]></category>
		<category><![CDATA[Tutorial NetBox]]></category>
		<category><![CDATA[virtualização]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=7851</guid>

					<description><![CDATA[<p>Netbox é um aplicativo web de código aberto desenvolvido para auxiliar na gestão e documentação de redes de computadores. Originalmente criado pela equipe de engenharia de rede da DigitalOcean, o NetBox foi desenhado para&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7851">Instalação e Configuração do NetBox no Debian 12: Guia Completo</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/2024/04/netbox-debian12-remontti-com-br.png" alt="" width="1792" height="1024" class="alignnone size-full wp-image-7868" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-remontti-com-br.png 1792w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-remontti-com-br-300x171.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-remontti-com-br-1024x585.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-remontti-com-br-768x439.png 768w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-remontti-com-br-1536x878.png 1536w" sizes="auto, (max-width: 1792px) 100vw, 1792px" /><br />
<a href="https://docs.netbox.dev/en/stable/" rel="noopener" target="_blank">Netbox</a> é um aplicativo web de código aberto desenvolvido para auxiliar na gestão e documentação de redes de computadores. Originalmente criado pela equipe de engenharia de rede da DigitalOcean, o NetBox foi desenhado para satisfazer as necessidades de engenheiros de rede e infraestrutura, cobrindo aspectos como:</p>
<ul>
<li><strong>Gerenciamento de endereço IP (IPAM)</strong> &#8211; Redes e endereços IP, VRFs e VLANs</li>
<li><strong>Racks de equipamentos</strong> &#8211; Organizados por grupo e local</li>
<li><strong>Dispositivos</strong> &#8211; Tipos de dispositivos e suas instalações</li>
<li><strong>Conexões</strong> &#8211; Rede, console e conexões de energia entre dispositivos</li>
<li><strong>Virtualização</strong> &#8211; Máquinas virtuais e clusters</li>
<li><strong>Circuitos de dados</strong> &#8211; Circuitos e fornecedores de comunicações de longa distância</li>
<li><strong>Segredos</strong> &#8211; Armazenamento criptografado de credenciais sensíveis</li>
</ul>
<p><strong>Requisitos:</strong><br />
<a href="https://blog.remontti.com.br/2966" rel="noopener" target="_blank">Instalação do Debian 12 Bookworm</a></p>
<p>Para tornar-se root corretamente, utilize o comando abaixo com o sinal de hífen.</p>
<pre class="remontti-code">su -</pre>
<p>Instale os pacotes necessários que são pré-requisitos para a instalação do NetBox.</p>
<pre class="remontti-code"># apt install gcc vim net-tools wget redis-server supervisor\
  postgresql-contrib postgresql libpq-dev \
  python3 python3-pip python3-venv python3-dev\
  build-essential libxml2-dev libxslt1-dev\
  libffi-dev libssl-dev zlib1g-dev graphviz\
  nginx redis python3-setuptools python3-gunicorn</pre>
<p>Faça login como usuário postgres para criar o banco de dados necessário.</p>
<pre class="remontti-code"># su - postgres</pre>
<p>Acesse o terminal do postgres com o comando a seguir:</p>
<pre class="remontti-code">$ psql</pre>
<p>Altere a <strong>senha</strong> conforme necessário.</p>
<pre class="remontti-code">postgres=# CREATE DATABASE netboxdb;
postgres=# CREATE USER netboxuser WITH PASSWORD &#039;sua_senha&#039;;
postgres=# GRANT ALL PRIVILEGES ON DATABASE netboxdb TO netboxuser;
postgres=# ALTER USER netboxuser WITH SUPERUSER;
postgres=# \q</pre>
<p>Verifique se o serviço redis está funcionando corretamente.</p>
<pre class="remontti-code">$ redis-cli ping</pre>
<p>Deverá retornar: <strong>PONG</strong></p>
<p>Volte ao usuário root.</p>
<pre class="remontti-code">exit</pre>
<p>Prossiga com o download do projeto NetBox verificando se há uma nova versão disponível no <a href="https://github.com/netbox-community/netbox/releases" rel="noopener" target="_blank">GitHub</a>. Acesse o diretório temporário, faça o download do NetBox, extraia o arquivo, mova para o diretório correto e ajuste as permissões.</p>
<pre class="remontti-code"># cd /tmp
# wget https://github.com/netbox-community/netbox/archive/refs/tags/v3.7.4.tar.gz
# tar vxf v3.7.4.tar.gz
# mv netbox*/ /opt/netbox
# cd /opt/netbox/
# chown www-data: /opt/netbox/netbox/media/ -R</pre>
<p>Gere a SECRET KEY que será usada posteriormente.</p>
<pre class="remontti-code"># /opt/netbox/netbox/generate_secret_key.py </pre>
<p>Exemplo:</p>
<pre class="remontti-code-plain">T7TE07O$j^Jqf9(*20q8M5kG4%NBIci#gEEn0$wuw*qodT7Lfo</pre>
<p>Copie e ajuste o arquivo de configuração com suas informações.</p>
<pre class="remontti-code"># cp /opt/netbox/netbox/netbox/configuration_example.py /opt/netbox/netbox/netbox/configuration.py
# vim /opt/netbox/netbox/netbox/configuration.py</pre>
<p>Edite o arquivo de configuração como no exemplo a seguir:</p>
<pre class="remontti-code">ALLOWED_HOSTS = [&#039;localhost&#039;,&#039;netbox.remontti.com.br&#039;]

DATABASE = {
    &#039;NAME&#039;: &#039;netboxdb&#039;,
    &#039;USER&#039;: &#039;netboxuser&#039;,
    &#039;PASSWORD&#039;: &#039;sua_senha&#039;,
    &#039;HOST&#039;: &#039;localhost&#039;,
    &#039;PORT&#039;: &#039;&#039;,
    &#039;CONN_MAX_AGE&#039;: 300,
}

SECRET_KEY = &#039;T7TE07O$j^Jqf9(*20q8M5kG4%NBIci#gEEn0$wuw*qodT7Lfo&#039;

LOGIN_REQUIRED = True</pre>
<p>Proceda com a instalação executando:</p>
<pre class="remontti-code"># /opt/netbox/upgrade.sh</pre>
<p>Crie um usuário administrador para o NetBox com o seguinte comando:</p>
<pre class="remontti-code"># source /opt/netbox/venv/bin/activate
(venv) # python3 /opt/netbox/netbox/manage.py createsuperuser
Username: remontti
Email address: noc@remontti.com.br
Password: xxxx
Password (again): xxxxx
Superuser created successfully.
(venv) # deactivate</pre>
<p>Configure o servidor web (nginx) e inicie os serviços do NetBox.</p>
<pre class="remontti-code"># cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
# cp /opt/netbox/contrib/*.service /etc/systemd/system/
# sed -i &#039;s/User=netbox/User=root/&#039; /etc/systemd/system/netbox*.service
# sed -i &#039;s/Group=netbox/Group=root/&#039; /etc/systemd/system/netbox*.service
# systemctl daemon-reload
# systemctl enable netbox netbox-rq netbox-housekeeping
# systemctl start netbox netbox-rq netbox-housekeeping
# systemctl status netbox netbox-rq</pre>
<p>Configure o nginx removendo o arquivo default e criando um novo arquivo de configuração.</p>
<pre class="remontti-code"># rm /etc/nginx/sites-enabled/default
# vim /etc/nginx/sites-available/netbox.conf</pre>
<p>Insira a configuração necessária no arquivo `netbox.conf` do nginx.</p>
<pre class="remontti-code-plain">
server {
    listen 80;
    listen [::]:80;
 
    server_name netbox.remontti.com.br;

    client_max_body_size 25m;
 
    location /static/ {
        alias /opt/netbox/netbox/static/;
    }
 
    location / {
        proxy_pass http://localhost:8001;
        proxy_set_header Host $http_host;
        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;
    }
}
</pre>
<p>Crie um link simbólico para ativar a configuração do nginx e reinicie o serviço.</p>
<pre class="remontti-code"># ln -s /etc/nginx/sites-available/netbox.conf /etc/nginx/sites-enabled/
# systemctl restart nginx</pre>
<p>Acesse seu NetBox pelo navegador em <em>&#8220;https://netbox.remontti.com.br/&#8221;</em> ou <em>&#8220;https://ip/&#8221;</em> e faça login com a senha criada.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12.png" alt="" width="1268" height="528" class="alignnone size-full wp-image-7865" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12.png 1268w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-300x125.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-1024x426.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-768x320.png 768w" sizes="auto, (max-width: 1268px) 100vw, 1268px" /></p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-ok.png" alt="" width="1268" height="897" class="alignnone size-full wp-image-7866" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-ok.png 1268w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-ok-300x212.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-ok-1024x724.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-ok-768x543.png 768w" sizes="auto, (max-width: 1268px) 100vw, 1268px" /></p>
<p>Instale o plugin <strong><a href="https://github.com/netbox-community/netbox-topology-views" rel="noopener" target="_blank">topology-views</a></strong>.</p>
<pre class="remontti-code"># source /opt/netbox/venv/bin/activate
(venv) # vim /opt/netbox/netbox/netbox/configuration.py</pre>
<p>Configure o plugin `netbox_topology_views` no arquivo de configuração.</p>
<pre class="remontti-code-plain">PLUGINS = [&quot;netbox_topology_views&quot;]

PLUGINS_CONFIG = {
    &#039;netbox_topology_views&#039;: {
        &#039;static_image_directory&#039;: &#039;netbox_topology_views/img&#039;,
        &#039;allow_coordinates_saving&#039;: True,
        &#039;always_save_coordinates&#039;: True
    }
}
</pre>
<p>Conclua a instalação do plugin e atualize as configurações.</p>
<pre class="remontti-code">(venv) # cd /opt/netbox/netbox
(venv) # pip3 install netbox-topology-views
(venv) # python3 manage.py migrate netbox_topology_views
(venv) # python3 manage.py collectstatic --no-input
# deactivate
# systemctl restart netbox netbox-rq netbox-housekeeping</pre>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-netbox_topology_views.png" alt="" width="1276" height="798" class="alignnone size-full wp-image-7860" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-netbox_topology_views.png 1276w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-netbox_topology_views-300x188.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-netbox_topology_views-1024x640.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/04/netbox-debian12-netbox_topology_views-768x480.png 768w" sizes="auto, (max-width: 1276px) 100vw, 1276px" /></p>
<p>Agradecimentos e convite para doação:<br />
<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 sempre atualizado. Agradeço por qualquer feedback nos comentários ou <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">contato direto</a>.</p>
<p>Fonte: <a href="https://docs.netbox.dev/" rel="noopener" target="_blank">Documentação Oficial do NetBox</a></p>
<p>O post <a href="https://blog.remontti.com.br/7851">Instalação e Configuração do NetBox no Debian 12: Guia Completo</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/7851/feed</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação FreeRadius no Debian 12 Bookworm (Extra sqlippool)</title>
		<link>https://blog.remontti.com.br/7784</link>
					<comments>https://blog.remontti.com.br/7784#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 30 Jan 2024 02:22:57 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Administração de sistema]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Autenticação PPPoE]]></category>
		<category><![CDATA[Configuração de servidor]]></category>
		<category><![CDATA[Debian 12 Bookworm]]></category>
		<category><![CDATA[freeradius]]></category>
		<category><![CDATA[FreeRadius 3.2.1]]></category>
		<category><![CDATA[LAMP (Linux]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Rede e segurança]]></category>
		<category><![CDATA[sqlippool]]></category>
		<category><![CDATA[Wireless Security]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=7784</guid>

					<description><![CDATA[<p>Este tutorial é especialmente útil para provedores de serviços que desejam estabelecer seu próprio sistema de autenticação usando o FreeRADIUS. Ele abrange uma ampla gama de autenticação, incluindo PPPoE, hotspot, e autenticação sem fio&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7784">Instalação FreeRadius no Debian 12 Bookworm (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/2024/01/freeradius-debian-12.png" alt="" width="1792" height="909" class="alignnone size-full wp-image-7787" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/01/freeradius-debian-12.png 1792w, https://blog.remontti.com.br/wp-content/uploads/2024/01/freeradius-debian-12-300x152.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/01/freeradius-debian-12-1024x519.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/01/freeradius-debian-12-768x390.png 768w, https://blog.remontti.com.br/wp-content/uploads/2024/01/freeradius-debian-12-1536x779.png 1536w" sizes="auto, (max-width: 1792px) 100vw, 1792px" /><br />
Este tutorial é especialmente útil para provedores de serviços que desejam estabelecer seu próprio sistema de autenticação usando o FreeRADIUS. Ele abrange uma ampla gama de autenticação, incluindo PPPoE, hotspot, e autenticação sem fio (PSK/EAP), entre outras opções.</p>
<p><strong>REQUISITOS</strong><br />
1 – <a href="https://blog.remontti.com.br/7236" rel="noopener noreferrer" target="_blank">Debian 12 Bookworm &#8211; Instalação limpa</a></p>
<p>Acesse seu bash e vire root com o comando su &#8211; para evitar comandos &#8220;que não existem&#8221;, e antes de mais nada tenha seu repositório atualizado.</p>
<pre class="remontti-code"># su -
# apt update
# apt upgrade</pre>
<p>Se o seu sistema Debian acabou de ser instalado e está em sua configuração inicial, aqui está o meu comando secreto que eu uso em todos os servidores após a instalação. Esse comando tem o objetivo de aprimorar a produtividade do shell (bash) no Debian e instalar alguns pacotes essenciais. É basicamente um script que inclui a maior parte das etapas descritas no tutorial: <a href="https://blog.remontti.com.br/5867" rel="noopener" target="_blank">Como melhorar a produtividade no seu Debian após instalação</a></p>
<pre class="remontti-code"># apt install wget -y; wget remontti.com.br/debian; bash debian
# su - </pre>
<p>O serviço web não é necessário, mas normalmente juntamente do Freeradius acabo instalando um phpmyadmin por exemplo para poder fazer uma administração fácil do banco de dados entre outros. Se desejar pular esta etapa ela é opcional.</p>
<h4>Instalação do Serviço Web+PHP</h4>
<p>Vamos instalar os pacotes necessários</p>
<pre class="remontti-code"># apt install apache2 apache2-utils libapache2-mod-php\
  php php-mysql php-cli php-pear php-gmp php-gd php-bcmath\
  php-mbstring php-curl php-xml php-zip -y</pre>
<p>Ajuste fino, <a href="https://blog.remontti.com.br/7496" rel="noopener" target="_blank">quiser saber mais clique aqui</a>.</p>
<pre class="remontti-code"># a2enmod rewrite ; a2enmod headers
# sed -i &#039;s/ServerTokens OS/ServerTokens Prod/&#039; /etc/apache2/conf-available/security.conf
# sed -i &#039;s/ServerSignature On/ServerSignature Off/&#039; /etc/apache2/conf-available/security.conf
# systemctl restart apache2</pre>
<h4>Instalação do MariaDB &#038; phpMyAdmin</h4>
<pre class="remontti-code"># apt install mariadb-server mariadb-client phpmyadmin</pre>
<p>Por padrão o pacote MaraiDB no Debian usa unix_socket para autenticar o login do usuário, o que basicamente significa que você pode usar o nome de usuário e a senha do sistema operacional para efetuar login no console do MariaDB. Assim, você pode logar diretamente sem fornecer a senha root do MariaDB. Mais a frente vou ensinar como definir uma senha, não farei agora pois se você alterar nesse momento ao instalar o phpMyAdmin terá um erro.</p>
<p>Selecione <strong>Apache2</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_1.png" data-rel="lightbox-gallery-Q8NFsfer" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_1.png" alt="" width="1256" height="408" class="alignnone size-full wp-image-7499" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_1.png 1256w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_1-300x97.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_1-1024x333.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_1-768x249.png 768w" sizes="auto, (max-width: 1256px) 100vw, 1256px" /></a></p>
<p>Responda <strong>Sim</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_2.png" data-rel="lightbox-gallery-Q8NFsfer" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_2.png" alt="" width="1257" height="513" class="alignnone size-full wp-image-7500" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_2.png 1257w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_2-300x122.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_2-1024x418.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_2-768x313.png 768w" sizes="auto, (max-width: 1257px) 100vw, 1257px" /></a></p>
<p><strong>Informe a senha</strong> para o banco de dados do phpmyadmin. <a href="http://senhasegura.remontti.com.br/" rel="noopener" target="_blank">http://senhasegura.remontti.com.br/</a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_3.png" data-rel="lightbox-gallery-Q8NFsfer" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_3.png" alt="" width="1261" height="410" class="alignnone size-full wp-image-7501" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_3.png 1261w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_3-300x98.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_3-1024x333.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_3-768x250.png 768w" sizes="auto, (max-width: 1261px) 100vw, 1261px" /></a></p>
<p>Repita a senha<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_4.png" data-rel="lightbox-gallery-Q8NFsfer" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_4.png" alt="" width="1264" height="437" class="alignnone size-full wp-image-7502" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_4.png 1264w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_4-300x104.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_4-1024x354.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12_4-768x266.png 768w" sizes="auto, (max-width: 1264px) 100vw, 1264px" /></a></p>
<p>Para acessar o phpmyadmin:<strong>http://[SERVER_IP]/phpmyadmin/</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_login.png" data-rel="lightbox-gallery-Q8NFsfer" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_login.png" alt="" width="1523" height="556" class="alignnone size-full wp-image-7471" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_login.png 1523w, https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_login-300x110.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_login-1024x374.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_login-768x280.png 768w" sizes="auto, (max-width: 1523px) 100vw, 1523px" /></a></p>
<p>Para aumentar a seguraça vamos definir uma senha para o usuário root do MariDB, não esqueça de alterar <strong>ALTERE_3ST4_SENHA</strong> pela sua senha.</p>
<pre class="remontti-code"># mariadb -u root</pre>
<pre class="remontti-code">USE mysql;
ALTER USER &#039;root&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;ALTERE_3ST4_SENHA&#039;;
FLUSH PRIVILEGES;
EXIT;</pre>
<p>Apague seus rastros, em /root/.mysql_history temos um histórico com todos os comandos dado no terminal do MariaDB, então não é legal deixar lá em texto puro a senha que setamos!</p>
<pre class="remontti-code"># &gt; /root/.mysql_history</pre>
<h4>Instalação do FreeRadius</h4>
<p>Abra o terminal de comando do MariaDB e crie a base e o usuário chamados de radius e defina a senha para este usuário.</p>
<pre class="remontti-code"># mariadb -u root -p</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 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</pre>
<p>Após comando será solicitado a senha do usuario radius (SENHA_USER_RADIUS).</p>
<p>Vamos fazer backups primeiramente dos arquivos que iremos alterar.</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/radiusd.conf /etc/freeradius/3.0/radiusd.conf.orig
# cp /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-available/sql.orig
# cp /etc/freeradius/3.0/mods-available/eap /etc/freeradius/3.0/mods-available/eap.orig
# cp /etc/freeradius/3.0/sites-available/default  /etc/freeradius/3.0/sites-available/default.org
# cp /etc/freeradius/3.0/mods-available/sqlippool /etc/freeradius/3.0/mods-available/sqlippool.orig
</pre>
<p>Irei abusar do comando sed de agora em diante com o intuito de entrar nos arquivos para editar, se não souber o que cada comando representa recomendo utilizar o chat GPT, cola lá e pergunta que ele explica rsrs (estou ficando velho)</p>
<pre class="remontti-code"># sed -i &#039;/^\s*stripped_names = no/s/^\(\s*stripped_names =\) no/\1 yes/g&#039; /etc/freeradius/3.0/radiusd.conf
# sed -i &#039;/^\s*auth = no/s/^\(\s*auth =\) no/\1 yes/g&#039; /etc/freeradius/3.0/radiusd.conf
# sed -i &#039;/^\s*auth_badpass = no/s/^\(\s*auth_badpass =\) no/\1 yes/g&#039; /etc/freeradius/3.0/radiusd.conf
# sed -i &#039;/^\s*auth_goodpass = no/s/^\(\s*auth_goodpass =\) no/\1 yes/g&#039; /etc/freeradius/3.0/radiusd.conf</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"># 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 os mods sql e sqlippool:</p>
<pre class="remontti-code"># ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/sql
# ln -s /etc/freeradius/3.0/mods-available/sqlippool /etc/freeradius/3.0/mods-enabled/sqlippool</pre>
<p>Desativando o TLS do Mysql</p>
<pre class="remontti-code"># sed -i &#039;84,102 {s/^/##/}&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;s/disable_tlsv1_2 = yes/disable_tlsv1_2 = no/&#039; /etc/freeradius/3.0/mods-available/eap 
# sed -i &#039;s/disable_tlsv1_1 = yes/disable_tlsv1_1 = no/&#039; /etc/freeradius/3.0/mods-available/eap 
# sed -i &#039;s/disable_tlsv1 = yes/disable_tlsv1 = no/&#039; /etc/freeradius/3.0/mods-available/eap
# sed -i &#039;/disable_tlsv1/s/^#//g&#039; /etc/freeradius/3.0/mods-available/eap
# sed -i &#039;s/tls_min_version = &quot;1.2&quot;/tls_min_version = &quot;1.0&quot;/&#039; /etc/freeradius/3.0/mods-available/eap</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"># sed -i &#039;/^[[:space:]]*digest/s/^/## /&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/^[[:space:]]*suffix/s/^/## /&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/^[[:space:]]*files/s/^/## /&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/^[[:space:]]*-ldap/s/^/## /&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/^[[:space:]]*exec/s/^/## /&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/^[[:space:]]*detail/s/^/## /&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/^[[:space:]]*unix/s/^/## /&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/^[[:space:]]*attr_filter.accounting_response/s/^/## /&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/^[[:space:]]*-ldap/s/^/## /&#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;741 s/# *//&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;958,970 {s/^/##/}&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;76 {s/^/#/}&#039; /etc/freeradius/3.0/mods-available/sqlippool
# sed -i &#039;77 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;/^[[:space:]]*#.*sqlippool/s/^#//&#039; /etc/freeradius/3.0/sites-available/default
</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;/^[[:space:]]*suffix/s/^/## /&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;/^[[:space:]]*files/s/^/## /&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;/^[[:space:]]*-ldap/s/^/## /&#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;/^[[:space:]]*radutmp/s/^/## /&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;266 s/# *//&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;336,361 {s/^/##/}&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;370,381 {s/^/##/}&#039; /etc/freeradius/3.0/sites-available/inner-tunnel</pre>
<p>Verifique com o comando abaixo se a saída dos seus arquivos 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-plain">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
	Autz-Type New-TLS-Connection {
		  ok
	}
}
authenticate {
	Auth-Type PAP {
		pap
	}
	Auth-Type CHAP {
		chap
	}
	Auth-Type MS-CHAP {
		mschap
	}
	mschap
	eap
}
preacct {
	preprocess
	acct_unique
}
accounting {
	sqlippool
	sql
}
session {
	sql
}
post-auth {
	if (session-state:User-Name &amp;&amp; reply:User-Name &amp;&amp; request:User-Name &amp;&amp; (reply:User-Name == request:User-Name)) {
		update reply {
			&amp;User-Name !* ANY
		}
	}
	update {
		&amp;reply: += &amp;session-state:
	}
	sqlippool
	sql
	remove_reply_message_if_eap
	Post-Auth-Type Challenge {
	}
	Post-Auth-Type Client-Lost {
	}
	if (EAP-Key-Name &amp;&amp; &amp;reply:EAP-Session-Id) {
		update reply {
			&amp;EAP-Key-Name := &amp;reply:EAP-Session-Id
		}
	}
}
pre-proxy {
}
post-proxy {
	eap
}
}
</pre>
<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-plain">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>
<h3>SQLIPPOOL</h3>
<p>Para muitos o o maior pesadelo <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f47b.png" alt="👻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> DUPLICIDADE DE IPs <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f47b.png" alt="👻" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />
No Debian 12 temos a versão 3.2.1 do freeradius sendo rodada, nessa versão alguma melhorias já foram aplicadas, mas eu ainda acho falha para maioria dos IPs, então vou deixar aqui algumas alterações que tenho aplicado para uma realidade provedores que acredito que irá atender sem dores de cabeça.</p>
<p>Importe o banco de dados e aplique as regras de procedure.</p>
<pre class="remontti-code"># mariadb -u radius -p radius &lt; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/schema.sql
# mariadb -u radius -p radius &lt; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/procedure.sql </pre>
<p>Crie uma cópia do arquivo original, nunca se saber quando iremos precisar.</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf.orig</pre>
<p>Para debugs e até mesmo algum script que visa buscar por falhas ou entendimento irei criar a coluna <strong>action</strong> na tabela radippool, nela estarei gravando qual a ação/query que ele executou do queries.conf.</p>
<pre class="remontti-code"># mysql -u radius -p -D radius -e &#039;ALTER TABLE radippool ADD COLUMN \`action\` VARCHAR(20) NULL AFTER pool_key;&#039;</pre>
<p>Vamos pagar tudo que tem em queries.conf e criar todas as entradas.</p>
<pre class="remontti-code"># &gt; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf
# vim /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</pre>
<p>Deixei nos comentários o macimo de explicação</p>
<pre class="remontti-code">
#
# TODOS OS IPS NA RADIPPOOL. AS POLÍTICAS SERÃO AS SEGUINTES:
# 
#  1 - Quando um novo login tentar selecionar um endereço IP pela primeira vez na &quot;radippool&quot;, o sistema verificará 
#      se esse login já utilizou um endereço com Pool-Name que esta solicitado.
#  2 - Se o login não tiver usado nenhum endereço da Pool-Name solicitada, será atribuído aleatoriamente um novo endereço, 
#      desde que o &quot;expiry_time&quot; seja menor que a data e hora atual.
#  3 - Se todos os endereços IPs dentro da Pool-Name solicitada já sendo utilizado ou estiverem em estado aguardando (&quot;waiting&quot;), 
#      a query &quot;allocate_find&quot; irá verificando se o &quot;expiry_time&quot; é menor que a data e hora atual e assim utilizando um dos IPs 
#      em &quot;waiting&quot; com o &quot;expiry_time&quot; mais antigo. Isso é comum por exemplo quando um cliente cancela sua assinatura.
#  3 - Se todos os endereços IPs dentro da Pool-Name solicitada já estiverem sendo utilizados ou estiverem em estado de espera (&quot;waiting&quot;), 
#      nossa query &quot;allocate_find&quot; irá verificar se o &quot;expiry_time&quot; é menor que a data e hora atual e, assim, utilizará um dos IPs
#      em estado de espera com o &quot;expiry_time&quot; mais antigo. Isso é comum, por exemplo, quando um cliente cancela sua assinatura.
#  4 - Se todos os IPs da Pool-Name estiverem em uso e o &quot;expiry_time&quot; for maior que a data atual informada pelo lease_duration, 
#      significa que essa pool-name acabou, nesse a query &quot;allocate_find&quot; buscará na Pool-Name definida na variável &quot;pool_next&quot;. 
#      Por exemplo, ao esgotar os IPs da Pool-Name &quot;publicos&quot;, serão entregues IPs da Pool-Name &quot;cgant&quot;.
#  5 - Se a Pool-Name solicitada e a Pool-Name definida em &quot;pool_next&quot; não tiverem mais endereços disponíveis, 
#      ou não forem encontradas, a responsabilidade de entregar os IPs ficará a cargo do roteador.
#
#  OBS: Escolher um IP randomicamente é mais interessante para balanceamento de carga.
#
#  Autor: Rudimar Remontti 
#


#  Usar SKIP LOCKED acelera as consultas de seleção
#  No entanto, requer MySQL &gt;= 8.0.1 ou MariaDB &gt;= 10.6.
#
#skip_locked = &quot;&quot;
skip_locked = &quot;SKIP LOCKED&quot;


#
#  Por padrão, ao utilizar todos os endereços IPs de uma pool, 
#  o módulo sqlippool do FreeRADIUS permite que seu roteador (NAS) 
#  distribua a pool configurada por ele.
#  Porém estarei aqui fazendo uma alteração na função &quot;allocate_find&quot;
#
pool_next = &quot;cgnat&quot;


#
#  Alocar um endereço IP já utilizado.
#
#  Se um usuário já utilizou um determinado IP, entregue 
#  para ele o mesmo endereco com &quot;expiry_time&quot; mais recente.
#
allocate_existing = &quot;\
	SELECT framedipaddress FROM ${ippool_table} \
	WHERE pool_name = &#039;%{control:${pool_name}}&#039; \
	AND username = &#039;%{User-Name}&#039; \
	ORDER BY expiry_time DESC \
	LIMIT 1 \
	FOR UPDATE ${skip_locked}&quot;


#
# Encontre um endereço IP livre no Pool-Name solicitado 
# ou no Pool-Name especificado na variável pool_next. 
# A explicação está no início deste arquivo.
#
#  Nota: Isso pode se tonar lento se você tiver mais de 30 mil IPs livres, 
#        é rerecomendo fazer um tuning no seu MariaDB/MySQL.
#
allocate_find = &quot;\
	SELECT framedipaddress \
	FROM ${ippool_table} \
	WHERE ( \
	    CASE \
	        WHEN ( \
	            SELECT COUNT(framedipaddress) \
	            FROM radippool \
	            WHERE pool_name = &#039;%{control:Pool-Name}&#039; AND expiry_time &lt; NOW() \
	            LIMIT 1 \
	        ) &gt; 0 THEN \
	            (pool_name = &#039;%{control:Pool-Name}&#039; AND expiry_time &lt; NOW()) \
	        ELSE \
	            CASE \
	                WHEN ( \
	                    SELECT COUNT(framedipaddress) \
	                    FROM radippool \
	                    WHERE pool_name = &#039;${pool_next}&#039; AND username = &#039;%{User-Name}&#039; \
	                    LIMIT 1 \
	                ) &gt; 0 THEN \
	                    (pool_name = &#039;${pool_next}&#039; AND username = &#039;%{User-Name}&#039;) \
	                ELSE \
	                    (pool_name = &#039;${pool_next}&#039; AND expiry_time &lt; NOW()) \
	            END \
	    END \
	) \
	ORDER BY expiry_time ASC, RAND() \
	LIMIT 1 \
	FOR UPDATE ${skip_locked}&quot;

#
#  Se um IP não puder ser alocado, verifique se o pool existe ou não. 
#  Isso permite que o módulo diferencie entre um pool cheio e nenhum pool.
#  Nota: Se você não estiver executando módulos de pool redundantes, esta consulta pode 
#  ser comentada para evitar executar esta consulta toda vez que um IP não for alocado.
#
pool_check = &quot;\
	SELECT id \
	FROM ${ippool_table} \
	WHERE pool_name=&#039;%{control:${pool_name}}&#039; \
	LIMIT 1&quot;

#
#  Atualização dos IPs já alocado.
#
allocate_update = &quot;\
	UPDATE ${ippool_table} \
	SET \
		nasipaddress = &#039;%{NAS-IP-Address}&#039;, pool_key = &#039;${pool_key}&#039;, \
		callingstationid = &#039;%{Calling-Station-Id}&#039;, \
		username = &#039;%{User-Name}&#039;, expiry_time = NOW() + INTERVAL ${lease_duration} SECOND, \
		action = &#039;allocate_update&#039; \
	WHERE framedipaddress = &#039;%I&#039;&quot;

#
#  Esta série de consultas libera um número de IP quando um registro de INÍCIO de contabilidade chega.
#
start_update = &quot;\
	UPDATE ${ippool_table} \
	SET \
		expiry_time = NOW() + INTERVAL ${lease_duration} SECOND, \
		action = &#039;start_update&#039; \
	WHERE nasipaddress = &#039;%{NAS-IP-Address}&#039; \
	AND pool_key = &#039;${pool_key}&#039; \
	AND username = &#039;%{User-Name}&#039; \
	AND callingstationid = &#039;%{Calling-Station-Id}&#039; \
	AND framedipaddress = &#039;%{${attribute_name}}&#039;&quot;

#
#  Essa consulta expira um número de IP quando um registro de PARADA de contabilidade chega.
#
stop_clear = &quot;\
	UPDATE ${ippool_table} \
	SET \
	    nasipaddress = &#039;&#039;, \
	    pool_key = &#039;waiting&#039;, \
	    callingstationid = &#039;&#039;, \
		expiry_time = NOW() - INTERVAL 2 SECOND, \
		action = &#039;stop_clear&#039; \
	WHERE nasipaddress = &#039;%{%{Nas-IP-Address}:-%{Nas-IPv6-Address}}&#039; \
	AND pool_key = &#039;${pool_key}&#039; \
	AND username = &#039;%{User-Name}&#039; \
	AND callingstationid = &#039;%{Calling-Station-Id}&#039; \
	AND framedipaddress = &#039;%{${attribute_name}}&#039;&quot;

#
#  Atualização do IP quando está em utilização, a atualização é feita 
#  a cada x tempo (interim-update/Acct-Interim-Interval) aumenta o tempo definido em &quot;lease_duration&quot;
#
alive_update = &quot;\
	UPDATE ${ippool_table} \
	SET \
		expiry_time = NOW() + INTERVAL ${lease_duration} SECOND, \
		action = &#039;alive_update&#039; \
	WHERE nasipaddress = &#039;%{%{Nas-IP-Address}:-%{Nas-IPv6-Address}}&#039; \
	AND pool_key = &#039;${pool_key}&#039; \
	AND username = &#039;%{User-Name}&#039; \
	AND callingstationid = &#039;%{Calling-Station-Id}&#039; \
	AND framedipaddress = &#039;%{${attribute_name}}&#039;&quot;


#
#  Libera todos os endereços IP alocados a um NAS quando este é ligado ou reiniciado. 
#  Exemplo que uma falha de energia.
#  
on_clear = &quot;\
	UPDATE ${ippool_table} \
	SET \
		expiry_time = NOW() + INTERVAL ${lease_duration} SECOND, \
		action = &#039;on_clear&#039; \
	WHERE nasipaddress = &#039;%{%{Nas-IP-Address}:-%{Nas-IPv6-Address}}&#039;&quot;


#
#  Libera todos os endereços IP alocados a um NAS quando este é desligado ou fica offline.
#
off_clear = &quot;\
	UPDATE ${ippool_table} \
	SET \
		expiry_time = NOW(), \
		action = &#039;off_clear&#039; \
	WHERE nasipaddress = &#039;%{%{Nas-IP-Address}:-%{Nas-IPv6-Address}}&#039;&quot;
</pre>
<p>É interessante você ajustar o tempo <strong>lease_duration = 3600</strong> que por padrão é de 1h no arquivo /etc/freeradius/3.0/mods-available/sqlippool, para mim obtive resultados melhores com 30min, porém sempre respeitando o tempo de <strong>Acct-Interim-Interval</strong> que deve ser um tempo menor, entre 5 a 10 minutos, para evitar duplicidades de IPs.<br />
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>
<pre class="remontti-code"># sed -i &#039;s/lease_duration = 3600/lease_duration = 1200/&#039; /etc/freeradius/3.0/mods-available/sqlippool
# systemctl  restart freeradius</pre>
<p>Caso você tenha uma alta demanda de requisições você deve 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>
<p>Em grande escalas é importante que você também realize um tuning no MariaDB. Recomendo:<br />
- <a href="https://github.com/major/MySQLTuner-perl" rel="noopener" target="_blank">https://github.com/major/MySQLTuner-perl</a><br />
- <a href="https://github.com/BMDan/tuning-primer.sh" rel="noopener" target="_blank">https://github.com/BMDan/tuning-primer.sh</a></p>
<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><strong>Resolução de problema:</strong></p>
<p>Se seu login conter @ no entanto não terminar como domínio padrão exemplo user@dom.xxx.yy user@dom.xxx, e sim apenas user@dom edite:</p>
<pre class="remontti-code"># vim /etc/freeradius/3.0/policy.d/filter</pre>
<p>Altere para accept o seguinte filtro:</p>
<pre class="remontti-code">
        if ((&amp;User-Name =~ /@/) &amp;&amp; (&amp;User-Name !~ /@(.+)\.(.+)$/))  {
            update request {
                &amp;Module-Failure-Message += &#039;Rejected: Realm does not have at least one dot separator&#039;
            }
            #reject
            accept
        }
</pre>
<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/7784">Instalação FreeRadius no Debian 12 Bookworm (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/7784/feed</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Guia passo a passo: Instalando NFDUMP, NFSEN e NFSEN-NG para Análise de Fluxo de Rede no Debian 12 Bookworm</title>
		<link>https://blog.remontti.com.br/7610</link>
					<comments>https://blog.remontti.com.br/7610#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 11 Jul 2023 22:13:53 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Administração de Rede]]></category>
		<category><![CDATA[Análise]]></category>
		<category><![CDATA[Análise de Segurança]]></category>
		<category><![CDATA[Análise de Tráfego]]></category>
		<category><![CDATA[bookworm]]></category>
		<category><![CDATA[Debian 12]]></category>
		<category><![CDATA[Debian 12 Bookworm]]></category>
		<category><![CDATA[Debian12]]></category>
		<category><![CDATA[Ferramentas de Análise]]></category>
		<category><![CDATA[Ferramentas de Rede]]></category>
		<category><![CDATA[Fluxo de Rede]]></category>
		<category><![CDATA[Gerenciamento de Tráfego]]></category>
		<category><![CDATA[GuiaPassoAPasso]]></category>
		<category><![CDATA[instalaçao]]></category>
		<category><![CDATA[monitoramento]]></category>
		<category><![CDATA[Monitoramento de Tráfego]]></category>
		<category><![CDATA[NFDUMP]]></category>
		<category><![CDATA[NFSEN]]></category>
		<category><![CDATA[NFSEN-NG]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[software livre]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=7610</guid>

					<description><![CDATA[<p>Neste tutorial você adquirirá conhecimentos e habilidades relacionadas à análise de fluxo de rede bem como a área de segurança. Você poderá examinar os dados de fluxo de rede capturados e identificar padrões, tendências&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7610">Guia passo a passo: Instalando NFDUMP, NFSEN e NFSEN-NG para Análise de Fluxo de Rede no Debian 12 Bookworm</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-nfsen-nfsen-ng-nfcap-debian-12-bokworm.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-7619" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-nfsen-nfsen-ng-nfcap-debian-12-bokworm.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-nfsen-nfsen-ng-nfcap-debian-12-bokworm-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-nfsen-nfsen-ng-nfcap-debian-12-bokworm-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p>Neste tutorial você adquirirá conhecimentos e habilidades relacionadas à análise de fluxo de rede bem como a área de segurança. Você poderá examinar os dados de fluxo de rede capturados e identificar padrões, tendências e anomalias no tráfego de rede. Isso pode ajudar a detectar atividades suspeitas, como ataques cibernéticos, tráfego malicioso ou congestionamentos.</p>
<h4>Distribuição Utilizada</h4>
<p><strong><a href="https://blog.remontti.com.br/7236" rel="noopener" target="_blank">Debian 12 bookworm (Instalação Limpa)</a></strong></p>
<h4>Requisitos de hardware</h4>
<p>Para o que vamos utilizar aqui não precisamos nada tão agressivo, porém o armazenamento vai depender muito de quanto tempo você for deixar salvo, em média você pode colocar 2GB a 4GB (por source) de dados por dias (mas isso é bem relativo), em questão de CPU e memoria 2 CPU e 2GB de memória já da conta, mas se puder coloca mais melhor para processar os dados.</p>
<h4>Pacotes Requeridos</h4>
<pre class="remontti-code"># apt install \
 curl wget unzip man-db tcpdump htop tree dialog git \
 build-essential autoconf pkg-config flex byacc bison \
 php php-dev apache2 libapache2-mod-php autogen \
 libtool librrd-dev libbz2-dev libpcap-dev rrdtool \
 libcurl4-openssl-dev librrds-perl libsocket6-perl \
 librrdp-perl libio-socket-inet6-perl libmailtools-perl \
 libnet-telnet-perl libnet-whois-ip-perl libnet-snmp-perl \
 libio-socket-ssl-perl libgd-perl git -y</pre>
<p>Crie o diretório onde iremos baixar nossos arquivos extras</p>
<pre class="remontti-code"># mkdir /root/nf</pre>
<h3>NFDUMP</h3>
<p><strong><a href="https://github.com/phaag/nfdump" rel="noopener" target="_blank">NFDUMP</a></strong> é um conjunto de ferramentas para coletar e processar dados netflow/ipfix e sflow, enviados de dispositivos compatíveis com netflow/sflow.</p>
<p>O conjunto de ferramentas contém vários coletores para coletar dados de fluxo:</p>
<ul>
<li>nfcapd suporta netflow v1, v5/v7, v9 e IPFIX</li>
<li>sfcapd suporta sflow.</li>
<li>nfpcapd converte dados pcap lidos de uma interface de host ou de arquivos pcap.</li>
</ul>
<p>O nfdump possui um filtro de fluxo muito poderoso para processar fluxos. A sintaxe do filtro é muito semelhante ao tcpdump, mas adaptada e estendida para filtragem de fluxo. Um filtro de fluxo também pode conter matrizes de muitos milhares de endereços IP, etc., para pesquisar registros específicos.</p>
<p>O nfdump pode agregar fluxos de acordo com um número de elementos definido pelo usuário. Isso mascara certos elementos e permite somar registros de fluxo correspondentes aos mesmos valores.</p>
<p>A combinação de filtragem e agregação de fluxo como entrada para qualquer estatística de fluxo permite processamento de fluxo complexo. Os dados de fluxo pré-filtrados e agregados também podem ser gravados de volta em um arquivo de fluxo binário, que novamente pode ser processado com nfdump</p>
<p>O nfdump pode enriquecer a listagem de fluxos com informações de localização geográfica e informações de AS, a menos que as informações de AS já estejam disponíveis nos registros de fluxo. Os endereços IP podem ser marcados com um código de país de duas letras ou com uma etiqueta de localização mais longa contendo a região geográfica, o país e a cidade. A localização geográfica e as informações AS são recuperadas do banco de dados geoDB opcional, criado pelo programa geolookup das ferramentas nfdump. geolookup usa o banco de dados Maxmind GeoDB ou GeoLite2 para criar um banco de dados de pesquisa binária para nfdump.</p>
<p><strong>Instalação:</strong><br />
O nfdump até se encontra no repositório do Debian 12 (na versão 1.7.1) como um serviço de coleta, como a ideia é mais voltada a depois utilizar o nfsen, irei baixar a ultima versão que inclusive tem alguns recursos interessantes que você pode se aprofundar posteriormente.  </p>
<pre class="remontti-code"># mkdir /root/nf
# cd /root/nf
# git clone https://github.com/phaag/nfdump.git
# cd nfdump
# ./autogen.sh</pre>
<p>Na compilação podemos ativar algumas features adicionais, para ver mais sobre use o comando:</p>
<pre class="remontti-code"># ./configure --help</pre>
<p>Estarei instalando as seguintes: (&#8211;enable-influxdb &#8211;enable-maxmind opcional)</p>
<pre class="remontti-code"># ./configure --enable-nfprofile --enable-nftrack --enable-jnat --enable-influxdb --enable-maxmind 
# make ; make install</pre>
<p>Atualize o cache das bibliotecas dinâmicas.</p>
<pre class="remontti-code"># ldconfig</pre>
<p>Iremos ter uma lista de novos binários em /usr/local/bin/</p>
<pre class="remontti-code-plain">├── geolookup
├── nfanon
├── nfcapd
├── nfdump
├── nfexpire
├── nfprofile
├── nfreplay
├── nftrack
└── updateGeoDB.sh</pre>
<p>Configure seu roteador para enviar dados de netflow para porta 2055, e com o comando a baixo vamos analisar se os mesmo estão chegando em nosso servidor e capturados pelo nfcap.</p>
<pre class="remontti-code"># nfcapd -E -p 2055 -w /tmp/</pre>
<pre class="remontti-code-plain">
Verbose log level: 3
Add flow source: ident: none, IP: any IP, flowdir: /tmp
Bound to IPv4 host/IP: any, Port: 2055
Init v1
Init v5/v7: Default sampling: 1
Init v9: Max number of v9 tags enabled: 105, default sampling: 1
Init IPFIX: Max number of ipfix tags enabled: 88, default sampling: 1
Startup nfcapd.
Process_v9: New v9 exporter: SysID: 1, Domain: 2166325505, IP: 10.10.10.255
Process_v9: New v9 exporter: SysID: 2, Domain: 18841857, IP: 10.10.10.255
^CFile Block Header: type: 3, size: 64, NumRecords: 2
Ident: &#039;none&#039; Flows: 0, Packets: 0, Bytes: 0, Sequence Errors: 0, Bad Packets: 0
Terminating nfcapd.
</pre>
<p><strong>Ctrl+C</strong> Para cancelar (Não precisa deixar em execução, deixe apenas alguns segundos para ver se esta chegando os flows)</p>
<pre class="remontti-code"># ls -lh /tmp/nfcapd.*</pre>
<p>Se tudo ocorreu bem você ira ter uma arquivo da captura com o nome nfcapd.AAAAMMDDHHMM [ANO MÊS DIA HORA MINUTO]</p>
<pre class="remontti-code-plain">-rw-r--r-- 1 root root 149K jul 11 14:54 /tmp/nfcapd.202307111450</pre>
<p>Nfdump é muito poderoso, para dar apenas uma provinha do que estamos falando testes os comandos a baixo para visualizar as saídas. O ultimo comando você vai gostar!</p>
<pre class="remontti-code"># nfdump -r /tmp/nfcapd.202307111450
# nfdump -r /tmp/nfcapd.202307111450 dst ip 8.8.8.8
# nfdump -r /tmp/nfcapd.202307111450 dst ip 8.8.8.8 and dst port 53
# nfdump -r /tmp/nfcapd.202307111500 dst port 80 or dst port 443 -s srcip/bytes
# nfdump -r /tmp/nfcapd.202307111450 -s record/bytes
# nfdump -r /tmp/nfcapd.202307111450 -s dstip/bytes
# nfdump -r /tmp/nfcapd.202307111450 -s dstas/bytes
# nfdump -r /tmp/nfcapd.202307111450 -s dstas/bytes
# nfdump -r /tmp/nfcapd.202307111450 &#039;net 200.200.200.0/22 and (dst port 80 or dst port 443)&#039; -s dstas/bytes -n 20</pre>
<p>Para mais informações de como utiliza-lo use comando <strong>man</strong> para ver o manual do nfdump.</p>
<pre class="remontti-code"># man nfdump</pre>
<p>Mas não se preocupe ainda em aprender todas as possibilidades, para isso vamos aprender agora utilizar duas ferramentar que poderão ser uteis para você. Mas ler <a href="https://blog.remontti.com.br/wp-content/uploads/2023/07/NFDUMP.txt" rel="noopener" target="_blank">esse manual</a> não vai cair o braço. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h3>NFSEN</h3>
<p>O <a href="https://github.com/phaag/nfsen" rel="noopener" target="_blank">NfSen</a> é uma ferramenta de código aberto para análise e visualização de dados de fluxo de rede. Com uma interface web intuitiva (estilo anos 90 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" />), ele coleta registros de fluxo de diferentes dispositivos e os apresenta de forma compreensível. Além disso, oferece recursos avançados, como detecção de ataques e armazenamento de dados de fluxo histórico, tornando-o uma opção popular para monitoramento e solução de problemas em redes de grande porte.</p>
<pre class="remontti-code"># cd /root/nf
# wget https://github.com/phaag/nfsen/archive/v1.3.9.tar.gz
# tar -vxzf v1.3.9.tar.gz
# cd nfsen-1.3.9
# sed -i &#039;s/\$USER\s*=\s*&quot;netflow&quot;;/\$USER    = &quot;www-data&quot;;/&#039; etc/nfsen-dist.conf
# sed -i &#039;s/\$WWWUSER\s*=\s*&quot;www&quot;;/\$WWWUSER  = &quot;www-data&quot;;/&#039; etc/nfsen-dist.conf
# sed -i &#039;s/\$WWWGROUP\s*=\s*&quot;www&quot;;/\$WWWGROUP = &quot;www-data&quot;;/&#039; etc/nfsen-dist.conf
# sed -i &#039;s/\$HTMLDIR\s*=\s*&quot;\/var\/www\/nfsen\/&quot;;/\$HTMLDIR    = &quot;\/var\/www\/html\/nfsen\/&quot;;/&#039; etc/nfsen-dist.conf
# sed -i &#039;s/\$BUFFLEN = 200000;/\$BUFFLEN = 1073741824;/&#039; etc/nfsen-dist.conf</pre>
<p>Vamos definir nosso enviadores de fluxos (sim você pode enviar de vários locais)</p>
<pre class="remontti-code"># vim etc/nfsen-dist.conf</pre>
<p>Procure pela seguintes linhas:</p>
<pre class="remontti-code-plain">
%sources = (
    &#039;Borda&#039;        =&gt; { &#039;port&#039; =&gt; &#039;2055&#039;, &#039;col&#039; =&gt; &#039;#0D47A1&#039;, &#039;type&#039; =&gt; &#039;netflow&#039; },
    &#039;Cgnat&#039;        =&gt; { &#039;port&#039; =&gt; &#039;3055&#039;, &#039;col&#039; =&gt; &#039;#B71C1C&#039;, &#039;type&#039; =&gt; &#039;netflow&#039; },
);
</pre>
<p>No exemplo acima estarei incluindo analise do meu <strong>Cgnat</strong> para fins de investigação de problemas <strong>(Mas se prepare que os arquivos capturados serão gigantes</strong>). Vale lembrar que para <strong>cada source a porta não pode ser a mesma</strong>!</p>
<p>Caso você queira adicionar ou remover um novo source edite o arquivo <strong>/data/nfsen/etc/nfsen.conf</strong> e rode o comando <strong>/data/nfsen/bin/nfsen reconfig</strong></p>
<p>Vamos criar o diretório /data/nfsen onde ficarão nossos dados do sistema.</p>
<pre class="remontti-code"># mkdir -p /data/nfsen
# ./install.pl etc/nfsen-dist.conf</pre>
<p>De um ENTER ao perguntar:  Perl to use: [/usr/bin/perl]</p>
<pre class="remontti-code-plain">
  Check for required Perl modules: All modules found.
  Setup NfSen:
  Version: 1.3.9: install.pl 2022-12-19

  Perl to use: [/usr/bin/perl]  [ENTER]
  Setup php and html files.
  mkdir /var/www/html/nfsen/

  Copy NfSen dirs etc bin libexec plugins doc ...
  Copy config file &#039;/etc/nfsen.conf&#039;

  In directory: /data/nfsen/bin ...
  Update script: nfsen
...
...</pre>
<p>Vamos ajustar o <a href="https://www.php.net/manual/pt_BR/timezones.america.php" rel="noopener" target="_blank">timezone</a> do PHP</p>
<pre class="remontti-code"># vim /etc/php/8.2/apache2/php.ini</pre>
<p>Localize e altere: (remova &#8220;;&#8221; do início para descomentar)</p>
<pre class="remontti-code-plain">date.timezone = &#039;America/Sao_Paulo&#039;</pre>
<pre class="remontti-code"># vim /etc/php/8.2/cli/php.ini</pre>
<p>Localize e altere:</p>
<pre class="remontti-code-plain">date.timezone = &#039;America/Sao_Paulo&#039;</pre>
<p>Reinicie p apache</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>Agora vamos criar um serviço no systemd para nosso amigo nfsen </p>
<pre class="remontti-code"># ln -s /data/nfsen/bin/nfsen /etc/init.d/nfsen</pre>
<p>Crie o arquivo:</p>
<pre class="remontti-code"># vim /lib/systemd/system/nfsen.service</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">[Unit]
Description=nfsen
After=network-online.target

[Service]
Type=simple
#Type=oneshot
RemainAfterExit=yes
ExecStart=/data/nfsen/bin/nfsen start
ExecStop=/data/nfsen/bin/nfsen stop
ExecReload=/data/nfsen/bin/nfsen restart
 
[Install]
WantedBy=multi-user.target</pre>
<p>Recarregue o daemon e vamos por para rodar </p>
<pre class="remontti-code"># systemctl daemon-reload
# systemctl enable nfsen
# systemctl start nfsen
# systemctl status nfsen</pre>
<p>Verificar logs</p>
<pre class="remontti-code"># journalctl -u nfsen 
# journalctl -u nfsen -p err</pre>
<p>Vamos ver se as portas estão na escuta</p>
<pre class="remontti-code"># ss -putan | grep nfcapd</pre>
<pre class="remontti-code-plain">
udp   UNCONN 0      0     0.0.0.0:2055     0.0.0.0:*     users:((&quot;nfcapd&quot;,pid=20756,fd=3))
udp   UNCONN 0      0     0.0.0.0:3055     0.0.0.0:*     users:((&quot;nfcapd&quot;,pid=20752,fd=3))</pre>
<p>Se quiser testar se algo esta chegando o tcpdump pode ser uma boa escolha também.</p>
<pre class="remontti-code"># tcpdump -i enp0s3 -n udp port 2055 -T cnfp -c 10
# tcpdump -i enp0s3 -n udp port 3055 -T cnfp -c 10
</pre>
<p><strong>Vamos entender como os dados vão ser armazenados</strong><br />
Em /data/nfsen/profiles-data/live/ todos nossos sources terão uma pasta, outra pasta com ano, mes, dia. Cada arquivos criado tem um intervalo de 5 minutos. Aguarde uns 15min e rode o seguinte comando:</p>
<pre class="remontti-code"># tree /data/nfsen/profiles-data/live/</pre>
<p>Iremos ver que alguns arquivos e diretórios já foram criados. </p>
<pre class="remontti-code-plain">
├── Borda
│   ├── 2023
│   │   └── 07
│   │       └── 11
│   │           ├── nfcapd.202307111600
│   │           ├── nfcapd.202307111605
│   │           ├── nfcapd.202307111610
│   │           ├── nfcapd.202307111615
│   │           └── nfcapd.202307111620
│   └── nfcapd.current.29124
└── Cgnat
    ├── 2023
    │   └── 07
    │       └── 11
    │           ├── nfcapd.202307111600
    │           ├── nfcapd.202307111605
    │           ├── nfcapd.202307111610
    │           ├── nfcapd.202307111615
    │           └── nfcapd.202307111620
    └── nfcapd.current.29128

9 directories, 12 files
</pre>
<p>Projeto não tem uma index então para não precisar informar na url nfsen.php crie um atalho apontando para index.php</p>
<pre class="remontti-code"># ln -s /var/www/html/nfsen/nfsen.php /var/www/html/nfsen/index.php</pre>
<p>Agora acesse: <strong>http://__endereco_servidor/nfsen/</strong><br />
E temos nossa bela interface anos 90! Não me preocupo com isso, a ferramenta é o que importa. Recomendo você dar uma olha na <a href="https://nfsen.sourceforge.net/#mozTocId391879" rel="noopener" target="_blank">documentação</a>.</p>
<h3>NFSEN-NG</h3>
<p>O projeto <a href="https://github.com/mbolli/nfsen-ng" rel="noopener" target="_blank">NfSen-NG</a> é uma implementação melhorada do NfSen, que oferece recursos avançados para coleta, análise e visualização de dados de tráfego de rede. Com sua interface web intuitiva e poderosa, o &#8220;nfsen-ng&#8221; permite aos usuários monitorar e analisar o tráfego em tempo real, realizar pesquisas detalhadas em dados históricos e criar relatórios personalizados, facilitando a detecção de problemas, a análise de desempenho e a tomada de decisões relacionadas à rede.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12.png" alt="" width="1199" height="778" class="alignnone size-full wp-image-7613" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12.png 1199w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-300x195.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-1024x664.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-768x498.png 768w" sizes="auto, (max-width: 1199px) 100vw, 1199px" /></p>
<pre class="remontti-code"># cd /var/www/html
# git clone https://github.com/mbolli/nfsen-ng /var/www/html/nfsen-ng
# cd /var/www/html/nfsen-ng/
# chmod +x backend/cli.php
# cp backend/settings/settings.php.dist backend/settings/settings.php
# mkdir /var/www/html/nfsen-ng/backend/datasources/data/
# chown -R www-data: /var/www/html/nfsen-ng/</pre>
<p>Vamos fazer alguns ajustes para ler nossa mesma base de dados do nfsen.</p>
<pre class="remontti-code"># vim backend/settings/settings.php</pre>
<p>Localize os sources.</p>
<pre class="remontti-code-plain">        &#039;sources&#039; =&gt; array(
            &#039;source1&#039;, &#039;source2&#039;,
        ),</pre>
<p>Informe os seus:</p>
<pre class="remontti-code-plain">        &#039;sources&#039; =&gt; array(
            &#039;Borda&#039;, &#039;Cgnat&#039;,
        ),</pre>
<p>Se desejar incluir algumas porta para analisar os gráficos.</p>
<pre class="remontti-code-plain">
        &#039;ports&#039; =&gt; array(
            80, 22, 53,
        ),</pre>
<p>No meu vou alterar para:</p>
<pre class="remontti-code-plain">        &#039;ports&#039; =&gt; array(
            0, 22, 53, 80, 443,
        ),</pre>
<p>Localize e altere:</p>
<pre class="remontti-code-plain">        &#039;binary&#039; =&gt; &#039;/usr/bin/nfdump&#039;,
        &#039;profiles-data&#039; =&gt; &#039;/var/nfdump/profiles-data&#039;,</pre>
<p>Por</p>
<pre class="remontti-code-plain">        &#039;binary&#039; =&gt; &#039;/usr/local/bin/nfdump&#039;,
        &#039;profiles-data&#039; =&gt; &#039;/data/nfsen/profiles-data&#039;,</pre>
<p>Enable apache modules</p>
<pre class="remontti-code"># a2enmod rewrite expires</pre>
<p>Configure a biblioteca RRD para o PHP</p>
<pre class="remontti-code"># pecl install rrd
# echo &quot;extension=rrd.so&quot; &gt; /etc/php/8.2/mods-available/rrd.ini
# phpenmod rrd</pre>
<p>Configure virtual host para ler o .htaccess</p>
<pre class="remontti-code"># vim /etc/apache2/sites-available/000-default.conf</pre>
<p>Deve ficar assim:</p>
<pre class="remontti-code-plain">&lt;VirtualHost *:80&gt;
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    &lt;Directory /var/www/html/&gt;
        Options FollowSymLinks Indexes
        AllowOverride All
    &lt;/Directory&gt;

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/VirtualHost&gt;</pre>
<p>Reinicie o serviço web</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>Vamos criar um &#8220;serviço&#8221; no systemd para iniciar o /var/www/html/nfsen-ng/backend/cli.php. </p>
<pre class="remontti-code"># vim /lib/systemd/system/nfsen-ng.service</pre>
<p>Adicione?</p>
<pre class="remontti-code-plain">[Unit]
Description=nfsen-ng
After=network-online.target
 
[Service]
Type=simple
RemainAfterExit=yes
ExecStart=su - www-data --shell=/bin/bash -c &#039;/var/www/html/nfsen-ng/backend/cli.php start&#039;
ExecStop=su - www-data --shell=/bin/bash -c &#039;/var/www/html/nfsen-ng/backend/cli.php stop&#039;
 
[Install]
WantedBy=multi-user.target</pre>
<p>Recarregue o daemon e vamos por para rodar</p>
<pre class="remontti-code"># systemctl daemon-reload
# systemctl enable nfsen-ng
# systemctl start nfsen-ng
# systemctl status nfsen-ng</pre>
<p>Acesse agora: <strong>http://__endereco__/nfsen-ng/</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-graph.png" data-rel="lightbox-gallery-kLRpYysu" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-graph.png" alt="" width="2560" height="967" class="alignnone size-full wp-image-7614" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-graph.png 2560w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-graph-300x113.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-graph-1024x387.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-graph-768x290.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-graph-1536x580.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-graph-2048x774.png 2048w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-graph-1320x500.png 1320w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></a></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat.png" data-rel="lightbox-gallery-kLRpYysu" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat.png" alt="" width="1920" height="1059" class="alignnone size-full wp-image-7615" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat-300x165.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat-1024x565.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat-768x424.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat-1536x847.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>Utilizando um filtro Ex: &#8220;dst as 15169 OR dst as 2906 OR dst as 32934&#8221; obtém um informações com destino aos 3 AS.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat2.png" data-rel="lightbox-gallery-kLRpYysu" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat2.png" alt="" width="1920" height="992" class="alignnone size-full wp-image-7616" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat2.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat2-300x155.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat2-1024x529.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat2-768x397.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfsen-ng-debian-12-stat2-1536x794.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a><br />
Se notar na parte verde temos o comando executado no terminal</p>
<pre class="remontti-code"># nfdump -M &#039;/data/nfsen/profiles-data/live/Borda&#039; -R &#039;2023/07/11/nfcapd.202307111605:2023/07/11/nfcapd.202307111730&#039; -s &#039;dstas/pps&#039; &#039;dst as 15169 OR dst as 2906 OR dst as 32934&#039;</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-google-facebook-netflix.png" data-rel="lightbox-gallery-kLRpYysu" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-google-facebook-netflix.png" alt="" width="2292" height="316" class="alignnone size-full wp-image-7617" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-google-facebook-netflix.png 2292w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-google-facebook-netflix-300x41.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-google-facebook-netflix-1024x141.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-google-facebook-netflix-768x106.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-google-facebook-netflix-1536x212.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2023/07/nfdump-google-facebook-netflix-2048x282.png 2048w" sizes="auto, (max-width: 2292px) 100vw, 2292px" /></a><br />
Pode ser um bom &#8220;meio de você aprender os comandos&#8221;. </p>
<p>Algo legal do NfSen-Ng é que ele tem uma API: <strong>http://__endereco__//nfsen-ng/api/config</strong> de uma lida em <a href="https://github.com/mbolli/nfsen-ng/blob/master/README.md" rel="noopener" target="_blank">https://github.com/mbolli/nfsen-ng/blob/master/README.md</a> como utiliza, com um pouco de imaginação você pode fazer algumas coisas bem legais.</p>
<h4>Script para ir apagando arquivos mais antigos</h4>
<pre class="remontti-code"># mkdir /root/scripts/
# vim /root/scripts/faxina_nf.sh</pre>
<p>Adicione (ajuste os dias para realidade do seu disco)</p>
<pre class="remontti-code-plain">#!/bin/bash
  
# Defina o diretório do NFSen
nf_dir=&quot;/data/nfsen/profiles-data/live/&quot;

#Define o número de dias a ser removido
ref_date=$(date -d &#039;60 days ago&#039; +%Y%m%d)

# Ativar o modo de depuração
debug=false

# Percorre os diretórios e exclui os arquivos antigos
find &quot;$nf_dir&quot; -type f -name &#039;nfcapd.*&#039; | while read -r file; do
    # Obtém a data do arquivo em vez do diretório
    file_date=$(date -r &quot;$file&quot; +%Y%m%d)
    if [[ &quot;$file_date&quot; -lt &quot;$ref_date&quot; ]]; then
        if [[ &quot;$debug&quot; = true ]]; then
            echo &quot;$(date -r &quot;$file&quot;) - $file excluído&quot;
        fi
        rm &quot;$file&quot;
    fi
done</pre>
<p>Agende o script para roda todos os dias as 4h da manhã</p>
<pre class="remontti-code"># crontab -e</pre>
<p>Adcione</p>
<pre class="remontti-code-plain">
# m h  dom mon dow   command
# Apaga coletas
00 04  *   *   *     /root/scripts/faxina_nf.sh</pre>
<p>Reinicie o cron</p>
<pre class="remontti-code"># systemctl  restart cron</pre>
<p>Para verificar o tamanho do diretório use o comando</p>
<pre class="remontti-code"># du -sh /data/nfsen/profiles-data/live/</pre>
<p>E para ver o disco use:</p>
<pre class="remontti-code"># df -h</pre>
<p>Gostou e 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>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://github.com/phaag/nfdump" rel="noopener" target="_blank">https://github.com/phaag/nfdump</a><br />
<a href="https://github.com/phaag/nfsen" rel="noopener" target="_blank">https://github.com/phaag/nfsen</a><br />
<a href="https://nfsen.sourceforge.net/#mozTocId391879" rel="noopener" target="_blank">https://nfsen.sourceforge.net/</a><br />
<a href="https://github.com/mbolli/nfsen-ng" rel="noopener" target="_blank">https://github.com/mbolli/nfsen-ng</a><br />
<a href="https://github.com/phaag/nfinflux" rel="noopener" target="_blank">https://github.com/phaag/nfinflux</a><br />
<a href="https://github.com/phaag/nfexporter" rel="noopener" target="_blank">https://github.com/phaag/nfexporter</a><br />
<a href="https://github.com/phaag/go-nfdump" rel="noopener" target="_blank">https://github.com/phaag/go-nfdump</a></p>
<p>O post <a href="https://blog.remontti.com.br/7610">Guia passo a passo: Instalando NFDUMP, NFSEN e NFSEN-NG para Análise de Fluxo de Rede no Debian 12 Bookworm</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/7610/feed</wfw:commentRss>
			<slash:comments>29</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação do Grafana 11&gt;  com integração com Zabbix &#8211; (Debian 11 Bullseye/12 Bookworm)</title>
		<link>https://blog.remontti.com.br/6370</link>
					<comments>https://blog.remontti.com.br/6370#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 14 Jun 2023 19:00:02 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[administração]]></category>
		<category><![CDATA[Configuração]]></category>
		<category><![CDATA[dashboard]]></category>
		<category><![CDATA[Debian 11 Bullseye]]></category>
		<category><![CDATA[Debian 12 Bookworm]]></category>
		<category><![CDATA[ferramenta]]></category>
		<category><![CDATA[fontes de dados]]></category>
		<category><![CDATA[grafana]]></category>
		<category><![CDATA[graficos]]></category>
		<category><![CDATA[instalaçao]]></category>
		<category><![CDATA[instalação do Grafana]]></category>
		<category><![CDATA[integração]]></category>
		<category><![CDATA[integração com o Zabbix]]></category>
		<category><![CDATA[métricas]]></category>
		<category><![CDATA[monitoramento]]></category>
		<category><![CDATA[monitoramento de redes]]></category>
		<category><![CDATA[painéis]]></category>
		<category><![CDATA[software livre]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[tutorial Debian 11 Bullseye]]></category>
		<category><![CDATA[tutorial Debian 12 Bookworm]]></category>
		<category><![CDATA[tutorial Grafana]]></category>
		<category><![CDATA[tutorial passo a passo]]></category>
		<category><![CDATA[tutorial Zabbix.]]></category>
		<category><![CDATA[visualização de dados]]></category>
		<category><![CDATA[visualização de métricas]]></category>
		<category><![CDATA[zabbix]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6370</guid>

					<description><![CDATA[<p>O Grafana é um software livre que permite a visualização de formato de dados métricos. Ele permite criar painéis e gráficos a partir de várias fontes, e neste tutorial vamos aprender a instala-lo e&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6370">Instalação do Grafana 11&gt;  com integração com Zabbix &#8211; (Debian 11 Bullseye/12 Bookworm)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><center><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/grafana_debian.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-7454" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/grafana_debian.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2023/06/grafana_debian-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/grafana_debian-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></center></p>
<p>O Grafana é um software livre que permite a visualização de formato de dados métricos. Ele permite criar painéis e gráficos a partir de várias fontes, e neste tutorial vamos aprender a instala-lo e integrar com o Zabbix.</p>
<h3>Requisitos:</h3>
<p>Debian<br />
<strong><a href="https://blog.remontti.com.br/7236" rel="noopener" target="_blank">Instalação Debian 12 Bookworm</a></strong><br />
<strong><a href="https://blog.remontti.com.br/5792" rel="noopener" target="_blank">Instalação Debian 11 Bullseye</a></strong><br />
Zabbix:<br />
<strong><a href="https://blog.remontti.com.br/7870" rel="noopener" target="_blank">Instalação do Zabbix 7 LTS + NGINX + PostgreSQL + Debian 12 Bookworm</a></strong><br />
<strong><a href="https://blog.remontti.com.br/7411" rel="noopener" target="_blank">Instalação do Zabbix 6 LTS + NGINX + PostgreSQL + Debian 12 Bookworm</a></strong><br />
<strong><a href="https://blog.remontti.com.br/6350" rel="noopener" target="_blank">Instalação do Zabbix 6 LTS + NGINX + PostgreSQL + Debian 11 Bullseye</a></strong></p>
<p>Vamos baixar a key do repositório e adiciona-lo </p>
<pre class="remontti-code"># apt install gnupg2 apt-transport-https software-properties-common wget
# wget -q -O - https://apt.grafana.com/gpg.key | \
 gpg --dearmor | tee /etc/apt/keyrings/grafana.gpg &gt; /dev/null
# echo &quot;deb [signed-by=/etc/apt/keyrings/grafana.gpg]\
 https://apt.grafana.com stable main&quot; &gt; /etc/apt/sources.list.d/grafana.list
</pre>
<p>Atualize o repositório e instale o grafana</p>
<pre class="remontti-code"># apt update; apt install grafana -y </pre>
<p>Já aconteu dos desenvolvedores remover do repositório o pacote grafana, nesse caso acesse:<br />
<a href="https://grafana.com/grafana/download?edition=oss" rel="noopener" target="_blank">https://grafana.com/grafana/download?edition=oss</a> e faça a instalação de forma manual.</p>
<h3>Proxy com Nginx grafana</h3>
<p>Se você esta usando como servidor web o Nginx para acessar o grafana através de um domínio faça: (se o seu for apache pule)</p>
<pre class="remontti-code"># vim /etc/nginx/sites-available/grafana.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code">server {
    listen 80;
    listen [::]:80;

    server_name grafana.remontti.com.br;

    # Descomente para restringir o acesso apenas aos IPs Listados
    # allow 127.0.0.1;
    # allow ::1;
    # allow 192.168.0.0/16;
    # allow 2801:db8::/32;
    # deny  all;
    # error_page  403   http://www.remontti.com.br;
 
    location / {
        proxy_pass http://127.0.0.1:3000;  # Porta padrão do Grafana
        proxy_set_header Host $host;
        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_read_timeout 90;

        # Suporte a WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection &quot;upgrade&quot;;
        proxy_cache_bypass $http_upgrade;
    }
}</pre>
<p>Cria o link para sites-enabled em seguida verifique as configurações e reinicie o serviço.</p>
<pre class="remontti-code"># ln -s /etc/nginx/sites-available/grafana.conf /etc/nginx/sites-enabled/
# nginx -t
# systemctl restart nginx</pre>
<h3>Proxy com Apache grafana</h3>
<p>Se você esta usando como servidor web o Apache para acessar o grafana através de um domínio faça:</p>
<pre class="remontti-code"># a2enmod rewrite; a2enmod headers; a2enmod proxy ; a2enmod proxy_http ; 
mkdir /var/www/grafana
</pre>
<pre class="remontti-code"># vim /etc/apache2/sites-available/grafana.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code">&lt;VirtualHost *:80&gt;
	Protocols h2 http/1.1
	ServerName grafana.remontti.com.br
	ServerAdmin noc@remontti.com.br
	DocumentRoot /var/www/grafana

	ErrorDocument 403 http://www.remontti.com.br

	&lt;Directory /var/www/grafana/&gt;
		Options Indexes FollowSymLinks
		AllowOverride all
		# Descomente para restringir o acesso apenas aos IPs Listados
		# Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe::/48
	&lt;/Directory&gt;

	LogLevel warn

	ProxyPreserveHost On
	ProxyPass / http://127.0.0.1:3000/
	ProxyPassReverse / http://127.0.0.1:3000/

	ErrorLog ${APACHE_LOG_DIR}/grafana_error.log
	CustomLog ${APACHE_LOG_DIR}/grafana_access.log combined
	TransferLog ${APACHE_LOG_DIR}/grafana_access.log

&lt;/VirtualHost&gt;</pre>
<p>Ative a nova configuração e reinicie o Apache:</p>
<pre class="remontti-code"># a2ensite grafana
# systemctl restart apache2</pre>
<p>Vamos fazer alguns ajustes:</p>
<pre class="remontti-code"># vim /etc/grafana/grafana.ini</pre>
<p>Como utilizei um proxy irei executar o grafana apenas em modo localhost para que a porta 3000 fique aberta apenas para ele mesmo. Localize <strong>;http_addr = </strong> e deixe assim: </p>
<pre class="remontti-code">http_addr = 127.0.0.1</pre>
<p>Em <strong>;domain =</strong> ajuste para seu domínio.</p>
<pre class="remontti-code">domain = grafana.remontti.com.br</pre>
<p>E ajuste a <strong>;root_url = %(protocol)s://%(domain)s:%(http_port)s/</strong> para:</p>
<pre class="remontti-code">root_url = %(protocol)s://%(domain)s/</pre>
<p>Instale o <strong>Plugin Zabbix</strong></p>
<pre class="remontti-code"># grafana-cli plugins install alexanderzobnin-zabbix-app</pre>
<p>É recomendado que mensalmente você faça atualizações dos plugins instalados, com o comando:</p>
<pre class="remontti-code"># grafana-cli plugins update-all</pre>
<p>Depois da versão 11.1 existe um bug que acaba nao dando permissão para o usuário grafana ler/gravar em /var/lib/grafana/plugins, então corrija utilizando o comando: </p>
<pre class="remontti-code"># chown -R grafana: /var/lib/grafana/plugins</pre>
<p>Agora sim colocamos o Grafana para iniciar junto com a inicialização, ativamos e inicializamos o serviço:</p>
<pre class="remontti-code"># systemctl daemon-reload
# systemctl enable grafana-server
# systemctl start grafana-server</pre>
<p>Acesse em seu navegador seu <strong>&#8220;http://grafana._______.___.__&#8221;</strong> ou então <strong>http://IP_URL:3000</strong> ou pela porta que você alterou. O nome de usuário padrão é <strong>admin</strong> e a senha padrão é <strong>admin</strong>.</p>
<p>Se caso perder a senha de admin pode resetar ela com o comando:</p>
<pre class="remontti-code">grafana-cli admin reset-admin-password admin</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12.png" alt="" width="1920" height="974" class="alignnone size-full wp-image-7430" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12.png 1920w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12-300x152.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12-1024x519.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12-768x390.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12-1536x779.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a><br />
Ao fazer login pela primeira vez, você será solicitado a <strong>alterar sua senha</strong>.</p>
<h4>Integração com a base de dados Zabbix</h4>
<p>Acesse o Menu (1) Administration (2) Plugins(3) Localize o Zabbix e clique no mesmo.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_3.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_3.png" alt="" width="794" height="626" class="alignnone size-full wp-image-7433" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_3.png 794w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_3-300x237.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_3-768x606.png 768w" sizes="auto, (max-width: 794px) 100vw, 794px" /></a></p>
<p>Escreva na pesquisa (1) Zabbix e em seguida clique sobre (2)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_4.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_4.png" alt="" width="1064" height="607" class="alignnone size-full wp-image-7435" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_4.png 1064w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_4-300x171.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_4-1024x584.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_4-768x438.png 768w" sizes="auto, (max-width: 1064px) 100vw, 1064px" /></a></p>
<p>Clique em Enable (1)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_5.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_5.png" alt="" width="1654" height="722" class="alignnone size-full wp-image-7436" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_5.png 1654w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_5-300x131.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_5-1024x447.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_5-768x335.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_5-1536x670.png 1536w" sizes="auto, (max-width: 1654px) 100vw, 1654px" /></a></p>
<p>Volte ao Menu (1) abra Connections (2) Clique em Data sources (3)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_6.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_6.png" alt="" width="801" height="558" class="alignnone size-full wp-image-7437" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_6.png 801w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_6-300x209.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_6-768x535.png 768w" sizes="auto, (max-width: 801px) 100vw, 801px" /></a></p>
<p>Clique em Add data sourece<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_7.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_7.png" alt="" width="1659" height="573" class="alignnone size-full wp-image-7438" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_7.png 1659w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_7-300x104.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_7-1024x354.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_7-768x265.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_7-1536x531.png 1536w" sizes="auto, (max-width: 1659px) 100vw, 1659px" /></a></p>
<p>Escreve na busca (1) Zabbix e clique nele (2)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_8.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_8.png" alt="" width="1648" height="432" class="alignnone size-full wp-image-7439" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_8.png 1648w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_8-300x79.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_8-1024x268.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_8-768x201.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_8-1536x403.png 1536w" sizes="auto, (max-width: 1648px) 100vw, 1648px" /></a></p>
<p>Agora em URL<strong> http://localhost/api_jsonrpc.php</strong> se você seguiu o tutorial do bloque para instalação do zabbix com domínio deve ter visto uma alias também para localhost, caso contrário informe os dados correto da URL do seu Zabbix.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_9.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_9.png" alt="" width="1657" height="907" class="alignnone size-full wp-image-7440" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_9.png 1657w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_9-300x164.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_9-1024x561.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_9-768x420.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_9-1536x841.png 1536w" sizes="auto, (max-width: 1657px) 100vw, 1657px" /></a></p>
<p>Role mais um pouco e informe o usuário e senha do zabbix (eu gosto de criar um usuário só para isso)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_10.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_10.png" alt="" width="1646" height="971" class="alignnone size-full wp-image-7441" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_10.png 1646w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_10-300x177.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_10-1024x604.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_10-768x453.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_10-1536x906.png 1536w" sizes="auto, (max-width: 1646px) 100vw, 1646px" /></a></p>
<p>Clique em Save &#038; test (1) Se tudo ocorrer bem você receberá uma mensagem de sucesso (2)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_11.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_11.png" alt="" width="1367" height="524" class="alignnone size-full wp-image-7442" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_11.png 1367w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_11-300x115.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_11-1024x393.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_11-768x294.png 768w" sizes="auto, (max-width: 1367px) 100vw, 1367px" /></a></p>
<p>Volte ao Menu, Connections, Data source (1) e clique em Add new data source (2)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_12.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_12.png" alt="" width="1668" height="591" class="alignnone size-full wp-image-7444" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_12.png 1668w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_12-300x106.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_12-1024x363.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_12-768x272.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_12-1536x544.png 1536w" sizes="auto, (max-width: 1668px) 100vw, 1668px" /></a></p>
<p>Iremos adicionar o Postgresql para otimizar as consultas no zabbix, isso faz total diferença em otimização! Então pesquise (1) por Postgresql e clique sobre (2)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_13.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_13.png" alt="" width="1653" height="486" class="alignnone size-full wp-image-7445" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_13.png 1653w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_13-300x88.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_13-1024x301.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_13-768x226.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_13-1536x452.png 1536w" sizes="auto, (max-width: 1653px) 100vw, 1653px" /></a></p>
<p>Informe os dados de conexão com o Postgres qual usou na instalação da base do zabbix.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_14.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_14.png" alt="" width="1653" height="930" class="alignnone size-full wp-image-7446" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_14.png 1653w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_14-300x169.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_14-1024x576.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_14-768x432.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_14-1536x864.png 1536w" sizes="auto, (max-width: 1653px) 100vw, 1653px" /></a></p>
<p>Role para baixo e selecione a versão (1) do seu PostgreSQL. Para Debian 12 a versão é a 15, e para Debian 11 a versão é a 13. Em Seguida Clique em Save &#038; Test (2) Se uma mensagem de sucesso (3) aparecer tudo funcionou!<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_15.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_15.png" alt="" width="1649" height="791" class="alignnone size-full wp-image-7447" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_15.png 1649w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_15-300x144.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_15-1024x491.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_15-768x368.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_15-1536x737.png 1536w" sizes="auto, (max-width: 1649px) 100vw, 1649px" /></a></p>
<p>Volte ao Menu, Connections, Data source (1) e clique em Zabbix (2)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_16.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_16.png" alt="" width="1661" height="486" class="alignnone size-full wp-image-7449" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_16.png 1661w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_16-300x88.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_16-1024x300.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_16-768x225.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_16-1536x449.png 1536w" sizes="auto, (max-width: 1661px) 100vw, 1661px" /></a></p>
<p>Role até achar Direct DB Connection (1) e clique em enable (2), em Data Source selecione PostgreSQL (3) em seguida clique em Save &#038; Test (4), você receberá uma mensagem de sucesso (5)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_17.png" data-rel="lightbox-gallery-2D7FZSTn" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_17.png" alt="" width="1586" height="556" class="alignnone size-full wp-image-7450" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_17.png 1586w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_17-300x105.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_17-1024x359.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_17-768x269.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/grafana_10_debian12_17-1536x538.png 1536w" sizes="auto, (max-width: 1586px) 100vw, 1586px" /></a></p>
<p>Agora vem a parte mais &#8220;legal&#8221; que é você montar seus gráficos, como isso é algo bem peculiar de cada um, o intuito aqui era ensinar instalar. Recomendo a leitura de <a href="https://alexanderzobnin.github.io/grafana-zabbix/guides/gettingstarted/" rel="noopener noreferrer" target="_blank">Introdução ao Grafana-Zabbix</a> do autor do plugin.</p>
<p>Simples né? Gostou e 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>Abraço!</p>
<p>Fontes:<br />
<a href="https://grafana.com/docs/grafana/latest/installation/debian/" rel="noopener" target="_blank">https://grafana.com/docs/grafana/latest/installation/debian/</a><br />
<a href="https://grafana.com/grafana/plugins/alexanderzobnin-zabbix-app" rel="noopener" target="_blank">https://grafana.com/grafana/plugins/alexanderzobnin-zabbix-app</a><br />
<a href="https://www.zabbix.com/documentation/" rel="noopener" target="_blank">https://www.zabbix.com/documentation/</a></p>
<p>O post <a href="https://blog.remontti.com.br/6370">Instalação do Grafana 11&gt;  com integração com Zabbix &#8211; (Debian 11 Bullseye/12 Bookworm)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6370/feed</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação do Zabbix 6 LTS + NGINX + PostgreSQL + Debian 12 Bookworm</title>
		<link>https://blog.remontti.com.br/7411</link>
					<comments>https://blog.remontti.com.br/7411#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 14 Jun 2023 18:23:53 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[administração]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[Configuração]]></category>
		<category><![CDATA[configuração do NGINX]]></category>
		<category><![CDATA[Debian 12 Bookworm]]></category>
		<category><![CDATA[escalabilidade]]></category>
		<category><![CDATA[ferramenta]]></category>
		<category><![CDATA[gerenciamento]]></category>
		<category><![CDATA[infraestrutura]]></category>
		<category><![CDATA[instalaçao]]></category>
		<category><![CDATA[instalação do Zabbix]]></category>
		<category><![CDATA[integração com o PostgreSQL]]></category>
		<category><![CDATA[monitoramento]]></category>
		<category><![CDATA[monitoramento de rede]]></category>
		<category><![CDATA[monitoramento de servidores]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Servidor]]></category>
		<category><![CDATA[servidores web]]></category>
		<category><![CDATA[setup]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[TI]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[tutorial Debian 12 Bookworm]]></category>
		<category><![CDATA[tutorial NGINX]]></category>
		<category><![CDATA[tutorial passo a passo]]></category>
		<category><![CDATA[tutorial PostgreSQL]]></category>
		<category><![CDATA[tutorial Zabbix 6 LTS]]></category>
		<category><![CDATA[Zabbix 6 LTS]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=7411</guid>

					<description><![CDATA[<p>O Zabbix é uma solução de nível enterprise, de código aberto. O Zabbix é um software que monitora vários parâmetros da rede, dos servidores e da saúde dos serviços. Utiliza-se de um mecanismo flexível&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7411">Instalação do Zabbix 6 LTS + NGINX + PostgreSQL + Debian 12 Bookworm</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/zabbix_6_debian_12.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-7421" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/zabbix_6_debian_12.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2023/06/zabbix_6_debian_12-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/zabbix_6_debian_12-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p>O <strong>Zabbix</strong> é uma solução de nível enterprise, de código aberto. O Zabbix é um software que monitora vários parâmetros da rede, dos servidores e da saúde dos serviços. Utiliza-se de um mecanismo flexível de notificação que permite configurar alertas por e-mail entre outros como Telegram, para praticamente qualquer evento. As notificações permitem que se reaja rapidamente à problemas no ambiente. O Zabbix oferece excelentes recursos de relatórios e visualização de dados armazenados. Isso faz com que o Zabbix seja a ferramenta ideal para planejamento de capacidade.</p>
<h4>Requisitos Debian 12 Bookworm </h4>
<p>&#8211; <a href="https://blog.remontti.com.br/7236" rel="noopener" target="_blank">Instalação do Debian 12 Bookworm limpa passo-a-passo</a><br />
&#8211; <a href="https://blog.remontti.com.br/7413" rel="noopener" target="_blank">Servidor WEB NGINX + PHP 8.2 + PostgreSQL +Let’s Encrypt Debian 12 Bookworm (LNP)</a></p>
<h1>Instalação do Zabbix 6 LTS </h1>
<p>Para instalação do Zabbix vamos incluir o repositório do oficial do Zabbix Versão 6 LTS.</p>
<pre class="remontti-code"># su -
# cd /tmp
# apt install wget</pre>
<p><strong>Repositório  Debian 12</strong></p>
<pre class="remontti-code"># cd /tmp/
# wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-5+debian12_all.deb
# apt install ./zabbix-release_6.0-5+debian12_all.deb
# apt update; apt upgrade -y; apt update</pre>
<pre class="remontti-code"># apt install zabbix-server-pgsql zabbix-frontend-php php-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent</pre>
<p>Vamos criar uma base de dados chamada <strong>zabbix</strong> e um usuário também chamado de zabbix no PostgreSQL.<br />
Não esqueça de alterar a senha: Use o gerador de senha: <a href="https://senhasegura.remontti.com.br/" rel="noopener noreferrer" target="_blank">https://senhasegura.remontti.com.br/</a></p>
<pre class="remontti-code"># su - postgres
$ createuser --pwprompt zabbix
Digite a senha para a nova role:  &lt;SENHA ZABBIX&gt;
Digite-a novamente: &lt;SENHA ZABBIX&gt;
Senha: &lt;SENHA POSTGRES CASO TENHA DEFINIDO NA INSTALAÇÃO DO MESMO&gt;

$ createdb -O zabbix zabbix
Senha: &lt;SENHA POSTGRES&gt;</pre>
<p>Importe o esquema inicial e os dados. Você será solicitado a inserir a senha que foi criada anteriormente.</p>
<pre class="remontti-code">$ zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | psql -U zabbix -d zabbix &amp;&gt;/dev/null
Senha para usuário zabbix: : &lt;SENHA ZABBIX&gt;
$ exit</pre>
<p>Edite o arquivo zabbix_server.conf para informar os dados para conexão com do PostgreSQL.</p>
<pre class="remontti-code"># vim /etc/zabbix/zabbix_server.conf</pre>
<p>Procure por <strong># DBPassword=</strong> descomente e sete sua senha.</p>
<pre class="remontti-code">#...
DBPassword=&lt;SENHA ZABBIX&gt;
#...</pre>
<p>Ajuste o arquivo /etc/zabbix/php-fpm.conf, descomente e defina o fuso horário correto. <a href="https://secure.php.net/manual/pt_BR/timezones.america.php" rel="noopener noreferrer" target="_blank">timezone</a> Sua região</a>.</p>
<pre class="remontti-code"># vim /etc/zabbix/php-fpm.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code">php_value[date.timezone] = America/Sao_Paulo</pre>
<p>Ajuste as configurações do nginx.</p>
<pre class="remontti-code"># vim /etc/nginx/conf.d/zabbix.conf </pre>
<p>Deixei algumas linhas comentadas como exemplo, faça de acordo com sua necessidade.</p>
<pre class="remontti-code">server {
        listen 80;
        listen [::]:80;
        server_name    zabbix.remontti.com.br localhost;
        #server_name   OU_SEU_IP;

        # Metodo simples para quem quer rodar em uma determinada porta
        #listen 8181;
        #listen [::]:8181;
        #server_name     _;

        root    /usr/share/zabbix;
        index   index.php;

        # Desmomente para deixar restringido apenas para determinados prefixos
        #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 100M;
 
        location = /favicon.ico {
                log_not_found   off;
        }

        location / {
                try_files       $uri $uri/ =404;
        }

        location /assets {
                access_log      off;
                expires         10d;
        }

        location ~ /\.ht {
                deny            all;
        }

        location ~ /(api\/|conf[^\.]|include|locale) {
                deny            all;
                return          404;
        }

        location ~ [^/]\.php(/|$) {
                fastcgi_pass    unix:/var/run/php/zabbix.sock;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_index   index.php;

                fastcgi_param   DOCUMENT_ROOT   /usr/share/zabbix;
                fastcgi_param   SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name;
                fastcgi_param   PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name;

                include fastcgi_params;
                fastcgi_param   QUERY_STRING    $query_string;
                fastcgi_param   REQUEST_METHOD  $request_method;
                fastcgi_param   CONTENT_TYPE    $content_type;
                fastcgi_param   CONTENT_LENGTH  $content_length;

                fastcgi_intercept_errors        on;
                fastcgi_ignore_client_abort     off;
                fastcgi_connect_timeout         60;
                fastcgi_send_timeout            180;
                fastcgi_read_timeout            180;
                fastcgi_buffer_size             128k;
                fastcgi_buffers                 4 256k;
                fastcgi_busy_buffers_size       256k;
                fastcgi_temp_file_write_size    256k;
        }
}
</pre>
<p>Inicie o servidor Zabbix e os processos do agente e configure-os para que sejam iniciados durante o boot do sistema.</p>
<pre class="remontti-code"># systemctl enable zabbix-server zabbix-agent</pre>
<pre class="remontti-code"># vim /etc/php/8.2/fpm/php.ini</pre>
<p>Localize <strong>max_execution_time</strong> e altere de 30 para 600</p>
<pre class="remontti-code">max_execution_time = 600</pre>
<pre class="remontti-code"># systemctl restart zabbix-server zabbix-agent nginx php8.2-fpm</pre>
<p>Acesse em seu navegador <strong>http://seu_ip:porta</strong> ou <strong>http://zabbix.seudominio.com.br</strong></p>
<p><strong>Selecione o Edioma, e Próximo passo</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_1.png" alt="" width="1562" height="827" class="alignnone size-full wp-image-6360" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_1.png 1562w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_1-300x159.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_1-1024x542.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_1-768x407.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_1-1536x813.png 1536w" sizes="auto, (max-width: 1562px) 100vw, 1562px" /></p>
<p>Se tudo estiver ok: <strong>Próximo passo</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_2.png" alt="" width="1562" height="1275" class="alignnone size-full wp-image-6361" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_2.png 1562w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_2-300x245.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_2-1024x836.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_2-768x627.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_2-1536x1254.png 1536w" sizes="auto, (max-width: 1562px) 100vw, 1562px" /></p>
<p>Selecione <strong>PostgreSQL</strong> e informe a <strong>senha do usuário zabbix </strong>criada anteriormente, clique em <strong>Próximo passo</strong>.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_3.png" alt="" width="1562" height="804" class="alignnone size-full wp-image-6362" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_3.png 1562w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_3-300x154.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_3-1024x527.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_3-768x395.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_3-1536x791.png 1536w" sizes="auto, (max-width: 1562px) 100vw, 1562px" /></p>
<p><strong>Defina um nome, e selecione o Tema padrão e clique em Próximo passo</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_4.png" alt="" width="1562" height="766" class="alignnone size-full wp-image-6363" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_4.png 1562w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_4-300x147.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_4-1024x502.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_4-768x377.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_4-1536x753.png 1536w" sizes="auto, (max-width: 1562px) 100vw, 1562px" /></p>
<p><strong>Se tudo estiver ok, Próximo passo</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_5.png" alt="" width="1562" height="766" class="alignnone size-full wp-image-6364" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_5.png 1562w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_5-300x147.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_5-1024x502.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_5-768x377.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_5-1536x753.png 1536w" sizes="auto, (max-width: 1562px) 100vw, 1562px" /></p>
<p><strong>Fim</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_6.png" alt="" width="1562" height="766" class="alignnone size-full wp-image-6365" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_6.png 1562w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_6-300x147.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_6-1024x502.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_6-768x377.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_6-1536x753.png 1536w" sizes="auto, (max-width: 1562px) 100vw, 1562px" /></p>
<p>Entre com Usuário <strong>Admin</strong> e senha <strong>zabbix</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_7.png" alt="" width="1562" height="766" class="alignnone size-full wp-image-6366" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_7.png 1562w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_7-300x147.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_7-1024x502.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_7-768x377.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_7-1536x753.png 1536w" sizes="auto, (max-width: 1562px) 100vw, 1562px" /></p>
<p><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 />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_8.png" alt="" width="1562" height="1151" class="alignnone size-full wp-image-6367" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_8.png 1562w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_8-300x221.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_8-1024x755.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_8-768x566.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/02/zabbix_6_install_8-1536x1132.png 1536w" sizes="auto, (max-width: 1562px) 100vw, 1562px" /></p>
<p>Simples né? Gostou e 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>Abraço!</p>
<p>Fontes:<br />
<a href="https://www.zabbix.com/documentation/" rel="noopener" target="_blank">https://www.zabbix.com/documentation/</a></p>
<p>O post <a href="https://blog.remontti.com.br/7411">Instalação do Zabbix 6 LTS + NGINX + PostgreSQL + Debian 12 Bookworm</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/7411/feed</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação do Nginx Proxy Manager</title>
		<link>https://blog.remontti.com.br/6561</link>
					<comments>https://blog.remontti.com.br/6561#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Sat, 18 Jun 2022 19:07:54 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[administração web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[autenticação HTTP]]></category>
		<category><![CDATA[cgnat]]></category>
		<category><![CDATA[configuração de rede]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian 11]]></category>
		<category><![CDATA[Debian 12]]></category>
		<category><![CDATA[Debian 12 Bookworm]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[Docker Compose]]></category>
		<category><![CDATA[gerenciamento de certificados]]></category>
		<category><![CDATA[instalação de software]]></category>
		<category><![CDATA[letsencrypt]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[Nginx Proxy Manager]]></category>
		<category><![CDATA[otimização de servidor]]></category>
		<category><![CDATA[proxy reverso]]></category>
		<category><![CDATA[proxy-cache]]></category>
		<category><![CDATA[segurança de aplicação]]></category>
		<category><![CDATA[SSL grátis]]></category>
		<category><![CDATA[tutorial de tecnologia]]></category>
		<category><![CDATA[webserver]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6561</guid>

					<description><![CDATA[<p>O que é o Nginx Proxy Manager? É um sistema que possui uma interface web limpa, eficiente e fácil de configurar, sem precisar saber muito sobre Nginx ou Letsencrypt. Característica &#8211; Interface de administração&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6561">Instalação do Nginx Proxy Manager</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/06/nginx_proxy_manager_cover.png" alt="" width="720" height="340" class="alignnone size-full wp-image-6588" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_cover.png 720w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_cover-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_cover-520x245.png 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p>O que é o <a href="https://nginxproxymanager.com/guide/#project-goal"><strong>Nginx Proxy Manager</strong></a>?<br />
É um sistema que possui uma interface web limpa, eficiente e fácil de configurar, sem precisar saber muito sobre Nginx ou Letsencrypt.</p>
<p><b>Característica</b><br />
 &#8211; Interface de administração bonita e segura baseada<br />
 &#8211; Crie facilmente domínios de encaminhamento, redirecionamentos, streams e hosts 404 sem saber nada sobre Nginx<br />
 &#8211; SSL grátis usando Let&#8217;s Encrypt ou forneça seus próprios certificados SSL personalizados<br />
 &#8211; Listas de acesso e autenticação HTTP básica para seus hosts<br />
 &#8211; Configuração avançada do Nginx disponível para superusuários<br />
 &#8211; Gerenciamento de usuários, permissões e log de auditoria</p>
<p><strong>Distribuição testadas:</strong><br />
<a href="https://blog.remontti.com.br/7236" rel="noopener" target="_blank">Debian 12 Bookworm</a><br />
<a href="https://blog.remontti.com.br/5792" rel="noopener" target="_blank"><del datetime="2024-08-23T13:04:44+00:00">Debian 11 Bullseye</del></a></p>
<p><a href="https://blog.remontti.com.br/5867" rel="noopener" target="_blank">Como melhorar a produtividade no seu Debian após instalação</a> (Recomendado)</p>
<p><strong>Porta Utilizadas</strong><br />
81  &#8211; Porta de administração do Nginx Proxy Manager<br />
80  &#8211; Porta HTTP pública<br />
443 &#8211; Porta HTTP pública</p>
<h4>Configurações de interface de Rede</h4>
<p>Para a configuração da interface de rede vou usar uma configuração <strong>Pointopoint</strong> (Ponto a ponto) assim utilizando de apenas um endereço IP público, você pode (deve) <a href="https://blog.remontti.com.br/5848" rel="noopener" target="_blank">ler este tutorial</a> para conhecer varias possibilidades de configuração de rede pensa em como economizar endereços IPs.</p>
<pre class="remontti-code"># vim /etc/network/interfaces</pre>
<p>No meu exemplo vamos pesar que esse servidor esteja conectado ao RouterOS/Mikrotik ether2 e meu endereço de IP publico será o <em>200.200.200.255</em></p>
<pre class="remontti-code-plain">allow-hotplug enp0s3
iface enp0s3 inet static
        address 200.200.200.255
        pointopoint 192.168.171.171
        netmask 255.255.255.255
        gateway 192.168.171.171
</pre>
<p>Agora no seu RouterOS vamos criar nosso Pointopoint gatewai 192.168.171.171 tendo como network o endereço IP público.</p>
<pre class="remontti-code-plain">RouterOS# /ip address
RouterOS# add address=192.168.171.171 comment=Pointopoint interface=ether2 network=200.200.200.255</pre>
<p>Se você não tem IP publico para colocar em seu servidor, então fixe um endereço IP Privado e redirecione as potas 80,81 e 443 para ele, utilizando seu IP público que está em seu router. Exemplo:</p>
<pre class="remontti-code-plain">allow-hotplug enp0s3
iface enp0s3 inet static
        address 10.10.10.2/24
        gateway 10.10.10.1</pre>
<p>E é clario se você conter endereço IPv6, não deixe de configurar sua placa! Exemplo:</p>
<pre class="remontti-code-plain">iface enp0s3 inet6 static
        pre-up modprobe ipv6
        address 2804:bebe:cafe::2
        netmask 64
        gateway 2804:bebe:cafe::1</pre>
<h4>Instalação Docker</h4>
<p>Iremos instalar os pacotes necessários, bem como adicionar o repositório oficial do Docker</p>
<pre class="remontti-code"># apt install ca-certificates curl gnupg2 apt-transport-https lsb-release
# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
# echo &quot;deb https://download.docker.com/linux/debian $(lsb_release -cs) stable&quot; &gt; /etc/apt/sources.list.d/docker.list</pre>
<p>Atualize o repositório e instale-o</p>
<pre class="remontti-code"># apt update
# apt install docker-ce docker-ce-cli containerd.io</pre>
<h4>Instalação Docker Compose</h4>
<p>Vamos fazer download do Docker Compose, e adicionar aos binários do nosso servidor como um executável. </p>
<pre class="remontti-code"># curl -L &quot;https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose</pre>
<p>Versão baixada foi a 2.24.5, mas você pode consultar uma mais recente em: <a href="https://github.com/docker/compose/releases/" rel="noopener" target="_blank">https://github.com/docker/compose/releases/</a>, para verificar qual versão instalado use:</p>
<pre class="remontti-code"># docker-compose --version</pre>
<pre class="remontti-code-plain">Docker Compose version v2.24.5</pre>
<h4>Instação Nginx Proxy Manager</h4>
<p>Crie os diretórios quais ficarão todas as configurações:</p>
<pre class="remontti-code"># mkdir /etc/nginx-proxy
# mkdir /etc/nginx-proxy/{data,letsencrypt}</pre>
<p>Crie seu arquivo de composição do Docker com as configuração, para realizar a instalação dos containers do Nginx Proxy Manager e MariaDB com o Docker Compose. (Ajustes as senhas)</p>
<pre class="remontti-code"># vim /etc/nginx-proxy/docker-compose.yml</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">version: &quot;3&quot;
services:
  app:
    image: &#039;jc21/nginx-proxy-manager:latest&#039;
    restart: unless-stopped
    ports:
      # These ports are in format &lt;host-port&gt;:&lt;container-port&gt;
      - &#039;80:80&#039;       # Porta HTTP pública
      - &#039;443:443&#039;     # Porta HTTPS pública
      - &#039;81:81&#039; # Porta de administracao do Nginx Proxy
      # Adicione qualquer outra porta Stream que você queira expor, ex
      # - &#039;21:21&#039; # FTP
    environment:
      DB_MYSQL_HOST: &quot;db&quot;
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: &quot;nginxproxy&quot;
      DB_MYSQL_PASSWORD: &quot;S3NHA_NGINX_PR0XY&quot;
      DB_MYSQL_NAME: &quot;nginxproxy&quot;
      # Remova o comentário se você não tem o IPv6 em seu host
      # DISABLE_IPV6: &#039;true&#039;
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db

  db:
    image: &#039;jc21/mariadb-aria:latest&#039;
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: &#039;S3NHA_D3_R00T&#039;
      MYSQL_DATABASE: &#039;nginxproxy&#039;
      MYSQL_USER: &#039;nginxproxy&#039;
      MYSQL_PASSWORD: &#039;S3NHA_NGINX_PR0XY&#039;
    volumes:
      - ./mysql:/var/lib/mysql</pre>
<p>Execute o comando Docker Compose</p>
<pre class="remontti-code"># cd /etc/nginx-proxy
# docker-compose up -d</pre>
<p>Aguarde finalizar&#8230; em seguida visualize se os containers que foram criados</p>
<pre class="remontti-code"># docker ps -a</pre>
<pre class="remontti-code-plain">
CONTAINER ID   IMAGE                             COMMAND             CREATED          STATUS         PORTS                                                                                  NAMES
6b796a07af22   jc21/nginx-proxy-manager:latest   &quot;/init&quot;             9 seconds ago    Up 7 seconds   0.0.0.0:80-81-&gt;80-81/tcp, :::80-81-&gt;80-81/tcp, 0.0.0.0:443-&gt;443/tcp, :::443-&gt;443/tcp   nginx-proxy-app-1
4c93d3b8a544   jc21/mariadb-aria:latest          &quot;/scripts/run.sh&quot;   13 seconds ago   Up 8 seconds   3306/tcp                                                                               nginx-proxy-db-1
</pre>
<p>Abra em navegador <strong>http://IP_SERVIDOR/</strong> se tudo ocorreu bem você verá:<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_1.png" alt="" width="1274" height="666" class="alignnone size-full wp-image-6566" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_1.png 1274w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_1-300x157.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_1-1024x535.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_1-768x401.png 768w" sizes="auto, (max-width: 1274px) 100vw, 1274px" /></p>
<p>Agora abra na porta 81 <strong>http://IP_SERVIDOR:81/</strong> e entre com:</p>
<pre class="remontti-code-plain">Email: admin@example.com 
Password: changeme</pre>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_2a.png" alt="" width="1255" height="661" class="alignnone size-full wp-image-6576" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_2a.png 1255w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_2a-300x158.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_2a-1024x539.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_2a-768x405.png 768w" sizes="auto, (max-width: 1255px) 100vw, 1255px" /><br />
Ao entrar pela primeira vez um formulário com informações será exibido para você alterar seus dados, <strong>altere seus e-mail e senha</strong>.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_3_a.png" alt="" width="1257" height="664" class="alignnone size-full wp-image-6575" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_3_a.png 1257w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_3_a-300x158.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_3_a-1024x541.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_3_a-768x406.png 768w" sizes="auto, (max-width: 1257px) 100vw, 1257px" /></p>
<h4>Configurações de DNS Autoritativa</h4>
<p>Para que possamos encaminhar os acessos iremos necessitar configurar um subdomínios para cada situação em nosso servidor <a href="https://blog.remontti.com.br/5958" rel="noopener" target="_blank">DNS autoritativo</a>. </p>
<p>Vamos criar um cenário fictício para ilustrar melhor. Temos 1 clientes recebendo IPs privados da classe de um CGNAT, e o mesmo solicita um redirecionamento de portas para seu DVR. O cliente recebe o endereço IP privado 100.64.0.71 (Fixado) seu DVR esta na porta 80 na rede local 192.168.0.7. Para cada situação irei criar um novo subdomínio, exemplo &#8220;dvrudi&#8221; no servidor DNS autoritativo apontando para o IP Público do seu servidor Nginx Proxy, assim eu acesso <em>&#8220;dvrudi.remontti.com.br&#8221;</em>. Agora ao acessar o roteato e criar o redirecionamento provavelmente não iremos poder usar a porta 80, pois ela já é a porta de acesso do roteador 100.64.0.71, e é bem possível que você tenha fechado ela em seu firewall também para se proteger de ataques, neste caso use outra porta exemplos 60080 para fazer o direcionamento para a porta 80 do DVR, o cliente nem precisa saber desta porta 60080 ela é a penas a porta de entrada do Nginx Proxy. Agora volte ao Admin do NPM, no menu <strong>Hosts</strong> >> <strong>Proxy Hosts</strong> >> <strong>Add Proxy Host</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_4_a.png" alt="" width="1256" height="593" class="alignnone size-full wp-image-6571" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_4_a.png 1256w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_4_a-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_4_a-1024x483.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_4_a-768x363.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_4_a-520x245.png 520w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_4_a-720x340.png 720w" sizes="auto, (max-width: 1256px) 100vw, 1256px" /></p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_6.png" alt="" width="1257" height="449" class="alignnone size-full wp-image-6577" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_6.png 1257w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_6-300x107.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_6-1024x366.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_6-768x274.png 768w" sizes="auto, (max-width: 1257px) 100vw, 1257px" /></p>
<p>Se desejar pode ativar certificado grátis com Lets Encrypt.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_5_a.png" alt="" width="1253" height="595" class="alignnone size-full wp-image-6572" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_5_a.png 1253w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_5_a-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_5_a-1024x486.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager_5_a-768x365.png 768w" sizes="auto, (max-width: 1253px) 100vw, 1253px" /></p>
<p>Agora ao acessar <em>&#8220;dvrudi.remontti.com.br&#8221;</em> ele estará acessando diretamente o DVR. #clientefeliz</p>
<p>Legal não? Agora você pode ter um painel administrativo para redirecionamento de serviços web, no exemplo sitei o caso de CGNAT, mas você pode usar para qualquer outra situação, bem como até apontar para um subdiretório, e restringir o acesso do mesmo, sabe esses ERP <del datetime="2022-06-18T18:45:32+00:00">porco</del> que você acessar com /admin, daria para restringir. Bom o painel do NPM é bem intuitivo, para quem já conhece o Nginx sabe das suas enumeras possibilidades vai achar um doce.</p>
<h4>Atualizando do NPM</h4>
<pre class="remontti-code"># cd /etc/nginx-proxy/
# docker-compose down
# docker-compose pull
# docker-compose up -d</pre>
<p><strong>Gostou? Se quiser apoiar o blog e 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><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/06/nginx_proxy_manager.png" alt="" width="261" height="90" class="alignnone size-full wp-image-6583" /><br />
<strong>Fonte: </strong><br />
<a href="https://nginxproxymanager.com/guide/" rel="noopener" target="_blank">https://nginxproxymanager.com/guide/</a><br />
<a href="https://github.com/NginxProxyManager/nginx-proxy-manager" rel="noopener" target="_blank">https://github.com/NginxProxyManager/nginx-proxy-manager</a></p>
<p>O post <a href="https://blog.remontti.com.br/6561">Instalação do Nginx Proxy Manager</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6561/feed</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação do SpeedTest (OoklaServer) no Debian 11/12 gerenciado pelo systemd</title>
		<link>https://blog.remontti.com.br/6051</link>
					<comments>https://blog.remontti.com.br/6051#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 05 Nov 2021 21:38:17 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[banda]]></category>
		<category><![CDATA[bookworm]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Debian 12]]></category>
		<category><![CDATA[Debian 12 Bookworm]]></category>
		<category><![CDATA[debina 11]]></category>
		<category><![CDATA[medidor]]></category>
		<category><![CDATA[ooklaserver]]></category>
		<category><![CDATA[speedtest]]></category>
		<category><![CDATA[testador]]></category>
		<category><![CDATA[teste]]></category>
		<category><![CDATA[velocidade]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6051</guid>

					<description><![CDATA[<p>Neste tutorial iremos aprender a instalar o SpeedTest Server, porém vamos gerenciar o serviço dele pelo systemd, o que eu acho que já deveriam ter feito, ou a ookla já poderia disponibilizar isso via&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6051">Instalação do SpeedTest (OoklaServer) no Debian 11/12 gerenciado pelo systemd</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/speedtest_debian_11.png" alt="" width="750" height="375" class="alignnone size-full wp-image-6064" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_debian_11.png 750w, https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_debian_11-300x150.png 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /><br />
Neste tutorial iremos aprender a instalar o <em><a href="http://speedtest.net" rel="noopener" target="_blank">SpeedTest</a></em> Server, porém vamos gerenciar o serviço dele pelo systemd, o que eu acho que já deveriam ter feito, ou a ookla já poderia disponibilizar isso via repositório. #FicaDicaOokla </p>
<h4>Leia</h4>
<p>&#8211; <strong><a href="https://support.ookla.com/hc/en-us/articles/234578628-Speedtest-Server-Requirements" rel="noopener" target="_blank">Requisitos do hardware do servidor Speedtest</a></strong>.<br />
&#8211; <strong><a href="https://support.ookla.com/hc/en-us/articles/360060609971-Speedtest-Server-Network-Acceptance-Policy" rel="noopener" target="_blank">Política de aceitação do servidor Speedtest</a></strong><br />
&#8211; <a href="https://support.ookla.com/hc/en-us/categories/204419868-Speedtest-Servers" rel="noopener" target="_blank"><strong>Toda Documentação</strong></a>.</p>
<h4>Configuração do DNS</h4>
<p>No exemplo vou usar o subdomínio teste, no domínio remontti.com.br `teste.remontti.com.br`, logo é necessário configurar seu subdomínio &#8220;<strong>teste</strong>&#8221; <a href="https://blog.remontti.com.br/5958" rel="noopener noreferrer" target="_blank">em seu DNS Server</a>, <font color="red"><strong>NÃO USE subdomínio chamado speedtest</strong></font> pois você terá possivelmente seu pedido negado. Exemplo de entradas no DNS para IPv4 (A) e IPv6 (AAAA)</p>
<pre class="remontti-code-plain">[...]

teste       A       192.168.0.2
            AAAA    2001:db8:bebe:cafe::2

[...]</pre>
<h4>Distribuição testadas</h4>
<p><a href="https://blog.remontti.com.br/7236" rel="noopener" target="_blank"><strong>Debian 12 Bookworm</strong></a><br />
<a href="https://blog.remontti.com.br/5792" rel="noopener" target="_blank"><strong>Debian 11 Bullseye</strong></a></p>
<p><strong>Pacotes necessários, não esqueça de virar root de forma correta `su -`</strong></p>
<pre class="remontti-code"># su -
# apt install vim wget unzip net-tools psmisc</pre>
<p>Faça alguns ajustes de kernel para melhorar a performace do servidor:</p>
<pre class="remontti-code"># vim /etc/sysctl.conf</pre>
<p>Adicione ao final:</p>
<pre class="remontti-code-plain">
# Kernel deve tentar manter o máximo possível de dados em memória principal 
vm.swappiness = 5

# Evitar que o sistema fique sobrecarregado com muitos dados sujos na memória.
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5

# Aumentar o número máximo de conexões simultâneas
net.core.somaxconn = 65535

# Aumentar o tamanho máximo do buffer de recepção e transmissão de rede
net.ipv4.tcp_mem = 4096 87380 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# Melhorar o desempenho da conexão e a evitar congestionamentos
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_timestamps = 1

# Reduzir o tempo limite de conexão TCP
net.ipv4.tcp_fin_timeout = 15

# Ativar o escalonamento de fila de recepção de pacotes de rede
net.core.netdev_max_backlog = 8192

# Aumentar o número máximo de portas locais que podem ser usadas
net.ipv4.ip_local_port_range = 1024 65535

# Define o controle de saída de pacotes como &quot;fq&quot; para melhorar a distribuição de dados.
net.core.default_qdisc=fq

# Ativa o algoritmo BBR para melhorar a velocidade e evitar congestionamento de rede.
net.ipv4.tcp_congestion_control=bbr

</pre>
<p>Carregue para o kernel as novas alterações</p>
<pre class="remontti-code"># sysctl -p</pre>
<p>Módulos do kernel</p>
<pre class="remontti-code"># modprobe -a tcp_illinois
# echo &quot;tcp_illinois&quot; &gt;&gt; /etc/modules</pre>
<p>TCP Illinois é um algoritmo de controle de congestionamento que utiliza uma combinação de técnicas de controle de congestionamento baseadas em perda e atraso para melhorar o desempenho em redes de alta perda. Ele foi projetado para funcionar bem em ambientes móveis sem fio, onde a perda de pacotes é frequentemente causada por condições de RF em mudança.</p>
<pre class="remontti-code"># modprobe -a tcp_westwood
# echo &quot;tcp_westwood&quot; &gt;&gt; /etc/modules</pre>
<p>TCP Westwood é um algoritmo de controle de congestionamento que utiliza medidas de janela e de banda para detectar congestionamentos em vez de depender da detecção de perda de pacotes, que pode ser menos confiável em ambientes sem fio. Ele foi projetado especificamente para ambientes móveis sem fio e pode ser uma boa opção para melhorar o desempenho em redes sem fio com alta variação de taxa de perda de pacotes.</p>
<pre class="remontti-code"># modprobe -a tcp_htcp
# echo &quot;tcp_htcp&quot; &gt;&gt; /etc/modules</pre>
<p>O TCP-HTCP (Highspeed TCP for large congestion windows) é um algoritmo de controle de congestionamento do protocolo TCP que foi projetado para melhorar o desempenho em conexões de alta velocidade com janelas de congestionamento grandes.</p>
<p>Vamos criar o diretório <strong>/usr/local/src/ooklaserver</strong> onde ira ficarnossa aplicação OoklaServer.</p>
<pre class="remontti-code"># mkdir /usr/local/src/ooklaserver</pre>
<p>Vamos baixar nosso script de instalação em /usr/local/src/ooklaserver e executar a instalação.</p>
<pre class="remontti-code"># cd /usr/local/src/ooklaserver
# wget https://install.speedtest.net/ooklaserver/ooklaserver.sh
# chmod +x ooklaserver.sh
# ./ooklaserver.sh install</pre>
<p><em>Please confirm (y/n) ></em> <strong>y</strong></p>
<pre class="remontti-code-plain">
Server Platform is linux-x86_64-static-musl
This will install the Ookla server for linux-x86_64-static-musl to the current folder. Please confirm (y/n) &gt; y
Checking Directory Structure
Downloading Server Files
--2024-11-12 16:55:44--  https://install.speedtest.net/ooklaserver/stable/OoklaServer-linux-x86_64-static-musl.tgz
Resolvendo install.speedtest.net (install.speedtest.net)... 2a04:4e42::731, 2a04:4e42:200::731, 2a04:4e42:400::731, ...
Conectando-se a install.speedtest.net (install.speedtest.net)|2a04:4e42::731|:443... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 4638658 (4,4M) [application/gzip]
Salvando em: “OoklaServer-linux-x86_64-static-musl.tgz”

OoklaServer-linux-x86_64-static-mus 100%[================================================================&gt;]   4,42M  21,9MB/s    em 0,2s    

2024-11-12 16:55:46 (21,9 MB/s) - “OoklaServer-linux-x86_64-static-musl.tgz” salvo [4638658/4638658]

Extracting Server Files
OoklaServer
OoklaServer.properties.default
Stopping OoklaServer Daemon (5419)
Starting OoklaServer
Daemon Started (5464)
NOTE:

We strongly recommend following instructions at

   https://support.ookla.com/hc/en-us/articles/234578588-Linux-Startup-Script-Options

to ensure your daemon starts automatically when the system reboots

</pre>
<p>Neste momento o servidor ookla já iniciou, acesse em seu navegado <strong>http://sub.dominio:8080</strong> e verifique se o mesmo esta rodando> <strong>OoklaServer &#8211; It worked!</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/speedtest-debian-10-buster-it-worked.png" data-rel="lightbox-gallery-uTOdoChL" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/speedtest-debian-10-buster-it-worked-300x202.png" alt="" width="300" height="202" class="alignnone size-medium wp-image-3221" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/speedtest-debian-10-buster-it-worked-300x202.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/speedtest-debian-10-buster-it-worked-768x518.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/speedtest-debian-10-buster-it-worked.png 829w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Pare o serviço ooklaserver</p>
<pre class="remontti-code"># ./ooklaserver.sh stop</pre>
<p>Ou (se seu tempo é curto)</p>
<pre class="remontti-code"># killall -9 OoklaServer</pre>
<pre class="remontti-code-plain">Stopping OoklaServer Daemon (715) . . . . . . . . . . . . . . . . . . . .
Additional OoklaServer processes running; stopping
Stopping OoklaServer Daemon (715) . . . . . . . . . . . . . . . . . . . .
Stopping OoklaServer Daemon (858) .
Stopping OoklaServer Daemon (859) .
Stopping OoklaServer Daemon (879) . . . . . . . . . . . . . . . .
Lingering OoklaServer processes running; killing (715
964
965)</pre>
<p>Edite o arquivo de configuração OoklaServer</p>
<pre class="remontti-code"># vim /usr/local/src/ooklaserver/OoklaServer.properties</pre>
<p>A partir de 2023 IPv6 virou obrigatório, descomente (remova o # da frente) a linha a baixo deixando <strong>true</strong>.</p>
<pre class="remontti-code-plain">OoklaServer.useIPv6 = true</pre>
<p>Descomente a linha e inclua todos seus subidominios para seu domínio ex `*.remontti.com.br`</p>
<pre class="remontti-code-plain">OoklaServer.allowedDomains = *.ookla.com, *.speedtest.net, *.remontti.com.br</pre>
<p>Ativa o filtro que bloqueia agentes de usuário conhecidos como indesejados, ajudando a reduzir tráfego de fontes não oficiais.</p>
<pre class="remontti-code-plain">OoklaServer.userAgentFilterEnabled = true</pre>
<p>Define o número máximo de conexões simultâneas permitidas por endereço IP; o padrão é 50.</p>
<pre class="remontti-code-plain">OoklaServer.ipTracking.maxConnPerIp = 5</pre>
<p>Estabelece o número máximo de conexões permitidas por IP dentro de cada intervalo de tempo (bucket); o padrão é 10.</p>
<pre class="remontti-code-plain">OoklaServer.ipTracking.maxConnPerBucketPerIp = 10</pre>
<p>Define a capacidade máxima do pool de threads de trabalho; o padrão é 30.000.</p>
<pre class="remontti-code-plain">OoklaServer.workerThreadPool.capacity = 30000</pre>
<p>Especifica o tamanho máximo de quadro (frame) aceito em conexões WebSocket, em bytes; o padrão é 5 MB (5.242.880 bytes).</p>
<pre class="remontti-code-plain">OoklaServer.websocket.frameSizeLimitBytes = 5242880</pre>
<p>Define o tempo máximo, em minutos, para manter estatísticas de IPs inativos após a última conexão registrada; o padrão é 35 minutos.</p>
<pre class="remontti-code-plain">OoklaServer.ipTracking.maxIdleAgeMinutes = 35</pre>
<p>Se você desejar visualizar os logs descomente em &#8220;# Log to files&#8221;. Um arquivo em <strong>/usr/local/src/ooklaserver/ooklaserver.log</strong> será criado.</p>
<pre class="remontti-code-plain"># Log to files
#
logging.loggers.app.name = Application
logging.loggers.app.channel.class = FileChannel
logging.loggers.app.channel.pattern = %Y-%m-%d %H:%M:%S [%P - %I] [%p] %t
logging.loggers.app.channel.path = ${application.dir}/ooklaserver.log
logging.loggers.app.level = information</pre>
<p>Sobreecreva OoklaServer.properties.default com o OoklaServer.properties, para em futuras atualizações (Ocorre automaticamente) ele use como base as suas configurações.</p>
<pre class="remontti-code"># cp /usr/local/src/ooklaserver/OoklaServer.properties /usr/local/src/ooklaserver/OoklaServer.properties.default</pre>
<p>Para que o Ooklaserver seja tratado como um serviço vamos configurar-lo no systemd.</p>
<pre class="remontti-code"># vim /lib/systemd/system/ooklaserver.service</pre>
<pre class="remontti-code-plain">[Unit]
Description=OoklaServer-SpeedTest 
After=network.target

[Service]
User=root
Group=root
Type=simple
RemainAfterExit=yes

WorkingDirectory=/usr/local/src/ooklaserver
ExecStart=/usr/local/src/ooklaserver/ooklaserver.sh start
ExecReload=/usr/local/src/ooklaserver/ooklaserver.sh restart
#ExecStop=/usr/local/src/ooklaserver/ooklaserver.sh stop
ExecStop=/usr/bin/killall -9 OoklaServer

TimeoutStartSec=60
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target
Alias=speedtest.service
</pre>
<p>Recarrege o daemon</p>
<pre class="remontti-code"># systemctl daemon-reload</pre>
<p>Verifique o status, nosso serviço ira estar <strong>disabled</strong></p>
<pre class="remontti-code"># systemctl status ooklaserver</pre>
<pre class="remontti-code-plain">● ooklaserver.service - OoklaServer-SpeedTest
     Loaded: loaded (/lib/systemd/system/ooklaserver.service; disabled; vendor preset: enabled)
     Active: inactive (dead)</pre>
<p>Vamos deixa-lo enable para subir com o boot do sistema.</p>
<pre class="remontti-code"># systemctl enable ooklaserver</pre>
<pre class="remontti-code-plain">Created symlink /etc/systemd/system/speedtest.service → /lib/systemd/system/ooklaserver.service.
Created symlink /etc/systemd/system/multi-user.target.wants/ooklaserver.service → /lib/systemd/system/ooklaserver.service.</pre>
<p>Verifique se ficou <strong>enabled</strong></p>
<pre class="remontti-code">#  systemctl status ooklaserver</pre>
<pre class="remontti-code-plain">● ooklaserver.service - OoklaServer-SpeedTest
     Loaded: loaded (/lib/systemd/system/ooklaserver.service; enabled; vendor preset: enabled)
     Active: inactive (dead)</pre>
<p>Inicie o serviço e verifique seu status se o mesmo ficou <strong>active</strong>.</p>
<pre class="remontti-code"># systemctl start ooklaserver
# systemctl status ooklaserver</pre>
<pre class="remontti-code-plain">● ooklaserver.service - OoklaServer-SpeedTest
     Loaded: loaded (/lib/systemd/system/ooklaserver.service; enabled; vendor preset: enabled)
     Active: active (exited) since Fri 2021-11-05 15:31:58 -03; 1s ago
    Process: 2408 ExecStart=/usr/local/src/ooklaserver/ooklaserver.sh start (code=exited, status=0/SUCCESS)
   Main PID: 2408 (code=exited, status=0/SUCCESS)
      Tasks: 47 (limit: 2312)
     Memory: 10.5M
        CPU: 185ms
     CGroup: /system.slice/ooklaserver.service
             ├─2416 ./OoklaServer --daemon --pidfile=/usr/local/src/ooklaserver/OoklaServer.pid
             └─2420 /usr/local/src/ooklaserver/OoklaServer --ward --parent-pidfile=OoklaServer.pid --server-id=d907db80a&gt;

nov 05 15:31:58 deb11 systemd[1]: Started OoklaServer-SpeedTest.
nov 05 15:31:59 deb11 ooklaserver.sh[2408]: Starting OoklaServer
nov 05 15:31:59 deb11 ooklaserver.sh[2408]: Daemon Started (2416)</pre>
<p>Se desejar reinicie o servidor para ver se o serviço ooklaserver carregou no boot!</p>
<pre class="remontti-code"># reboot</pre>
<p>Ao voltar verifique se o mesmo iniciou.</p>
<pre class="remontti-code"># systemctl status ooklaserver</pre>
<pre class="remontti-code-plain">● ooklaserver.service - OoklaServer-SpeedTest
     Loaded: loaded (/lib/systemd/system/ooklaserver.service; enabled; vendor preset: enabled)
     Active: active (exited) since Fri 2021-11-05 15:34:19 -03; 22s ago
    Process: 332 ExecStart=/usr/local/src/ooklaserver/ooklaserver.sh start (code=exited, status=0/SUCCESS)
   Main PID: 332 (code=exited, status=0/SUCCESS)
      Tasks: 50 (limit: 2312)
     Memory: 18.3M
        CPU: 157ms
     CGroup: /system.slice/ooklaserver.service
             ├─390 ./OoklaServer --daemon --pidfile=/usr/local/src/ooklaserver/OoklaServer.pid
             └─404 /usr/local/src/ooklaserver/OoklaServer --ward --parent-pidfile=OoklaServer.pid --server-id=da57142421&gt;

nov 05 15:34:19 deb11 systemd[1]: Started OoklaServer-SpeedTest.
nov 05 15:34:20 deb11 ooklaserver.sh[332]: Starting OoklaServer
nov 05 15:34:20 deb11 ooklaserver.sh[332]: Daemon Started (390)</pre>
<p>Certifique-se acessando em seu navegador <strong>http://sub.dominio:8080</strong>.</p>
<p>O serviço ooklaserver tem um alias com o nome <strong>speedtest</strong>, então se quiser usar `systemctl status speedtest` também funiona. <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>
<pre class="remontti-code"># systemctl status speedtest</pre>
<p>Para verificar a versão use:</p>
<pre class="remontti-code">#  /usr/local/src/ooklaserver/OoklaServer -v</pre>
<p>Se você realizar o teste agora <a href="https://www.ookla.com/pt/host-tester" rel="noopener" target="_blank">https://www.ookla.com/pt/host-tester</a> você encontrará <strong>1 erros</strong>:<br />
É que você não tem certificado válido, a OoklaServer fala que você pode usar o certifica automatico que ela ira gerar, ao fazer o registro. <em>Nota: Este processo automatizado só começa depois que o servidor foi registrado e revisado por Ookla </em>. Você pode <a href="https://support.ookla.com/hc/en-us/articles/360001087752-How-do-I-enable-HTTPS-TLS-support-" rel="noopener" target="_blank">ler aqui mais sobre</a>.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_erro_certificado.png" alt="" width="1030" height="770" class="alignnone size-full wp-image-6054" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_erro_certificado.png 1030w, https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_erro_certificado-300x224.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_erro_certificado-1024x766.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_erro_certificado-768x574.png 768w" sizes="auto, (max-width: 1030px) 100vw, 1030px" /></p>
<h4>Solução para o certificado</h4>
<p>Vamos instalar o <a href="https://certbot.eff.org/" rel="noopener" target="_blank"><strong>Certbot</strong></a>, que irá gerar os certificados com o  Let’s Encrypt.</p>
<pre class="remontti-code"># apt install certbot</pre>
<p>Geramos o certificado para teste.remontti.com.br, lembrando que seu servidor DNS deve estar apontando para o IP Publivo do seu servidor para poder gerar o certificado sem erro.</p>
<pre class="remontti-code"># certbot certonly --standalone</pre>
<p><strong>Reponda</strong>: email (null@remontti.com.br), Y, N, Seu Domínio</p>
<pre class="remontti-code-plain">Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices)
 (Enter &#039;c&#039; to cancel): null@remontti.com.br                            &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y                                                           &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let&#039;s Encrypt project and the non-profit organization that
develops Certbot? We&#039;d like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N                                                           &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
Account registered.
Please enter in your domain name(s) (comma and/or space separated)  (Enter &#039;c&#039;
to cancel): teste.remontti.com.br                                       &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
Requesting a certificate for teste.remontti.com.br
Performing the following challenges:
http-01 challenge for teste.remontti.com.br
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/teste.remontti.com.br/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/teste.remontti.com.br/privkey.pem
   Your certificate will expire on 2022-02-03. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run &quot;certbot renew&quot;
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let&#039;s Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le</pre>
<p>Os arquivos do certificado foram criados em <strong>/etc/letsencrypt/live/SUB.DOMINIO.XXX.XX/</strong> com validade de <strong>90 dias</strong>.</p>
<p>Edite o arquivo de configuração OoklaServer, para usar o nosso certificado gerado.</p>
<pre class="remontti-code"># vim /usr/local/src/ooklaserver/OoklaServer.properties</pre>
<p>Localize <strong>openSSL.server.certificateFile</strong> e <strong>openSSL.server.privateKeyFile</strong></p>
<pre class="remontti-code-plain"># openSSL.server.certificateFile = cert.pem
# openSSL.server.privateKeyFile = key.pem</pre>
<p>Descomente as linhas e e adicione o caminho para os seus.</p>
<pre class="remontti-code-plain">openSSL.server.certificateFile = /etc/letsencrypt/live/SUB.DOMINIO.XXX.XX/fullchain.pem
openSSL.server.privateKeyFile = /etc/letsencrypt/live/SUB.DOMINIO.XXX.XX/privkey.pem</pre>
<p>Sobreecreva OoklaServer.properties.default com o OoklaServer.properties novamente para em futuras atualizações.</p>
<pre class="remontti-code"># cp /usr/local/src/ooklaserver/OoklaServer.properties /usr/local/src/ooklaserver/OoklaServer.properties.default</pre>
<p>Reinicie o OoklaServer. (Pode levar ate 2min, tenha paciência)</p>
<pre class="remontti-code"># systemctl  restart ooklaserver.service</pre>
<p>Agora acesse com HTTPS em seu navegador: <strong>https://sub.dominio:8080</strong>, e o certificado agora deve ser válido.</p>
<p>Realizando os testes novamente em <a href="https://www.ookla.com/pt/host-tester" rel="noopener" target="_blank">https://www.ookla.com/pt/host-tester</a>, o erro de certificado estará resolvido.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_sem_erro_certificado.png" alt="" width="1070" height="781" class="alignnone size-full wp-image-6057" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_sem_erro_certificado.png 1070w, https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_sem_erro_certificado-300x219.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_sem_erro_certificado-1024x747.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/11/speedtest_sem_erro_certificado-768x561.png 768w" sizes="auto, (max-width: 1070px) 100vw, 1070px" /></p>
<p>Mais ao final deixarei um script para renovação automática do certificado, pois o mesmo é valido apenas por 90 dias.</p>
<h4>Cadastro Ookla</h4>
<p>Hora de criar sua conta no ookla.com e fazer a solicitação para virar um host! <a href="https://account.ookla.com/register/servers" rel="noopener" target="_blank">https://account.ookla.com/register/servers</a>, se você já tem acesse: <a href="https://account.ookla.com/servers/create" rel="noopener" target="_blank">https://account.ookla.com/servers/create</a><br />
Com sua conta criada e validada no e-mail de verificação logue: <a href="https://account.ookla.com/" rel="noopener" target="_blank">https://account.ookla.com/</a>, clique em <strong>Go To Servers</strong>, e aceite os Termos. <strong>Add Server</strong> preencha com os seus dados e do servidor.</p>
<p>Agora basta aguardar, pode levar alguns dias para aprovação, você receberá um e-mail lhe avisado (se não for aprovado eles lhe dirão porque). Boa sorte!</p>
<h4>Renovar o certificado automaticamente</h4>
<p>Para evitar que o certificado expire faremos um script colocando o certbot para renovar uma vez ao mês pelo cron do servidor.</p>
<pre class="remontti-code"># vim /usr/local/src/ooklaserver/renova-certificado</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">#!/bin/bash
# Renova o certificado
/usr/bin/certbot renew -q
# Aguarda o certificado renovar
sleep 30
# Reinicie o OoklaServer
/usr/bin/systemctl restart ooklaserver
</pre>
<p>De permissão para execução e adicione ao cron, para que ele rode o script toda a meia noite do dia 1º de cada mês.</p>
<pre class="remontti-code"># chmod +x /usr/local/src/ooklaserver/renova-certificado
# echo &#039;00 00   1 * *   root    /usr/local/src/ooklaserver/renova-certificado&#039; &gt;&gt; /etc/crontab</pre>
<p>Verifique se a última linha está nosso script.</p>
<pre class="remontti-code"># cat /etc/crontab</pre>
<pre class="remontti-code-plain"># /etc/crontab: system-wide crontab
# Unlike any other crontab you don&#039;t have to run the `crontab&#039;
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *    * * *   root    cd / &amp;&amp; run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.monthly )
#
00 00   1 * *   root    /usr/local/src/ooklaserver/renova-certificado</pre>
<p>Reinici o cron para ele carregar a nova rotina.</p>
<pre class="remontti-code"># systemctl restart cron</pre>
<p>Se o certificado por venturar expirar e o script não renovar, basta você rodar na mão:</p>
<pre class="remontti-code"># certbot renew 
# systemctl restart ooklaserver</pre>
<h5>Parabéns seu servidor está pronto!</h5>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/11/rick-and-morthy-dance.gif" alt="" width="220" height="422" class="alignnone size-full wp-image-6062" /></p>
<h2>Atualização</h2>
<p>Para verificar a versão atual, execute o comando:</p>
<pre class="remontti-code"># /usr/local/src/ooklaserver/OoklaServer -v</pre>
<p>Hoje, dia 12/11/2024, a versão em uso é:<br />
<strong><em>2.11.1.2 2024-02-13.1456.91c4f93</em></strong></p>
<p>Para realizar a atualização, acesse o diretório e interrompa o serviço.</p>
<pre class="remontti-code"># cd /usr/local/src/ooklaserver
# ./ooklaserver.sh stop</pre>
<p>Remova o script de instalação e faça o download novamente:</p>
<pre class="remontti-code"># rm ooklaserver.sh
# wget https://install.speedtest.net/ooklaserver/ooklaserver.sh</pre>
<p>Dê permissão de execução e execute a instalação:</p>
<pre class="remontti-code"># chmod a+x ooklaserver.sh
# ./ooklaserver.sh install</pre>
<p>Pare novamente o serviço e inicie-o pelo systemd:</p>
<pre class="remontti-code"># ./ooklaserver.sh stop
# systemctl restart ooklaserver</pre>
<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/6051">Instalação do SpeedTest (OoklaServer) no Debian 11/12 gerenciado pelo systemd</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6051/feed</wfw:commentRss>
			<slash:comments>52</slash:comments>
		
		
			</item>
		<item>
		<title>Servidor DNS Bind9 &#8211; Recursivo + Autoritativo DNSSEC + Reverso + RPZ + Fail2ban + nftables + Zabbix no Debian 11/12</title>
		<link>https://blog.remontti.com.br/5958</link>
					<comments>https://blog.remontti.com.br/5958#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 26 Oct 2021 21:28:21 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Autoritativo]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[bookworm]]></category>
		<category><![CDATA[Bullseye]]></category>
		<category><![CDATA[debian 11]]></category>
		<category><![CDATA[Debian 12]]></category>
		<category><![CDATA[Debian 12 Bookworm]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Fail2ban]]></category>
		<category><![CDATA[Reverso]]></category>
		<category><![CDATA[rpz]]></category>
		<category><![CDATA[zabbix]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=5958</guid>

					<description><![CDATA[<p>BIND (Berkeley Internet Name Domain ou, como chamado previamente, Berkeley Internet Name Daemon) é o servidor para o protocolo DNS mais utilizado na Internet, especialmente em sistemas do tipo Unix, onde ele pode ser&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/5958">Servidor DNS Bind9 &#8211; Recursivo + Autoritativo DNSSEC + Reverso + RPZ + Fail2ban + nftables + Zabbix no Debian 11/12</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/bind9.16_debian_11_bullseye.png" alt="" width="750" height="375" class="alignnone size-full wp-image-5980" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/bind9.16_debian_11_bullseye.png 750w, https://blog.remontti.com.br/wp-content/uploads/2021/10/bind9.16_debian_11_bullseye-300x150.png 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /><br />
<a href="https://pt.wikipedia.org/wiki/BIND" rel="noopener noreferrer" target="_blank">BIND</a> (Berkeley Internet Name Domain ou, como chamado previamente, Berkeley Internet Name Daemon) é o servidor para o protocolo DNS mais utilizado na Internet, especialmente em sistemas do tipo Unix, onde ele pode ser considerado um padrão de fato.</p>
<p>Ante de iniciar a instalação é preciso saber como funciona um DNS:</p>
<p><iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/ACGuo26MswI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p><iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/epWv0-eqRMw" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p><strong>DNS Recursivo</strong><br />
O DNS recursivo é responsável pela resolução de nomes, começando sempre com consultas recursivas nos servidores raízes. Para melhorar a eficiência, reduzir o tráfego DNS na Internet e aumentar o desempenho em aplicativos de usuário final, utilizamos o cache de DNS, armazenando resultados das consulta DNS por um período de tempo determinado na configuração (tempo de vida determinado pelo autoritativo do domínio consultado).</p>
<p><strong>DNS Autoritativo</strong><br />
É o serviço DNS que possui autoridade sob um domínio. Assim, como o servidor ns1.remontti.com.br é o DNS autoritativo de meu domínio remontti.com.br, é ele que sempre vai responder qualquer subdomínio ou “hosts” (por exemplo: blog.remontti.com.br).<br />
É nesse servidor que você vai apontar nas configurações de um domínio registrado no registro.br, por exemplo.</p>
<p><strong>DNS Reverso</strong><br />
DNS atua resolvendo o nome do domínio/subdomínio para um endereço IP correspondente. Já o DNS Reverso, como o próprio nome diz, resolve o endereço IP para o nome de domínio associado ao host. Ou seja, quando temos disponível o endereço IP de um host e não sabemos o endereço do domínio (nome dado à máquina ou outro equipamento que acesse uma rede), tentamos resolver o endereço IP através do DNS reverso que procura qual nome de domínio está associado aquele endereço.<br />
Os servidores que utilizam o DNS Reverso conseguem verificar a autenticidade de endereços, verificando se o endereço IP atual corresponde ao endereço IP informado pelo servidor DNS.<br />
Isto evita que alguém utilize um domínio que não lhe pertence para enviar spam, por exemplo (por isso que ele é importante para servidores de e-mail).</p>
<p><strong>Correção dos dados de geolocalização</strong><br />
É muito importante que sua geolocalização estaja correta no maxmind.com, verifique alguns de de seus IPs.<br />
<a href="https://www.maxmind.com/en/geoip-demo" rel="noopener" target="_blank">https://www.maxmind.com/en/geoip-demo </a></p>
<p><strong>Para correção temos dois formulários.</strong><br />
<em>Correct a GeoIP Location</em><br />
<a href="https://support.maxmind.com/geoip-data-correction-request/correct-a-geoip-location/" rel="noopener" target="_blank">https://support.maxmind.com/geoip-data-correction-request/correct-a-geoip-location/ </a><br />
<em>Correct a GeoIP ISP or Organization</em><br />
<a href="https://support.maxmind.com/geoip-data-correction-request/correct-a-geoip-isp-or-organization/" rel="noopener" target="_blank">https://support.maxmind.com/geoip-data-correction-request/correct-a-geoip-isp-or-organization/ </a></p>
<h2>Instalação do Debian</h2>
<p><strong>Requesitos:</strong><br />
<strong><a href="https://blog.remontti.com.br/7236" rel="noopener noreferrer" target="_blank">Debian 12 Bookworm &#8211; Instalação Limpa</a></strong> (Recomendado)<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 obrigatória:</strong><br />
<a href="https://blog.remontti.com.br/5848" rel="noopener" target="_blank"><strong>Configurando interface de rede no Debian</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>Vire root com o comando correto!</p>
<pre class="remontti-code"># su - </pre>
<p>No <strong>Debian 12 o rsyslog foi abandonado</strong> como sistema de logs e esta usando systemd-journald. Como o bind salva alguns logs em arquivo e o fail2ban lê os mesmo vamos precisar dele, para isso instale o mesmo:</p>
<pre class="remontti-code"># apt install rsyslog</pre>
<h2>Instalação fail2ban e nftables (Master/Slave)</h2>
<p><strong>Fail2Ban</strong> é uma estrutura de software de prevenção de intrusões que protege os servidores contra ataques de força bruta. Ele opera monitorando arquivos de logs, sendo o mais comum seu uso para bloquear endereços IPs que podem pertencer à hosts que estão tentando violar a segurança do seu servidor.<br />
<strong>nftables</strong> é um firewall baseado no iptables que agora no Debian 11 já vem instalado por padrão subistituindo o antigo iptables.</p>
<pre class="remontti-code"># apt install fail2ban</pre>
<p>Entendo o funcionamento do fail2ban:</p>
<pre class="remontti-code"># fail2ban-client status</pre>
<p>Por padrão o filtro de SSH já vem habilitado, então seu SSH (porta 22) já está &#8220;protegida&#8221;, se alguém errar a senha por 5 vezes terá seu IP bloqueado por 10 minutos.</p>
<pre class="remontti-code-plain">Status
|- Number of jail:      1
`- Jail list:   sshd</pre>
<p>Para alterar esses padrões de tempo e número de tentativas edite: (este arquivo é muito bem comentado o que cada variável faz!)</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize as linhas, e ajuste de acordo com suas necessidades</p>
<pre class="remontti-code">bantime  = 10m
findtime  = 10m
maxretry = 5</pre>
<p>Se desejar desativar o filtro de SSH </p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.d/defaults-debian.conf</pre>
<p>Altere para <strong>false</strong></p>
<pre class="remontti-code-plain">[sshd]
enabled = false</pre>
<p>Porém como eu sempre altero a porta do SSH de todo o servidor bem como tempo para digitar a senha, é natural que o fail2ban não ira poteger caso você tenha alterado a mesma. Inclusive recomendo você adotar essa boa pratica.</p>
<pre class="remontti-code"># vim /etc/ssh/sshd_config</pre>
<p>Em <strong>Port</strong> defina a nova porta, e <strong>LoginGraceTime</strong> defina o tempo em segundos para digitar a senha, e nunca seja ignorante de permitir o acesso root direto no SSH em <strong>PermitRootLogin</strong>, a não ser que tenha uma forte motivo para isso (Me conte nos comentários, até hoje não tive motivo para tal!)</p>
<pre class="remontti-code-plain">Port 60002
LoginGraceTime 10
#PermitRootLogin prohibit-password # Nao seja burro de colocar um yes aqui!</pre>
<p>Com a porta alterada do SSH (como no exemplo 60002) vamos ajusta no fail2ban para proteger essa nova porta</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize e adicione 60002:</p>
<pre class="remontti-code-plain">[sshd]
Port = ssh,60002</pre>
<p>Por padrão de segurança do fail2ban usa o iptables e faz o bloquei apenas da porta do serviço que esta sofrendo o &#8220;ataque&#8221;, vamos subistituir o iptables pelo <strong>nftables</strong> ou por <strong>route</strong>. Vou deixar os dois modelos a baixo de exemplo. </p>
<p><strong>nftables:</strong> Em vez de usar o filtro multiport, vou setar allports e modificá-lo para que tentativas de violação crie uma regra de firewall de drop e não reject definitivamente o IP e não apenas fechando a porta do serviço. Para isso edite:</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize <strong>banaction</strong> e <strong>banaction_allports</strong> e altere para <strong>nftables-allports</strong>:</p>
<pre class="remontti-code-plain">banaction = nftables-allports
banaction_allports = nftables-allports</pre>
<p>Para bloquear tudo e não apenas a porta do serviço atacada:</p>
<pre class="remontti-code"># vim /etc/fail2ban/action.d/nftables.conf</pre>
<p>Localize <strong>rule_match-allports</strong> e remova o <strong>meta l4proto \{ <protocol> \}</strong> ficando: </p>
<pre class="remontti-code-plain">rule_match-allports =</pre>
<p>Ainda no altere o <strong>blocktype</strong> de <strong>reject</strong> para <strong>drop</strong></p>
<pre class="remontti-code-plain">blocktype = drop</pre>
<p>Habilite o nftblaes para o boot do sistema, em seguida reinicie os serviços </p>
<pre class="remontti-code"># systemctl enable nftables
# systemctl restart nftables fail2ban</pre>
<p>Verifique se mesmo estão rodando sem nenhum erro:</p>
<pre class="remontti-code"># systemctl status nftables fail2ban</pre>
<p><strong>route:</strong> Com o método route iremos em vezes de criar uma regra de firewall para o IP que esta &#8220;atacando&#8221; vamos coloca-lo em blackhole, assim se você possuir algum roteamento já poderá exportar o IP para sua borda para matar lá já (gosto + dessa).</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize <strong>banaction</strong> e <strong>banaction_allports</strong> e altere para <strong>route</strong>:</p>
<pre class="remontti-code-plain">banaction = route
banaction_allports = route</pre>
<p>Vamos ajustar agora para ação ser blackhole</p>
<pre class="remontti-code"># vim /etc/fail2ban/action.d/route.conf</pre>
<p>Em blocktype altere para blackhole</p>
<pre class="remontti-code-plain">blocktype = blackhole</pre>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<p>Se tiver acesso a outro servidor externo tente fazer uma conexão SSH, e erre varias vezes a senha para ser bloqueado, assim você pode validar seu fail2ban.</p>
<p>Para visualizar seu firewall <strong>nftables</strong> use o comando:</p>
<pre class="remontti-code"># nft list ruleset</pre>
<p>Ou se usou <strong>route</strong> para mostra a tabela de rotas: </p>
<pre class="remontti-code"># ip route list
# ip -6 route list</pre>
<p><strong>Alguns comandos úteis do fail2ban</strong><br />
Visulizar os filtros</p>
<pre class="remontti-code"># fail2ban-client status</pre>
<p>Visualizar detalhe de um filtro</p>
<pre class="remontti-code"># fail2ban-client status NOME_FILTRO
# fail2ban-client status sshd</pre>
<p>Remover um IP de um determinado filtro</p>
<pre class="remontti-code"># fail2ban-client set sshd unbanip IPADDRESS
# fail2ban-client set sshd unbanip 200.200.200.200</pre>
<p>Exemplo de script para remover todos os IPs banidos uma a um.</p>
<pre class="remontti-code-plain">#!/bin/bash
BANIDOS=`fail2ban-client status bind9 | grep &quot;Banned IP list&quot; | awk &#039;{$1=$2=$3=$4=$5=&quot;&quot;; print $0}&#039;`
IPS=$(echo $BANIDOS | tr &quot; &quot; &quot;\n&quot;)
for IP in $IPS
 do
  #echo &quot;Removendo: ${IP}&quot;
  fail2ban-client set bind9 unbanip ${IP} ;
  #ip route del ${IP}
done</pre>
<p>Se desejar adicionar algum prefixo a uma lista branca você pode editar: </p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize <strong>ignoreip</strong>, desomente a linha (remova o # da frete) e adicione os prefixo que deseja ignorar, para não cair bloqueio.</p>
<pre class="remontti-code-plain">ignoreip = 127.0.0.1/8 ::1 200.200.200.0/22 2000:2000::/32</pre>
<p>Reinicie o serviço</p>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<h2>Instalação do Bind9 (Master/Slave)</h2>
<p>Instalação dos pacotes</p>
<pre class="remontti-code"># apt install bind9 dnsutils</pre>
<p>Arquitetura de arquivos e diretórios do bind9 no Debian 11:</p>
<pre class="remontti-code-plain">/etc/bind/
├── bind.keys
├── db.0
├── db.127
├── db.255
├── db.empty
├── db.local
├── named.conf
├── named.conf.default-zones
├── named.conf.local
├── named.conf.options
├── rndc.key
└── zones.rfc1918
/usr/share/dns/
├── root.ds
├── root.hints
├── root.hints.sig
└── root.key
/var/cache/bind/
├── managed-keys.bind
└── managed-keys.bind.jnl</pre>
<h3>Configuração do Recursivo</h3>
<p>Alteramos o DNS do servidor fazendo com que ele consulte em si próprio, através dos IPs de loopback. Essa alteração deve ser feita no arquivo /etc/resolv.conf.</p>
<pre class="remontti-code"># echo &quot;nameserver 127.0.0.1&quot; &gt; /etc/resolv.conf
# echo &quot;nameserver ::1&quot; &gt;&gt; /etc/resolv.conf</pre>
<p>Para validar se seu servidor conseguer resolver nomes nele próprio, use o comando dig e host. Alguns comandos de Ex:</p>
<pre class="remontti-code"># dig @localhost google.com.br 
# dig @127.0.0.1 google.com.br 
# dig @::1 google.com.br +short
# host google.com.br</pre>
<p>Como identificar o problema com resoluções de nomes, famoso: <em>“Meu DNS não está resolvendo nomes!”</em>. Use o atributo +trace, assim o mesmo mostrará todo o caminho feito para a resolução, assim você ira identificar onde &#8220;parou&#8221; e não obteve a informação necessária. Ex:</p>
<pre class="remontti-code"># dig @localhost google.com.br +trace</pre>
<p>Observe as linhas em destaque.</p>
<pre class="remontti-code">; &lt;&lt;&gt;&gt; DiG 9.16.15-Debian &lt;&lt;&gt;&gt; @localhost google.com.br +trace
; (2 servers found)
;; global options: +cmd
.                       517911  IN      NS      b.root-servers.net.
.                       517911  IN      NS      c.root-servers.net.
.                       517911  IN      NS      m.root-servers.net.
.                       517911  IN      NS      a.root-servers.net.
.                       517911  IN      NS      l.root-servers.net.
.                       517911  IN      NS      k.root-servers.net.
.                       517911  IN      NS      e.root-servers.net.
.                       517911  IN      NS      i.root-servers.net.
.                       517911  IN      NS      d.root-servers.net.
.                       517911  IN      NS      f.root-servers.net.
.                       517911  IN      NS      g.root-servers.net.
.                       517911  IN      NS      h.root-servers.net.
.                       517911  IN      NS      j.root-servers.net.
.                       517911  IN      RRSIG   NS 8 0 518400 20211107...
;; Received 1137 bytes from ::1#53(localhost) in 0 ms

br.                     172800  IN      NS      f.dns.br.
br.                     172800  IN      NS      e.dns.br.
br.                     172800  IN      NS      b.dns.br.
br.                     172800  IN      NS      c.dns.br.
br.                     172800  IN      NS      d.dns.br.
br.                     172800  IN      NS      a.dns.br.
br.                     86400   IN      DS      2471 13 2 5E4F35...
br.                     86400   IN      RRSIG   DS 8 1 86400 202...
;; Received 741 bytes from 198.41.0.4#53(a.root-servers.net) in 140 ms

google.com.br.          3600    IN      NS      ns1.google.com.
google.com.br.          3600    IN      NS      ns2.google.com.
google.com.br.          3600    IN      NS      ns3.google.com.
google.com.br.          3600    IN      NS      ns4.google.com.
uh3thc9qu1qbt25pspmqnbuvm420ur2e.com.br. 900 IN NSEC3 1 1 10 A8A465B84D7...
uh3thc9qu1qbt25pspmqnbuvm420ur2e.com.br. 900 IN RRSIG NSEC3 13 3 900 202...
hekajlrgmga91msd4es7bmhol7dbtbbi.com.br. 900 IN NSEC3 1 1 10 A8A465B84D7...
hekajlrgmga91msd4es7bmhol7dbtbbi.com.br. 900 IN RRSIG NSEC3 13 3 900 202...
;; Received 507 bytes from 2001:12f8:a::10#53(c.dns.br) in 140 ms

google.com.br.          300     IN      A       142.250.219.195
;; Received 58 bytes from 2001:4860:4802:38::a#53(ns4.google.com) in 144 ms</pre>
<p>Primeiramente consultamos os root servers, que estão em nosso servidor essa info, logo perceba que ele fez a consulta dos root servers em localhost, em seguida um dos root servers falou para ele que é são os DNS responsáveis do <strong>.br</strong> e no exemplo ele escolheu o a.root-servers.net, que falou para ele quem são os DNS fo google, e o DNS do google, neste cado o c.dns.br falou qual é o IPv4 (A) do google.com.br = 42.250.219.195, o valor 300 é o tempo que seu servidor irá armazenar essa resposta em cache. Eu levaria muito tempo para explicar aqui, então quando tiver um curso meu de DNS não fique de fora <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>
<h4>Configurando Recursivo no DNS Master</h4>
<p>Nesse cenário vou usar os prefixos  45.80.48.0/22 e 2804:f123::/32 (desculpe caso seja de alguém)</p>
<p>Edite:</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>A explicação de todos os campos e variáveis estão nos comentários do arquivo:</p>
<pre class="remontti-code-plain">// ACL &quot;autorizados&quot; essa colocamos os IPs que são autorizados a fazer consultas recursivas neste servidor.
// Neste caso vou incluir os IPs que foram nos delegados bem como de localhost e todos IPs privados.
acl autorizados {
        127.0.0.1;
        ::1;
        192.168.0.0/16;
        172.16.0.0/12;
        100.64.0.0/10;
        10.0.0.0/8;
        2001:db8::/32; 
        fd00::/8; 
        fe80::/10; 
        fc00::/8;        
        45.80.48.0/22;
        2804:f123::/32;
}; 

options {
    // O diretório de trabalho do servidor
    // Quaisquer caminho não informado será tomado como padrão este diretório
    directory &quot;/var/cache/bind&quot;;
 
    //Suporte a DNSSEC
    dnssec-validation auto;
 
    // Conforme RFC1035
    // https://www.ietf.org/rfc/rfc1035.txt
    // Se o servidor deve responder negativamente (NXDOMAIN) para consultas de domínios que não existem.
    auth-nxdomain no;
 
    // Respondendo para IPv4 e IPv6
    // Porta 53 estará aberta para ambos v4 e v6 (pode ser informar apenas os IPs que ficarão ouvindo)
    // ex listen-on { 127.0.0.1; 45.80.48.2; }; 
    // ex listen-on-v6 { ::1; 2804:f123:bebe:cafe::2; };
    // ou any para todos os IPs das interfaces (recomendado, pricipalmente em anycast)
    listen-on { any; };
    listen-on-v6 { any; };
 
    // Serve como uma ferramenta de mitigação para o problema de ataques de amplificação de DNS
    // No momento, a implementação de RRL (Response Rate Limiting)é recomendada apenas para servidores autoritativos
    // Se seu servidor será apenas autoritativo descomente as linhas a baixo. (https://kb.isc.org/docs/aa-00994)
    //rate-limit {
    //    responses-per-second 15;
    //    window 5;
    //};
 
    // Informações adicionais em suas respostas DNS
    // Melhora o desempenho do servidor, reduzindo os volumes de dados de saída.
    // O padrão BIND é (no) não.
    minimal-responses yes;

    // Reduzir o tráfego da rede e aumentar o desempenho, o servidor armazena respostas negativas.
    // é usado para definir um tempo máximo de retenção para essas respostas no servidor. (segundos)
    // Determina por quanto tempo o servidor irá acreditar nas informações armazenadas em cache de 
    // respostas negativas (NXDOMAIN) antes de buscar novamente informações.
    max-ncache-ttl 300;

    // Desativar recursão. Por padrão já é yes.
    // recursion no;
 
    // Especifica quais hosts estão autorizados a fazer consultas
    // recursivas através deste servidor.
    // Aqui que você vai informar os IPs da sua rede que você irá permitir consultar os DNS.
    allow-recursion { autorizados; };
 
    // Endereço estão autorizados a emitir consultas ao cache local,
    // sem acesso ao cache local as consultas recursivas são inúteis.
    allow-query-cache { autorizados; };
 
    // Especifica quais hosts estão autorizados a “fazer perguntas” ao seu DNS. 
    // Se for apenas recursivo pode informa a ACL “autorizados” 
    // allow-query { autorizados; };
    allow-query { any; };
 
    // Especifica quais hosts estão autorizados a receber transferências de zona a partir do servidor.
    // Seu servidor Secundário, no nosso ex vou deixar então o ips dos dois servidores v4 e v6.
    allow-transfer {
        45.80.48.3;
        2804:f123:bebe:cafe::3;
    };
    also-notify {
        45.80.48.3;
        2804:f123:bebe:cafe::3;
    };
 
    // Esta opção faz com que o servidor slave ao fazer a transferência de zonas
    // mastes deste servidor no formato binário (raw) do arquivo ou texto (text)
    // text será legível por humanos, já raw formato é mais eficiente em termos de desempenho.
    // masterfile-format raw;
    masterfile-format text;

    // Para evitar que vase a versao do Bind, definimos um nome
    // Reza a lenda que deixar RR DNS Server seu servidor nunca sofrerá ataques.
    version &quot;RR DNS Server – Do good&quot;;

    // Define a quant. máxima de memória a ser usada para o cache do servidor (bytes ou porcentagem)
    // Por padrão no debian 10/bind9 ele reserva 90% da memoria física. Então não se apavore com log ex.:
    // Servidor com 2GB: none:106: &#039;max-cache-size 90%&#039; - setting to 1795MB (out of 1994MB)
    // Recomendo não alterar
    // max-cache-size 512M;
    // max-cache-size 50%;

    // Isso define o tempo mínimo para o qual o servidor armazena 
    // em cache as respostas positivas, em segundos.
    // Ex o tiktok.com manda tempo de ttl de 20 segundos, 
    // e você quer ignorar esse valor 20 e setar que o minimo seja 90.
    // que é o máximo permitido.
    min-cache-ttl 90;

    // Não recomendado alterar para menos que 24h.
    // Define o tempo máximo durante o qual o servidor armazena (informado pelo dono do domínio)
    // em cache as respostas positivas, em segundos. O max-cache-ttl padrão é 604800 (uma semana) 
    // max-cache-ttl 86400; // 24h 

};</pre>
<p><strong>Leitura recomendada: </strong><br />
<a href="https://bind9.readthedocs.io/en/latest/reference.html" rel="noopener" target="_blank">https://bind9.readthedocs.io/en/latest/reference.html</a><br />
<a href="https://downloads.isc.org/isc/bind9/9.11.24/doc/arm/Bv9ARM.ch06.html" rel="noopener" target="_blank">https://downloads.isc.org/isc/bind9/9.11.24/doc/arm/Bv9ARM.ch06.html </a></p>
<p>Para verificar se seu arquivo tem algum erro use o comando named-checkconf</p>
<pre class="remontti-code"># named-checkconf /etc/bind/named.conf.options</pre>
<p>Imprime todas as configurações</p>
<pre class="remontti-code"># named-checkconf -p</pre>
<p>Bem útil para você mandar suas conf quando esta com algum problema lá no grupo do telegram <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>Reinicie o bind9 para que as novas configurações sejam carregadas, e verifique se o serviço subiu sem erros.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<h4>Configurando Recursivo (Slave)</h4>
<p>Não esqueça da parte do fail2ban e nftables.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Já explicado no master, a diferença aqui aqui não temos os campos allow-transfer e also-notify, já que ele é o servidor secundário.</p>
<pre class="remontti-code-plain">acl autorizados {
        127.0.0.1;
        ::1;
        192.168.0.0/16;
        172.16.0.0/12;
        100.64.0.0/10;
        10.0.0.0/8;
        2001:db8::/32; 
        fd00::/8; 
        fe80::/10; 
        fc00::/8;        
        45.80.48.0/22;
        2804:f123::/32;
}; 

options {
    directory &quot;/var/cache/bind&quot;;
    dnssec-validation auto;
    auth-nxdomain no;
    listen-on { any; };
    listen-on-v6 { any; };
    minimal-responses yes;
    max-ncache-ttl 300;
    allow-recursion { autorizados; };
    allow-query-cache { autorizados; };
    //allow-query { autorizados; }; //Se apenas for recursivo
    allow-query { any; };
    allow-transfer { none; };
    masterfile-format text;
    version &quot;RR DNS Server&quot;;
};</pre>
<p>Reinicie o bind9 para que as novas configurações sejam lidas, e verifique se o serviço subiu sem erros.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<h4>Colocando o fail2ban para protege seu DNS (Master/Slave)</h4>
<p>Ele irá ler os logs do bind com tentativas de consultas negadas (denied), para isso precisamos configurar nosso bind para gerar tal logs.Faça isso no Mastere Slave.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf</pre>
<p>Adicione logging { &#8230; }:</p>
<pre class="remontti-code-plain">// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the 
// structure of BIND configuration files in Debian, *BEFORE* you customize 
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

logging {
 
    channel security_file {
        file &quot;/var/log/named/security.log&quot; versions 3 size 30m;
        severity dynamic;
        print-time yes;
    };
 
    channel file_log {
        file &quot;/var/log/named/bind.log&quot; versions 3 size 1m;
        severity info;
        #severity debug 3;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
 
    channel dnssec_log {
        file &quot;/var/log/named/dnssec.log&quot; versions 3 size 1m;
        severity warning;
        print-time yes;
    };
 
    category security { security_file; };
    category default { file_log; };
    category dnssec { dnssec_log; };
    category lame-servers { null; };
    category edns-disabled { null; };
    category resolver { null; };
    category unmatched { null; };
 
};

include &quot;/etc/bind/named.conf.options&quot;;
include &quot;/etc/bind/named.conf.local&quot;;
include &quot;/etc/bind/named.conf.default-zones&quot;;</pre>
<p>Crie o diretório onde o bind vai registrar seus logs e dê permissão para que ele possa gravar nesta pasta.</p>
<pre class="remontti-code"># mkdir /var/log/named/
# chown bind: /var/log/named/</pre>
<p>Reinicie o serviço</p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Iremos criar um filtro para ler os logs do bind</p>
<pre class="remontti-code"># vim /etc/fail2ban/filter.d/bind9.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain"># Fail2Ban filter file for named (bind9).
# v9.18.x

# This filter blocks attacks against named (bind9) however it requires special
# configuration on bind.
#
# By default, logging is off with bind9 installation.
#
# You will need something like this in your named.conf to provide proper logging.
#
# logging {
#     channel security_file {
#         file &quot;/var/log/named/security.log&quot; versions 3 size 30m;
#         severity dynamic;
#         print-time yes;
#     };
#     category security {
#         security_file;
#     };
# };

[Definition]

# Daemon name
_daemon=named(?:-\w+)?

# Shortcuts for easier comprehension of the failregex

__pid_re=(?:\[\d+\])
__daemon_re=\(?%(_daemon)s(?:\(\S+\))?\)?:?
__daemon_combs_re=(?:%(__pid_re)s?:\s+%(__daemon_re)s|%(__daemon_re)s%(__pid_re)s?:)

_category = (?!error|info)[\w-]+
_category_re = (?:%(_category)s: )?

#       hostname       daemon_id         spaces
# this can be optional (for instance if we match named native log files)
__line_prefix=\s*(?:\S+ %(__daemon_combs_re)s\s+)?%(_category_re)s

prefregex = ^%(__line_prefix)s(?:(?:error|info):\s*)?client(?: @\S*)? &lt;HOST&gt;#\S+(?: \([\S.]+\))?: &lt;F-CONTENT&gt;.+&lt;/F-CONTENT&gt;\s(?:denied|denied \(allow-query-cache did not match\)|\(NOTAUTH\))\s*$

failregex = ^(?:view (?:internal|external): )?query(?: \(cache\))?
            ^zone transfer
            ^bad zone transfer request: &#039;\S+/IN&#039;: non-authoritative zone

ignoreregex =

# DEV Notes: Debian 12
# Author: Rudimar Remontti</pre>
<p>Ativamos o filtro que criamos, e definimos o tempo de banimento para 12h, se você desejar pode ajustar para mais ou menos se achar necessário. E “maxretry” que é a quantidade de tentativas usaremos 1, limitando a 1 tentativa (não recomendo alterar) apenas para já ser bloqueado.</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.d/bind9.conf</pre>
<pre class="remontti-code-plain">[bind9]
enabled  = true
port     = domain,953
protocol = tcp
logpath  = /var/log/named/security.log
bantime  = 12h
maxretry = 1</pre>
<p>Em seguida ativamos reinciamos os serviços.</p>
<pre class="remontti-code"># systemctl restart fail2ban
# systemctl status fail2ban</pre>
<p>Consulte se o filtro bind9 foi carregado</p>
<pre class="remontti-code"># fail2ban-client status</pre>
<pre class="remontti-code-plain">Status
|- Number of jail:      2
`- Jail list:   bind9, sshd</pre>
<p>Para validar realize um teste de um servidor externo <strong>não autorizado</strong> à resolver nomes em seu servidor com o comando dig, ex:</p>
<pre class="remontti-code"># dig @ip_so_seu_dns google.com.br</pre>
<p>Deixe rodando o comando para visualizar os logs.</p>
<pre class="remontti-code"># tail -f /var/log/named/security.log</pre>
<p>Log como ira aparecer, onde 192.168.254.198 é o IP que tentou resolver nomes e google.com.br foi o dóminio.</p>
<pre class="remontti-code-plain">25-Oct-2021 17:57:09.284 client @0x7f79e80104c8 192.168.254.198#63239 (google.com.br): query (cache) &#039;google.com.br/A/IN&#039; denied</pre>
<p>Verificando agora o fail2ban vamos encontrar o IP 192.168.254.198 em <strong>Banned IP list</strong>.</p>
<pre class="remontti-code"># fail2ban-client status bind9</pre>
<pre class="remontti-code-plain">Status for the jail: bind9
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     1
|  `- File list:        /var/log/named/security.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   192.168.254.198</pre>
<p>Verificando as regras do firewall nftables também iremos encontra-lo.</p>
<pre class="remontti-code"># nft list ruleset</pre>
<pre class="remontti-code-plain">table inet filter {
        chain input {
                type filter hook input priority filter; policy accept;
        }

        chain forward {
                type filter hook forward priority filter; policy accept;
        }

        chain output {
                type filter hook output priority filter; policy accept;
        }
}
table inet f2b-table {
        set addr-set-bind9 {
                type ipv4_addr
                elements = { 192.168.254.198 }
        }

        chain f2b-chain {
                type filter hook input priority filter - 1; policy accept;
                ip saddr @addr-set-bind9 drop
        }
}</pre>
<p>Para remover o IP basta:</p>
<pre class="remontti-code"># fail2ban-client set bind9 unbanip 192.168.254.198</pre>
<h4>Atualização dos Roots servers</h4>
<p>Não é comum os Roots Servers terem alguma alteração, mas é algo que ao logo desses anos vi acontecer já, então caso um dia precise atualiza-los. Primeiramente renomei o arquivo atual <strong>root.hints</strong></p>
<pre class="remontti-code"># mv /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d`</pre>
<p>Agora vamos baixar a versão mais recente.</p>
<pre class="remontti-code"># apt install wget 
# wget https://www.internic.net/domain/named.root -O /usr/share/dns/root.hints</pre>
<p>Para visualizar se tem alguma diferença entre os arquivos execute o comando:</p>
<pre class="remontti-code"># diff /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d`</pre>
<p>Perceba que o que mudou apenas foi a data em <strong>last update</strong>. Resto do arquivo continua igual.</p>
<pre class="remontti-code-plain">11,13c11,13
&lt; ;
&lt; ;       last update:     October 14, 2021
&lt; ;       related version of root zone:     2021101401
---
&gt; ; 
&gt; ;       last update:     January 11, 2021 
&gt; ;       related version of root zone:     2021011101</pre>
<h4>Desativar IPv6 do bind <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;" /></h4>
<p>Se por algum motivo precisar desabilitar faça:</p>
<pre class="remontti-code"># vim /etc/default/named</pre>
<pre class="remontti-code-plain">OPTIONS=&quot;-u bind&quot;</pre>
<p>Para</p>
<pre class="remontti-code-plain">OPTIONS=&quot;-4 -u bind&quot;</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<pre class="remontti-code-plain">listen-on-v6 { any; };</pre>
<p>Para</p>
<pre class="remontti-code-plain">listen-on-v6 { none; };</pre>
<p>Reinicie o serviço</p>
<pre class="remontti-code"># systemctl restart bind</pre>
<h4>Configurando um proxy do DNS recursivo</h4>
<p>Está confiuração deixará de usar os Root Serves e irá fazer as consultar em outros servidores DNS, e armazenar no seu cache local.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Adicione dentro de<strong> options { &#8230;.. } </strong></p>
<pre class="remontti-code-plain">  recursion yes;
  forwarders {
      8.8.8.8;
      1.1.1.1;
      1.0.0.1;
      8.8.4.4;
  };
  forward only;</pre>
<h4>Comando dig</h4>
<p>Algumas coisas que você precisa saber, ex:</p>
<pre class="remontti-code"># dig google.com.br @localhost</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.15-Debian &lt;&lt;&gt;&gt; google.com.br @localhost
; &lt;&lt;&gt;&gt; DiG 9.16.15-Debian &lt;&lt;&gt;&gt; google.com.br @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 49083
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 595c2c7eb1d62205010000006177f1e2e08119b0ec4133aa (good)
;; QUESTION SECTION:
;google.com.br.                 IN      A

;; ANSWER SECTION:
google.com.br.          300     IN      A       172.217.173.67

;; AUTHORITY SECTION:
google.com.br.          3599    IN      NS      ns1.google.com.
google.com.br.          3599    IN      NS      ns4.google.com.
google.com.br.          3599    IN      NS      ns3.google.com.
google.com.br.          3599    IN      NS      ns2.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.         172800  IN      AAAA    2001:4860:4802:32::a
ns2.google.com.         172800  IN      AAAA    2001:4860:4802:34::a
ns3.google.com.         172800  IN      AAAA    2001:4860:4802:36::a
ns4.google.com.         172800  IN      AAAA    2001:4860:4802:38::a
ns1.google.com.         172800  IN      A       216.239.32.10
ns2.google.com.         172800  IN      A       216.239.34.10
ns3.google.com.         172800  IN      A       216.239.36.10
ns4.google.com.         172800  IN      A       216.239.38.10

;; Query time: 1560 msec
;; SERVER: ::1#53(::1)
;; WHEN: ter out 26 09:17:38 -03 2021
;; MSG SIZE  rcvd: 344
</pre>
<p>O resultado retornará algumas seções, porém como configuramos no named.conf.options <strong>minimal-responses yes</strong>, iremos ter apenas 3. Isso deixa seu DNS mais otimizado, além do mais <strong>yes</strong> é o padrão agora na versão 9.16 do bind, caso queira testar experimente setar em: <strong>no</strong>.</p>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.15-Debian &lt;&lt;&gt;&gt; google.com.br @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 13858
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 38763b6c79757a2a010000006177f255c6a6a6d3e4833e77 (good)
;; QUESTION SECTION:
;google.com.br.                 IN      A

;; ANSWER SECTION:
google.com.br.          300     IN      A       172.217.173.67

;; Query time: 1524 msec
;; SERVER: ::1#53(::1)
;; WHEN: ter out 26 09:19:33 -03 2021
;; MSG SIZE  rcvd: 86</pre>
<p><strong>HEADER</strong>: Ela contém diversas informações a respeito da consulta. </p>
<pre class="remontti-code-plain">;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 49083
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9</pre>
<p>- <strong>status</strong> indica o tratamento de erro nas consultas, sendo eles:<br />
-- <strong>NOERROR</strong>: Nenhum erro encontrado, ou seja, sucesso.<br />
-- <strong>SERVFAIL</strong>: Houve algum problema com o servidor, que não conseguiu processar a query.<br />
-- <strong>NXDOMAIN</strong>: Significa que o domínio pesquisado não existe.<br />
-- <strong>REFUSED</strong>: O servidor rejeitou a solicitação.<br />
-<strong>flags:</strong> indicador das opções de recursividade e de autoridade, em resumo este conjunto de “letrinhas” (aa, rd, ra, etc), indica o estado ligado/desligado <a href="https://www.ietf.org/rfc/rfc1035.txt" rel="noopener" target="_blank">RFC1035</a><br />
-- <strong>qr</strong>: se a mensagem é uma query (0) ou uma resposta (1). Como estamos avaliando somente as respostas, este bit sempre estará ligado (consequentemente, sempre veremos a string “qr” no campo “flags“).<br />
-- <strong>aa</strong>: que o servidor que respondeu à solicitação é autoritativo do domínio.<br />
-- <strong>rd</strong>: que a query é recursiva, que as requisições devem ser encaminhadas a outros servidores até que o servidor autoritativo seja encontrado.<br />
-- <strong>ra</strong>: que o servidor que respondeu à requisição suporta consultas recursivas.<br />
-- <strong>tc</strong>: que a mensagem de resposta está truncada.<br />
-- <strong>z</strong>: reservado para uso futuro.<br />
- <strong>contadores</strong>: na mesma linha das flags, econtramos quantos resultados vieram nas sessões.</p>
<pre class="remontti-code-plain">QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9</pre>
<p><strong>QUESTION </strong><br />
Replica a query que foi enviada para consulta, por padão quando não passa A = IPv4</p>
<pre class="remontti-code-plain">;; QUESTION SECTION:
;google.com.br.                 IN      A</pre>
<p>Outros exemplos:</p>
<pre class="remontti-code"># dig AAAA google.com.br @localhost
# dig MX google.com.br @localhost
# dig NS google.com.br @localhost
# dig TXT google.com.br @localhost
# dig ANY google.com.br @localhost</pre>
<p><strong>ANSWER </strong><br />
Contém a resposta para a consulta que foi enviada.</p>
<pre class="remontti-code-plain">;; ANSWER SECTION:
google.com.br.          86400   IN      CAA     0 issue &quot;pki.goog&quot;
google.com.br.          60      IN      SOA     ns1.google.com. dns-admin.google.com. 405356128 900 900 1800 60
google.com.br.          300     IN      AAAA    2800:3f0:4001:819::2003
google.com.br.          300     IN      A       172.217.173.67
google.com.br.          300     IN      MX      0 smtp.google.com.
google.com.br.          300     IN      TXT     &quot;v=spf1 -all&quot;
google.com.br.          2774    IN      NS      ns4.google.com.
google.com.br.          2774    IN      NS      ns2.google.com.
google.com.br.          2774    IN      NS      ns1.google.com.
google.com.br.          2774    IN      NS      ns3.google.com.</pre>
<p><strong>AUTHORITY</strong><br />
Servidores que respondem com “autoridade” pelo domínio (os NS)</p>
<pre class="remontti-code-plain">;; AUTHORITY SECTION:
google.com.br.          3599    IN      NS      ns1.google.com.
google.com.br.          3599    IN      NS      ns4.google.com.
google.com.br.          3599    IN      NS      ns3.google.com.
google.com.br.          3599    IN      NS      ns2.google.com.</pre>
<p><strong>ADDITIONAL</strong><br />
Informações auxiliares ou adicionais à pesquisa, no exemplo IPs dos servidores DNS</p>
<pre class="remontti-code-plain">;; ADDITIONAL SECTION:
ns1.google.com.         172800  IN      AAAA    2001:4860:4802:32::a
ns2.google.com.         172800  IN      AAAA    2001:4860:4802:34::a
ns3.google.com.         172800  IN      AAAA    2001:4860:4802:36::a
ns4.google.com.         172800  IN      AAAA    2001:4860:4802:38::a
ns1.google.com.         172800  IN      A       216.239.32.10
ns2.google.com.         172800  IN      A       216.239.34.10
ns3.google.com.         172800  IN      A       216.239.36.10
ns4.google.com.         172800  IN      A       216.239.38.10</pre>
<p>E na ultima sessão entrosamos podemos dizer mais 4 sub sessões:</p>
<pre class="remontti-code-plain">;; Query time: 1560 msec
;; SERVER: ::1#53(::1)
;; WHEN: ter out 26 09:17:38 -03 2021
;; MSG SIZE  rcvd: 344</pre>
<p>- <strong>QUERY TIME</strong>: vai informar o tempo que levou para realizar a consulta solicitada, quando esse tempo retora 0 é porque a consulta ele pegou do cache.<br />
- <strong>SERVER</strong>: Qual servidor ele realizou a consulta<br />
- <strong>WHEN</strong>: dara e hora da consulta + UTC<br />
- <strong>MSG SIZE</strong>: tamanho do pacote</p>
<p><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;" /> Um pouquinho de dig para vocês!</p>
<p>Seu DNS recursivo já está pronto, se seu intuito é <strong>apenas um DNS recursivo</strong> pode pular a parte do autoritativo/reverso, e eu recomendo que você crie uma regra extra no seu nftables (firewall) para fechar a porta 53 externamente, então vou deixar um modelo dessa configuração:<br />
<strong>ISSO SÓ DEVER SER FEITO SE SEU DNS FOR APENAS RECURSIVO! </strong></p>
<pre class="remontti-code"># vim /etc/nftables.conf</pre>
<p>Em <strong>elements</strong>, altere para os seus IPs que terão permissão, o arquivo é quase que auto explicativo. Eu vou aproveitar e criar uma proteção para o SSH e o Zabbix agent </p>
<pre class="remontti-code-plain">#!/usr/sbin/nft -f
  
flush ruleset

table inet filter {

    set acesso-total4 {
        type ipv4_addr
        flags interval
        elements = { 200.200.200.0/26, 200.200.200.128/29 }
    }
    set acesso-total6 {
        type ipv6_addr
        flags interval
        elements = { 2001:db8:f0da::/48 }
    }
    set acesso-dns4 {
        flags interval
        type ipv4_addr
        elements = { 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, 200.200.200.0/22 }
    }
    set acesso-dns6 {
        flags interval
        type ipv6_addr
        elements = { ::1, 2001:db8::/32 }
    }
    chain input {
        type filter hook input priority 0;

        #ip saddr  @acesso-total4 accept
        #ip6 saddr @acesso-total6 accept

        # Permite acesso SSH na porta 22 (alterada para 60002), a 22 eu fecho só de sacanagem, para aparecer filtrada nos scanners
        ip saddr  @acesso-total4 tcp dport 22 counter accept
        ip6 saddr @acesso-total6 tcp dport 22 counter accept
        ip saddr  @acesso-total4 tcp dport 60002 counter accept
        ip6 saddr @acesso-total6 tcp dport 60002 counter accept
        tcp dport 22 counter drop
        tcp dport 60002 counter drop

        # Permite coleta de dados pelo Zabbix-Agent na porta 10050
        ip saddr  @acesso-total4 tcp dport 10050 counter accept
        ip6 saddr @acesso-total6 tcp dport 10050 counter accept
        tcp dport 10050 counter drop   

        # Permite Acesso DNS na porta 53
        ip saddr  @acesso-dns4 udp dport 53 counter accept
        ip saddr  @acesso-dns4 tcp dport 53 counter accept
        ip6 saddr @acesso-dns6 udp dport 53 counter accept
        ip6 saddr @acesso-dns6 tcp dport 53 counter accept
        udp dport 53 counter drop
        tcp dport 53 counter drop

        type filter hook input priority 0;
    }
    chain forward {
        type filter hook forward priority 0;
    }
    chain output {
        type filter hook output priority 0;
    }
}</pre>
<p>Reinicie os serviços</p>
<pre class="remontti-code"># systemctl restart nftables fail2ban</pre>
<h2>Autoritativo</h2>
<p>Valorize os domínios.br registrados no https://registro.br/ o memos financia todo o projeto NIC.BR, que na internet brasileira tem uma papel fundament</p>
<h4>Configuração do Autoritativo (Master)</h4>
<p>Para ficar organizado criaremos alguns diretórios em /var/cache/bind/. Primeiramente a pasta <strong>master-aut</strong> que se é referencia onde vai ficar nossa configuração do DNS Master autoritativo, e dentro desta pasta uma com o nome do nosso domínio no exemplo <strong>remontti.net.br</strong>, assim se você tiver vários dominios criamos uma pasta para cada ficando bem organizado.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut
# mkdir /var/cache/bind/master-aut/remontti.net.br</pre>
<p>Agora vamos criar um em <strong>/var/cache/bind/master-aut/remontti.net.br/</strong> para que conter toda a configuração do mesmo,  e para ficar objetivo adotei em usar o nome do próprio domínio.hosts ex: <strong>remontti.net.br.hosts</strong></p>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts</pre>
<p>É importante que o serial (<strong>2021102601</strong>) seja alterado toda vez que for o aruquivo sofrer qualquer alteração, assim o servidor slave saberá que precisa importar novamente as configurações. Ele segue o padrão <strong>[ano-mes-dia-sequencial]</strong> não que seja uma regra.</p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400 ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2023020101 ; serial
                            14400      ; refresh (4 hours)
                            3600       ; retry (1 hour)
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)
                            )
 
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.
 
                        A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4

$ORIGIN remontti.net.br.
$TTL 10800   ; 3 hours
 
ns1                     A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2
hostmaster              A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2

ns2                     A       45.80.48.3
                        AAAA    2804:f123:bebe:cafe::3

www                     A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4</pre>
<p>No exemplo estou confiurando apenas alguns subdomínos básicos, como ns1, ns2, www e apontando ele para seus respectivos endereços IPv4 e IPv6, os ipos mais comuns de registros:<br />
- <strong>A</strong>: Associa um nome a um endereço IPv4.<br />
- <strong>AAAA</strong>: Associa um nome a um endereço IPv6.<br />
- <strong>NS</strong>: Name Server. Define quais servidores são os servidores autoritativos do domínio<br />
- <strong>SOA</strong>: Start-Of-Authority. Detalhes da autoridade do domínio. Descreve o servidor que tem autoridade sobre a zona, além do contato técnico, número serial e outros campos.<br />
- <strong>MX</strong>: Mail eXchanger. Define os servidores de e-mail.<br />
- <strong>PTR</strong>: Pointer. Retorna o nome associado a um endereço IP. (reverso)<br />
- <strong>CNAME</strong>: Canonical NAME. Usados para criar apelidos para o domínio.<br />
- <strong>TXT</strong>: TeXT. Usados para descrições, comentários, observações de um domínio. Também usado para definir configurações de SPF.</p>
<p>Vamos criar um diretório para gerar nossas keys do DNSSEC.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut/remontti.net.br/keys</pre>
<p>Entre no diretório: </p>
<pre class="remontti-code"># cd /var/cache/bind/master-aut/remontti.net.br/keys</pre>
<p>Agora vamos a criação das chaves:</p>
<pre class="remontti-code"># dnssec-keygen -a ECDSAP256SHA256 remontti.net.br</pre>
<pre class="remontti-code-plain">Generating key pair.
Kremontti.net.br.+007+29298</pre>
<pre class="remontti-code"># dnssec-keygen -a ECDSAP256SHA256 -f KSK remontti.net.br</pre>
<pre class="remontti-code-plain">Generating key pair.
Kremontti.net.br.+007+26883</pre>
<p>Os comandos acima irão gerar 4 arquivos com extensões .key e .private</p>
<pre class="remontti-code-plain">├── Kremontti.net.br.+007+26883.key
├── Kremontti.net.br.+007+26883.private
├── Kremontti.net.br.+007+29298.key
└── Kremontti.net.br.+007+29298.private</pre>
<p>Altere as permissões de diretórios/arquivos para que o bind consiga criar as assinaturas de forma automaticamente.</p>
<pre class="remontti-code"># chown bind: /var/cache/bind/master-aut/ -R</pre>
<p>Em <strong>/etc/bind/named.conf.local</strong> "chamaremos" a zona remontti.net.br</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final do arquivo:</p>
<pre class="remontti-code-plain">zone &quot;remontti.net.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts&quot;;
        key-directory &quot;/var/cache/bind/master-aut/remontti.net.br/keys/&quot;;
        dnssec-policy default;
        inline-signing yes;
        serial-update-method unixtime;
};</pre>
<p>Para facilitar farei um atalho da pasta /var/cache/bind/master-aut em /etc/bind/master-aut.</p>
<p>Se você é da turma do mimi você pode subistiruir `type master` por `type primary` e `type slave` por `type secondary` bem como nome das pastas. <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>
<pre class="remontti-code"># ln -s /var/cache/bind/master-aut /etc/bind/master-aut</pre>
<p>Reinicie o serviço.</p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Certifique-se que o bind esta rodando sem erros</p>
<pre class="remontti-code"># systemctl status bind9</pre>
<p>Novos arquivos são gerados em /var/cache/bind/master-aut/remontti.net.br/ .jbk .signed .signed.jnl</p>
<pre class="remontti-code-plain">└── remontti.net.br
    ├── keys
    │   ├── Kremontti.net.br.+007+26883.key
    │   ├── Kremontti.net.br.+007+26883.private
    │   ├── Kremontti.net.br.+007+29298.key
    │   └── Kremontti.net.br.+007+29298.private
    ├── remontti.net.br.hosts
    ├── remontti.net.br.hosts.jbk
    ├── remontti.net.br.hosts.signed
    └── remontti.net.br.hosts.signed.jnl</pre>
<p>Precisaremos descobri nossa keytag e o digest que serão informados no registro.br, para isso rode o comando:</p>
<pre class="remontti-code"># (d=remontti.net.br; dig @127.0.0.1 +norecurse &quot;$d&quot;. DNSKEY | dnssec-dsfromkey -f - &quot;$d&quot; | head -1)</pre>
<pre class="remontti-code-plain">remontti.net.br. IN DS 26883 7 2 F8C2518674B22DB06B1EF38E030F9A238E4FA25D0E2FB80357496E92617FF841</pre>
<p>Sendo, <strong>keytag</strong>:<em>26883</em> e o <strong>digest</strong>: <em>F8C2518674B22DB06B1EF38E030F9A238E4FA25D0E2FB80357496E92617FF841</em></p>
<p>Possíveis bloqueios do fail2ban em caso de configuração errada, ao verificação de um domínios que seu servidor não é autoritativo, ou por um erro na configuração, a consulta será interpretada como recursiva, logo o IP de origem será bloqueado pelo fail2ban, e registrado no arquivo de logs /var/log/named/security.log.</p>
<p>Para evitar fail2ban bloquei seus IPs e pricnipalmente do registro.br, pois muitas pessoas acabam configurando errado seu DNS e na hora de verificar acabam sendo bloqueando. Para evitarmos isso vamos incluir seus IPs bem como os do registrobr na variável ignoreip do fail2ban:</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize <strong>#ignoreip =</strong>, remova o comentário (#) e inclua os prefixo do registrobr <em>200.160.0.0/20 200.219.148.0/24 2001:12f8:6::/47 2001:12ff::/32</em> bem como altere <em>45.80.48.0/22 2804:f123::/32 </em>para IPs do seu AS</p>
<pre class="remontti-code-plain">ignoreip = 127.0.0.1/8 ::1 200.160.0.0/20 200.219.148.0/24 2001:12f8:6::/47 2001:12ff::/32 45.80.48.0/22 2804:f123::/32</pre>
<p>Reinicie o fail2ban</p>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<h4>Configuração do Autoritativo (Slave)</h4>
<p>A configuração do slave é bem simples, pois ele irá importar do master todas as configurações.<br />
Para organização vamos seguir o mesmo padrão de diretórios do master</p>
<pre class="remontti-code"># mkdir /var/cache/bind/slave-aut
# mkdir /var/cache/bind/slave-aut/remontti.net.br</pre>
<p>Informamos nossa zona do tipo slave e o IP do nosso servidor master.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;remontti.net.br&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-aut/remontti.net.br/remontti.net.br.hosts.signed&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};</pre>
<p>Alteramos a permissão do diretório para que o bind consiga criar os arquivos.</p>
<pre class="remontti-code"># chown  bind: /var/cache/bind/slave-aut -R</pre>
<p>Mais uma vez farei uma atalho dentro de /etc/bind para facilitar.</p>
<pre class="remontti-code"># ln -s /var/cache/bind/slave-aut /etc/bind/slave-aut</pre>
<p>E reiniciamos o serviço</p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Agora ao verificar o diretório /var/cache/bind/slave-aut/remontti.net.br/ encontraremos nosso arquivo criado automaticamente importado do servidor master.</p>
<pre class="remontti-code"># ls -lhs /var/cache/bind/slave-aut/remontti.net.br</pre>
<h4>Validando seu autoritativo no registro.br</h4>
<p>Vamos verificar se o servidor responde pelo nosso domínio, acesse: <a href="https://registro.br/tecnologia/ferramentas/verificacao-de-dns/" rel="noopener" target="_blank">https://registro.br/tecnologia/ferramentas/verificacao-de-dns/ </a> e preecha o formulário com o seu domínio "remontti.net.br" e o IP do seu servidor e clique em pesquisar.<br />
<strong>RESULTADO</strong></p>
<pre class="remontti-code-plain">DOMÍNIO           : remontti.net.br
DNS               : 45.80.48.2
STATUS            : Autoridade sobre o domínio
VERSÃ             : O2021102601
TEMPO DE RESPOSTA : 19.422 ms</pre>
<p>Se seu servidor DNS estiver respondedo pelo domínio solicitado uma resposta de sucesso ira apacer: <strong>Autoridade sobre o domínio</strong>. Repita o mesmo no seu servidor Slave<br />
Agora vamos fazer o mesmo para validade nosso DNSSEC, acesse: <a href="https://registro.br/tecnologia/ferramentas/verificacao-de-ds/" rel="noopener" target="_blank">https://registro.br/tecnologia/ferramentas/verificacao-de-ds/</a> e preecha o formulário com o seu domínio "remontti.net.br" e o IP do seu servidor e clique em pesquisar.<br />
<strong>RECORDS DS DAS CHAVES ENCONTRADAS</strong></p>
<pre class="remontti-code-plain">KEY TAG	  ALGORITMO	        DIGEST DS
26883	  RSA-SHA-1-NSEC3	F8C2518674B22DB06B1EF38E030F9A238E4FA25D0E2FB80357496E92617FF841</pre>
<p>Se tudo estiver OK, ira receber o resultado da sua KEYTAG e DISGEST bem como encontrado anteriormente.</p>
<p>Seu domínio já está pronto para ser configurado no registro.br, para isso <a href="https://registro.br/login/" rel="noopener" target="_blank">acesse sua conta</a> clique sobre seu domínio e clique em: ALTERAR SERVIDORES DNS, e preecha o formulário, exemplo:<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/DNS.png" alt="" width="846" height="795" class="alignnone size-full wp-image-5971" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/DNS.png 846w, https://blog.remontti.com.br/wp-content/uploads/2021/10/DNS-300x282.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/10/DNS-768x722.png 768w" sizes="auto, (max-width: 846px) 100vw, 846px" /></p>
<h5>Posso ter mais de um autoritativo no mesmo servidor?</h5>
<p>Sim, inclusive o reverso é um autoritavio, vamos falar dele em seguida. Não existe um limite, o limite é seu hardware.<br />
Veja mais um exemplo para um segundo domínio:</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut/cursodns.com.br
# vim /var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400 ; 1 day
cursodns.com.br           IN SOA  ns1.cursodns.com.br. hostmaster.cursodns.com.br. (
                            2023020101 ; serial
                            14400      ; refresh (4 hours)
                            3600       ; retry   (1 hour)
                            2419200    ; expire  (4 weeks)
                            300        ; minimum (5 minutes)
                            )
 
                        NS      ns1.cursodns.com.br.
                        NS      ns2.cursodns.com.br.
 
                        A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
                        MX      10 mail.cursodns.com.br.
                        TXT     &quot;v=spf1 a mx -all&quot;
                        SPF     &quot;v=spf1 a mx -all&quot;

$ORIGIN cursodns.com.br.
_dmarc                  TXT &quot;v=DMARC1; p=none&quot;
_domainkey              TXT &quot;t=y; o=~;&quot;

$ORIGIN _domainkey.cursodns.com.br.
mail                    TXT &quot;v=DKIM1; k=rsa; p=6B4EDqoi5l64qyxnenKx56IOIjPAnj350mq&quot;

$ORIGIN cursodns.com.br.
$TTL 10800   ; 3 hours
 
ns1                     A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2
hostmaster              A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2

ns2                     A       45.80.48.3
                        AAAA    2804:f123:bebe:cafe::3

www                     A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
ftp                     A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
imap                    A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
pop                     A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
smtp                    A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
mail                    A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4</pre>
<p>Vamos criar um diretório para gerar nossas keys do DNSSEC.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut/cursodns.com.br/keys</pre>
<p>Entre no diretório: </p>
<pre class="remontti-code"># cd /var/cache/bind/master-aut/cursodns.com.br/keys</pre>
<p>Agora vamos a criação das chaves:</p>
<pre class="remontti-code"># dnssec-keygen -a ECDSAP256SHA256 cursodns.com.br</pre>
<pre class="remontti-code-plain">Generating key pair.
Kcursodns.com.br.+007+00558</pre>
<pre class="remontti-code"># dnssec-keygen -a ECDSAP256SHA256 -f KSK cursodns.com.br</pre>
<pre class="remontti-code-plain">Generating key pair.
Kcursodns.com.br.+007+46491
</pre>
<p>Altere as permissões de diretórios/arquivos para que o bind consiga criar as assinaturas de forma automaticamente.</p>
<pre class="remontti-code"># chown bind: /var/cache/bind/master-aut/ -R</pre>
<p>Adicione a zona cursodns.com.br em named.conf.local</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final do arquivo:</p>
<pre class="remontti-code-plain">zone &quot;cursodns.com.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts&quot;;
        key-directory &quot;/var/cache/bind/master-aut/cursodns.com.br/keys/&quot;;
        dnssec-policy default;
        inline-signing yes;
        serial-update-method unixtime;
};</pre>
<p>Se desejar validar seu arquivo antes de reiniciar o serviço:</p>
<pre class="remontti-code"># cd /var/cache/bind/master-aut/
# named-checkzone cursodns.com.br cursodns.com.br.hosts</pre>
<p>Tudo ok, altere as permissões para não ter erro, e reinicie o bind:</p>
<pre class="remontti-code"># chown  bind: /var/cache/bind/master-aut -R
# systemctl restart bind9</pre>
<p><strong>Para o Slave</strong></p>
<pre class="remontti-code"># mkdir /var/cache/bind/slave-aut/cursodns.com.br
# vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;cursodns.com.br&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-aut/cursodns.com.br/cursodns.com.br.hosts.signed&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};</pre>
<pre class="remontti-code"># chown  bind: /var/cache/bind/slave-aut -R
# systemctl restart bind9</pre>
<p>Posso ter domínios "fakes"?<br />
Sim, basta criar uma zona. Mas juridicamente você pode ter dor de cabeça. Recomendo a leitura do <a href="https://blog.remontti.com.br/3692" rel="noopener" target="_blank">DNS Response Policy Zone (RPZ)</a> para que retornem resultados modificados em grande escala de uma foma mais eficaz. Alguns administradores podem usar o DNS RPZ para impedir acessos indesejados, normalmente é usado em empresas para bloquear por exemplo hosts infectados por malwares, sites pornográficos, entre outros casos, bloqueando a resolução de nomes. Segue um modelo simples e rápido para montar seu RPZ.</p>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts</pre>
<p>Adicione mais uma entrada em para um novo subdominio "umbrella" apontando para um servidor, esse pode está rodando um serviço web qual pode ter uma tela com um aviso.</p>
<pre class="remontti-code-plain">//...
umbrella                        A       45.80.48.5
                                AAAA    2804:f123:bebe:cafe::5
//...</pre>
<p>Adicione uma nova zona chamada <strong>rpz.zone</strong></p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;rpz.zone&quot; {
    type master;
    file &quot;/var/cache/bind/rpz/db.rpz.zone&quot;;
    allow-query { none; };
};</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Dentro de options { ... } adcione: </p>
<pre class="remontti-code-plain">options {
//...
    response-policy {
      zone &quot;rpz.zone&quot; policy CNAME umbrella.cursodns.com.br;
    };
//...</pre>
<p>};<br />
Criaremos o diretório rpz, bem como o arquivos de hosts</p>
<pre class="remontti-code"># mkdir /var/cache/bind/rpz/
# ln -s /var/cache/bind/rpz/ /etc/bind/rpz
# vim /var/cache/bind/rpz/db.rpz.zone</pre>
<pre class="remontti-code-plain">$TTL 1H
@       IN      SOA LOCALHOST. umbrella.cursodns.com.br. (
                2023020101      ; Serial  
                1h              ; Refresh
                15m             ; Retry
                30d             ; Expire 
                2h              ; Negative Cache TTL
        )
        NS  umbrella.cursodns.com.br.
 
xvideos.com     IN CNAME .
*.xvideos       IN CNAME .
redtube.com     IN CNAME .
*.redtube.com   IN CNAME .
pornhub.com     IN CNAME .
*.pornhub.com   IN CNAME .</pre>
<p>Sendo que para cada dominio que você deseja apontar para resolver o mesmo IP do nosso umbrella.cursodns.com.br siga este padrão:</p>
<pre class="remontti-code-plain">
domino.com     IN CNAME .
*.domino.com       IN CNAME .</pre>
<p>Assim qualquer subidominio (*).domino.com seja traduzido sempre para o mesmo IP.</p>
<p>Altere as permissões e reinicie o serviço</p>
<pre class="remontti-code"># chown bind: /var/cache/bind/rpz/ -R
# systemctl restart bind9</pre>
<p>Agora faça um teste para ver o que seu servidor ira traduzir:</p>
<pre class="remontti-code"># dig xvideos.com @localhost</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.15-Debian &lt;&lt;&gt;&gt; xvideos.com @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 1040
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: a060f744b32f2a4f01000000617842817ffcfff0a6b99fff (good)
;; QUESTION SECTION:
;xvideos.com.                   IN      A

;; ANSWER SECTION:
xvideos.com.            5       IN      CNAME   umbrella.cursodns.com.br.
umbrella.cursodns.com.br. 10800 IN      A       45.80.48.5

;; ADDITIONAL SECTION:
rpz.zone.               1       IN      SOA     LOCALHOST. umbrella.cursodns.com.br. 2020062400 3600 900 2592000 7200

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: ter out 26 15:01:37 -03 2021
;; MSG SIZE  rcvd: 175</pre>
<pre class="remontti-code"># dig qqrcoisa.xvideos.com @localhost
# dig pornhub.com @localhost
# dig www.pornhub.com @localhost
# dig redtube.com @localhost</pre>
<pre class="remontti-code-plain"></pre>
<p>Uma boa list de hosts você <a href="https://github.com/StevenBlack/hosts" rel="noopener" target="_blank">pode encontrar aqui</a>.<br />
<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;" /> Não esquece de mandar meu presente de natal!</p>
<h3>Reverso DNS Master - Para prefixos maiores ou igual a /24.</h3>
<p>Obs: Para fazer a Delegações de DNS reverso do seu bloco, é importante que você já tenha configurado no registro.br seu DNS autoritativo.</p>
<p>Para ficar organizado criaremos a pasta <strong>master-rev</strong> para salvar todos nossos arquivos</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-rev</pre>
<p>Para nosso cenários vou usar os prefixos 45.80.48.0/22 e 2804:f123::/32. O bloco 45.80.48.0/22 será necessário quebrar em 4 arquivos uma para cada prefixo /24 qual teremos nossos 1024 nome de hosts (IPs). </p>
<p>Lembra que anteriormente comentei que o reverso não passa de um domínio autoritativo? Então é isso mesmo, a forma de configuração é a mesma, porem já temos o nosso domínios para IPv4<strong> x.x.x.in-addr.arpa</strong> e <strong>x.x.x.x.x.x.x.x.ip6.arpa</strong> para IPv6.</p>
<p>Primeiro arquivo /24 farei com o nome de <strong>45.80.48.rev</strong>, poderia ser qualquer nome, mas assim fica bem sugestivo.</p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.48.rev</pre>
<p>Preste atenção em 48.80.45.in-addr.arpa. essa linha ela deve ser alterada com o inverso do seu IP, de trás para frente.<br />
Outra coisa importante é o serial (2021102601) ele está presente em todos os arquivos e deve ser alterado toda vez que for alterado. Ele segue o padrão [ano-mes-dia-sequencial]. É fundamental altera-lo para que o servidor slave copie sempre que tiver uma alteração.</p>
<p>Neste arquivo darei nomes personalizados apenas para o <strong>ns1 e ns2</strong> o resto usarei o GENERATE para gerar de forma automatica todos os mais de mil nomes, sengindo o padrão <strong>45-80-50-x.remontti.net.br.</strong></p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
48.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 48.80.45.in-addr.arpa.
2         PTR     ns1.remontti.net.br.
3         PTR     ns2.remontti.net.br.

$ORIGIN 48.80.45.in-addr.arpa.
$GENERATE 0-1     $  PTR  45-80-48-$.remontti.net.br.
$GENERATE 4-255   $  PTR  45-80-48-$.remontti.net.br.</pre>
<p>Proximo /24</p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.49.rev</pre>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
49.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 0-255 $ PTR 45-80-49-$.remontti.net.br.</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.50.rev</pre>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
50.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 50.80.45.in-addr.arpa.
$GENERATE 0-255 $ PTR 45-80-50-$.remontti.net.br.</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.51.rev</pre>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
51.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 51.80.45.in-addr.arpa.
$GENERATE 0-255 $ PTR 45-80-51-$.remontti.net.br.</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/2804.f123.rev</pre>
<p>Antenção no<strong> 3.2.1.f.4.0.8.2.ip6.arpa </strong> o site <a href="http://rdns6.com/hostRecord" rel="noopener" target="_blank">http://rdns6.com/hostRecord </a>pode ser bem útil para gerar seus PTRs.</p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 3600       ; 1 hour
3.2.1.f.4.0.8.2.ip6.arpa IN SOA ns1.remontti.net.br.3.2.1.f.4.0.8.2.ip6.arpa. hostmaster.remontti.net.br.3.2.1.f.4.0.8.2.ip6.arpa. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
            NS      ns1.remontti.net.br.
            NS      ns2.remontti.net.br.

2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa.   PTR     ns1.remontti.net.br.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa.   PTR     ns2.remontti.net.br.</pre>
<p>Ajustamos as permissões: </p>
<pre class="remontti-code"># chown bind: /var/cache/bind/master-rev/ -R</pre>
<p>Criamos uma atalho para facilitar:</p>
<pre class="remontti-code"># ln -s /var/cache/bind/master-rev/ /etc/bind/master-rev</pre>
<p>Agora nós precisamos informar nossas zonas reversas no named.conf.local, como estamos configurando nosso servidor master essas zonas serão do tipo (type) master. </p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final do arquivo:</p>
<pre class="remontti-code-plain">zone &quot;48.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.48.rev&quot;;
};
 
zone &quot;49.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.49.rev&quot;;
};
 
zone &quot;50.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.50.rev&quot;;
};
 
zone &quot;51.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.51.rev&quot;;
};

zone &quot;3.2.1.f.4.0.8.2.ip6.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/2804.f123.rev&quot;;
};</pre>
<p>Reinicie o serviço e verifique se o mesmo subiu sem erros.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<p>Checando se nosso IP reverso está resolvendo os nomes setados, com o comando `dig -x IP @localhost +short`</p>
<pre class="remontti-code"># dig -x 45.80.48.0 @localhost +short
45-80-48-0.remontti.net.br.

# dig -x 45.80.48.255 @localhost +short
45-80-48-255.remontti.net.br.

# dig -x 45.80.48.2 @localhost +short
ns1.remontti.net.br.

# dig -x 45.80.48.3 @localhost +short
ns2.remontti.net.br.

# dig -x 45.80.49.0 @localhost +short
45-80-49-0.remontti.net.br.

# dig -x 45.80.49.255 @localhost +short
45-80-49-255.remontti.net.br.

# dig -x 45.80.50.0 @localhost +short
45-80-50-0.remontti.net.br.

# dig -x 45.80.50.255 @localhost +short
45-80-50-255.remontti.net.br.
 
# dig -x 45.80.51.0 @localhost +short
45-80-51-0.remontti.net.br.

# dig -x 45.80.51.255 @localhost +short
45-80-51-255.remontti.net.br.

# dig -x 2804:f123:bebe:cafe::2 @localhost +short
ns1.remontti.net.br.

# dig -x 2804:f123:bebe:cafe::3 @localhost +short
ns2.remontti.net.br.</pre>
<p>Como criamos nomes aos 1024 hosts/IPs (<em>x-x-x-x.remontti.net.br</em>) será necessário apontar cada nome desses no arquivo de autoritativo do domínio <em>remontti.net.br</em> para cada nome um IP. Para isso vamos voltar as configurações do domínio autoritativo que já configurado. Lembre-se de alterar o serial! </p>
<pre class="remontti-code"># host 45-80-50-0.remontti.net.br.</pre>
<p>Host 45-80-50-0.remontti.net.br. not found: 3(NXDOMAIN)<br />
Só para relembrar: <strong>NXDOMAIN</strong>: Significa que o domínio pesquisado não existe.</p>
<p>Para resolver isso então vamos criar todos nosso nomes.<br />
vamos adicionar ao final do arquivo /var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts</p>
<pre class="remontti-code-plain">$ORIGIN remontti.net.br.
$GENERATE 0-1    45-80-48-$   A   45.80.48.$
$GENERATE 4-255  45-80-48-$   A   45.80.48.$
$GENERATE 0-255  45-80-49-$   A   45.80.49.$
$GENERATE 0-255  45-80-50-$   A   45.80.50.$
$GENERATE 0-255  45-80-51-$   A   45.80.51.$</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts</pre>
<p>Ficando:</p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400 ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2023020101 ; serial
                            14400      ; refresh (4 hours)
                            3600       ; retry (1 hour)
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)
                            )
 
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.
 
                        A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4

$ORIGIN remontti.net.br.
$TTL 10800   ; 3 hours
 
ns1                     A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2
hostmaster              A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2
ns2                     A       45.80.48.3
                        AAAA    2804:f123:bebe:cafe::3
www                     A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4

$ORIGIN remontti.net.br.
$GENERATE 0-1    45-80-48-$   A   45.80.48.$
$GENERATE 4-255  45-80-48-$   A   45.80.48.$
$GENERATE 0-255  45-80-49-$   A   45.80.49.$
$GENERATE 0-255  45-80-50-$   A   45.80.50.$
$GENERATE 0-255  45-80-51-$   A   45.80.51.$</pre>
<p>Autoritativo ajustado, reinicie o serviço e verifique se o mesmo subiu sem erros.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<p>Agora ao consultar nosso nomes temos uma resposta dizendo qual nosso endereço ip</p>
<pre class="remontti-code"># host 45-80-48-0.remontti.net.br.
45-80-48-0.remontti.net.br has address 45.80.48.0
 
# host 45-80-49-0.remontti.net.br.
45-80-49-0.remontti.net.br has address 45.80.49.0

# host 45-80-50-0.remontti.net.br.
45-80-50-0.remontti.net.br has address 45.80.50.0

# host 45-80-51-0.remontti.net.br.
45-80-51-0.remontti.net.br has address 45.80.51.0

# host ns1.remontti.net.br.
ns1.remontti.net.br has address 45.80.48.2
ns1.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::2

# host ns2.remontti.net.br.
ns2.remontti.net.br has address 45.80.48.3
ns2.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::3</pre>
<h5>Para o servidor Slave</h5>
<p>Crie o diretório onde irão ficar os arquivos e dê permissão</p>
<pre class="remontti-code"># mkdir /var/cache/bind/slave-rev
# chown bind: /var/cache/bind/slave-rev -R</pre>
<p>Em seguiga crie as zonas no arquivo named.conf.local, que serão do tipo (slave) e apontaremos o IP do DNS Master para que o servidor slave faça a transferência.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final:</p>
<pre class="remontti-code-plain">zone &quot;48.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.48.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};
 
zone &quot;49.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.49.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};
 
zone &quot;50.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.50.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};
 
zone &quot;51.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.51.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};

zone &quot;3.2.1.f.4.0.8.2.ip6.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/2804.f123.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};</pre>
<p>Crio o atalho, reinico o serviço e verifico se o mesmo subiu sem erros, em seguida olho se os arquivos foram criando nas pasta.</p>
<pre class="remontti-code"># ln -s /var/cache/bind/slave-rev /etc/bind/slave-rev
# systemctl restart bind9
# systemctl status bind9
# ls -lh /var/cache/bind/slave-rev/ </pre>
<p><strong>Validando seu reverso no registro.br</strong> <a href="https://registro.br/tecnologia/ferramentas/verificacao-de-dns/" rel="noopener" target="_blank">https://registro.br/tecnologia/ferramentas/verificacao-de-dns/ </a><br />
Vamos verificar pelos domínos .arpa</p>
<pre class="remontti-code-plain">48.80.45.in-addr.arpa
49.80.45.in-addr.arpa
50.80.45.in-addr.arpa
51.80.45.in-addr.arpa
3.2.1.f.4.0.8.2.ip6.arpa</pre>
<p><strong>RESULTADOS</strong></p>
<pre class="remontti-code-plain">DOMÍNIO            : 48.80.45.in-addr.arpa
DNS                : 45.80.48.2
STATUS             : Autoridade sobre o domínio
VERSÃ              : O2021102602
TEMPO DE RESPOSTA  : 23.990 ms

DOMÍNIO            : 49.80.45.in-addr.arpa
DNS                : 45.80.48.2
STATUS             : Autoridade sobre o domínio
VERSÃ              : O2021102602
TEMPO DE RESPOSTA  : 23.990 ms

DOMÍNIO            : 50.80.45.in-addr.arpa
DNS                : 45.80.48.2
STATUS             : Autoridade sobre o domínio
VERSÃ              : O2021102602
TEMPO DE RESPOSTA  : 23.990 ms

DOMÍNIO            : 51.80.45.in-addr.arpa
DNS                : 45.80.48.2
STATUS             : Autoridade sobre o domínio
VERSÃ              : O2021102602
TEMPO DE RESPOSTA  : 23.990 ms

DOMÍNIO            : 3.2.1.f.4.0.8.2.ip6.arpa
DNS                : 45.80.48.2
STATUS             : Autoridade sobre o domínio
VERSÃ              : O2021102602
TEMPO DE RESPOSTA  : 23.990 ms</pre>
<p>Se tudo estiver certo você terá <strong>Autoridade sobre o domínio</strong>, repita o mesmo no seu para o IP do servidor Slave.</p>
<p>Seu reverso está pronto para ser configurado no registro.br, <a href="https://registro.br/login/" rel="noopener" target="_blank">acesse sua conta</a> clique em <strong>NUMERAÇÃO</strong> em seguira sobre seu prefixo exemplo <strong>45.80.48.0/22</strong>, clique no "quadro azul" e clique em <strong>Configurar DNS</strong>, preencha o formulário <strong>Delegação DNS - 45.80.48.0/22</strong>  informado o <strong>Servidor 1</strong>: ns1.remontti.net.br e <strong>Servidor 2</strong>: ns2.remontti.net.br. Lembrando que o DNS do autoritativo "remontti.net.br" deve estar com os subdominios ns1 e ns2 apontando para o IP do seu servidor DNS, e o mesmo já deve ter propagado, se você tem acabou de alterar os DNS do remontti.net.br aguarde um tempo (até 24h) para fazer a configuração do reverso.</p>
<p><strong>Dúvida frequente:</strong><br />
- <em>Posso ter reversos de diferentes blocos usando o mesmo domínio autoritativo?</em><br />
Sim, como também pode para outros domínios, inclusive mesclados. </p>
<p>- É possível configurar o DNSSEC para os reversos? Sim basta seguir o mesmo padrão que usamos no exemplo com nosso propío domínio, lembrado que "não existe reverso" tudo é um dominio autoritativo que já existe chamado de xxxxxxxx.in-addr.arpa e xxxxxxx.ip6.arpa, para configurar no registro br é muito simples, basta você realizar a configuração do DNSSEC em cima de cada /24 seu e ir no painel do registro e clicar em DNSSEC e salvar, ele ira identificar sua configuração. </p>
<p>Um ótimo site para verificar seu DNSSEC é o <a href="https://dnsviz.net/" rel="noopener" target="_blank">https://dnsviz.net/</a></p>
<h4>Como configurar o reverso para prefixos menores que /24</h4>
<p>Vamos supor que você dono de um /22  e vai repassar um prefixo /28 para um provedor sem AS ou uma empresa que é seu cliente, e o mesmo deseja ter seu reverso respondendo em seus servidores DNS (<a href="https://datatracker.ietf.org/doc/html/rfc2317" rel="noopener" target="_blank">RFC2317</a>).</p>
<p>Primeiramente faça a delegação no registro.br do /28 para o CNPJ/Domínios do de seu cliente, <a href="https://registro.br/login/" rel="noopener" target="_blank">acesse sua conta</a> clique em <strong>NUMERAÇÃO</strong> em seguira sobre seu prefixo exemplo <strong>45.80.48.0/22</strong>, clique no "quadro azul" e clique em <strong>Expandir</strong> até chegar no prefixo /28, clieque sobre o quadro do prefixo desejado e em seguida em <strong>Configurar designação</strong> e preecha o formulário com o CNPJ/Domínios do seu cliente, se o mesmo não possuir solicite que faça seu cadastro.</p>
<p>Se ficar em dúvidas recomendo que assista: https://www.youtube.com/watch?v=VIa1dHtmQ4U DNS Reverso (~20min fala sobre isso)<br />
No exemplo vamos supor que o bloco seja o 45.80.49.64/28, como o mesmo fica no arquivo 45.80.49.rev vamos edita-lo.</p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.49.rev</pre>
<p>Iremos quebrar nosso GENERETE para pular os IPs finais 64 a 79, e vamos apontar ele para os DNS do cliente, logo é claro que ele precisa ter um domínio já configurado, e nesse DNS ele apontar exemplo ns1 e ns2 para o IP do servidor que ele estará fazendo a configuração. Explico já já como faz o lado dele.</p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
51.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 0-63 $ PTR 45-80-51-$.remontti.net.br.

; Cliente delegado
;  &lt;&lt;64-79&gt;&gt; /28
; Aponte para os DNS do Servidor do José 
64/28     NS     ns1.provedordojose.com.br. 
64/28     NS     ns2.provedordojose.com.br. 
; 
64      CNAME    64.45/28.49.80.45.in-addr.arpa. 
65      CNAME    65.45/28.49.80.45.in-addr.arpa. 
66      CNAME    66.45/28.49.80.45.in-addr.arpa. 
67      CNAME    67.45/28.49.80.45.in-addr.arpa. 
68      CNAME    68.45/28.49.80.45.in-addr.arpa. 
69      CNAME    69.45/28.49.80.45.in-addr.arpa. 
70      CNAME    70.45/28.49.80.45.in-addr.arpa. 
71      CNAME    71.45/28.49.80.45.in-addr.arpa. 
72      CNAME    72.45/28.49.80.45.in-addr.arpa. 
73      CNAME    73.45/28.49.80.45.in-addr.arpa. 
74      CNAME    74.45/28.49.80.45.in-addr.arpa. 
75      CNAME    75.45/28.49.80.45.in-addr.arpa. 
76      CNAME    76.45/28.49.80.45.in-addr.arpa. 
77      CNAME    77.45/28.49.80.45.in-addr.arpa. 
78      CNAME    78.45/28.49.80.45.in-addr.arpa. 
79      CNAME    79.45/28.49.80.45.in-addr.arpa.

$ORIGIN 51.80.45.in-addr.arpa.
$GENERATE 80-255 $ PTR 45-80-51-$.remontti.net.br.</pre>
<p>Reinicie o serviço e verifique o mesmo</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<h5>Lado do "provedor do Jose"</h5>
<p>Como estamos falando de um outro provedor, é quase certo que ele fará seu DNS: Recursivo, autoritativo e reverso. Então faça a instalação do bind e todos os procedimentos das configurações de recursivo e autoritativo sobre o domínio “provedordojose.com.br”, porém a configuração do reverso irá mudar um pouco, ficando:</p>
<p><strong>Autoritativo</strong></p>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/provedordojose.com/provedordojose.com.br.hosts</pre>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400 ; 1 day
provedordojose.com.br        IN SOA  ns1.provedordojose.com.br. hostmaster.provedordojose.com.br. (
                            2023020101 ; serial
                            14400      ; refresh (4 hours)
                            3600       ; retry (1 hour)
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)
                            )

                        NS      ns1.provedordojose.com.br.
                        NS      ns2.provedordojose.com.br.

                        A       45.80.49.67

$ORIGIN provedordojose.com.br.
$TTL 10800   ; 3 hours

ns1                     A       45.80.49.66
hostmaster              A       45.80.49.66

ns2                     A       45.80.49.67

www                     A       45.80.49.67

$ORIGIN provedordojose.com.br.
$GENERATE 64-65  45-80-49-$    A   45.80.49.$

$ORIGIN provedordojose.com.br.
$GENERATE 68-79  45-80-49-$    A   45.80.49.$</pre>
<p><strong>Reverso</strong></p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.49.64-79.rev</pre>
<pre class="remontti-code-plain">$TTL 1h
@               IN      SOA     ns1.provedordojose.com.br. root.provedordojose.com.br. (
                    2020050101 ; serial
                    10800      ; refresh (3 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )

        IN      NS      ns1.provedordojose.com.br.
        IN      NS      ns2.provedordojose.com.br.

$ORIGIN 64/28.49.80.45.in-addr.arpa.
64      IN      PTR     45-80-49-64.provedordojose.com.br.
65      IN      PTR     45-80-49-65.provedordojose.com.br.
66      IN      PTR     ns1.provedordojose.com.br.
67      IN      PTR     ns2.provedordojose.com.br.
68      IN      PTR     45-80-49-68.provedordojose.com.br.
69      IN      PTR     45-80-49-69.provedordojose.com.br.
70      IN      PTR     45-80-49-70.provedordojose.com.br.
71      IN      PTR     45-80-49-71.provedordojose.com.br.
72      IN      PTR     45-80-49-72.provedordojose.com.br.
73      IN      PTR     45-80-49-73.provedordojose.com.br.
74      IN      PTR     45-80-49-74.provedordojose.com.br.
75      IN      PTR     45-80-49-75.provedordojose.com.br.
76      IN      PTR     45-80-49-76.provedordojose.com.br.
77      IN      PTR     45-80-49-77.provedordojose.com.br.
78      IN      PTR     45-80-49-78.provedordojose.com.br.
79      IN      PTR     45-80-49-79.provedordojose.com.br.</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;provedordojose.com.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/provedordojose.com.br/provedordojose.com.br.hosts&quot;;
        key-directory &quot;/var/cache/bind/master-aut/rprovedordojose.com.br/keys/&quot;;
        dnssec-policy default;
        inline-signing yes;
        serial-update-method unixtime;
};

zone &quot;64/28.49.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.49.64-79.rev&quot;;
};</pre>
<p>Reinicie o serviço</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<h5>Situação de reverso para cliente final sem ele ter servidor de DNS</h5>
<p>Meu cliente quer que eu aponto os nomes dos IPs reverso para o seu domínio, posso?<br />
Sim, pode! Em muitos casos de clientes corporativos que tem seu próprio servidor de e-mail é possível que o mesmo peça para fazer isso. Ex:</p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.49.rev</pre>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
49.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 0-63 $ PTR 45-80-49-$.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
64      PTR     45-80-49-64.provedordojose.com.br.
65      PTR     45-80-49-65.provedordojose.com.br.
66      PTR     ns1.provedordojose.com.br.
67      PTR     ns2.provedordojose.com.br.
68      PTR     mail.provedordojose.com.br.
69      PTR     45-80-49-69.provedordojose.com.br.
70      PTR     45-80-49-70.provedordojose.com.br.
71      PTR     45-80-49-71.provedordojose.com.br.
72      PTR     45-80-49-72.provedordojose.com.br.
73      PTR     45-80-49-73.provedordojose.com.br.
74      PTR     45-80-49-74.provedordojose.com.br.
75      PTR     45-80-49-75.provedordojose.com.br.
76      PTR     45-80-49-76.provedordojose.com.br.
77      PTR     45-80-49-77.provedordojose.com.br.
78      PTR     45-80-49-78.provedordojose.com.br.
79      PTR     45-80-49-79.provedordojose.com.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 80-199 $ PTR 45-80-49-$.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
200     PTR     mail.empresa.com.br.
201     PTR     mail.minhaempresa.com.br.
202     PTR     mail.algumaempresa.com.br.
203     PTR     www.algumchato.com.br.
204     PTR     maischatoainda.com.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 205-255 $ PTR 45-80-49-$.remontti.net.br.</pre>
<p>Reinicie os serviços</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<h3>Mais um pouco de DNS!</h3>
<p><strong>Posso configurar DNS reverso de IPs privados?</strong><br />
Sim pode, ajustes no named.conf.default-zones e zones.rfc1918<br />
Remova as linhas dos IPs privados que deseja configurar.</p>
<p><strong>Posso configurar DNS reverso de outro AS?</strong><br />
Sim. Basta configurar! (Conheço provedores pequenos que ambos tem 1 servidor DNS cada e um é o backup do outro)</p>
<h4>Estatísticas do DNS</h4>
<p><strong>Estatística web/http</strong> (statistics-channels)<br />
Para ativar edite o /etc/bind/named.conf</p>
<pre class="remontti-code"># vim /etc/bind/named.conf</pre>
<p>Adicione antes dos <em>include</em>, sendo que 45.80.48.2 é o IP público do DNS e 45.80.48.100 e 45.80.48.101 (Só aceita /32) são os IPs que poderão acessar no navegaro a porta  58053 para visualizar as informações. Porém perceba que também deixou um inet só para o IP de loopback (127.0.0.1 ) a ideiá aqui é que só o zabbix-agente acesse, eu particularmente não deixou o outro inet sendo ouvido, se deseja comente ele com <strong>//</strong> </p>
<pre class="remontti-code-plain">statistics-channels {
       inet 127.0.0.1  port 58053 allow { 127.0.0.1; ::1; };
       inet 45.80.48.2  port 58053 allow { 45.80.48.100; 45.80.48.101; };
};</pre>
<p>Para surtir efeito reinicie o serviço </p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Agora acesse <strong>http://IP_DNS:58053/</strong></p>
<p>Usaremos a seguir este método para coletar informações para o zabbix. </p>
<p>Outra forma é as<strong> estatística em arquivo </strong>(statistics-file), você pode definir um local especifico para gerar seu arquivo com as estatística, caso não especificado o mesmo é gerado em /var/cache/bind/named.stats</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Adicione dentro de options { … }</p>
<pre class="remontti-code-plain">options {
//…
//…
    statistics-file &quot;/var/log/named/named.stats&quot;;
//…
//…
};</pre>
<p>Como sempre, em toda alteração reiniciamos o serviço</p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Porém para gere o arquivo de estatísticas é necessário o comando, e toda vez que deseja atualizar precisa executar o comando.</p>
<pre class="remontti-code"># rndc stats</pre>
<p>Exibe os dados do arquivo</p>
<pre class="remontti-code"># cat /var/log/named/named.stats
ou
# cat /var/cache/bind/named.stats</pre>
<p>Caso queira ver oque esta em cache pode usar o comando:</p>
<pre class="remontti-code"># rndc dumpdb -cache</pre>
<p>Ira gerar um arquivo named_dump.db em /var/cache/bind/</p>
<pre class="remontti-code"># cat /var/cache/bind/ | more
# cat /var/cache/bind/ | grep google</pre>
<h4>Criando Backup</h4>
<p>Basta salvar os diretórios  /etc/bind/* /var/cache/bind/* /usr/share/dns/* Gerar um arquivo de backup </p>
<pre class="remontti-code"># tar -czpf ns1.tar.gz /etc/bind/* /var/cache/bind/* /usr/share/dns/*</pre>
<p>Extrair arquivo de backup </p>
<pre class="remontti-code"># tar vxf ns1.tar.gz</pre>
<p>Recomendo a leitura do tutorial: <strong><a href="https://blog.remontti.com.br/4791" rel="noopener" target="_blank">Criando backups de forma simples e enviando para o Telegram ou servidor via SSH</a></strong></p>
<h3>Coletando dados dos bind e fail2ban para Zabbix 6 LTS</h3>
<p>Se você ainda não tem um zabbix server aqui tem um belo tutorial:<br />
<strong><a href="https://blog.remontti.com.br/6350" rel="noopener" target="_blank">Instalação do Zabbix 6 LTS + NGINX + PostgreSQL + Debian 11</a></strong><br />
<strong><a href="https://blog.remontti.com.br/6370" rel="noopener" target="_blank">Instalação do Grafana no Debian 11 Bullseye</a></strong></p>
<p>No nosso servidor DNS vamos precisar apenas do zabbix-agent, vamos adiciona o repositório do zabbix LTS para Debian 11 e em seguina intala-lo.</p>
<pre class="remontti-code"># cd /tmp
# apt install wget
# cd /tmp/
# wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-5+debian12_all.deb
# apt install ./zabbix-release_6.0-5+debian12_all.deb
# apt update; apt upgrade -y
# apt install zabbix-agent
# systemctl enable zabbix-agent</pre>
<p>Em seguida vamos precisar informar o IP do zabbix server:</p>
<pre class="remontti-code"># vim /etc/zabbix/zabbix_agentd.conf</pre>
<p>Localize e altere: </p>
<pre class="remontti-code-plain">Server=45.80.48.10 #IP Zabbix Server
ServerActive=45.80.48.10 #IP Zabbix Server
Hostname=ns1 #Nome exato cadastrado no Zabbix server</pre>
<p>Reinicie o serviço do zabbix agent</p>
<pre class="remontti-code"># systemctl restart zabbix-agent</pre>
<p>Não esqueça de ajustar statistics-channels named.conf:</p>
<pre class="remontti-code-plain">statistics-channels {
  inet 127.0.0.1 port 58053 allow { 127.0.0.1; };
};</pre>
<p>Vou usar o projeto <a href="https://github.com/remontti/Zabbix-Bind9-Statistics-Collection" rel="noopener" target="_blank"><strong>Zabbix-Bind9-Statistics-Collection</strong></a> compartilhado no meu gituhub</p>
<p>Copie o userparameter_rr_bind.conf no diretório (/etc/zabbix/zabbix_agentd.d) de inclusão dos agentes do Zabbix.</p>
<pre class="remontti-code"># cd /etc/zabbix/zabbix_agentd.d/
# wget https://raw.githubusercontent.com/remontti/Zabbix-Bind9-Statistics-Collection/master/userparameter_rr_bind.conf</pre>
<p>Copie o script bind-stats-rr.py para dentro de /etc/zabbix/script/ e ajustaremos os poderes e permissões.</p>
<pre class="remontti-code"># mkdir /etc/zabbix/script
# cd /etc/zabbix/script
# wget https://raw.githubusercontent.com/remontti/Zabbix-Bind9-Statistics-Collection/master/bind-stats-rr.py
# chmod a+x /etc/zabbix/script/bind-stats-rr.py
# chown zabbix: /etc/zabbix/script/ -R
# systemctl restart zabbix-agent</pre>
<p>Você pode receber estatísticas por zona (que serão descobertas automaticamente) adicionando a seguinte cláusula a cada definição de zona no seu named.conf.local: <strong>zone-statistics yes;</strong> Ex.: </p>
<pre class="remontti-code-plain">zone &quot;remontti.net.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts&quot;;
        key-directory &quot;/var/cache/bind/master-aut/remontti.net.br/keys/&quot;;
        dnssec-policy default;
        inline-signing yes;
        serial-update-method unixtime;
        zone-statistics yes;
};

zone &quot;48.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.48.rev&quot;;
        zone-statistics yes;
};

zone &quot;49.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.49.rev&quot;;
        zone-statistics yes;
};

zone &quot;50.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.50.rev&quot;;
        zone-statistics yes;
};

zone &quot;51.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.51.rev&quot;;
        zone-statistics yes;
};

zone &quot;3.2.1.f.4.0.8.2.ip6.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/2804.f123.rev&quot;;
        zone-statistics yes;
};</pre>
<p>Não esqueça de restartar o serviço se editar o named.local.conf `systemctl restart zabbix-agent`</p>
<p>Baixe o arquivo <strong><a href="https://raw.githubusercontent.com/remontti/Zabbix-Bind9-Statistics-Collection/master/RR%20Bind9.xml" rel="noopener" target="_blank">RR Bind9.xml</a></strong> para seu computador e importe o mesmo para o seu Zabbix Server.<br />
Vamos ter 3 novos templates: </p>
<pre class="remontti-code-plain">- RR Servico Bind9 ==&gt; Irá verificar se os serviço esta UP
- RR Servico Bind9 - Estatisticas ==&gt; Diversas informações
- RR Servico Bind9 - Valida arquivos - Deb11 ==&gt; Notificará sempre que um arquivo named.conf* for modificado</pre>
<h4>Coletando dados das prisões do Fail2ban</h4>
<p>Projeto <a href="https://github.com/remontti/zabbix-fail2ban-discovery" rel="noopener" target="_blank"><strong>zabbix-fail2ban-discovery</strong></a> </p>
<p>Faça o download do arquivo userparameter_fail2ban.conf para o diretório /etc/zabbix/zabbix_agentd.d/</p>
<pre class="remontti-code"># cd /etc/zabbix/zabbix_agentd.d/
# wget https://raw.githubusercontent.com/remontti/zabbix-fail2ban-discovery/master/userparameter_fail2ban.conf</pre>
<p>O Fail2ban funciona apenas com root por padrão. Precisaremos conceder permissão ao Zabbix para acessar o Fail2ban. Não é uma boa ideia conceder permissão de root ao Zabbix em termos de segurança. Em vez disso, permitiremos que o usuário do Zabbix use esse soquete. O agente Zabbix é executado sob o usuário zabbix. Primeiro, precisamos criar um novo grupo chamado fail2ban. Todos os usuários pertencentes a este grupo poderão acessar o Fail2ban.</p>
<p>Criar um grupo:</p>
<pre class="remontti-code"># addgroup --group fail2ban</pre>
<p>Adicionar o usuário zabbix existente ao grupo fail2ban:</p>
<pre class="remontti-code"># usermod -a -G fail2ban zabbix</pre>
<p>Em seguida, devemos alterar o proprietário do grupo do soquete de root para fail2ban:</p>
<pre class="remontti-code"># chown root:fail2ban /var/run/fail2ban/fail2ban.sock</pre>
<p>Por fim, ajuste as permissões no soquete para que os membros do grupo possam acessá-lo:</p>
<pre class="remontti-code"># chmod g+rwx /var/run/fail2ban/fail2ban.sock</pre>
<p>Agora podemos testar que o agente Zabbix pode chamar Fail2ban:</p>
<pre class="remontti-code"># su - zabbix --shell=/bin/bash -c &#039;fail2ban-client status sshd&#039;</pre>
<pre class="remontti-code-plain">Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:</pre>
<p>As instruções de instalação abrangem a alteração das permissões do soquete fail2ban para acesso como um usuário não root; no entanto, essas alterações são perdidas na próxima vez que o soquete é criado.</p>
<p>Para tornar as alterações permanentes em um sistema em que o fail2ban é gerenciado pelo systemd, adicione o seguinte ao arquivo de substituição de serviço fail2ban</p>
<pre class="remontti-code"># systemctl edit fail2ban</pre>
<p>Adicione: </p>
<pre class="remontti-code-plain">[Service]
ExecStartPost=/bin/sh -c &quot;while ! [ -S /run/fail2ban/fail2ban.sock ]; do sleep 1; done&quot;
ExecStartPost=/bin/chgrp fail2ban /run/fail2ban/fail2ban.sock
ExecStartPost=/bin/chmod g+w /run/fail2ban/fail2ban.sock
Restart Zabbix Agent</pre>
<p>Reinicie os serviços </p>
<pre class="remontti-code"># systemctl daemon-reload
# systemctl restart zabbix-agent fail2ban </pre>
<p>Consulte  se o grupo é o fail2ban</p>
<pre class="remontti-code"># ls -lh /var/run/fail2ban/fail2ban.sock</pre>
<pre class="remontti-code-plain">srwxrwx--- 1 root fail2ban 0 jun 18 11:47 /var/run/fail2ban/fail2ban.sock</pre>
<p>Faça download do template <strong><a href="https://raw.githubusercontent.com/remontti/zabbix-fail2ban-discovery/master/RR%20Servico%20Fail2ban%20-%20Monitor%20Filtros.xml" rel="noopener" target="_blank">RR Servico Fail2ban - Monitor Filtros</a></strong> e importe para o Zabbix Server.</p>
<p>Por hoje é "só" pessoal!<br />
Espero ter colaborado com uma pequena parcela em seu conhecimento.<br />
<font color="red">Esse tutorial levei <strong>dois dias</strong> escrevendo então conto com sua ajuda para poder manter o blog!</font></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><strong>Recomendado: </strong><br />
<a href="https://www.isc.org/download/" rel="noopener" target="_blank">https://www.isc.org/download/ </a><br />
<a href="https://downloads.isc.org/isc/bind9/9.16.15/doc/arm/Bv9ARM.pdf" rel="noopener" target="_blank">https://downloads.isc.org/isc/bind9/9.16.15/doc/arm/Bv9ARM.pdf</a><br />
<strong>Extensão para navegador:</strong><br />
<a href="https://chrome.google.com/webstore/detail/ipvfoo/ecanpcehffngcegjmadlcijfolapggal" rel="noopener" target="_blank">https://chrome.google.com/webstore/detail/ipvfoo/ecanpcehffngcegjmadlcijfolapggal</a><br />
<a href="https://addons.mozilla.org/en-US/firefox/addon/ipvfoo-pmarks/" rel="noopener" target="_blank">https://addons.mozilla.org/en-US/firefox/addon/ipvfoo-pmarks/</a></p>
<p><strong>Ferramentas web: </strong><br />
<a href="https://dnschecker.org/" rel="noopener" target="_blank">https://dnschecker.org/</a><br />
<a href="https://zonemaster.net/" rel="noopener" target="_blank">https://zonemaster.net/</a></p>
<p>O post <a href="https://blog.remontti.com.br/5958">Servidor DNS Bind9 &#8211; Recursivo + Autoritativo DNSSEC + Reverso + RPZ + Fail2ban + nftables + Zabbix no Debian 11/12</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/5958/feed</wfw:commentRss>
			<slash:comments>59</slash:comments>
		
		
			</item>
	</channel>
</rss>
