<?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 MariaDB - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/mariadb/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/mariadb</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Mon, 06 Jan 2025 18:45:51 +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 MariaDB - Remontti</title>
	<link>https://blog.remontti.com.br/tag/mariadb</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Guia Completo: Como instalar e configurar o Nextcloud Hub 9 no Debian 12</title>
		<link>https://blog.remontti.com.br/8193</link>
					<comments>https://blog.remontti.com.br/8193#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Mon, 06 Jan 2025 18:34:38 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[armazenamento em nuvem]]></category>
		<category><![CDATA[banco de dados nextcloud]]></category>
		<category><![CDATA[configuração nextcloud]]></category>
		<category><![CDATA[configuração redis]]></category>
		<category><![CDATA[Debian 12]]></category>
		<category><![CDATA[debian server]]></category>
		<category><![CDATA[guia completo nextcloud]]></category>
		<category><![CDATA[instalação nextcloud]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[nextcloud]]></category>
		<category><![CDATA[nextcloud em português]]></category>
		<category><![CDATA[nextcloud hub]]></category>
		<category><![CDATA[otimização nextcloud]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[segurança servidor]]></category>
		<category><![CDATA[servidor linux]]></category>
		<category><![CDATA[servidor nextcloud]]></category>
		<category><![CDATA[ssl certbot]]></category>
		<category><![CDATA[tutorial nextcloud]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=8193</guid>

					<description><![CDATA[<p>Neste tutorial, você aprenderá como configurar e instalar o NextCloud em um servidor Linux Debian 12. O Nextcloud Hub é uma poderosa solução de armazenamento em nuvem que permite hospedar seus próprios arquivos, calendários,&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/8193">Guia Completo: Como instalar e configurar o Nextcloud Hub 9 no Debian 12</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/2025/01/NEXTCLOUD-HUB-9-DEBIAN-12.png" alt="" width="1792" height="1024" class="alignnone size-full wp-image-8217" srcset="https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD-HUB-9-DEBIAN-12.png 1792w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD-HUB-9-DEBIAN-12-300x171.png 300w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD-HUB-9-DEBIAN-12-1024x585.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD-HUB-9-DEBIAN-12-768x439.png 768w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD-HUB-9-DEBIAN-12-1536x878.png 1536w" sizes="(max-width: 1792px) 100vw, 1792px" /><br />
Neste tutorial, você aprenderá como configurar e instalar o NextCloud em um servidor Linux Debian 12. O Nextcloud Hub é uma poderosa solução de armazenamento em nuvem que permite hospedar seus próprios arquivos, calendários, contatos e outros dados, garantindo total controle sobre a privacidade e segurança.</p>
<p>Abordaremos passo a passo desde a configuração do servidor web com Apache, PHP e MariaDB, até a instalação e configuração do NextCloud. Além disso, este guia inclui ajustes de segurança, como a implementação de SSL com Certbot (Let&#8217;s Encrypt) e otimizações para melhorar o desempenho do sistema.</p>
<p>Ao final, você terá um ambiente funcional e seguro para hospedar sua própria nuvem privada, ideal para empresas ou usuários que desejam independência de serviços de terceiros.</p>
<p>Prepare-se para transformar seu servidor em uma plataforma de nuvem privada robusta e personalizável! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h3>Debian 12</h3>
<p><strong><a href="https://blog.remontti.com.br/7236" target="_blank">Instalação do Debian 12 Bookworm limpa passo-a-passo</a></strong></p>
<h2>Subindo Servidor Web</h2>
<p>Instale o servidor web Apache e vários módulos do PHP necessários para o nextcloud</p>
<pre class="remontti-code"># apt install apache2 apache2-utils redis-server php \
  php-{fpm,pclzip,xmlrpc,imagick,redis,memcached,apcu,imap,ldap,intl,mysql,cli,pear,gmp,gd,bcmath,mbstring,curl,xml,zip} -y</pre>
<p>Habilitação de Módulos do Apache</p>
<pre class="remontti-code"># a2enmod proxy_fcgi setenvif mpm_event rewrite headers http2</pre>
<ul>
<li><strong>proxy_fcgi</strong>: Permite que o Apache se conecte a servidores FastCGI, como PHP-FPM.  </li>
<li><strong>setenvif</strong>: Configura variáveis de ambiente com base em condições das requisições.  </li>
<li><strong>mpm_event</strong>: Otimiza o Apache para lidar com conexões simultâneas de forma eficiente.  </li>
<li><strong>rewrite</strong>: Permite redirecionamentos e reescritas de URL dinâmicas.  </li>
<li><strong>headers</strong>: Permite manipulação de cabeçalhos HTTP em respostas e requisições.  </li>
<li><strong>http2</strong>: Habilita suporte ao protocolo HTTP/2 para maior velocidade e eficiência.</li>
</ul>
<p>Desabilitação do Módulo PHP do Apache, vamos utilizar o PHP-FPM.</p>
<pre class="remontti-code"># a2dismod php8.2</pre>
<p>Ativação do PHP-FPM no Boot, e habilite o PHP-FPM no Apache.</p>
<pre class="remontti-code"># systemctl enable php8.2-fpm
# a2enconf php8.2-fpm</pre>
<p>Melhorias de Segurança: Ajusta as configurações para ocultar informações sensíveis do servidor, como versão do Apache e detalhes do sistema operacional.</p>
<pre class="remontti-code"># 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</pre>
<p>Adiciona o usuário `www-data` (usado pelo servidor web) ao grupo do Redis, permitindo acesso ao cache Redis pelo Apache ou PHP.</p>
<pre class="remontti-code"># usermod -a -G redis www-data
echo &#039;apc.enable_cli=1&#039; &gt;&gt; /etc/php/8.2/cli/php.ini</pre>
<p>Edite o arquivo php.ini do PHP-FPM</p>
<pre class="remontti-code"># vim /etc/php/8.2/fpm/php.ini</pre>
<ul>
<li>Defina o limite de memória para scripts PHP em <strong>512MB</strong>, garantindo que aplicações PHP que consomem mais memória possam funcionar adequadamente.</li>
<li>Configura o <strong>opcache</strong> para usar <strong>16MB de buffer para strings internada</strong>, melhorando o desempenho e reduzindo o consumo de memória de strings repetitivas.</li>
</ul>
<pre class="remontti-code-plain">
memory_limit = 512M
opcache.interned_strings_buffer=16
</pre>
<p>Para instalação do NextCloud vou utilizar o diretório padrão do Apache /var/www/html, desta forma se você se você não fou utilizar DNS (acessar via IP) pode pular o próximo passo.</p>
<p>Aponte em seus DNS a entra para o subdomínio, exemplo: <strong>nextcloud</strong>.seudominio.com.br. Agora vamos criar a configuração do Apache para tratar o <em>&#8220;nextcloud.seudominio.com.br&#8221;</em></p>
<pre class="remontti-code"># vim /etc/apache2/sites-available/nextcloud.conf</pre>
<p>Ajuste da seguinte forma:</p>
<pre class="remontti-code-plain">
&lt;virtualhost *:80&gt;
        Protocols h2 http/1.1
        ServerName nextcloud.seudominio.com.br
        ServerAdmin noc@seudominio.com.br
 
        DocumentRoot /var/www/html 
 
        &lt;IfModule mod_headers.c&gt;
          Header always set Strict-Transport-Security &quot;max-age=15552000; includeSubDomains&quot;
        &lt;/IfModule&gt; 
 
        &lt;directory /var/www/html/ &gt;
                Options FollowSymLinks
                AllowOverride All
        &lt;/directory&gt; 
 
        LogLevel warn 
        ErrorLog ${APACHE_LOG_DIR}/error_nextcloud.log
        CustomLog ${APACHE_LOG_DIR}/access_nextcloud.log combined
&lt;/virtualhost&gt;</pre>
<p>Se estiver configurado servidor para um DNS desative a configuração <strong>000-default</strong>, caso não configurou pule essa etapa.</p>
<pre class="remontti-code"># a2dissite 000-default</pre>
<p>Ative as configurações do nextcloud.conf no apache para interpretar as configurações com nosso domínio.</p>
<pre class="remontti-code"># a2ensite nextcloud</pre>
<p>Reinicia o servidor Apache e php-fpm para aplicar as configurações feitas.</p>
<pre class="remontti-code"># systemctl restart php8.2-fpm apache2</pre>
<p>Instala o Certbot (ferramenta para gerenciar certificados grátis da Let’s Encrypt) e o plugin para integração com o Apache.</p>
<pre class="remontti-code"># apt install certbot python3-certbot-apache</pre>
<p>Execute o Certbot para configura automaticamente o VirtualHost.</p>
<pre class="remontti-code"># certbot</pre>
<pre class="remontti-code-green">Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter &#039;c&#039; to cancel): noc@seudominio.com.br <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f448.png" alt="👈" class="wp-smiley" style="height: 1em; max-height: 1em;" />

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in
order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f448.png" alt="👈" class="wp-smiley" style="height: 1em; max-height: 1em;" />

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f448.png" alt="👈" class="wp-smiley" style="height: 1em; max-height: 1em;" />
Account registered.

Which names would you like to activate HTTPS for?
We recommend selecting either all domains, or all domains in a VirtualHost/server block.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: nextcloud.seudominio.com.br
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter &#039;c&#039; to cancel): 1
Requesting a certificate for nextcloud.seudominio.com.br

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/nextcloud.seudominio.com.br/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/nextcloud.seudominio.com.br/privkey.pem
This certificate expires on 2025-04-06.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for nextcloud.seudominio.com.br to /etc/apache2/sites-available/nextcloud-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://nextcloud.seudominio.com.br

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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>Certificados gerados pela Let&#8217;s Encrypt tem validade de 90 dias. Então vamos criar um script para renovar de forma automática.</p>
<pre class="remontti-code"># vim /usr/local/bin/renew-certificates.sh</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">#!/bin/bash

# Renova os certificados usando Certbot
/usr/bin/certbot renew --quiet</pre>
<p>De permissão para execução.</p>
<pre class="remontti-code">chmod +x /usr/local/bin/renew-certificates.sh</pre>
<p>Adicione ao cron para 1x por semana às 03:00 da manhã ele realizar a renovação.</p>
<pre class="remontti-code">crontab -e</pre>
<p>Adicion:</p>
<pre class="remontti-code-plain">
0 3 * * 1 /usr/local/bin/renew-certificates.sh</pre>
<p>Reinicie o cron.</p>
<pre class="remontti-code"># systemctl restart cron</pre>
<h4>MariaDB <em>(Banco de Dados)</em></h4>
<p>Instala o servidor e o cliente do MariaDB, um sistema de gerenciamento de banco de dados.</p>
<pre class="remontti-code"># apt install mariadb-server mariadb-client</pre>
<p>Crie o banco de dados para o NextCloud, acesso o terminal do MariaDB.</p>
<pre class="remontti-code"># mariadb -u root </pre>
<p>Altere <strong>SUA_SENHA</strong> para sua senha.</p>
<pre class="remontti-code-plain">
CREATE USER &#039;nextcloud&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA&#039;;
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO &#039;nextcloud&#039;@&#039;localhost&#039;;
FLUSH PRIVILEGES;
QUIT;</pre>
<p>Vamos fazer mais um ajuste no banco de dados MariaDB:</p>
<pre class="remontti-code"># vim /etc/mysql/conf.d/mysql.cnf</pre>
<p>Adicione configuração extras do <strong>innodb_buffer_pool_size</strong> e <strong>innodb_io_capacity</strong> para uma melhor performace.</p>
<pre class="remontti-code-plain">[mysqld]

# Define o tamanho do buffer pool do InnoDB para 1 GB, usado para armazenar 
# dados e índices em memória, melhorando o desempenho.
innodb_buffer_pool_size=1G

# Configura a capacidade máxima de I/O por segundo do InnoDB, 
# ideal para servidores com discos rápidos, como SSDs.
innodb_io_capacity=4000</pre>
<p>Reinicie o serviço para carregar as novas configurações.</p>
<pre class="remontti-code"># systemctl restart mariadb</pre>
<h5>Bibliotecas adicionais</h5>
<p>Instala bibliotecas adicionais para suporte a formatos de imagem extras e funcionalidades avançadas no ImageMagick.</p>
<pre class="remontti-code"># apt install libmagickcore-6.q16-6-extra -y</pre>
<h2>Instalação do NextCloud</h2>
<p>Servidor web pronto, vamos as configurações do NextCloud</p>
<p>Vamos fazer download da versão mais recente (Hoje 06/01/2025 v30.0.4)</p>
<pre class="remontti-code"># cd /tmp/
# wget https://download.nextcloud.com/server/releases/latest.zip</pre>
<pre class="remontti-code-green">--2025-01-06 11:50:58--  https://download.nextcloud.com/server/releases/latest.zip
Resolvendo download.nextcloud.com (download.nextcloud.com)... 2a01:21c8::145, 5.9.202.145
Conectando-se a download.nextcloud.com (download.nextcloud.com)|2a01:210:21c8::145|:443... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 225508096 (215M) [application/zip]
Salvando em: “latest.zip”

latest.zip  100%[============================================&gt;] 215,06M   373KB/s    em 8m 11s  

2025-01-06 11:59:10 (448 KB/s) - “latest.zip” salvo [225508096/225508096]</pre>
<p>Extraia o arquivo</p>
<pre class="remontti-code"># unzip -q latest.zip</pre>
<p>Agora vamos mover os arquivos para /var/www/html, porem antes vamos renomear a pasta html que contém o arquivo index.html padrão do apache. </p>
<pre class="remontti-code"># mv /var/www/html/ /var/www/html_old</pre>
<p>Agora vamos mover nossa pasta que extraímos <strong>nextcloud</strong> para <strong>/var/www/html</strong>, e vamos dar permissões para o usuário Apache administrar os arquivos.</p>
<pre class="remontti-code"># mv nextcloud /var/www/html
# chown -R www-data: /var/www/html</pre>
<p>Agora acesse em seu navegador <em>&#8220;https://nextcloud.seudominio.com.br&#8221;</em> para finalizar a instalação:<br />
Crie uma nome de <strong>usuário</strong> e senha para o <strong>administrador</strong>, em seguida informe os dados da conexão do banco de dados MariaDB, conforme você criou anteriormente, e clique em <strong>instalar</strong>.<br />
<img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD.png" alt="" width="956" height="1088" class="alignnone size-full wp-image-8210" srcset="https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD.png 956w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD-264x300.png 264w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD-900x1024.png 900w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD-768x874.png 768w" sizes="(max-width: 956px) 100vw, 956px" /></p>
<p>Selecione quais aplicações gostaria de instalar e clique em instalar, ou clique em ignorar para não instalar agora. (É possível instalar posteriormente no painel de administração.)<br />
<img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD3.png" alt="" width="1353" height="955" class="alignnone size-full wp-image-8212" srcset="https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD3.png 1353w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD3-300x212.png 300w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD3-1024x723.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD3-768x542.png 768w" sizes="(max-width: 1353px) 100vw, 1353px" /></p>
<p>Algumas telas irão aparecer apresentando o Nexcloud Hub. </p>
<p>Ao final você terá a seguinte tela.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD10.png" alt="" width="2560" height="957" class="alignnone size-full wp-image-8213" srcset="https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD10.png 2560w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD10-300x112.png 300w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD10-1024x383.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD10-768x287.png 768w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD10-1536x574.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2025/01/NEXTCLOUD10-2048x766.png 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></p>
<p>Seu NextCloud está quase pronto para utilizar, vamos a mais alguns ajustes.</p>
<p><strong>Adicionar Índices Ausentes ao Banco de Dados:</strong></p>
<pre class="remontti-code"># su - www-data --shell=/bin/bash -c &#039;php /var/www/html/occ db:add-missing-indices&#039; </pre>
<p>Este comando utiliza a interface de linha de comando do Nextcloud (`occ`) para verificar e adicionar índices que possam estar faltando nas tabelas do banco de dados. Índices são cruciais para melhorar a velocidade das consultas e o desempenho geral do sistema. Ao adicionar os índices ausentes, garantimos que o banco de dados opere de maneira mais eficiente. </p>
<p><strong>Configurar o Horário de Início da Janela de Manutenção:</strong></p>
<pre class="remontti-code"># su - www-data --shell=/bin/bash -c &#039;php /var/www/html/occ config:system:set maintenance_window_start --type=integer --value=3&#039; </pre>
<p>Este comando define o horário de início da janela de manutenção para as tarefas de segundo plano que exigem muitos recursos. Ao configurar este parâmetro, você especifica a hora (em UTC) em que essas tarefas devem começar, minimizando o impacto no desempenho durante os períodos de uso intenso. No exemplo acima, o valor `3` indica que a janela de manutenção começará às 03:00 UTC. </p>
<p><strong>Executar Reparos de Manutenção Incluindo Migrações de Mime Types:</strong></p>
<pre class="remontti-code"># su - www-data --shell=/bin/bash -c &#039;php /var/www/html/occ maintenance:repair --include-expensive&#039; </pre>
<p>Este comando executa uma série de reparos no sistema Nextcloud, incluindo tarefas que podem ser demoradas (`&#8211;include-expensive`). Entre essas tarefas, está a migração de tipos MIME, que assegura que novos tipos de arquivos sejam reconhecidos e tratados corretamente pelo sistema. É especialmente útil após atualizações ou quando novos tipos de arquivos são adicionados. </p>
<p><strong>Ajustes finais</strong></p>
<pre class="remontti-code"># vim /var/www/html/config/config.php</pre>
<p>Adicione as seguintes linhas dentro do array $CONFIG {}: </p>
<pre class="remontti-code-plain">
  &#039;default_language&#039; =&gt; &#039;pt-BR&#039;,
  &#039;default_locale&#039; =&gt; &#039;pt_BR&#039;,
  &#039;default_phone_region&#039; =&gt; &#039;BR&#039;,
</pre>
<p>Adicione: Redis como memcache para o bloqueio de arquivos.</p>
<pre class="remontti-code-plain">
  &#039;filelocking.enabled&#039; =&gt; true,
  &#039;memcache.local&#039; =&gt; &#039;\OC\Memcache\APCu&#039;,
  &#039;memcache.locking&#039; =&gt; &#039;\OC\Memcache\Redis&#039;,
  &#039;redis&#039; =&gt; [
    &#039;host&#039; =&gt; &#039;localhost&#039;,
    &#039;port&#039; =&gt; 6379,
  ],
</pre>
<p>Sempre que você cria um usuário novo ele cria vários arquivos de exemplo/modelo, se desejar desativar isso adicione também:</p>
<pre class="remontti-code-plain">
  &#039;skeletondirectory&#039; =&gt; &#039;&#039;,
</pre>
<p>Agora limpe os logs</p>
<pre class="remontti-code"> # &gt; /var/www/html/data/nextcloud.log</pre>
<p>Agora vá até as configurações de administrador para verificar se a instalação está tudo &#8220;dentro dos conformes&#8221;.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2025/01/nextcloud-hub-conf.png" alt="" width="453" height="525" class="alignnone size-full wp-image-8215" srcset="https://blog.remontti.com.br/wp-content/uploads/2025/01/nextcloud-hub-conf.png 453w, https://blog.remontti.com.br/wp-content/uploads/2025/01/nextcloud-hub-conf-259x300.png 259w" sizes="auto, (max-width: 453px) 100vw, 453px" /></p>
<p>Deve conter apenas um &#8220;problema&#8221;: <em>Você ainda não definiu ou verificou a configuração do seu servidor de e-mail. </em> Para resolver basta configurar o serviço de envio de e-mail.</p>
<p>É possível testar seu servidor em: <a href="https://scan.nextcloud.com" target="_blank">https://scan.nextcloud.com</a></p>
<p>Agora sim seu servidor NextCloud Hub está pronto!</p>
<h5>Bônus</h5>
<p>Perdi a senha como recupara?</p>
<pre class="remontti-code"># su - www-data --shell=/bin/bash -c &#039;php /var/www/html/occ user:resetpassword administrador&#039;</pre>
<pre class="remontti-code-green">Enter a new password: 
Confirm the new password: 
Successfully reset password for administrador</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></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p><strong>Fonte:</strong><br />
<a href="https://docs.nextcloud.com/server/latest/admin_manual/contents.html" target="_blank">https://docs.nextcloud.com/server/latest/admin_manual/contents.html</a></p>
<p>O post <a href="https://blog.remontti.com.br/8193">Guia Completo: Como instalar e configurar o Nextcloud Hub 9 no Debian 12</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/8193/feed</wfw:commentRss>
			<slash:comments>8</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-cpafaUdS" 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-cpafaUdS" 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-cpafaUdS" 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-cpafaUdS" 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-cpafaUdS" 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>Servidor WEB NGINX + PHP 8.2 + MariaDB + phpMyAdmin + Let’s Encrypt Debian 12 Bookworm (LNMP)</title>
		<link>https://blog.remontti.com.br/7460</link>
					<comments>https://blog.remontti.com.br/7460#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 14 Jun 2023 15:17:45 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bookworm]]></category>
		<category><![CDATA[Debian 12]]></category>
		<category><![CDATA[Let’s Encrypt]]></category>
		<category><![CDATA[LNMP]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[Servidor WEB]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=7460</guid>

					<description><![CDATA[<p>Neste tutorial vamos configurar um servidor web com NGINX (lê-se “engine x”), o concorrente do Apache. NGINX é um servidor web (HTTP e IMAP/POP3/Proxy) rápido, leve e com inúmeras possibilidades de configuração para melhor&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7460">Servidor WEB NGINX + PHP 8.2 + MariaDB + phpMyAdmin + Let’s Encrypt Debian 12 Bookworm (LNMP)</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/lamp_debian12.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-7476" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian12.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian12-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian12-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></center></p>
<p>Neste tutorial vamos configurar um servidor web com NGINX (lê-se “engine x”), o concorrente do Apache. NGINX é um servidor web (HTTP e IMAP/POP3/Proxy) rápido, leve e com inúmeras possibilidades de configuração para melhor performance. O Apache, sem dúvidas, é o servidor web mais popular. No entanto, o NGINX a cada ano ganha mais popularidade e está sendo a preferência dos novos projetos.</p>
<p>Distribuição utilizada: <strong><a href="https://blog.remontti.com.br/7236" rel="noopener noreferrer" target="_blank">Debian 12 Stretch / Instalação Limpa</a></strong></p>
<h3>NGINX</h3>
<p><a href="https://www.nginx.com" rel="noopener" target="_blank">https://www.nginx.com</a><br />
Vamos instalar-lo e remover a assinatura para que não vejam a versão do mesmo (Boas praticas)</p>
<pre class="remontti-code"># apt install nginx
# sed -i &#039;s/# server_tokens/server_tokens/&#039; /etc/nginx/nginx.conf
# systemctl restart nginx</pre>
<p>Acesse agora em seu navegador http://IP-SERVIDOR/<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/04/nginx1.png" alt="" width="1100" height="310" class="alignnone size-full wp-image-5467" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/04/nginx1.png 1100w, https://blog.remontti.com.br/wp-content/uploads/2021/04/nginx1-300x85.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/04/nginx1-1024x289.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/04/nginx1-768x216.png 768w" sizes="auto, (max-width: 1100px) 100vw, 1100px" /></p>
<p>Pronto nosso NGINX está rodando! </p>
<h3>MARIADB</h3>
<p>MariaDB para quem ainda não sabe é um fork do MySQL, criado pelo próprio fundador do projeto MySQL após sua aquisição pela Oracle.</p>
<pre class="remontti-code"># apt install mariadb-server mariadb-client</pre>
<p>Ao final do tutorial iremos colocar uma senha para o usuario root do mariadb. Não iremos fazer isso agora para não dar problema na instalação do phpmyadmin.</p>
<h3>PHP 8.2</h3>
<p>Incluirei algumas extensões do PHP que são normalmente utilizada também na instalação.</p>
<pre class="remontti-code"># apt install --no-install-recommends \
 php php-{fpm,cli,mysql,pear,gd,gmp,bcmath,mbstring,curl,xml,zip,json,pgsql}</pre>
<p>Agora vamos fazer a &#8220;integração&#8221; do PHP com o NGINX. Moveremos o arquivo defaul.</p>
<pre class="remontti-code"># mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.original</pre>
<p>Crie um novo:</p>
<pre class="remontti-code"># vim /etc/nginx/sites-available/default</pre>
<p>Ajuste:</p>
<pre class="remontti-code">server {
    listen 80;
    listen [::]:80;

    root /var/www/html;
    index index.php index.html index.htm;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    }
}</pre>
<p>Teste a configuração se não tem nada errado e restart os serviços:</p>
<pre class="remontti-code"># nginx -t
# systemctl restart nginx php8.2-fpm</pre>
<p>Vamos criar um arquivo em PHP para testa se nosso NGINX está interpretando o PHP.</p>
<pre class="remontti-code"># echo &#039;&lt;?php phpinfo();&#039; &gt;&gt; /var/www/html/teste.php</pre>
<p>Acesse em seu navegador http://IP-SERVIDOR/teste.php<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/debian12_php8.2.png" alt="" width="950" height="925" class="alignnone size-full wp-image-7417" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/debian12_php8.2.png 950w, https://blog.remontti.com.br/wp-content/uploads/2023/06/debian12_php8.2-300x292.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/debian12_php8.2-768x748.png 768w" sizes="auto, (max-width: 950px) 100vw, 950px" /><br />
Servidor WEB com PHP está funcionando! </p>
<p>Exemplo para múltiplos domínios/subdomínios </p>
<pre class="remontti-code"># vim /etc/nginx/sites-available/sub1.conf</pre>
<p>Neste ex: vou representar o <em>sub1.remontti.com.br</em></p>
<pre class="remontti-code">server {
    listen 80;
    listen [::]:80;

    root /var/www/sub1;
    index index.php index.html index.htm;

    server_name sub1.remontti.com.br;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    }
}</pre>
<pre class="remontti-code"># vim /etc/nginx/sites-available/sub2e3.conf</pre>
<p>Neste ex: vou representar o <em>sub2.remontti.com.br</em> e <em>sub3.remontti.com.br</em></p>
<pre class="remontti-code">server {
    listen 80;
    listen [::]:80;

    root /var/www/sub2e3;
    index index.php index.html index.htm;

    server_name sub2.remontti.com.br sub3.remontti.com.br;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    }
}</pre>
<p>Link os arquivos no diretório &#8220;/etc/nginx/sites-available&#8221;  que será carregado as novas configurações </p>
<pre class="remontti-code"># ln -s /etc/nginx/sites-available/sub1.conf /etc/nginx/sites-enabled/
# ln -s /etc/nginx/sites-available/sub2e3.conf /etc/nginx/sites-enabled/</pre>
<p>Crie os diretórios referente a cada <strong>server_name</strong>.</p>
<pre class="remontti-code"># mkdir /var/www/sub1
# mkdir /var/www/sub2e3
# echo &#039;&lt;?php echo &quot;Olá mundo do sub1!&quot;; ?&gt;&#039; &gt;&gt; /var/www/sub1/index.php
# echo &#039;&lt;?php echo &quot;Olá mundo do sub2e3!&quot;; ?&gt;&#039; &gt;&gt; /var/www/sub2e3/index.php
</pre>
<p>Verifique se não tem nenhum erro e restart:</p>
<pre class="remontti-code"># nginx -t
# systemctl restart nginx</pre>
<h3>phpMyAdmin</h3>
<pre class="remontti-code"># apt install phpmyadmin -y </pre>
<p>Não selecione nenhum, apenas <strong>OK</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_debian12.png" alt="" width="1239" height="424" class="alignnone size-full wp-image-7467" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_debian12.png 1239w, https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_debian12-300x103.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_debian12-1024x350.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_debian12-768x263.png 768w" sizes="auto, (max-width: 1239px) 100vw, 1239px" /></p>
<p>Responda <strong>Sim</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_debian12_nginx.png" alt="" width="1249" height="370" class="alignnone size-full wp-image-7468" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_debian12_nginx.png 1249w, https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_debian12_nginx-300x89.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_debian12_nginx-1024x303.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2023/06/phpmyadmin_debian12_nginx-768x228.png 768w" sizes="auto, (max-width: 1249px) 100vw, 1249px" /></p>
<p>Irá solicitar a senha para a base de dados <strong>phpmyadmin</strong>, informe sua <strong>senha e repita</strong>. </p>
<pre class="remontti-code"># vim /etc/nginx/sites-available/default</pre>
<p>Adicione as linhas destacadas:</p>
<pre class="remontti-code">server {
    listen 80;
    listen [::]:80;

    root /var/www/html;
    index index.php index.html index.htm;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    }

    location ^~ /phpmyadmin {
        root /usr/share;
        try_files $uri $uri/ =404;
        #allow  192.168.87.0/24;
        #allow  2001:0db8::/32;
        #deny   all;
        #error_page  403   http://www.remontti.com.br;
        location ~ .php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        }
    }

}</pre>
<p>Se deseja tonar o phpmyadmin acessivel apenas de alguns endereços IPs basta descomentar as linhas, e incluir seus prefixos. O error_page é para que quando a o acessante levar um proibido seja direcionado para um site.</p>
<pre class="remontti-code">allow  192.168.87.0/24;
allow  2001:0db8::/32;
deny   all;
error_page  403   http://www.remontti.com.br;</pre>
<p>Verifique se não tem nenhum erro e restart:</p>
<pre class="remontti-code"># nginx -t
# systemctl restart nginx</pre>
<p>Acesse agora <strong>http://SERVIDOR/phpmyadmin</strong><br />
<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" /></p>
<h4>Definindo senha para o root do mariaDB</h4>
<p>Por segurança vamos setar uma senha do usuario root do MariaDB</p>
<pre class="remontti-code"># mariadb -u root</pre>
<p>Para aumentar a seguraçã vamos definir uma senha para o usuário root do MariDB, não esqueça de alterar ALTERE_3ST4_SENHA pela sua senha. Dica acesse<a href="https://senhasegura.remontti.com.br/" rel="noopener" target="_blank"> https://senhasegura.remontti.com.br/</a> e gere uma!</p>
<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>
<p>Agora quando for acessar o mariadb será necessário informar a senha juntamente da opção <strong>-p</strong>.</p>
<pre class="remontti-code"># mariadb -u root -p</pre>
<pre class="remontti-code-plain">Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 46
Server version: 10.11.3-MariaDB-1 Debian 12

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type &#039;help;&#039; or &#039;\h&#039; for help. Type &#039;\c&#039; to clear the current input statement.

MariaDB [(none)]&gt; exit;
Bye
</pre>
<h3>Let&#8217;s Encrypt</h3>
<p>Criando certificado grátis para seus sub/domínios.</p>
<pre class="remontti-code"># apt install certbot python3-certbot-nginx</pre>
<p>Para gerar o certificado use o comando:</p>
<pre class="remontti-code"># certbot</pre>
<p>Não esqueça de colocar no seu cron para ele renovar o certificado, pois a cada 90 ele expira. Neste exemplo todo dia primeiro tento renovar.</p>
<pre class="remontti-code"># certbot -q renew</pre>
<p>Para testar acesse: <a href="https://www.cdn77.com/tls-test/" rel="noopener" target="_blank">https://www.cdn77.com/tls-test/</a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste.png" data-rel="lightbox-gallery-lR33gqRR" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-300x182.png" alt="" width="300" height="182" class="alignnone size-medium wp-image-6158" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-300x182.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-1024x620.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-768x465.png 768w, https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste.png 1099w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Gostou?</p>
<p>Gostou?</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>Fontes:</strong> <a href="https://docs.nginx.com/" rel="noopener" target="_blank">https://docs.nginx.com/</a><br />
<a href="https://docs.nginx.com/nginx/admin-guide/web-server/web-server/" rel="noopener" target="_blank">https://docs.nginx.com/nginx/admin-guide/web-server/web-server/</a></p>
<p>O post <a href="https://blog.remontti.com.br/7460">Servidor WEB NGINX + PHP 8.2 + MariaDB + phpMyAdmin + Let’s Encrypt Debian 12 Bookworm (LNMP)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/7460/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Guia passo a passo para instalação do phpIPAM, um Software de Gerenciamento de Endereços IP</title>
		<link>https://blog.remontti.com.br/2401</link>
					<comments>https://blog.remontti.com.br/2401#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Mon, 12 Jun 2023 15:40:55 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[administração]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[aplicação]]></category>
		<category><![CDATA[Código Aberto]]></category>
		<category><![CDATA[Configuração]]></category>
		<category><![CDATA[configuração de endereços IPs]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[debain]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[documentação]]></category>
		<category><![CDATA[endereços IPs]]></category>
		<category><![CDATA[ferramenta]]></category>
		<category><![CDATA[gerenciamento]]></category>
		<category><![CDATA[gerenciamento de IP]]></category>
		<category><![CDATA[gerenciamento de rede]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[instalaçao]]></category>
		<category><![CDATA[instalação do phpIPAM]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[IPAM]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php7]]></category>
		<category><![CDATA[phpIPAM]]></category>
		<category><![CDATA[rede]]></category>
		<category><![CDATA[servidor de DHCP]]></category>
		<category><![CDATA[servidor dns]]></category>
		<category><![CDATA[Servidor WEB]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[tutorial banco de dados]]></category>
		<category><![CDATA[tutorial de configuração]]></category>
		<category><![CDATA[tutorial de gerenciamento]]></category>
		<category><![CDATA[tutorial de instalação]]></category>
		<category><![CDATA[tutorial Debian]]></category>
		<category><![CDATA[tutorial MariaDB.]]></category>
		<category><![CDATA[tutorial MySQL]]></category>
		<category><![CDATA[tutorial passo a passo]]></category>
		<category><![CDATA[tutorial phpIPAM]]></category>
		<category><![CDATA[tutorial servidor web]]></category>
		<category><![CDATA[tutorial software de gerenciamento]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=2401</guid>

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

					<description><![CDATA[<p>Distribuição utilizada: &#8211; Debian 12 Bookworm / Instalação Limpa 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&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7496">Servidor WEB Apache2 + PHP 8.2 + MariaDB +Let’s Encrypt Debian 12 Bookworm (LAMP)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><center><a href="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12.jpg" data-rel="lightbox-gallery-xv9ZaJzk" 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.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-7503" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/lamp_debian_12-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></a></center></p>
<p>Distribuição utilizada:<br />
&#8211; <strong><a href="https://blog.remontti.com.br/7236" rel="noopener noreferrer" target="_blank">Debian 12 Bookworm / Instalação Limpa</a></strong></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>
<h3>:: Instalação do Apache2 ::</h3>
<pre class="remontti-code"># apt install apache2 apache2-utils -y</pre>
<p>Após a instação, habilitamos o <strong>mod_rewrite</strong> do Apache que é muito utilizado. Este é um módulo que utiliza um mecanismo baseado em regras de reescrita. (phpipa, wordpress todos usam), e o <strong>mod_headers</strong> Este módulo fornece diretivas para controlar e modificar os cabeçalhos de solicitação e resposta HTTP. Comando para habilita-lo:</p>
<pre class="remontti-code"># a2enmod rewrite ; a2enmod headers</pre>
<p>A página que vimos ao abri o ip do nosso servidor no navegador fica no diretório /var/www/html, isso está sendo informado no arquivo default do apache que fica em /etc/apache2/sites-enabled/000-default.conf, e para que nosso mod_rewrite e headers funcione corretamente será necessário adicionar alguma linhas.<br />
O HTTP Strict Transport Security ou HSTS (RFC 6797) é um novo padrão de segurança SSL aprovado recentemente pelo IETF. Ele traz diversas melhorias para o SSL como forçar a utilização do HTTPS impedindo que sites sejam acessados usando o protocolo HTTP ou que partes do código de um site que está usando HTTPS seja executado em servidores usando o HTTP entre outras.</p>
<pre class="remontti-code"># vim /etc/apache2/sites-enabled/000-default.conf</pre>
<p>Adicione abaixo de &#8220;DocumentRoot /var/www/html&#8221; o seguinte:</p>
<pre class="remontti-code">
	Header always set Strict-Transport-Security &quot;max-age=63072000; includeSubDomains&quot;

	&lt;Directory /var/www/html/&gt;
    		Options FollowSymLinks
    		AllowOverride All
	&lt;/Directory&gt;</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2021/10/apache_HSTS.png" data-rel="lightbox-gallery-xv9ZaJzk" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/apache_HSTS-300x281.png" alt="" width="300" height="281" class="alignnone size-medium wp-image-6154" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/apache_HSTS-300x281.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/10/apache_HSTS-768x720.png 768w, https://blog.remontti.com.br/wp-content/uploads/2021/10/apache_HSTS.png 1024w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Para você aprender mais como o apache funciona recomendo: <strong><a href="https://blog.remontti.com.br/3464" rel="noopener" target="_blank">Como ter diversos sub/domínios no mesmo servidor</a></strong></p>
<p>Por segurança remova a assinatura do apache e reinicie o apache2 para que tenha efeito as nossas alterações.</p>
<pre class="remontti-code"># 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>
<p><strong>http://[SERVER_IP]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2021/10/apache2.png" data-rel="lightbox-gallery-xv9ZaJzk" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/apache2-150x150.png" alt="" width="150" height="150" class="alignnone size-thumbnail wp-image-5897" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/apache2-150x150.png 150w, https://blog.remontti.com.br/wp-content/uploads/2021/10/apache2-80x80.png 80w, https://blog.remontti.com.br/wp-content/uploads/2021/10/apache2-320x320.png 320w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a></p>
<h3>:: Instalação do PHP 8.2 ::</h3>
<p>Para instalação do PHP vou incluir algumas extensões que são as mais utilizada, mas seu preferir você pode optar em não instalar, as necessárias são libapache2-mod-php php php-mysql php-cli.</p>
<pre class="remontti-code"># apt install 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>É necessário reiniciar o apache para que o php tenha efeito.</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>Consultado informações de versão:</p>
<pre class="remontti-code"># php --version</pre>
<pre class="remontti-code-plain">
PHP 8.2.7 (cli) (built: Jun  9 2023 19:37:27) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.7, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.7, Copyright (c), by Zend Technologies
</pre>
<p>Você pode criar um arquivo php com a função <a href="https://php.net/manual/pt_BR/function.phpinfo.php" rel="noopener noreferrer" target="_blank">phpinfo()</a> para mostrar todas as informações.</p>
<pre class="remontti-code"># echo &#039;&lt;?php phpinfo(); ?&gt;&#039; &gt; /var/www/html/phpinfo.php</pre>
<p><strong>http://[SERVER_IP]/phpinfo.php</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2023/06/debian12_php8.2.png" data-rel="lightbox-gallery-xv9ZaJzk" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2023/06/debian12_php8.2-300x292.png" alt="" width="300" height="292" class="alignnone size-medium wp-image-7417" srcset="https://blog.remontti.com.br/wp-content/uploads/2023/06/debian12_php8.2-300x292.png 300w, https://blog.remontti.com.br/wp-content/uploads/2023/06/debian12_php8.2-768x748.png 768w, https://blog.remontti.com.br/wp-content/uploads/2023/06/debian12_php8.2.png 950w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h3>:: Instalação do MariaDB 10.11 + phpMyAdmin 5 ::</h3>
<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-xv9ZaJzk" 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-xv9ZaJzk" 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-xv9ZaJzk" 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-xv9ZaJzk" 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-xv9ZaJzk" 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>Por segurança eu sempre fecho o acesso ao phpmyadmin para os IPs da administração, assim evito que uma possível vulnerabilidade venha me afetar. Para isso edite:</p>
<pre class="remontti-code"># vim /etc/phpmyadmin/apache.conf</pre>
<p>Se deseja deixar o atalho para o phpmyadmin restrito apenas aos seus IP de gerencia faça da seguinte forma. Lembre-se de alterar os IPs 200.200.200.0/26 2001:db8:cafe:d0ce::/64 para os seus.</p>
<pre class="remontti-code"># phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

&lt;Directory /usr/share/phpmyadmin&gt;
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php

    # Restrito aos IPs
    AllowOverride All
    Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe:d0ce::/64

    # limit libapache2-mod-php to files and directories necessary by pma
    &lt;IfModule mod_php7.c&gt;
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/usr/share/doc/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/:/usr/share/javascript/
    &lt;/IfModule&gt;

    # PHP 8+
    &lt;IfModule mod_php.c&gt;
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/usr/share/doc/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/:/usr/share/javascript/
    &lt;/IfModule&gt;

&lt;/Directory&gt;

# Disallow web access to directories that don&#039;t need it
&lt;Directory /usr/share/phpmyadmin/templates&gt;
    Require all denied
&lt;/Directory&gt;
&lt;Directory /usr/share/phpmyadmin/libraries&gt;
    Require all denied
&lt;/Directory&gt;</pre>
<p>Reinicie o Apache.</p>
<pre class="remontti-code"> systemctl restart apache2</pre>
<h4>:: Definindo senha para o root do mariaDB ::</h4>
<p>Para aumentar a seguraçã 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>
<h3>:: Let&#8217;s Encrypt ::</h3>
<p>Criando certificado grátis para seus sub/domínios.</p>
<pre class="remontti-code"># apt install certbot python3-certbot-apache</pre>
<p>Para gerar o certificado use o comando:</p>
<pre class="remontti-code"># certbot</pre>
<p>Não esqueça de colocar no seu cron para ele renovar o certificado, pois a cada 90 ele expira. Neste exemplo todo dia primeiro tento renovar.</p>
<pre class="remontti-code"># certbot -q renew</pre>
<p>Para testar acesse: <a href="https://www.cdn77.com/tls-test/" rel="noopener" target="_blank">https://www.cdn77.com/tls-test/</a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste.png" data-rel="lightbox-gallery-xv9ZaJzk" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-300x182.png" alt="" width="300" height="182" class="alignnone size-medium wp-image-6158" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-300x182.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-1024x620.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-768x465.png 768w, https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste.png 1099w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Gostou?</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/7496">Servidor WEB Apache2 + PHP 8.2 + MariaDB +Let’s Encrypt Debian 12 Bookworm (LAMP)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/7496/feed</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados MariaDB/MySQL com Debian 11 Bullseye</title>
		<link>https://blog.remontti.com.br/6975</link>
					<comments>https://blog.remontti.com.br/6975#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 07 Dec 2022 18:47:28 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Bullseye]]></category>
		<category><![CDATA[certificado]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debina bullseye]]></category>
		<category><![CDATA[Fail2ban]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[ftp ftp]]></category>
		<category><![CDATA[ftpd]]></category>
		<category><![CDATA[guro seguro]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[pure-ftpd]]></category>
		<category><![CDATA[ssl ssl]]></category>
		<category><![CDATA[tls tls]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6975</guid>

					<description><![CDATA[<p>Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download. Requisito: Debian 11&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6975">Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados MariaDB/MySQL com Debian 11 Bullseye</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;">Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download.</p>
<p><span id="more-6975"></span><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd.jpg" alt="" width="1000" height="474" class="alignnone size-full wp-image-6981" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd.jpg 1000w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-768x364.jpg 768w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-520x245.jpg 520w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-720x340.jpg 720w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></p>
<p><strong>Requisito:</strong><br />
<a href="https://blog.remontti.com.br/5792" rel="noopener noreferrer" target="_blank">Debian 11 Instalação Limpa</a></p>
<p>Vire root de maneira correta no Debian 11!</p>
<pre class="remontti-code"># su -</pre>
<h3>Instalação do banco de dados MariaDB</h3>
<pre class="remontti-code"># apt install mariadb-server mariadb-client </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.</p>
<p><strong>Definindo senha para o root do mariaDB</strong><br />
Para aumentar a seguraçã 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>
<h3>Instalação do Pure FTP</h3>
<pre class="remontti-code"># apt install pure-ftpd-mysql</pre>
<p>Agora criaremos nosso grupo FTP (<em>grupoftp</em>) e usuário (<em>pureftpd</em>) para que nosso usuários virtuais sejam mapeados.</p>
<pre class="remontti-code"># groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c &quot;pureftpd user&quot; -g ftpgroup ftpuser</pre>
<pre class="remontti-code"># vim /etc/default/pure-ftpd-common</pre>
<p>altere</p>
<pre class="remontti-code">UPLOADUID=
UPLOADGID=</pre>
<p>para </p>
<pre class="remontti-code">UPLOADUID=2001
UPLOADGID=2001</pre>
<p>Próximo passo criar a nossa base de dados, onde ficaram armazenado as informações dos nossos usuários.</p>
<pre class="remontti-code"># mariadb -u root -p</pre>
<p>Entre com a senha de root criada anteriormente.  Não esqueça de alterar senha <strong>(SENHA_FTP_USER)</strong>.</p>
<pre class="remontti-code">CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#039;pureftpd&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SENHA_FTP_USER&#039;;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#039;pureftpd&#039;@&#039;localhost.localdomain&#039; IDENTIFIED BY &#039;SENHA_FTP_USER&#039;;
FLUSH PRIVILEGES;
</pre>
<p>Crie a tabela</p>
<pre class="remontti-code">USE pureftpd;

CREATE TABLE ftpd (
User varchar(16) NOT NULL default &#039;&#039;,
status enum(&#039;0&#039;,&#039;1&#039;) NOT NULL default &#039;0&#039;,
Password varchar(64) NOT NULL default &#039;&#039;,
Uid varchar(11) NOT NULL default &#039;-1&#039;,
Gid varchar(11) NOT NULL default &#039;-1&#039;,
Dir varchar(128) NOT NULL default &#039;&#039;,
ULBandwidth smallint(5) NOT NULL default &#039;0&#039;,
DLBandwidth smallint(5) NOT NULL default &#039;0&#039;,
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default &#039;*&#039;,
QuotaSize smallint(5) NOT NULL default &#039;0&#039;,
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
);

EXIT;
</pre>
<p>Salve o arquivo original /etc/pure-ftpd/db/mysql.conf e crie um novo com novas configurações, mais uma vez preste atenção a senha [SENHA_FTP_USER].</p>
<pre class="remontti-code"># mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
# vim /etc/pure-ftpd/db/mysql.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code">MYSQLSocket /var/run/mysqld/mysqld.sock
MYSQLUser pureftpd
MYSQLPassword SENHA_FTP_USER
MYSQLDatabase pureftpd
MYSQLCrypt md5
MYSQLGetPW SELECT Password FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetUID SELECT Uid FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetGID SELECT Gid FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetDir SELECT Dir FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)</pre>
<p>Esteja certo que você mudou o campo MYSQLPassword &#8216;SENHA_FTP_USER&#8217;</p>
<p>A configuração <strong>ChrootEveryone</strong> fará com que o PureFTPd faça chroot em todos os usuários virtuais em seu diretório pessoal, para que ele não consiga procurar diretórios e arquivos fora do diretório pessoal. A linha <strong>CreateHomeDir</strong> fará com que o PureFTPd crie o diretório inicial de um usuário quando o usuário efetuar login e o diretório inicial ainda não existir.</p>
<pre class="remontti-code"># echo yes &gt; /etc/pure-ftpd/conf/ChrootEveryone
# echo yes &gt; /etc/pure-ftpd/conf/CreateHomeDir
# echo 1 &gt; /etc/pure-ftpd/conf/TLS
# echo HIGH &gt; /etc/pure-ftpd/conf/TLSCipherSuite</pre>
<p>Gere os certificados.</p>
<pre class="remontti-code"># openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048
# openssl req -x509 -nodes -newkey rsa:2048 -sha256 -keyout \
  /etc/ssl/private/pure-ftpd.pem \
  -out /etc/ssl/private/pure-ftpd.pem
# chmod 600 /etc/ssl/private/*.pem</pre>
<p>Vamos criar agora um usuário, Qual ficará dentro do diretório <strong>/var/pure-ftpd/ </strong> onde vou deixar todos meus usuários criado, porém você pode escolher qualquer diretório, usarei a pasta /var/ pois seria o &#8220;lugar correto&#8221;.</p>
<p>Entre no mariadb com seu usuario pureftpd e senha para fazer a criação do usuário ftp, no meu ex vou criar o usuário chamado remontti.</p>
<pre class="remontti-code"># mysql -u pureftpd -p</pre>
<pre class="remontti-code">USE pureftpd;

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) 
VALUES (&#039;remontti&#039;, &#039;1&#039;, MD5(&#039;SUA_SENHA&#039;), &#039;2001&#039;, &#039;2001&#039;, &#039;/var/pure-ftpd/remontti&#039;, &#039;100&#039;, &#039;100&#039;, &#039;&#039;, &#039;*&#039;, &#039;50&#039;, &#039;0&#039;);

SELECT * FROM ftpd;
EXIT;</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb.png" data-rel="lightbox-gallery-TYePo15w" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb.png" alt="" width="2076" height="896" class="alignnone size-full wp-image-6984" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb.png 2076w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb-300x129.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb-1024x442.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb-768x331.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb-1536x663.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb-2048x884.png 2048w" sizes="auto, (max-width: 2076px) 100vw, 2076px" /></a><br />
Limpe o histórico do mariadb. Não queremos ninguém vendo o q digitamos lá <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"># &gt; /root/.mysql_history</pre>
<p>Ao fazer login o diretório /var/pure-ftpd/USUARIO será criado automaticamente.</p>
<p>Restarte o serviço e verifique o status do mesmo</p>
<pre class="remontti-code"># systemctl restart pure-ftpd-mysql
# systemctl status pure-ftpd-mysql</pre>
<p>Sempre que você queira criar um novo usuário, você tem que criar uma entrada na tabela ftpd.<br />
Explicando a estrutura da tabela:</p>
<p><strong>User:</strong> Seu usuário (ex. como no nosso usuário acima: teste).<br />
<strong>Status: </strong>0 ou 1. 0 deixará sua conta inativa, e o usuário não pode logar.<br />
<strong>Password:</strong> A senha do usuário. A senha está encriptada com MD5.<br />
<strong>UID:</strong> O userid do usuário ftp que você criou (ex: 2001)<br />
<strong>GID: </strong>O groupid do grupo ftp que você criou (ex: 2001).<br />
<strong>Dir:</strong> Diretório home do usuário (ex: /home/teste). Se não existir será criado quando logar pela primeira vez via FTP. O usuário será preso neste diretório home.<br />
<strong>ULBandwidth: </strong>Controle de Upload em KB/Sec. Use 0 para que seja ilimitado.<br />
<strong>DLBandwidth: </strong>Controle de Download em KB/sec. Use 0 para que seja ilimitado.<br />
<strong>Comment: </strong>Você pode inserir qualquer comentário (ex: Usuário da administração). Você deixa este campo limpo.<br />
<strong>Ipaccess: </strong>Você pode definir o ip que serão permitidos para conectar nesta conta FTP. Ou &#8216;*&#8217; para qualquer endereço IP.<br />
<strong>QuotaSize: </strong>Espaço de armazenamento em MB (não KB, como em ULBandwidth eDLBandwidth) Defina 0 como ilimitado.<br />
<strong>QuotaFiles:</strong> Número total de arquivos que este usuário poderá salvar. Defina 0 para ilimitado.</p>
<h3>Protegendo com Fail2ban</h3>
<pre class="remontti-code"># apt install fail2ban
# echo yes &gt; /etc/pure-ftpd/conf/DontResolve
# vim /etc/fail2ban/jail.d/defaults-debian.conf</pre>
<p>Adicione o filtro pure-ftpd.</p>
<pre class="remontti-code">[sshd]
enabled = true
[pure-ftpd]
enabled = true</pre>
<p>Restarte o fail2ban</p>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<p>Se você tiver interesse em ter uma interface web para gerenciamento recomendo:<br />
<a href="https://blog.remontti.com.br/5893" rel="noopener noreferrer" target="_blank">Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin + Let’s Encrypt no Debian 11 bullseye “LAMP”</a></p>
<p>Gostou?</p>
<p>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!<br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>Fonte:<a href="http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL" rel="noopener noreferrer" target="_blank"> http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL</a></p>
<p>O post <a href="https://blog.remontti.com.br/6975">Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados MariaDB/MySQL com Debian 11 Bullseye</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6975/feed</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação FreeRadius no Debian 11 Bullseye (Extra sqlippool)</title>
		<link>https://blog.remontti.com.br/6129</link>
					<comments>https://blog.remontti.com.br/6129#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 26 Nov 2021 20:11:30 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Bullseye]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[freeradius]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6129</guid>

					<description><![CDATA[<p>Esse tutorial é ideal para provedores que desejam criar seu próprio sistema de autenticação com freeradius, fazendo autenticação do tipo PPPoE, hotspot, Wireless (PSK/EAP) entre outras. Neste tutorial iremos instalar e configurar o FreeRadius&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6129">Instalação FreeRadius no Debian 11 Bullseye (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/2021/11/freeradius-3-debian11.png" alt="" width="900" height="428" class="alignnone size-full wp-image-6136" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/11/freeradius-3-debian11.png 900w, https://blog.remontti.com.br/wp-content/uploads/2021/11/freeradius-3-debian11-300x143.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/11/freeradius-3-debian11-768x365.png 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /><br />
Esse tutorial é ideal para provedores que desejam criar seu próprio sistema de autenticação com freeradius, fazendo autenticação do tipo PPPoE, hotspot, Wireless (PSK/EAP)  entre outras.</p>
<p>Neste tutorial iremos instalar e configurar o FreeRadius 3.0.x. </p>
<p><strong>REQUISITOS</strong><br />
1 – <a href="https://blog.remontti.com.br/5792" rel="noopener noreferrer" target="_blank">Debian 11 Bullseye &#8211; Instalação limpa</a><br />
2 – <a href="https://blog.remontti.com.br/5893" rel="noopener noreferrer" target="_blank">WEB Apache + PHP + MariaDB + phpMyAdmin “LAMP”</a> (Opcional)</p>
<p><strong>Instalação do FreeRadius 3.0.`>21`</strong><br />
Tenha primeiramente o MariaDB instalado <a href="https://blog.remontti.com.br/5893" rel="noopener" target="_blank">(Tutorial LAMP)</a>, então crie o banco de dados e usuário quais iremos utilizar para a integração com o Freeradius.</p>
<p>Abra o terminal de comando do MariaDB e crie a base e o usuario chamados de radius e defina a senha para este usuário.</p>
<pre class="remontti-code"># mariadb -u root -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 o banco de dados radius criado iremos importar as tabelas padrões do freeradius:</p>
<pre class="remontti-code"># mariadb -u radius -p radius &lt; /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
# mariadb -u radius -p radius &lt; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/schema.sql</pre>
<p>Após comando será solicitado a senha do usuario radius (SENHA_USER_RADIUS).</p>
<p>Caso deseje logs mais detalhados (recomendo) edite o arquivo /etc/freeradius/3.0/radiusd.conf, mas antes faça um backup do mesmo.</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/radiusd.conf /etc/freeradius/3.0/radiusd.conf.orig
# vim /etc/freeradius/3.0/radiusd.conf</pre>
<p>Localize as variáveis e altere para yes  </p>
<pre class="remontti-code">[...]
log {
    [...]
        stripped_names = yes
        auth = yes
        auth_badpass = yes
        auth_goodpass = yes
    [...]
}
[...]</pre>
<p>Ajustaremos o <a href="https://wiki.freeradius.org/guide/SQL-HOWTO-for-freeradius-3.x-on-Debian-Ubuntu" rel="noopener noreferrer" target="_blank">mod SQL</a> para trabalhar com conexão do tipo mysql, e informamos os dados para conexão com o banco de dados. Arquivo /etc/freeradius/3.0/mods-available/sql.orig</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-available/sql.orig</pre>
<p>Usarei o comando <strong>sed</strong> para facilitar sua vida <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> mas preste atenção nos comandos, se desejar pode editar o arquivo manualmente e alterar as entradas.</p>
<pre class="remontti-code"># sed -i &#039;s/driver = &quot;rlm_sql_null&quot;/driver = &quot;rlm_sql_mysql&quot;/&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;s/dialect = &quot;sqlite&quot;/dialect = &quot;mysql&quot;/&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;/server = &quot;localhost&quot;/s/^#//g&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;/port = 3306/s/^#//g&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;/login = &quot;radius&quot;/s/^#//g&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;/password = &quot;radpass&quot;/s/^#//g&#039; /etc/freeradius/3.0/mods-available/sql
# sed -i &#039;/read_clients = yes/s/^#//g&#039; /etc/freeradius/3.0/mods-available/sql</pre>
<p>No próximo comando altere <strong>SENHA_USER_RADIUS</strong> para a senha de conexão do usuário radius.</p>
<pre class="remontti-code"># sed -i &#039;s/radpass/SENHA_USER_RADIUS/&#039; /etc/freeradius/3.0/mods-available/sql</pre>
<p>Habilite o mod:</p>
<pre class="remontti-code"># ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/sql</pre>
<p>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_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;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"># cp /etc/freeradius/3.0/sites-available/default  /etc/freeradius/3.0/sites-available/default.org</pre>
<pre class="remontti-code"># sed -i &#039;/digest/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/suffix/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/files/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/ldap/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/exec/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/detail/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/unix/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;/attr_filter.accounting_response/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;s/-sql/sql/&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;689 s/# *//&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;854,874 {s/^/##/}&#039; /etc/freeradius/3.0/sites-available/default</pre>
<p>Habilitando o mod <strong> <a href="http://sqlippool" rel="noopener noreferrer" target="_blank">sqlippool</a></strong><br />
Como o mod sqlippool você poderá ter sua pool de IPs direto no banco de dados.</p>
<pre class="remontti-code"># ln -s /etc/freeradius/3.0/mods-available/sqlippool /etc/freeradius/3.0/mods-enabled/sqlippool</pre>
<p>Vou alterar (Descomentando e comentado) a chave pool_key = "<strong>%{NAS-Port}</strong>" por "<strong>%{Calling-Station-Id}</strong>", desta forma a chave será o MAC, e "allow_duplicates = no" para não termos duplicidades de IPs. Mais adiante iremos também ajustar o allocate_clear.</p>
<pre class="remontti-code"># sed -i &#039;74 {s/^/#/}&#039; /etc/freeradius/3.0/mods-available/sqlippool
# sed -i &#039;75 s/# *//&#039; /etc/freeradius/3.0/mods-available/sqlippool
# sed -i &#039;67 s/# *//&#039; /etc/freeradius/3.0/mods-available/sqlippool</pre>
<p>Precisamos adicionar o mod sqlippool no nosso arquivo default, você acrescentará sqlippool em <strong>accounting</strong> {...} e <strong>post-auth</strong> {...} logo abaixo de <strong>sql</strong>: </p>
<pre class="remontti-code"># sed -i &#039;642i\    sqlippool&#039; /etc/freeradius/3.0/sites-available/default
# sed -i &#039;734i\    sqlippool&#039; /etc/freeradius/3.0/sites-available/default</pre>
<p>Verifique com o comando abaixo se a saída do seu arquivo ficou assim:</p>
<pre class="remontti-code"># cat /etc/freeradius/3.0/sites-enabled/default |grep -v &quot;#&quot; |awk &#039;NF&gt;0&#039;</pre>
<pre class="remontti-code-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
}
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
}
pre-proxy {
}
post-proxy {
        eap
}
}</pre>
<p>Faremos os ajustes no arquivo <strong>inner-tunnel</strong></p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/sites-available/inner-tunnel /etc/freeradius/3.0/sites-available/inner-tunnel.org</pre>
<pre class="remontti-code"># sed -i &#039;/suffix/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;/files/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;/-ldap/s/^/#/g&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;s/-sql/sql/&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;s/radutmp/#radutmp/&#039; /etc/freeradius/3.0/sites-available/inner-tunnel
# sed -i &#039;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 do seu arquivo ficou assim:</p>
<pre class="remontti-code"># cat /etc/freeradius/3.0/sites-enabled/inner-tunnel |grep -v &quot;#&quot; |awk &#039;NF&gt;0&#039;</pre>
<pre class="remontti-code-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>
<p>Uma alteração que acho válida é para que para cada alocação de <strong>IP</strong> ela seja <strong>randômica</strong>, isso pode solucionar alguns problemas como o balanceamento dos prefixo no seu BGP, ou daqueles clientes que jogam online, fazem download e até mesmo que estão sofrendo algum ataque. Assim ao reiniciar seu equipamento o mesmo irá receber um novo endereço IP. Para que funcione desta forma iremos apenas comentar algumas linhas e descomentar outras, pois em /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf variável <strong>allocate_find</strong> já vem com o modelo pronto <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<p>Comentar:</p>
<pre class="remontti-code"># sed -i &#039;41,53 {s/^/##/}&#039; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</pre>
<pre class="remontti-code-plain">##allocate_find = &quot;\
##  SELECT framedipaddress FROM ${ippool_table} \
##  WHERE pool_name = &#039;%{control:${pool_name}}&#039; \
##  AND ( \
##      expiry_time &lt; NOW() OR expiry_time IS NULL OR expiry_time = 0 \
##      OR ( nasipaddress = &#039;%{NAS-IP-Address}&#039; AND pool_key = &#039;${pool_key}&#039; ) \
##  ) \
##  ORDER BY \
##      (username &lt;&gt; &#039;%{User-Name}&#039;), \
##      (callingstationid &lt;&gt; &#039;%{Calling-Station-Id}&#039;), \
##      expiry_time \
##  LIMIT 1 \
##  FOR UPDATE&quot;</pre>
<p>Descomentar:</p>
<pre class="remontti-code"># sed -i &#039;74,81 s/# *//&#039; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</pre>
<pre class="remontti-code-plain">allocate_find = &quot;\
    SELECT framedipaddress FROM ${ippool_table} \
    WHERE pool_name = &#039;%{control:${pool_name}}&#039; \
    AND expiry_time IS NULL \
    ORDER BY \
        RAND() \
    LIMIT 1 \
    FOR UPDATE&quot;
</pre>
<p>Como alteramos a pool_key para Calling-Station-Id  em /etc/freeradius/3.0/mods-enabled/sqlippool vamos ajustar o <strong>allocate_clear</strong> para quando for liberar um IP use a chave pool_key e não a NAS, caso contrário ira liberar IPs indevidos que estão sendo utilizado por usuários ativos e assim evitamos que surjam IPs duplicados, para isso:</p>
<p>Comentar:</p>
<pre class="remontti-code"># sed -i &#039;26,35 {s/^/##/}&#039; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</pre>
<pre class="remontti-code-plain">##allocate_clear = &quot;\
##      UPDATE ${ippool_table} \
##      SET \
##              nasipaddress = &#039;&#039;, \
##              pool_key = 0, \
##              callingstationid = &#039;&#039;, \
##              username = &#039;&#039;, \
##              expiry_time = NULL \
##      WHERE expiry_time &lt;= NOW() - INTERVAL 1 SECOND \
##      AND nasipaddress = &#039;%{%{Nas-IP-Address}:-%{Nas-IPv6-Address}}&#039;&quot;</pre>
<p>Descomentar</p>
<pre class="remontti-code"># sed -i &#039;10,18 s/# *//&#039; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</pre>
<pre class="remontti-code-plain">allocate_clear = &quot;\
        UPDATE ${ippool_table} \
        SET \
                nasipaddress = &#039;&#039;, \
                pool_key = 0, \
                callingstationid = &#039;&#039;, \
                username = &#039;&#039;, \
                expiry_time = NULL \
        WHERE pool_key = &#039;${pool_key}&#039;&quot;</pre>
<p>É interessante você ajustar o tempo <strong>lease_duration = 1200</strong> no arquivo /etc/freeradius/3.0/mods-available/sqlippool talvez para um menor intervalo,porém sempre respeitando que o <strong>Acct-Interim-Interval</strong> seja um tempo menor, para não ter duplicidades de ips. Falo sobre isso no tutorial <a href="https://blog.remontti.com.br/4085" rel="noopener noreferrer" target="_blank">https://blog.remontti.com.br/4085</a> recomendo a leitura!</p>
<p>Caso você tenha uma alta demanda de requisições você pode fazer algumas alterações no radiusd.conf.<br />
Altere conforme sua necessidade, e hardware de seu servidor. Vale lembrar que fazendo essas alterações pode ser necessário alterar o limite de conexões ao MariaDB. Não abuse nessas configurações recomendo ler a documentação.</p>
<pre class="remontti-code"># vim /etc/freeradius/3.0/radiusd.conf</pre>
<p>Você pode começar dobrando os valores, ex.:</p>
<pre class="remontti-code">[...]
thread pool {
        start_servers = 10
        max_servers = 64
        min_spare_servers = 6
        max_spare_servers = 20
        max_queue_size = 131072
        max_requests_per_server = 0
        auto_limit_acct = no
}
[...]</pre>
<h3>Finalizando</h3>
<p>Habilite o freeradius para começar junto com a inicialização do sistema</p>
<pre class="remontti-code"># systemctl enable freeradius</pre>
<p>Pare o serviço e inicie em modo debug</p>
<pre class="remontti-code"># systemctl stop freeradius
# freeradius -X</pre>
<p>Se nenhum erro acontecer uma mensagem com: <strong>Ready to process requests</strong> aparecer parabéns seu freeradius está funcionando. Através do comando debug você consegue acompanhar as ações que o freeradius irá fazer, ótimo para estudos e entendimento. Para encerrar o modo debig use Crtl+c, e então inicie o serviço de forma normal.</p>
<pre class="remontti-code"># systemctl start freeradius</pre>
<p>Para <strong>integrar</strong> seu servidor freeradius para fazer autenticações PPPoE, Hotspot, Wireless PSK/EAP entre outras, você precisa aprender mais sobre as <strong>tabelas</strong> do <strong>banco de dados</strong> e quais <strong>atributos</strong> usar em cada situação sempre pensando na segurança. Você pode acessar <a href="https://blog.remontti.com.br/4085" rel="noopener noreferrer" target="_blank">https://blog.remontti.com.br/4085</a> onde irá encontra alguns modelos de autenticação que atente praticamente todos os cenários de provedores. </p>
<p>Gostou? Quer me ajudar? <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Participe do canal no <a href="https://t.me/blogremontti" rel="noopener noreferrer" target="_blank">telegram</a> para ficar atualizado sempre que publicar um novo tutorial. </p>
<p>Abraço!</p>
<p><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/6129">Instalação FreeRadius no Debian 11 Bullseye (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/6129/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Entendendo o funcionamento do FreeRadius e fazendo autenticações PPPoE, Hotspot e Wireless PSK/EAP (Lab Mikrotik/Ubiquiti)</title>
		<link>https://blog.remontti.com.br/4085</link>
					<comments>https://blog.remontti.com.br/4085#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 13 Mar 2020 20:33:59 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[autenticação]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[eap]]></category>
		<category><![CDATA[freeradius]]></category>
		<category><![CDATA[hotspot]]></category>
		<category><![CDATA[laboratório]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[pppoe]]></category>
		<category><![CDATA[psk]]></category>
		<category><![CDATA[radius]]></category>
		<category><![CDATA[ubiquiti]]></category>
		<category><![CDATA[wireless]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=4085</guid>

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

					<description><![CDATA[<p>Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download. Requisito: Debian 10&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3865">Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados (MariaDB) usando Debian 10</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;">Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download.</p>
<p><span id="more-3865"></span><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp.jpg" alt="" width="1000" height="474" class="alignnone size-full wp-image-3876" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp.jpg 1000w, https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp-768x364.jpg 768w, https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp-520x245.jpg 520w, https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp-720x340.jpg 720w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></p>
<p><strong>Requisito:</strong><br />
<a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Debian 10 Stretch / Instalação Limpa</a></p>
<p>Vire root de maneira correta no Debian 10!</p>
<pre class="remontti-code"># su -</pre>
<h3>Instalação do banco de dados MariaDB</h3>
<pre class="remontti-code"># apt install mariadb-server mariadb-client </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.<br />
Assim, você pode logar diretamente sem fornecer a senha root do MariaDB. Mas isso é estranho, pois minha senha do root do MariaDB é diferente do meu usuário unix.<br />
Bom se você é meio paranoico com segurança, para alterar a senha do usuário root do MariaDB de forma bruta faça o seguinte:</p>
<pre class="remontti-code"># mariadb -u root</pre>
<pre class="remontti-code">USE mysql;
UPDATE user SET password=PASSWORD(&#039;SENHA_DB_ROOT&#039;) WHERE User=&#039;root&#039;;
UPDATE user SET plugin=&quot;mysql_native_password&quot;;
FLUSH PRIVILEGES;
quit;</pre>
<h3>Instalação do Pure FTP</h3>
<pre class="remontti-code"># apt install pure-ftpd-mysql</pre>
<p>Agora criaremos nosso grupo FTP (<em>grupoftp</em>) e usuário (<em>pureftpd</em>) para que nosso usuários virtuais sejam mapeados.</p>
<pre class="remontti-code"># groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c &quot;pureftpd user&quot; -g ftpgroup ftpuser</pre>
<pre class="remontti-code"># vim /etc/default/pure-ftpd-common</pre>
<p>altere</p>
<pre class="remontti-code">UPLOADUID=
UPLOADGID=</pre>
<p>para </p>
<pre class="remontti-code">UPLOADUID=2001
UPLOADGID=2001</pre>
<p>Próximo passo criar a nossa base de dados, onde ficaram armazenado as informações dos nossos usuários.</p>
<pre class="remontti-code"># mariadb -u root -p</pre>
<p>Entre com a senha de root criada anteriormente.  Não esqueça de alterar senha <strong>(SENHA_FTP_USER)</strong>.</p>
<pre class="remontti-code">CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#039;pureftpd&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SENHA_FTP_USER&#039;;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#039;pureftpd&#039;@&#039;localhost.localdomain&#039; IDENTIFIED BY &#039;SENHA_FTP_USER&#039;;
FLUSH PRIVILEGES;
</pre>
<p>Crie a tabela</p>
<pre class="remontti-code">USE pureftpd;

CREATE TABLE ftpd (
User varchar(16) NOT NULL default &#039;&#039;,
status enum(&#039;0&#039;,&#039;1&#039;) NOT NULL default &#039;0&#039;,
Password varchar(64) NOT NULL default &#039;&#039;,
Uid varchar(11) NOT NULL default &#039;-1&#039;,
Gid varchar(11) NOT NULL default &#039;-1&#039;,
Dir varchar(128) NOT NULL default &#039;&#039;,
ULBandwidth smallint(5) NOT NULL default &#039;0&#039;,
DLBandwidth smallint(5) NOT NULL default &#039;0&#039;,
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default &#039;*&#039;,
QuotaSize smallint(5) NOT NULL default &#039;0&#039;,
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
);

quit; 
</pre>
<p>Salve o arquivo original /etc/pure-ftpd/db/mysql.conf e crie um novo com novas configurações, mais uma vez preste atenção a senha [SENHA_FTP_USER].</p>
<pre class="remontti-code"># mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
# vim /etc/pure-ftpd/db/mysql.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code">MYSQLSocket /var/run/mysqld/mysqld.sock
MYSQLUser pureftpd
MYSQLPassword SENHA_FTP_USER
MYSQLDatabase pureftpd
MYSQLCrypt md5
MYSQLGetPW SELECT Password FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetUID SELECT Uid FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetGID SELECT Gid FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetDir SELECT Dir FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)</pre>
<p>Esteja certo que você mudou o campo MYSQLPassword &#8216;SENHA_FTP_USER&#8217;</p>
<p>A configuração <strong>ChrootEveryone</strong> fará com que o PureFTPd faça chroot em todos os usuários virtuais em seu diretório pessoal, para que ele não consiga procurar diretórios e arquivos fora do diretório pessoal. A linha <strong>CreateHomeDir</strong> fará com que o PureFTPd crie o diretório inicial de um usuário quando o usuário efetuar login e o diretório inicial ainda não existir.</p>
<pre class="remontti-code"># echo yes &gt; /etc/pure-ftpd/conf/ChrootEveryone
# echo yes &gt; /etc/pure-ftpd/conf/CreateHomeDir
# echo 1 &gt; /etc/pure-ftpd/conf/TLS
# echo HIGH &gt; /etc/pure-ftpd/conf/TLSCipherSuite</pre>
<p>Gere os certificados.</p>
<pre class="remontti-code"># openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048
# openssl req -x509 -nodes -newkey rsa:2048 -sha256 -keyout \
  /etc/ssl/private/pure-ftpd.pem \
  -out /etc/ssl/private/pure-ftpd.pem
# chmod 600 /etc/ssl/private/*.pem</pre>
<p>Vamos criar agora um usuário, Qual ficará dentro do diretório <strong>/var/pure-ftpd/ </strong> onde vou deixar todos meus usuários criado, porém você pode escolher qualquer diretório, usarei a pasta /var/ pois seria o &#8220;lugar correto&#8221;.</p>
<p>Entre no mariadb com seu usuario pureftpd e senha para fazer a criação do usuário ftp, no meu ex vou criar o usuário chamado remontti.</p>
<pre class="remontti-code"># mysql -u pureftpd -p</pre>
<pre class="remontti-code">USE pureftpd;

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) 
VALUES (&#039;remontti&#039;, &#039;1&#039;, MD5(&#039;SUA_SENHA&#039;), &#039;2001&#039;, &#039;2001&#039;, &#039;/var/pure-ftpd/remontti&#039;, &#039;100&#039;, &#039;100&#039;, &#039;&#039;, &#039;*&#039;, &#039;50&#039;, &#039;0&#039;);

quit;</pre>
<p>Limpe o histórico do mariadb. Não queremos ninguém vendo o q digitamos lá <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"># echo &gt; /root/.mysql_history</pre>
<p>Ao fazer login o diretório /var/pure-ftpd/USUARIO será criado automaticamente.</p>
<p>Restarte o serviço e verifique o status do mesmo</p>
<pre class="remontti-code"># systemctl restart pure-ftpd-mysql
# systemctl status pure-ftpd-mysql</pre>
<p>Sempre que você queira criar um novo usuário, você tem que criar uma entrada na tabela ftpd.<br />
Explicando a estrutura da tabela:</p>
<p><strong>User:</strong> Seu usuário (ex. como no nosso usuário acima: teste).<br />
<strong>Status: </strong>0 ou 1. 0 deixará sua conta inativa, e o usuário não pode logar.<br />
<strong>Password:</strong> A senha do usuário. A senha está encriptada com MD5.<br />
<strong>UID:</strong> O userid do usuário ftp que você criou (ex: 2001)<br />
<strong>GID: </strong>O groupid do grupo ftp que você criou (ex: 2001).<br />
<strong>Dir:</strong> Diretório home do usuário (ex: /home/teste). Se não existir será criado quando logar pela primeira vez via FTP. O usuário será preso neste diretório home.<br />
<strong>ULBandwidth: </strong>Controle de Upload em KB/Sec. Use 0 para que seja ilimitado.<br />
<strong>DLBandwidth: </strong>Controle de Download em KB/sec. Use 0 para que seja ilimitado.<br />
<strong>Comment: </strong>Você pode inserir qualquer comentário (ex: Usuário da administração). Você deixa este campo limpo.<br />
<strong>Ipaccess: </strong>Você pode definir o ip que serão permitidos para conectar nesta conta FTP. Ou &#8216;*&#8217; para qualquer endereço IP.<br />
<strong>QuotaSize: </strong>Espaço de armazenamento em MB (não KB, como em ULBandwidth eDLBandwidth) Defina 0 como ilimitado.<br />
<strong>QuotaFiles:</strong> Número total de arquivos que este usuário poderá salvar. Defina 0 para ilimitado.</p>
<h3>Protegendo com Fail2ban</h3>
<pre class="remontti-code"># apt install fail2ban
# echo yes &gt; /etc/pure-ftpd/conf/DontResolve
# vim /etc/fail2ban/jail.d/defaults-debian.conf</pre>
<p>Adicione o filtro pure-ftpd.</p>
<pre class="remontti-code">[sshd]
enabled = true
[pure-ftpd]
enabled = true</pre>
<p>Restarte o fail2ban</p>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<p>Se você tiver interesse em ter uma interface web para gerenciamento recomendo:<br />
<a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP”</a></p>
<p>Gostou?</p>
<p>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!<br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>Fonte:<a href="http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL" rel="noopener noreferrer" target="_blank"> http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL</a></p>
<p>O post <a href="https://blog.remontti.com.br/3865">Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados (MariaDB) usando Debian 10</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3865/feed</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação do Zabbix 4.2 no Debian 10 Buster</title>
		<link>https://blog.remontti.com.br/3032</link>
					<comments>https://blog.remontti.com.br/3032#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 16 Jul 2019 20:15:48 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[debian 10]]></category>
		<category><![CDATA[debian10]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[telegram]]></category>
		<category><![CDATA[zabbix]]></category>
		<category><![CDATA[zabbix 4.2]]></category>
		<category><![CDATA[zabbix 4.4]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3032</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/3032">Instalação do Zabbix 4.2 no Debian 10 Buster</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![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 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>
<p>Requisitos:<br />
<a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">* Debian 10 (Buster) -> Instalação Limpa</a><br />
<a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">* Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster &#8220;LAMP&#8221;</a></p>
<p>Para instalação do Zabbix vamos incluir o repositório do oficial do Zabbix.</p>
<pre class="remontti-code"># su -
# cd /tmp</pre>
<p>Versão 4.2</strong></p>
<pre class="remontti-code"># wget https://repo.zabbix.com/zabbix/4.2/debian/pool/main/z/zabbix-release/zabbix-release_4.2-1+buster_all.deb
# dpkg -i zabbix-release_4.2-1+buster_all.deb</pre>
<p>Atualize o repositório e realize a instalação </p>
<pre class="remontti-code"># apt update ; apt upgrade
# apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent</pre>
<p>Vamos criar uma base de dados chamada <strong>zabbix</strong> e um usuário também chamado de zabbix no MariaDB.<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"># mariadb -u root -p</pre>
<pre class="remontti-code">CREATE DATABASE zabbix CHARACTER SET utf8 collate utf8_bin;
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY &#039;SUA_SENHA&#039;;
FLUSH PRIVILEGES;
EXIT;</pre>
<p>Na versão do MariaDB 10.3.17 está apresentando um &#8220;problema&#8221; ao importar a base de dados do zabbix.<br />
<strong>ERROR 1118 (42000) at line 1284: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.</strong><br />
Verifique se sua versão é a 10.3.17</p>
<pre class="remontti-code"># mariadb --version
mariadb  Ver 15.1 Distrib 10.3.17-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2</pre>
<p>Se sim uma solução de momento é editar:</p>
<pre class="remontti-code"># vim /etc/mysql/mariadb.conf.d/50-server.cnf</pre>
<p>adicione a baixo de <strong>[mysqld]</strong></p>
<pre class="remontti-code">innodb_strict_mode = 0</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/Row-size-too-large.png" data-rel="lightbox-gallery-clthExZV" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/Row-size-too-large-300x221.png" alt="" width="300" height="221" class="alignnone size-medium wp-image-3537" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/Row-size-too-large-300x221.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/Row-size-too-large.png 715w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Restarte o mariadb</p>
<pre class="remontti-code"># systemctl restart mariadb</pre>
<p>Importe o esquema de tabelas e dados padrões. (Demora um pouco!)</p>
<pre class="remontti-code"># zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix</pre>
<p>Digite a senha de seu usuário zabbix criada no passo anterior para importar as tabelas.</p>
<p>Agora que você já importou sem erros, edite novamente o <strong>/etc/mysql/mariadb.conf.d/50-server.cnf</strong> e remova a linha com <strong>innodb_strict_mode = 0</strong></p>
<pre class="remontti-code"># vim /etc/mysql/mariadb.conf.d/50-server.cnf</pre>
<p><del datetime="2019-09-11T20:12:26+00:00">innodb_strict_mode = 0</del></p>
<p>Edite o arquivo zabbix_server.conf para informar os dados para conexão com o MySQL.</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=SUA_SENHA
#...</pre>
<pre class="remontti-code"># vim /etc/apache2/conf-enabled/zabbix.conf</pre>
<p>Procure por: <strong># php_value date.timezone Europe/Riga</strong> e <a href="https://secure.php.net/manual/pt_BR/timezones.america.php" rel="noopener noreferrer" target="_blank">altere pela sua região</a>.<br />
Ex:</p>
<pre class="remontti-code">php_value date.timezone America/Sao_Paulo</pre>
<p>Após a alteração será necessário o reiniciar o apache.</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>Iniciando o Zabbix Server e Agente junto com a inicialização do sistema.</p>
<pre class="remontti-code"># systemctl enable zabbix-server
# systemctl enable zabbix-agent
# systemctl restart zabbix-server
# systemctl restart zabbix-agent</pre>
<p><center><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-1.png" data-rel="lightbox-gallery-clthExZV" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-1-1024x530.png" alt="" width="1024" height="530" class="alignnone size-large wp-image-3036" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-1-1024x530.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-1-300x155.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-1-768x397.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-1.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-2.png" data-rel="lightbox-gallery-clthExZV" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-2-1024x798.png" alt="" width="1024" height="798" class="alignnone size-large wp-image-3037" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-2-1024x798.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-2-300x234.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-2-768x599.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-2.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-3.png" data-rel="lightbox-gallery-clthExZV" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-3-1024x500.png" alt="" width="1024" height="500" class="alignnone size-large wp-image-3038" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-3-1024x500.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-3-300x146.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-3-768x375.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-3.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-4.png" data-rel="lightbox-gallery-clthExZV" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-4-1024x500.png" alt="" width="1024" height="500" class="alignnone size-large wp-image-3039" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-4-1024x500.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-4-300x146.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-4-768x375.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-4.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-5.png" data-rel="lightbox-gallery-clthExZV" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-5-1024x500.png" alt="" width="1024" height="500" class="alignnone size-large wp-image-3040" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-5-1024x500.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-5-300x146.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-5-768x375.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-5.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6.png" data-rel="lightbox-gallery-clthExZV" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6-1024x500.png" alt="" width="1024" height="500" class="alignnone size-large wp-image-3041" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6-1024x500.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6-300x146.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6-768x375.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6.png" data-rel="lightbox-gallery-clthExZV" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6-1024x500.png" alt="" width="1024" height="500" class="alignnone size-large wp-image-3041" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6-1024x500.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6-300x146.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6-768x375.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-6.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
Logue com <strong>Admin</strong> senha <strong>zabbix</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-7.png" data-rel="lightbox-gallery-clthExZV" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-7-1024x500.png" alt="" width="1024" height="500" class="alignnone size-large wp-image-3042" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-7-1024x500.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-7-300x146.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-7-768x375.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-7.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-8.png" data-rel="lightbox-gallery-clthExZV" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-8-1024x724.png" alt="" width="1024" height="724" class="alignnone size-large wp-image-3043" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-8-1024x724.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-8-300x212.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-8-768x543.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/zabbix-4.2-debian-10-buster-8.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
</center><br />
Você pode gostar de:<br />
<a href="https://blog.remontti.com.br/3053" rel="noopener noreferrer" target="_blank">Zabbix 4 + Alertas no Telegram via Bot</a></p>
<p>Gostou?</p>
<p><center><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></center></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>Fonte: https://www.zabbix.com/documentation/</p>
<p>O post <a href="https://blog.remontti.com.br/3032">Instalação do Zabbix 4.2 no Debian 10 Buster</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3032/feed</wfw:commentRss>
			<slash:comments>35</slash:comments>
		
		
			</item>
		<item>
		<title>Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster &#8220;LAMP&#8221;</title>
		<link>https://blog.remontti.com.br/3006</link>
					<comments>https://blog.remontti.com.br/3006#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 16 Jul 2019 19:05:12 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[buster]]></category>
		<category><![CDATA[debian 10]]></category>
		<category><![CDATA[debian buster]]></category>
		<category><![CDATA[debian10]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3006</guid>

					<description><![CDATA[<p>Distribuição utilizada: Debian 10 Stretch / Instalação Limpa Vale lembrar que desde o Debian 9 o PHP foi atualizado para a versão 7 e agora para 7.3, e o MySQL foi substituído pelo seu&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3006">Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster &#8220;LAMP&#8221;</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/debian10-lamp.jpg" alt="" width="800" height="376" class="alignnone size-full wp-image-3028" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/debian10-lamp.jpg 800w, https://blog.remontti.com.br/wp-content/uploads/2019/07/debian10-lamp-300x141.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/debian10-lamp-768x361.jpg 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/debian10-lamp-520x245.jpg 520w" sizes="auto, (max-width: 800px) 100vw, 800px" /><br />
Distribuição utilizada: <strong><a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Debian 10 Stretch / Instalação Limpa</a></strong><br />
Vale lembrar que desde o Debian 9 o PHP foi atualizado para a versão 7 e agora para 7.3, e o MySQL foi substituído pelo seu fork MariaBD<br />
Antes de mais nada tenha seu repositório atualizado</p>
<pre class="remontti-code"># su -
# apt update
# apt upgrade</pre>
<h3>:: Instalação do Apache 2.4 ::</h3>
<pre class="remontti-code"># apt install apache2 apache2-utils</pre>
<p>Vamos habilitar o mod_rewrite do Apache que é muito utilizado.<br />
Este é um módulo do Apache que utiliza um mecanismo baseado em regras de reescrita.<br />
Vamos ao comando para habilita-lo:</p>
<pre class="remontti-code"># a2enmod rewrite</pre>
<p>A página que vimos ao abri o ip do nosso servidor no navegador fica no diretório /var/www/html, isso está sendo informado no arquivo default do apache que fica em /etc/apache2/sites-enabled/000-default.conf, e para que nosso mod_rewrite funcione corretamente será necessário adicionar alguma linhas.</p>
<pre class="remontti-code"># vim /etc/apache2/sites-enabled/000-default.conf</pre>
<p>Adicione abaixo de &#8220;DocumentRoot /var/www/html&#8221; o seguinte:</p>
<pre class="remontti-code">	&lt;Directory /var/www/html/&gt;
    		Options FollowSymLinks
    		AllowOverride All
	&lt;/Directory&gt;</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache2-deb10-rewrite.png" data-rel="lightbox-gallery-6dzIVrJP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache2-deb10-rewrite-300x251.png" alt="" width="300" height="251" class="alignnone size-medium wp-image-3012" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache2-deb10-rewrite-300x251.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/apache2-deb10-rewrite-768x642.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/apache2-deb10-rewrite.png 887w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Agora precisamos restartar o apache2 para que tenha efeito as alterações.</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>http://[SERVER_IP]/<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster.png" data-rel="lightbox-gallery-6dzIVrJP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster-230x300.png" alt="" width="230" height="300" class="alignnone size-medium wp-image-3010" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster-230x300.png 230w, https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster-768x1003.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster-784x1024.png 784w, https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster.png 941w" sizes="auto, (max-width: 230px) 100vw, 230px" /></a><br />
Por segurança remova a assinatura do apache.</p>
<pre class="remontti-code"># 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</pre>
<h3>:: Instalação do MariaDB 10.3 ::</h3>
<pre class="remontti-code"># apt install mariadb-server mariadb-client </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.<br />
Assim, você pode logar diretamente sem fornecer a senha root do MariaDB. Mas isso é estranho, pois minha senha do root do MariaDB é diferente do meu usuário unix.<br />
Bom se você é meio paranoico com segurança, para alterar a senha do usuário root do MariaDB de forma bruta faça o seguinte:</p>
<pre class="remontti-code"># mariadb -u root</pre>
<pre class="remontti-code">USE mysql;
UPDATE user SET password=PASSWORD(&#039;SENHA.db.ROOT&#039;) WHERE User=&#039;root&#039;;
UPDATE user SET plugin=&quot;mysql_native_password&quot;;
FLUSH PRIVILEGES;
quit;</pre>
<h3>:: Instalação do PHP 7.3 ::</h3>
<p>Vou incluir algumas extensões do PHP que são normalmente utilizada</p>
<pre class="remontti-code"># apt install libapache2-mod-php php php-mysql php-cli php-pear php-gmp php-gd php-bcmath php-mbstring php-curl php-xml php-zip</pre>
<p>É necessário reiniciar o apache para que o php tenha efeito.</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>Consultado informações de versão:</p>
<pre class="remontti-code"># php --version</pre>
<pre class="remontti-code">PHP 7.3.4-2 (cli) (built: Apr 13 2019 19:05:48) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.4-2, Copyright (c) 1999-2018, by Zend Technologies</pre>
<p>Você pode criar um arquivo php com a função <a href="https://php.net/manual/pt_BR/function.phpinfo.php" rel="noopener noreferrer" target="_blank">phpinfo()</a> para mostrar todas as informações.</p>
<pre class="remontti-code"># echo &#039;&lt;?php phpinfo(); ?&gt;&#039; &gt; /var/www/html/phpinfo.php</pre>
<p>http://[SERVER_IP]/phpinfo.php<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpinfo-debian-10-buster.png" data-rel="lightbox-gallery-6dzIVrJP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpinfo-debian-10-buster-300x261.png" alt="" width="300" height="261" class="alignnone size-medium wp-image-3018" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpinfo-debian-10-buster-300x261.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpinfo-debian-10-buster-768x668.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpinfo-debian-10-buster.png 994w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h3>:: phpMyAdmin ::</h3>
<p>Cade ele do repositório?<br />
O PHPMyAdmin não está mais disponível como pacote .deb no Debian 10. Fazendo um pesquisa o motivo é que o &#8220;pessoal&#8221; que faz empacotamento não tem uma versão estável. <a href="https://security-tracker.debian.org/tracker/CVE-2018-19968" rel="noopener noreferrer" target="_blank">https://security-tracker.debian.org/tracker/CVE-2018-19968</a><br />
Desta forma debian &#8220;obriga&#8221; com que o usuário instale-o a partir da fonte. <a href="https://www.phpmyadmin.net/downloads/" rel="noopener noreferrer" target="_blank">https://www.phpmyadmin.net/downloads/</a></p>
<pre class="remontti-code"># apt install wget</pre>
<p>Escolha qual versão do irá utilizar phpMyAdmin 5.x.x ou 4.x.x</p>
<pre class="remontti-code"># cd /tmp/</pre>
<p>Para <strong>phpMyAdmin 5</strong> (06/04/2020)</p>
<pre class="remontti-code"># wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.tar.gz
# tar -vxzf phpMyAdmin-5.0.4-all-languages.tar.gz -C /usr/share/
# mv /usr/share/phpMyAdmin-5.0.4-all-languages /usr/share/phpmyadmin</pre>
<p>Para <strong>phpMyAdmin 4</strong> (06/04/2020)</p>
<pre class="remontti-code"># wget https://files.phpmyadmin.net/phpMyAdmin/4.9.5/phpMyAdmin-4.9.5-all-languages.tar.gz
# tar -vxzf phpMyAdmin-4.9.5-all-languages.tar.gz -C /usr/share/
# mv /usr/share/phpMyAdmin-4.9.5-all-languages /usr/share/phpmyadmin</pre>
<p>Seguimos para <strong>phpMyAdmin 5 ou 4</strong> </p>
<pre class="remontti-code"># mkdir /etc/phpmyadmin
# touch /etc/phpmyadmin/htpasswd.setup
# mkdir -p /var/lib/phpmyadmin/tmp
# chown www-data. /var/lib/phpmyadmin/ -R</pre>
<p>Criaremos o arquivo de configuração do Apache.</p>
<pre class="remontti-code"># vim /etc/apache2/conf-available/phpmyadmin.conf</pre>
<pre class="remontti-code"># phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

&lt;Directory /usr/share/phpmyadmin&gt;
 Options FollowSymLinks
 DirectoryIndex index.php

 &lt;IfModule mod_php7.c&gt;
 AddType application/x-httpd-php .php

 php_flag magic_quotes_gpc Off
 php_flag track_vars On
 php_flag register_globals Off
 php_value include_path .
 &lt;/IfModule&gt;

&lt;/Directory&gt;

# Authorize for setup
&lt;Directory /usr/share/phpmyadmin/setup&gt;
 &lt;IfModule mod_authn_file.c&gt;
 AuthType Basic
 AuthName &quot;phpMyAdmin Setup&quot;
 AuthUserFile /etc/phpmyadmin/htpasswd.setup
 &lt;/IfModule&gt;
 Require valid-user
&lt;/Directory&gt;

# Disallow web access to directories that don&#039;t need it
&lt;Directory /usr/share/phpmyadmin/libraries&gt;
 Order Deny,Allow
 Deny from All
&lt;/Directory&gt;
&lt;Directory /usr/share/phpmyadmin/setup/lib&gt;
 Order Deny,Allow
 Deny from All
&lt;/Directory&gt;</pre>
<p>Se deseja deixar o atalho para o phpmyadmin restrito apenas aos seus IP de gerencia faça da seguinte forma. Lembre-se de alterar os IPs 200.200.200.0/26 2001:db8:cafe:d0ce::/64 para os seus.</p>
<pre class="remontti-code"># phpMyAdmin default Apache configuration
 
Alias /phpmyadmin /usr/share/phpmyadmin
 
&lt;Directory /usr/share/phpmyadmin&gt;
 Options FollowSymLinks
 DirectoryIndex index.php

 AllowOverride All
 Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe:d0ce::/64

 &lt;IfModule mod_php7.c&gt;
 AddType application/x-httpd-php .php
 
 php_flag magic_quotes_gpc Off
 php_flag track_vars On
 php_flag register_globals Off
 php_value include_path .
 &lt;/IfModule&gt;
 
&lt;/Directory&gt;
 
# Authorize for setup
&lt;Directory /usr/share/phpmyadmin/setup&gt;
 AllowOverride All
 Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe:d0ce::/64
 &lt;IfModule mod_authn_file.c&gt;
 AuthType Basic
 AuthName &quot;phpMyAdmin Setup&quot;
 AuthUserFile /etc/phpmyadmin/htpasswd.setup
 &lt;/IfModule&gt;
 Require valid-user
&lt;/Directory&gt;
 
# Disallow web access to directories that don&#039;t need it
&lt;Directory /usr/share/phpmyadmin/libraries&gt;
 AllowOverride All
 Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe:d0ce::/64
 Order Deny,Allow
 Deny from All
&lt;/Directory&gt;
&lt;Directory /usr/share/phpmyadmin/setup/lib&gt;
 AllowOverride All
 Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe:d0ce::/64
 Order Deny,Allow
 Deny from All
&lt;/Directory&gt;
</pre>
<p>Ative a configuração e reinicie o Apache.</p>
<pre class="remontti-code"># a2enconf phpmyadmin
# systemctl restart apache2
# systemctl status apache2</pre>
<p>Na próxima etapa, vamos configurar o armazenamento de configuração do phpMyadmin (banco de dados).<br />
Faça o login no MariaDB como usuário root:</p>
<pre class="remontti-code"># mariadb -p</pre>
<p>Criamos um novo banco de dados para o chamado phpmyadmin e um usuario pma (altere para sua senha). Em seguida, concedemos as permissões do banco de dados.<br />
Você pode gerar uma senha acessando <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 phpmyadmin;
CREATE USER &#039;pma&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA&#039;;
GRANT ALL PRIVILEGES ON phpmyadmin.* TO &#039;pma&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA&#039; WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;</pre>
<p>Carregue as tabelas do banco de dados: (Informe a senha do root do MariaDB)</p>
<pre class="remontti-code"># mariadb -u root -p phpmyadmin &lt; /usr/share/phpmyadmin/sql/create_tables.sql</pre>
<p>Agora é necessário ajustar o arquivo de configuração do phpmyadmin.<br />
Definir:<br />
* senha segura (blowfish secret) que deve ter 32 caracteres. Não use o meu exemplo blowfish secreto, defina o seu próprio! Use o gerador <a href="https://senhasegura.remontti.com.br" rel="noopener noreferrer" target="_blank">https://senhasegura.remontti.com.br</a><br />
* diretório que o PHPMyAdmin deve usar para armazenar arquivos temporários.<br />
* Descomentar as linhas $cfg['Servers']<br />
- controlhost : localhost<br />
- controlpass : SUA_SENHA</p>
<pre class="remontti-code"># cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
# vim /usr/share/phpmyadmin/config.inc.php</pre>
<pre class="remontti-code">$cfg[&#039;blowfish_secret&#039;] = &#039;dkJhGx83XR3JjuFrDn8kPp9NtXnkLptl&#039;;
/* Adicione esta linha */
$cfg[&#039;TempDir&#039;] = &#039;/var/lib/phpmyadmin/tmp&#039;;

/* User used to manipulate with storage */
$cfg[&#039;Servers&#039;][$i][&#039;controlhost&#039;] = &#039;localhost&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;controlport&#039;] = &#039;&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;controluser&#039;] = &#039;pma&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;controlpass&#039;] = &#039;SUA_SENHA&#039;;

/* Storage database and tables */
$cfg[&#039;Servers&#039;][$i][&#039;pmadb&#039;] = &#039;phpmyadmin&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;bookmarktable&#039;] = &#039;pma__bookmark&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;relation&#039;] = &#039;pma__relation&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;table_info&#039;] = &#039;pma__table_info&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;table_coords&#039;] = &#039;pma__table_coords&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;pdf_pages&#039;] = &#039;pma__pdf_pages&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;column_info&#039;] = &#039;pma__column_info&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;history&#039;] = &#039;pma__history&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;table_uiprefs&#039;] = &#039;pma__table_uiprefs&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;tracking&#039;] = &#039;pma__tracking&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;userconfig&#039;] = &#039;pma__userconfig&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;recent&#039;] = &#039;pma__recent&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;favorite&#039;] = &#039;pma__favorite&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;users&#039;] = &#039;pma__users&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;usergroups&#039;] = &#039;pma__usergroups&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;navigationhiding&#039;] = &#039;pma__navigationhiding&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;savedsearches&#039;] = &#039;pma__savedsearches&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;central_columns&#039;] = &#039;pma__central_columns&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;designer_settings&#039;] = &#039;pma__designer_settings&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;export_templates&#039;] = &#039;pma__export_templates&#039;;</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster.png" data-rel="lightbox-gallery-6dzIVrJP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-300x296.png" alt="" width="300" height="296" class="alignnone size-medium wp-image-3021" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-300x296.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-768x757.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster.png 901w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
http://[SERVER_IP]/phpmyadmin/<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-1.png" data-rel="lightbox-gallery-6dzIVrJP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-1-300x155.png" alt="" width="300" height="155" class="alignnone size-medium wp-image-3022" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-1-300x155.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-1-768x397.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-1-1024x530.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-1.png 1680w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-2.png" data-rel="lightbox-gallery-6dzIVrJP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-2-300x156.png" alt="" width="300" height="156" class="alignnone size-medium wp-image-3023" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-2-300x156.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-2-768x399.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-2-1024x532.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-2.png 1680w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Gostou?</p>
<p><center><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></center></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/3006">Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster &#8220;LAMP&#8221;</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3006/feed</wfw:commentRss>
			<slash:comments>70</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação do Zabbix 4.0 / 3.4 / 3.0 no Debian 9 Stretch com banco de dados MariaBD</title>
		<link>https://blog.remontti.com.br/2126</link>
					<comments>https://blog.remontti.com.br/2126#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 19 Jul 2017 01:48:17 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[debian stretch]]></category>
		<category><![CDATA[debian9]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[php7]]></category>
		<category><![CDATA[zabbix]]></category>
		<guid isPermaLink="false">http://blog.remontti.com.br/?p=2126</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/2126">Instalação do Zabbix 4.0 / 3.4 / 3.0 no Debian 9 Stretch com banco de dados MariaBD</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/2017/07/zabbix-debian9.png" alt="" width="720" height="342" class="alignnone size-full wp-image-2142" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/07/zabbix-debian9.png 720w, https://blog.remontti.com.br/wp-content/uploads/2017/07/zabbix-debian9-300x143.png 300w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<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 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>
<p><strong><a href="https://blog.remontti.com.br/3032">Para instalação no Debian 10 Bustes siga este tutorial.</a></strong></p>
<p><strong>Requisitos:</strong><br />
<a href="https://blog.remontti.com.br/1152" target="_blank" rel="noopener noreferrer">Debian 9 (Stretch) / Instalação Limpa</a><br />
<a href="https://blog.remontti.com.br/2024" target="_blank" rel="noopener noreferrer">Servidor web Apache2, PHP 7.0, MariaDB, PHPMyAdmin “LAMP” no Debian 9 Stretch</a></p>
<p>Atualize o repositório:</p>
<pre class="remontti-code"># apt update &amp;&amp; apt upgrade</pre>
<p>Para instalação do Zabbix vamos incluir o repositório do oficial do Zabbix. </p>
<p><strong>Versão 4.0.X</strong></p>
<pre class="remontti-code"># wget https://repo.zabbix.com/zabbix/4.0/debian/pool/main/z/zabbix-release/zabbix-release_4.0-2+stretch_all.deb
# dpkg -i zabbix-release_4.0-2+stretch_all.deb
# apt update
# apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent
</pre>
<p><strong>Versão 3.4.X</strong></p>
<pre class="remontti-code"># wget http://repo.zabbix.com/zabbix/3.4/debian/pool/main/z/zabbix-release/zabbix-release_3.4-1+stretch_all.deb
# dpkg -i zabbix-release_3.4-1+stretch_all.deb
# apt update
# apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent
</pre>
<p><strong>Versão 3.0.X</strong><br />
Para versão 3.0.x não é necessário incluir, pois é a reconhecida com a versão estável no Debian 9.</p>
<pre class="remontti-code"># apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent
</pre>
<p>Vamos criar uma base de dados chamada zabbix e um usuário também chamado de zabbix no MariaDB.</p>
<pre class="remontti-code"># mariadb</pre>
<pre class="remontti-code">create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by &#039;SENHA-USUARIO-ZABBIX&#039;;
quit;</pre>
<p>Importe o esquema de tabelas e dados padrões.</p>
<p><strong>Versão 4.0.x ou 3.4.x </strong></p>
<pre class="remontti-code">zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix</pre>
<p><strong>Versão 3.0.x </strong></p>
<pre class="remontti-code"># zcat /usr/share/zabbix-server-mysql/{schema,images,data}.sql.gz | mysql -uzabbix -p zabbix</pre>
<p>Digite a senha de seu usuário <strong>zabbix</strong> criada no passo anterior para importar as tabelas.</p>
<p><strong> 4.0.x / 3.4.x / 3.0.x </strong></p>
<p>Agora vamos editar o arquivo zabbix_server.conf para informar os dados para conexão com o MySQL.</p>
<pre class="remontti-code"># vim /etc/zabbix/zabbix_server.conf</pre>
<pre class="remontti-code">#...
DBHost=localhost
#...
DBName=zabbix
#...
DBUser=zabbix
#...
DBPassword=SENHA-USUARIO-ZABBIX
#...</pre>
<p><strong>Versão 4.0.x / 3.4.x  </strong></p>
<pre class="remontti-code"># vim /etc/apache2/conf-enabled/zabbix.conf</pre>
<p>Procure por:<br />
<font color="red"><strong># php_value date.timezone Europe/Riga</strong></font><br />
e altere por: (ou sua <a href="https://secure.php.net/manual/pt_BR/timezones.america.php" target="_blank" rel="noopener noreferrer">região</a>)<br />
<font color="blue"><strong>php_value date.timezone America/Sao_Paulo</strong></font></p>
<pre class="remontti-code"># apt install php7.0-bcmath php7.0-mbstring php-sabre-xml
# /etc/init.d/apache2 restart</pre>
<p><strong>Versão 3.0.x </strong><br />
Para versão 3.0.x seá necessario criar a configuração no apache editando:</p>
<p>Crie o arquivo de configuração para o Apache</p>
<pre class="remontti-code"># vim /etc/apache2/conf-enabled/zabbix.conf</pre>
<pre class="remontti-code">
## Zabbix

&lt;IfModule mod_alias.c&gt;
    Alias /zabbix /usr/share/zabbix
&lt;/IfModule&gt;

&lt;Directory &quot;/usr/share/zabbix&quot;&gt;
    Options FollowSymLinks
    AllowOverride None

    &lt;IfModule mod_php7.c&gt;
        php_value max_execution_time 300
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 2M
        php_value max_input_time 300
        php_value always_populate_raw_post_data -1
        php_value date.timezone America/Sao_Paulo
    &lt;/IfModule&gt;
&lt;/Directory&gt;

&lt;Directory ~ &quot;^/usr/share/zabbix/(conf|app|include|local)/&quot;&gt;
    &lt;files *.php&gt;
    &lt;/files&gt;
&lt;/Directory&gt;
</pre>
<p> Após a alteração do arquivo de configuração será necessário o reinicio do processo do servidor web (Apache).</p>
<pre class="remontti-code"># /etc/init.d/apache2 restart</pre>
<p><strong> 4.0.x / 3.4.x / 3.0.x </strong></p>
<p>Iniciando o Zabbix Server e o Agente.</p>
<pre class="remontti-code"># systemctl enable zabbix-server
# systemctl enable zabbix-agent
# /etc/init.d/zabbix-server restart
# /etc/init.d/zabbix-agent restart</pre>
<p>A interface web do Zabbix estará disponível em http://SEU-IP/zabbix através do seu navegador.<br />
O usuário e senha padrões são: Admin/zabbix</p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20181005_163023.png" data-rel="lightbox-gallery-s6biGHTc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20181005_163023-300x169.png" alt="" width="300" height="169" class="alignnone size-medium wp-image-2714" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20181005_163023-300x169.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20181005_163023-768x432.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20181005_163023-1024x576.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20181005_163023.png 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20170828_103722.png" data-rel="lightbox-gallery-s6biGHTc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20170828_103722-300x186.png" alt="" width="300" height="186" class="alignnone size-medium wp-image-2181" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20170828_103722-300x186.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20170828_103722-768x477.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20170828_103722-1024x636.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/07/Screenshot_20170828_103722.png 1286w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_193954.png" data-rel="lightbox-gallery-s6biGHTc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-1240" src="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_193954-300x211.png" alt="screenshot_20160910_193954" width="300" height="211" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_193954-300x211.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_193954-768x540.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_193954-1024x720.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_193954.png 1196w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><strong>[Next step]</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194002.png" data-rel="lightbox-gallery-s6biGHTc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-1241" src="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194002-300x211.png" alt="screenshot_20160910_194002" width="300" height="211" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194002-300x211.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194002-768x540.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194002-1024x720.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194002.png 1196w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Tudo deve estar <span style="color: #339966;">ok</span><strong> [Next step]</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194011.png" data-rel="lightbox-gallery-s6biGHTc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-1242" src="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194011-300x211.png" alt="screenshot_20160910_194011" width="300" height="211" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194011-300x211.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194011-768x540.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194011-1024x720.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194011.png 1196w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Informe sua senha de conexão ao banco de dados MariaDB. <strong>[Next step]</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194018.png" data-rel="lightbox-gallery-s6biGHTc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-1243" src="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194018-300x211.png" alt="screenshot_20160910_194018" width="300" height="211" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194018-300x211.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194018-768x540.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194018-1024x720.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194018.png 1196w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><strong>[Next step]</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194024.png" data-rel="lightbox-gallery-s6biGHTc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-1244" src="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194024-300x211.png" alt="screenshot_20160910_194024" width="300" height="211" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194024-300x211.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194024-768x540.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194024-1024x720.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194024.png 1196w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><strong>Faça isso apenas na Versão 3.0.x </strong><br />
Vamos preparar o nosso arquivo para receber as configurações web:</p>
<pre class="remontti-code"># touch /etc/zabbix/zabbix.conf.php
# chown www-data. /etc/zabbix/zabbix.conf.php</pre>
<p><strong>[Next step]</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194028.png" data-rel="lightbox-gallery-s6biGHTc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-1245" src="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194028-300x211.png" alt="screenshot_20160910_194028" width="300" height="211" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194028-300x211.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194028-768x540.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194028-1024x720.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194028.png 1196w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><strong>[Finish]</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194043.png" data-rel="lightbox-gallery-s6biGHTc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-1247" src="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194043-300x211.png" alt="screenshot_20160910_194043" width="300" height="211" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194043-300x211.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194043-768x540.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194043-1024x720.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194043.png 1196w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Usuário:<strong> Admin</strong> Senha: <strong>zabbix</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194105.png" data-rel="lightbox-gallery-s6biGHTc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-1248" src="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194105-300x211.png" alt="screenshot_20160910_194105" width="300" height="211" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194105-300x211.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194105-768x540.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194105-1024x720.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/09/Screenshot_20160910_194105.png 1196w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Zabbix instalado com sucesso! <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>Dica, para não deixar o root do MariaDB sem senha, segue a dica de como alterar:</p>
<pre class="remontti-code"># mariadb -u root</pre>
<pre class="remontti-code">USE mysql;
UPDATE user SET password=PASSWORD(&#039;SUA-SENHA&#039;) WHERE User=&#039;root&#039;;
UPDATE user SET plugin=&quot;mysql_native_password&quot;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Você pode gostar de:<br />
<a href="https://blog.remontti.com.br/1325" target="_blank" rel="noopener noreferrer">Cliente Telegram no seu terminal bash – Debian/Ubuntu</a><br />
<a href="https://blog.remontti.com.br/1366" target="_blank" rel="noopener noreferrer">Zabbix com notificações via Telegram</a></p>
<p>Gostou? Deixe seu comentário ficarei feliz em saber que lhe ajudei, e se tiver qualquer pergunta deixe-a também, se preferir acesse o menu <a href="http://blog.remontti.net.br/meucontato">Contato</a> lá você encontra meios de falar comigo!</p>
<p>Abraço!</p>
<p>Fonte: <a href="https://www.zabbix.com/documentation/" target="_blank" rel="noopener noreferrer">https://www.zabbix.com/documentation/</a></p>
<p>O post <a href="https://blog.remontti.com.br/2126">Instalação do Zabbix 4.0 / 3.4 / 3.0 no Debian 9 Stretch com banco de dados MariaBD</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2126/feed</wfw:commentRss>
			<slash:comments>60</slash:comments>
		
		
			</item>
		<item>
		<title>Instalando FreeRadius 3.0.X com integração MySQL ou MariaDB no Debian 9 Stretch</title>
		<link>https://blog.remontti.com.br/2066</link>
					<comments>https://blog.remontti.com.br/2066#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Mon, 03 Jul 2017 14:32:32 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[pppoe]]></category>
		<category><![CDATA[provedor]]></category>
		<category><![CDATA[Stretch]]></category>
		<category><![CDATA[ubiquiti]]></category>
		<category><![CDATA[ubnt]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">http://blog.remontti.com.br/?p=2066</guid>

					<description><![CDATA[<p>Neste tutorial vamos configurar o FreeRadius 3 em nosso servidor Debina 9, com integração dos usuários/atributos de configurações em uma base de dados MySQL/MariaDB com o módulo SQL, e ainda o módulos SQLIPPOOL para&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/2066">Instalando FreeRadius 3.0.X com integração MySQL ou MariaDB no Debian 9 Stretch</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/2017/07/freeradius-3.0-debian9.jpg" alt="" width="900" height="428" class="alignnone size-full wp-image-2091" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/07/freeradius-3.0-debian9.jpg 900w, https://blog.remontti.com.br/wp-content/uploads/2017/07/freeradius-3.0-debian9-300x143.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2017/07/freeradius-3.0-debian9-768x365.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></p>
<p>Neste tutorial vamos configurar o FreeRadius 3 em nosso servidor Debina 9, com integração dos usuários/atributos de configurações em uma base de dados MySQL/MariaDB com o módulo SQL, e ainda o módulos SQLIPPOOL para armazenar nossa pool de IPs na base de dados.<br />
Esse tutorial é ideal para provedores fazerem autenticação PPPoE, autenticação Wireless PSK e EAP. </p>
<p>Se você gostou do tutorial ou tem dúvidas deixe seu comentário. Se precisar de alguma ajuda ou trocar uma ideia pode me chamar lá no Telegram @remontti</p>
<p>REQUISITOS<br />
1 – Debian 9 Stretch recomendo uma <a href="https://blog.remontti.com.br/1152" target="_blank" rel="noopener noreferrer">instalação limpa do Debian</a><br />
2 – Servidor Atualizado:</p>
<pre class="remontti-code"># apt update</pre>
<p>Mãos à obra!<br />
Primeiramente escolha qual banco de dados você irá instalar:<br />
<strong>MySQL ou MariaDB? </strong><br />
Com o lançamento do Debian 9 ao solicitar a instalação do mysql-server, você irá se deparar com a instalação do MariaDB automaticamente.<br />
MariaDB é um banco de dados que surgiu como fork do MySQL, criado pelo próprio fundador do projeto após sua aquisição pela Oracle. Para saber mais acesse <a href="https://pt.wikipedia.org/wiki/MariaDB" target="_blank" rel="noopener noreferrer">https://pt.wikipedia.org/wiki/MariaDB</a></p>
<p><strong>Para MySQL</strong><br />
A equipe do MySQL Release Engineering fornece repositórios apt para usar com a maioria do software, incluindo o servidor e muitos de seus utilitários. Para instalação com o Mysql então será necessário adicionar em seus repositórios.</p>
<pre class="remontti-code">
# echo -e &quot;deb http://repo.mysql.com/apt/debian/ stretch mysql-5.7\ndeb-src http://repo.mysql.com/apt/debian/ stretch mysql-5.7&quot; &gt; /etc/apt/sources.list.d/mysql.list
# wget -O /tmp/RPM-GPG-KEY-mysql https://repo.mysql.com/RPM-GPG-KEY-mysql --no-check-certificate
# apt-key add /tmp/RPM-GPG-KEY-mysql
# apt update</pre>
<pre class="remontti-code"># apt install mysql-server</pre>
<p><strong>Para MariaDB</strong><br />
Não será necessário alterar nada em seus repositórios.<br />
<em><font color="blue">Note que na instalação do MariaDB ele não irá pedir senha do usuário root como acontece no mysql, por padrão o mesmo vem sem senha com permissão de logar apenas via shell.</font></em></p>
<pre class="remontti-code"># apt install mariadb-client mariadb-server</pre>
<p>Agora que já temos nosso bando de dados instalado MySQL ou MariaDB, vamos instalar uma servidor web junto com o PHPMyAdmin para facilitar nossa vida. </p>
<pre class="remontti-code"># apt install apache2 libapache2-mod-php7.0 php7.0 phpmyadmin</pre>
<p>Após instalar acesse <strong>http://SEU-IP/phpmyadmin</strong> para ver  se tudo esta ok!<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017.png" data-rel="lightbox-gallery-8oWPvbfo" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017-300x157.png" alt="" width="300" height="157" class="alignnone size-medium wp-image-2036" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017-300x157.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017-768x402.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017-1024x536.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017.png 1680w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><strong>Instalação do FreeRadius</strong></p>
<pre class="remontti-code"># apt install freeradius freeradius-mysql freeradius-utils</pre>
<p>Crie um banco de dados e usuário e conceda permissões para acessar sua base.</p>
<p>No MariaDB use o comando:</p>
<pre class="remontti-code"># mariadb -u root</pre>
<p>* Vale lembrar que MariaDB seu usuário root vem sem senha, para setar uma senha faça:</p>
<pre class="remontti-code">USE mysql;
UPDATE user SET password=PASSWORD(&#039;SUA-SENHA-USER-ROOT&#039;) WHERE User=&#039;root&#039;;
UPDATE user SET plugin=&quot;mysql_native_password&quot;;
FLUSH PRIVILEGES;
</pre>
<p>Acesse via linha de comando seu banco de dados, e crie uma base chamada de radius e usuário também chamado de radius, para configurarmos nossa aplicação freeradius.</p>
<pre class="remontti-code">
CREATE DATABASE radius;
GRANT ALL PRIVILEGES ON radius.* TO &#039;radius&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SENHA-DO-USER-RADIUS&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Agora vamos criar nossas tableas</p>
<p>No MariaDB use o comando:</p>
<pre class="remontti-code"># mariadb -u radius -p radius &lt; /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
# mariadb -u radius -p radius &lt; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/schema.sql</pre>
<p>No MySQL use o comando:</p>
<pre class="remontti-code"># mysql -u radius -p radius &lt; /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
# mysql -u radius -p radius &lt; /etc/freeradius/3.0/mods-config/sql/ippool/mysql/schema.sql</pre>
<p>Após cada comando será solicitado a senha (SENHA-DO-USER-RADIUS)</p>
<p>Caso deseje logs mais detalhados edite radiusd.conf</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/radiusd.conf /etc/freeradius/3.0/radiusd.conf.orig
# vim /etc/freeradius/3.0/radiusd.conf</pre>
<p>Localize as variáveis e altere para yes  </p>
<pre class="remontti-code">[...]
log {
    [...]
        stripped_names = yes
        auth = yes
        auth_badpass = yes
        auth_goodpass = yes
    [...]
}
[...]</pre>
<p>Vamos habilitar nosso mod SQL, mas antes precisamos fazer algumas alterações no arquivo</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-available/sql.orig
# vim /etc/freeradius/3.0/mods-available/sql</pre>
<p>Altere:</p>
<pre class="remontti-code">
driver = &quot;rlm_sql_null&quot; por driver = &quot;rlm_sql_mysql&quot;
dialect = &quot;sqlite&quot; por dialect = &quot;mysql&quot;
</pre>
<p>Descemente as linhas e altere a senha:</p>
<pre class="remontti-code">server = &quot;localhost&quot;
port = 3306
login = &quot;radius&quot;
password = &quot;SENHA-DO-USER-RADIUS&quot;</pre>
<p>Descomente:<br />
<strong>read_clients = yes</strong></p>
<p>Habilite o mod:</p>
<pre class="remontti-code"># ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/sql</pre>
<p>Agora no arquivo /etc/freeradius/3.0/sites-enabled/default vamos comentar alguns valores e descomentar outros:</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/sites-available/default  /etc/freeradius/3.0/sites-available/default.org
# vim /etc/freeradius/3.0/sites-enabled/default</pre>
<pre class="remontti-code">
  authorize {
      #digest
      #suffix
      #files
      sql
      #-ldap
  }

  authenticate {
      #digest
  }

  preacct {
      #suffix
      #files
  }

  accounting {
      sql
      #exec
      #attr_filter.accounting_response
  }
  session {
    # Se você deseja usar o atributo Simultaneous-Use, descomente sql e comente radutmp&lt;/em&gt; 
    #radutmp
    sql
  }

  post-auth {
          sql
          #exec

#        Post-Auth-Type REJECT {
#                # log failed authentications in SQL, too.
#                -sql
#                attr_filter.access_reject
#                # Insert EAP-Failure message if the request was
#                # rejected by policy instead of because of an
#                # authentication failure
#                eap
#
#                #  Remove reply message if the response contains an EAP-Message
#                remove_reply_message_if_eap
#        }
</pre>
<p>Faça o mesmo com inner-tunnel</p>
<pre class="remontti-code"># cp /etc/freeradius/3.0/sites-available/inner-tunnel /etc/freeradius/3.0/sites-available/inner-tunnel.org
# vim /etc/freeradius/3.0/sites-enabled/inner-tunnel</pre>
<pre class="remontti-code">
authorize {
    #suffix
    #files
    sql
    #-ldap
}

authenticate {

}

session { 
    # Se você deseja usar o atributo Simultaneous-Use, descomente sql e comente radutmp
    #radutmp
    sql
}
post-auth {
    sql

#  Post-Auth-Type REJECT {
#      # log failed authentications in SQL, too.
#      -sql
#      attr_filter.access_reject
#
#      #
#      #  Let the outer session know which module failed, and why.
#      #
#      update outer.session-state {
#              &amp;Module-Failure-Message := &amp;request:Module-Failure-Message
#      }
#  }

}</pre>
<p><strong>Habilita mod sqlippool</strong></p>
<pre class="remontti-code"># ln -s /etc/freeradius/3.0/mods-available/sqlippool /etc/freeradius/3.0/mods-enabled/sqlippool
# vim /etc/freeradius/3.0/mods-enabled/sqlippool</pre>
<pre class="remontti-code"># Comente:
# pool_key = &quot;%{NAS-Port}&quot;
# Descomente
pool_key = &quot;%{Calling-Station-Id}&quot;</pre>
<p>Precisamos adicionar o mod sqlippool no nosso arquivo default, você acrescentará sqlippool em accounting e post-auth logo abaixo de sql: </p>
<pre class="remontti-code"># vim /etc/freeradius/3.0/sites-enabled/default</pre>
<pre class="remontti-code">
accounting {
        sql
        sqlippool
}
session {
        sql
}
post-auth {
        sql
        sqlippool
}
</pre>
<p>Uma alteraçõe que acho interessante é para que a cada nova alocação de IP ela seja randômica, isso pode solucionar alguns problemas como o daqueles clientes que jogam online, que fazem download, que estão sendo atacados, que ao reiniciar seu equipamento o mesmo irá receber um novo IP. Para isso vamos editar /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf </p>
<p># vim /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf</p>
<pre class="remontti-code">
#
#  The ORDER BY clause of this query tries to allocate the same IP-address
#  which user had last session...
#COMENTE:
#allocate_find = &quot;\
#        SELECT framedipaddress FROM ${ippool_table} \
#        WHERE pool_name = &#039;%{control:Pool-Name}&#039; \
#        AND (expiry_time &lt; NOW() OR expiry_time IS NULL) \
#        ORDER BY \
#                (username &lt;&gt; &#039;%{User-Name}&#039;), \
#                (callingstationid &lt;&gt; &#039;%{Calling-Station-Id}&#039;), \
#                expiry_time \
#        LIMIT 1 \
#        FOR UPDATE&quot;

#
#  If you prefer to allocate a random IP address every time, use this query instead.
#DESCOMENTE
allocate_find = &quot;\
       SELECT framedipaddress FROM ${ippool_table} \
       WHERE pool_name = &#039;%{control:Pool-Name}&#039; \
       AND expiry_time IS NULL \
       ORDER BY \
               RAND() \
       LIMIT 1 \
       FOR UPDATE&quot;</pre>
<p><strong>Opcional</strong></p>
<p>Inicialmente eu particularmente não gosto da ideia da tabela radusergroup não ter um ID então para alterar isso faça. (Se desejar)</p>
<pre class="remontti-code"># mysql/mariadb -u radius -p</pre>
<p>Entre com SUA-SENHA do radius no MySQL.</p>
<pre class="remontti-code">
USE radius;
ALTER TABLE `radusergroup` ADD `id` INT(20) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (`id`) ;
ALTER TABLE `radusergroup` ADD UNIQUE(`id`);</pre>
<p>Caso você tenha uma alta demanda de requisições você pode fazer algumas alterações no radiusd.conf.<br />
Altere conforme sua necessidade, e hardware de seu servidor. Vale lembrar que fazendo essas alterações será necessário alterar as configurações do MySQL/MariaDB para permitir uma maior número de conexões.<br />
Ex carga de cerca de 1000 Access-Request por segundo:</p>
<pre class="remontti-code"># vim /etc/freeradius/3.0/radiusd.conf</pre>
<pre class="remontti-code">
#...
thread pool {
    start_servers = 256
    max_servers = 512
    min_spare_servers = 256
    max_spare_servers = 512
    max_queue_size = 1048576
    max_requests_per_server = 0
    auto_limit_acct = no
}
#...</pre>
<p>Para conhecer os atributos que você pode usar em sua base recomendo a leitura do tutorial: "ALIMENTANDO NOSSA BASE DE DADOS" em diante.<br />
<strong><a href="https://blog.remontti.com.br/1651">Servidor FreeRadius com integração MySQL + Autenticação PPPoE & Hotspot VS Mikrotik + Ubiquiti EAP/PSK</a></strong></p>
<p>Sugestões ou criticas envie para Telegram: @remontti</p>
<p>Espero ter ajudado!  <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>
<h3>ARQUIVOS EDITADOS:</h3>
<pre class="remontti-code"># cat /etc/freeradius/3.0/sites-enabled/default |grep -v &quot;#&quot; |awk &#039;NF&gt;0&#039;</pre>
<pre class="remontti-code">
server default {
listen {
        type = auth
        ipaddr = *
        port = 0
        limit {
              max_connections = 16
              lifetime = 0
              idle_timeout = 30
        }
}
listen {
        ipaddr = *
        port = 0
        type = acct
        limit {
        }
}
listen {
        type = auth
        port = 0
        limit {
              max_connections = 16
              lifetime = 0
              idle_timeout = 30
        }
}
listen {
        ipv6addr = ::
        port = 0
        type = acct
        limit {
        }
}
authorize {
        filter_username
        preprocess
        chap
        mschap
        eap {
                ok = return
        }
        sql
        expiration
        logintime
        pap
}
authenticate {
        Auth-Type PAP {
                pap
        }
        Auth-Type CHAP {
                chap
        }
        Auth-Type MS-CHAP {
                mschap
        }
        mschap
        eap
}
preacct {
        preprocess
        acct_unique
}
accounting {
        detail
        sql
        sqlippool
}
session {
        sql
}
post-auth {
        update {
                &amp;reply: += &amp;session-state:
        }
        sql
        sqlippool
        remove_reply_message_if_eap
}
pre-proxy {
}
post-proxy {
        eap
}
}
</pre>
<pre class="remontti-code"># cat /etc/freeradius/3.0/sites-enabled/inner-tunnel |grep -v &quot;#&quot; |awk &#039;NF&gt;0&#039;</pre>
<pre class="remontti-code">
server inner-tunnel {
listen {
       ipaddr = 127.0.0.1
       port = 18120
       type = auth
}
authorize {
        filter_username
        chap
        mschap
        update control {
                &amp;Proxy-To-Realm := LOCAL
        }
        eap {
                ok = return
        }
        sql
        expiration
        logintime
        pap
}
authenticate {
        Auth-Type PAP {
                pap
        }
        Auth-Type CHAP {
                chap
        }
        Auth-Type MS-CHAP {
                mschap
        }
        mschap
        eap
}
session {
        sql
}
post-auth {
        sql
}
pre-proxy {
}
post-proxy {
        eap
}
</pre>
<pre class="remontti-code"># cat /etc/freeradius/3.0/mods-enabled/sql |grep -v &quot;#&quot; |awk &#039;NF&gt;0&#039;</pre>
<pre class="remontti-code">
sql {
        driver = &quot;rlm_sql_mysql&quot;
        dialect = &quot;mysql&quot;
        server = &quot;localhost&quot;
        port = 3306
        login = &quot;radius&quot;
        password = &quot;SENHA-USUARIO-RADIUS&quot;
        radius_db = &quot;radius&quot;
        acct_table1 = &quot;radacct&quot;
        acct_table2 = &quot;radacct&quot;
        postauth_table = &quot;radpostauth&quot;
        authcheck_table = &quot;radcheck&quot;
        groupcheck_table = &quot;radgroupcheck&quot;
        authreply_table = &quot;radreply&quot;
        groupreply_table = &quot;radgroupreply&quot;
        usergroup_table = &quot;radusergroup&quot;
        delete_stale_sessions = yes
        pool {
                start = ${thread[pool].start_servers}
                min = ${thread[pool].min_spare_servers}
                max = ${thread[pool].max_servers}
                spare = ${thread[pool].max_spare_servers}
                uses = 0
                retry_delay = 30
                lifetime = 0
                idle_timeout = 60
        }
        read_clients = yes
        client_table = &quot;nas&quot;
        group_attribute = &quot;SQL-Group&quot;
        $INCLUDE ${modconfdir}/${.:name}/main/${dialect}/queries.conf
}
</pre>
<pre class="remontti-code"># cat /etc/freeradius/3.0/mods-enabled/sqlippool |grep -v &quot;#&quot; |awk &#039;NF&gt;0&#039;</pre>
<pre class="remontti-code">
sqlippool {
        sql_module_instance = &quot;sql&quot;
        dialect = &quot;mysql&quot;
        ippool_table = &quot;radippool&quot;
        lease_duration = 3600
        pool_key = &quot;%{Calling-Station-Id}&quot;
        messages {
                exists = &quot;Existing IP: %{reply:Framed-IP-Address} (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} user %{User-Name})&quot;
                success = &quot;Allocated IP: %{reply:Framed-IP-Address} from %{control:Pool-Name} (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} user %{User-Name})&quot;
                clear = &quot;Released IP %{Framed-IP-Address} (did %{Called-Station-Id} cli %{Calling-Station-Id} user %{User-Name})&quot;
                failed = &quot;IP Allocation FAILED from %{control:Pool-Name} (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} user %{User-Name})&quot;
                nopool = &quot;No Pool-Name defined (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} user %{User-Name})&quot;
        }
        $INCLUDE ${modconfdir}/sql/ippool/${dialect}/queries.conf
}
</pre>
<pre class="remontti-code"># cat /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf |grep -v &quot;#&quot; |awk &#039;NF&gt;0&#039;</pre>
<pre class="remontti-code">
allocate_clear = &quot;\
        UPDATE ${ippool_table} \
        SET \
                nasipaddress = &#039;&#039;, \
                pool_key = 0, \
                callingstationid = &#039;&#039;, \
                username = &#039;&#039;, \
                expiry_time = NULL \
        WHERE expiry_time &lt;= NOW() - INTERVAL 1 SECOND \
        AND nasipaddress = &#039;%{Nas-IP-Address}&#039;&quot;
allocate_find = &quot;\
        SELECT framedipaddress FROM ${ippool_table} \
        WHERE pool_name = &#039;%{control:Pool-Name}&#039; \
        AND expiry_time IS NULL \
        ORDER BY \
                RAND() \
        LIMIT 1 \
        FOR UPDATE&quot;
pool_check = &quot;\
        SELECT id \
        FROM ${ippool_table} \
        WHERE pool_name=&#039;%{control:Pool-Name}&#039; \
        LIMIT 1&quot;
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 \
        WHERE framedipaddress = &#039;%I&#039; \
        AND expiry_time IS NULL&quot;
start_update = &quot;\
        UPDATE ${ippool_table} \
        SET \
                expiry_time = NOW() + INTERVAL ${lease_duration} SECOND \
        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;%{Framed-IP-Address}&#039;&quot;
stop_clear = &quot;\
        UPDATE ${ippool_table} \
        SET \
                nasipaddress = &#039;&#039;, \
                pool_key = 0, \
                callingstationid = &#039;&#039;, \
                username = &#039;&#039;, \
                expiry_time = NULL \
        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;%{Framed-IP-Address}&#039;&quot;
alive_update = &quot;\
        UPDATE ${ippool_table} \
        SET \
                expiry_time = NOW() + INTERVAL ${lease_duration} SECOND \
        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;%{Framed-IP-Address}&#039;&quot;
on_clear = &quot;\
        UPDATE ${ippool_table} \
        SET \
                nasipaddress = &#039;&#039;, \
                pool_key = 0, \
                callingstationid = &#039;&#039;, \
                username = &#039;&#039;, \
                expiry_time = NULL \
        WHERE nasipaddress = &#039;%{Nas-IP-Address}&#039;&quot;
off_clear = &quot;\
        UPDATE ${ippool_table} \
        SET \
                nasipaddress = &#039;&#039;, \
                pool_key = 0, \
                callingstationid = &#039;&#039;, \
                username = &#039;&#039;, \
                expiry_time = NULL \
        WHERE nasipaddress = &#039;%{Nas-IP-Address}&#039;&quot;
</pre>
<p>O post <a href="https://blog.remontti.com.br/2066">Instalando FreeRadius 3.0.X com integração MySQL ou MariaDB no Debian 9 Stretch</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2066/feed</wfw:commentRss>
			<slash:comments>60</slash:comments>
		
		
			</item>
		<item>
		<title>Como instalar o MySQL Server (Oracle) no Debian 9 Stretch</title>
		<link>https://blog.remontti.com.br/2054</link>
					<comments>https://blog.remontti.com.br/2054#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Thu, 29 Jun 2017 19:27:11 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[apt]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[jessie]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysql-5.7]]></category>
		<category><![CDATA[mysql-primary]]></category>
		<category><![CDATA[mysql-server]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[Stretch]]></category>
		<category><![CDATA[upgrade]]></category>
		<guid isPermaLink="false">http://blog.remontti.com.br/?p=2054</guid>

					<description><![CDATA[<p>Recentemente tivemos o lançamento do Debian 9, e se você solicitar a instalação do mysql-server, você irá se deparar com a instalação do mariadb automaticamente, sem nenhuma maneira (fácil) de instalar o MySQL da&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/2054">Como instalar o MySQL Server (Oracle) no Debian 9 Stretch</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/2017/06/mysql.jpg" alt="" width="900" height="428" class="alignnone size-full wp-image-2061" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/mysql.jpg 900w, https://blog.remontti.com.br/wp-content/uploads/2017/06/mysql-300x143.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/mysql-768x365.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></p>
<p>Recentemente tivemos o lançamento do Debian 9, e se você solicitar a instalação do mysql-server, você irá se deparar com a instalação do mariadb automaticamente, sem nenhuma maneira (fácil) de instalar o MySQL da Oracle. Qualquer migração importante de base de dados deve ser feita com cuidado, Migrar o MySQL 5.5 para o MariaDB 10.1 pode causar dores de cabeça. </p>
<p>Adicione o Repositórios da Oracle</p>
<p>A equipe do MySQL Release Engineering fornece repositórios apt para usar com a maioria do software, incluindo o servidor e muitos de seus utilitários. Vou optar por instalar o MySQL 5.7, porém 5.6 e 8.0 também estão disponíveis para o Debian stable. Vamos criar o arquivo /etc/apt/sources.list.d/mysql.list.</p>
<pre class="remontti-code"># echo -e &quot;deb http://repo.mysql.com/apt/debian/ stretch mysql-5.7\ndeb-src http://repo.mysql.com/apt/debian/ stretch mysql-5.7&quot; &gt; /etc/apt/sources.list.d/mysql.list</pre>
<p>Antes de atualizar nosso repositório você deve adicionar a chave pública como confiável:</p>
<pre class="remontti-code"># wget -O /tmp/RPM-GPG-KEY-mysql https://repo.mysql.com/RPM-GPG-KEY-mysql --no-check-certificate
# apt-key add /tmp/RPM-GPG-KEY-mysql</pre>
<p>Já pode instale mysql-sever da Oracle</p>
<pre class="remontti-code"># apt update
# apt install mysql-server</pre>
<p>Defina senha para o usuário root do MySQL.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/senha-mysql-root.png" alt="" width="989" height="579" class="alignnone size-full wp-image-2113" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/senha-mysql-root.png 989w, https://blog.remontti.com.br/wp-content/uploads/2017/06/senha-mysql-root-300x176.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/senha-mysql-root-768x450.png 768w" sizes="auto, (max-width: 989px) 100vw, 989px" /></p>
<p>Verifique se o mesmo esta rodando:</p>
<pre class="remontti-code">systemctl status mysql</pre>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170629_151538.png" alt="" width="944" height="253" class="alignnone size-full wp-image-2056" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170629_151538.png 944w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170629_151538-300x80.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170629_151538-768x206.png 768w" sizes="auto, (max-width: 944px) 100vw, 944px" /></p>
<p>Já pode fazer a conexão ao seu banco!</p>
<pre class="remontti-code">mysql -p</pre>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170629_151808.png" alt="" width="802" height="420" class="alignnone size-full wp-image-2057" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170629_151808.png 802w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170629_151808-300x157.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170629_151808-768x402.png 768w" sizes="auto, (max-width: 802px) 100vw, 802px" /></p>
<p>Sugestões ou criticas envie para Telegram: <a href="https://t.me/remontti">@remontti</a></p>
<p>Espero ter ajudado!  <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>O post <a href="https://blog.remontti.com.br/2054">Como instalar o MySQL Server (Oracle) no Debian 9 Stretch</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2054/feed</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
		<item>
		<title>Passo-a-passo como criar um servidor web Apache2, PHP 7.0, MariaDB, PHPMyAdmin &#8220;LAMP&#8221; no Debian 9 Stretch</title>
		<link>https://blog.remontti.com.br/2024</link>
					<comments>https://blog.remontti.com.br/2024#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Mon, 19 Jun 2017 18:55:38 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[Debian 9]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP 7.0]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[Stretch]]></category>
		<category><![CDATA[webserver]]></category>
		<guid isPermaLink="false">http://blog.remontti.com.br/?p=2024</guid>

					<description><![CDATA[<p>Distribuição utilizada: Debian 9 Stretch / Instalação Limpa Com o lançamento do Debian 9 alguns pacotes foram substituído como: PHP5 -> PHP7.0 Mysql -> MariaDB (MariaDB é um banco de dados que surgiu como&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/2024">Passo-a-passo como criar um servidor web Apache2, PHP 7.0, MariaDB, PHPMyAdmin &#8220;LAMP&#8221; no Debian 9 Stretch</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/2017/06/webdev-debian9.jpg" alt="" width="800" height="376" class="alignnone size-full wp-image-2046" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/webdev-debian9.jpg 800w, https://blog.remontti.com.br/wp-content/uploads/2017/06/webdev-debian9-300x141.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/webdev-debian9-768x361.jpg 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/webdev-debian9-520x245.jpg 520w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p>
<p>Distribuição utilizada: Debian 9 Stretch / <a href="https://blog.remontti.com.br/1152">Instalação Limpa</a></p>
<p>Com o lançamento do Debian 9 alguns pacotes foram substituído como:<br />
<strong>PHP5 -> PHP7.0</strong><br />
<strong>Mysql -> <a href="https://pt.wikipedia.org/wiki/MariaDB" target="_blank" rel="noopener noreferrer">MariaDB</a></strong> (<em>MariaDB é um banco de dados que surgiu como fork do MySQL, criado pelo próprio fundador do projeto após sua aquisição pela Oracle.</em>)</p>
<p>Vamos a instalação</p>
<pre class="remontti-code"># apt update
# apt upgrade
# apt install apache2 libapache2-mod-php7.0 php7.0 mariadb-client mariadb-server phpmyadmin</pre>
<p>Instale todos os pacotes dependentes. (S)</p>
<p><em>OBS: Se você instalar o pacote <strong>mysql-server</strong> ele vai estar instalando o mariadb-client mariadb-server.</em></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143240.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143240-300x199.png" alt="" width="300" height="199" class="alignnone size-medium wp-image-2028" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143240-300x199.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143240-768x509.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143240-1024x679.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143240.png 1192w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Na próxima tela selecione a opção apache2.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143756.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143756-300x199.png" alt="" width="300" height="199" class="alignnone size-medium wp-image-2029" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143756-300x199.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143756-768x509.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143756-1024x679.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_143756.png 1192w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Configurando o banco do phpmyadmin:<br />
Responda Sim.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144016.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144016-300x199.png" alt="" width="300" height="199" class="alignnone size-medium wp-image-2030" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144016-300x199.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144016-768x509.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144016-1024x679.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144016.png 1192w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Defina uma senha para a base do phpmyadmin:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144112.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144112-300x199.png" alt="" width="300" height="199" class="alignnone size-medium wp-image-2031" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144112-300x199.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144112-768x509.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144112-1024x679.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144112.png 1192w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Repita a senha:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144154.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144154-300x199.png" alt="" width="300" height="199" class="alignnone size-medium wp-image-2032" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144154-300x199.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144154-768x509.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144154-1024x679.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144154.png 1192w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Instalação concluída!<br />
Acesse <strong>http://ip-do-seu-servidor/</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150403.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150403-300x158.png" alt="" width="300" height="158" class="alignnone size-medium wp-image-2039" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150403-300x158.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150403-768x403.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150403-1024x538.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150403.png 1680w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><strong>Não sentiu que faltou algo nessa instalação?</strong><br />
<strong>Sim!</strong> No MySQL você definia uma senha para para o usuário root do mysql na instalação, com o MariaDB isso não acontece pois ele vem sem senha de root! Como usuário root não tem senha você não vai conseguir logar com ele no PHPMyAdmin.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144650.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144650-202x300.png" alt="" width="202" height="300" class="alignnone size-medium wp-image-2034" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144650-202x300.png 202w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_144650.png 432w" sizes="auto, (max-width: 202px) 100vw, 202px" /></a></p>
<p>Para alterar a senha do usuário root do MariaDB faça:</p>
<pre class="remontti-code"># mariadb -u root</pre>
<pre class="remontti-code">USE mysql;
UPDATE user SET password=PASSWORD(&#039;SUA-SENHA&#039;) WHERE User=&#039;root&#039;;
UPDATE user SET plugin=&quot;mysql_native_password&quot;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Mas não se assuste! MariaDB é praticamente o seu velho MySQL. Para saber mais acesse: <a href="https://mariadb.com/kb/pt-br/mariadb-versus-mysql-compatibility/" target="_blank" rel="noopener noreferrer">MariaDB versus MySQL &#8211; Compatibilidade</a>. Veja pelo lado bom, não permitindo login com root temos mais segurança!<br />
O que fazer então? Simples crie uma base de dados e um usuário para acessa-la. Eu sempre recomendei usar para cada aplicação um usuário com a sua base, assim numa falha você  não deixa exposto o que não deveria!<br />
Acesse via linha de comando nosso o mariadb (o comando mysql -p funciona também) </p>
<pre class="remontti-code"># mariadb -p</pre>
<p>Por padrão vem sem senha.</p>
<pre class="remontti-code">CREATE DATABASE minhabase;
GRANT ALL PRIVILEGES ON minhabase.* TO &#039;meuusuario&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;minhasenha&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_145812.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_145812-300x106.png" alt="" width="300" height="106" class="alignnone size-medium wp-image-2035" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_145812-300x106.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_145812-768x271.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_145812-1024x362.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_145812.png 1157w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Agora pode acessar seu PHPMyAdmin com seu seu usuário e senha. <strong>http://ip-do-seu-servidor/phpmyadmin</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017-300x157.png" alt="" width="300" height="157" class="alignnone size-medium wp-image-2036" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017-300x157.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017-768x402.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017-1024x536.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150017.png 1680w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150027.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150027-300x158.png" alt="" width="300" height="158" class="alignnone size-medium wp-image-2037" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150027-300x158.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150027-768x404.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150027-1024x539.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150027.png 1680w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Agora vamos habilitar o <a href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html">mod_rewrite</a> do Apache que é muito utilizado. Este é um módulo do Apache que utiliza um mecanismo baseado em regras de reescrita.</p>
<p>Diretório de configurações do Apache fica em <strong>/etc/apache2/</strong></p>
<p>Vamos ao comando para habilita-lo:</p>
<pre class="remontti-code"># a2enmod rewrite</pre>
<p>A página que vimos ao abri o ip do nosso servidor no navegador fica no diretório /var/www/html, isso está sendo informado no arquivo default do apache que fica em <em>/etc/apache2/sites-enabled/000-default.conf</em>, e para que nosso <a href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html">mod_rewrite</a> funcione corretamente será necessário adicionar alguma linhas.</p>
<p>Edite o arquivo /etc/apache2/sites-enabled/000-default.conf (vou usar o editor vim, que não vem instalado por padrão no sistema, mas se você pode usar qualquer edito ex o nano)</p>
<pre class="remontti-code"># vim /etc/apache2/sites-enabled/000-default.conf</pre>
<p>Adicione abaixo de &#8220;<span style="color: #000080;"><strong>DocumentRoot /var/www/html</strong>&#8220;</span> o seguinte:</p>
<pre class="remontti-code">	
	&lt;Directory /var/www/html/&gt;
    		Options FollowSymLinks
    		AllowOverride All
	&lt;/Directory&gt;
</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150942.png" data-rel="lightbox-gallery-FZQNDndw" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150942-300x172.png" alt="" width="300" height="172" class="alignnone size-medium wp-image-2042" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150942-300x172.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150942-768x441.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150942-1024x588.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/06/Screenshot_20170619_150942.png 1192w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Por segurança recomendo remover a assinatura do servidor, evitando os &#8220;espertinhos&#8221;</p>
<pre class="remontti-code"># 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</pre>
<p>Agora precisamos restartar o apache para que tenha efeito nossas alterações.</p>
<pre class="remontti-code"># /etc/init.d/apache2 restart</pre>
<p>Ou</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>Parabéns seu servidor está &#8220;Pronto&#8221;!</p>
<p>O post <a href="https://blog.remontti.com.br/2024">Passo-a-passo como criar um servidor web Apache2, PHP 7.0, MariaDB, PHPMyAdmin &#8220;LAMP&#8221; no Debian 9 Stretch</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2024/feed</wfw:commentRss>
			<slash:comments>47</slash:comments>
		
		
			</item>
	</channel>
</rss>
