GLPI no Ubuntu 20.04+ LTS

Olá pessoal. Recentemente um amigo me pediu ajuda para instalar o GLPI no Ubuntu 20.04 LTS, com suporte a envio de e-mails...

Olá pessoal. Recentemente um amigo me pediu ajuda para instalar o GLPI no Ubuntu 20.04 LTS, com suporte a envio de e-mails a partir das clouds mais polulares, como Azure, GCP e AWS. Ele teve alguma dificuldade no processo, pois o material que encontrou na internet pendia de algus detalhes essenciais. Então resolvi escrever este artigo em formato de tutorial, na esperança que seja útil para mais alguém que se encontre na mesma situação.

Para quem não conhece, o GLPI é um sistema muito popular, que faz a função de Central de Serviços (abertura e acompanhamento de chamados).

Instalação

Esta instalação funcionará em qualquer Cloud, Hypervisor ou servidor que tenha um mínimo de 2GB RAM e 20Gb de HD.

A configuração mínima para um bom funcionamento do GLPI é:

  • 2 GB RAM
  • 2 vCPU
  • 20 GB HD

Dica para aumentar o tamanho do HD caso não esteja utilizando LVM

No meu caso, eu utilizei uma cloud image do Ubuntu. A pesar de ser uma abordagem prática, o HD deste tipo de imagem pode ser muito pequeno, conforme podemos ver na imagem a seguir.

Login no Ubuntu via shell

Para expandir o disco, desligue a VM, aumete o tamanho do disco através do console de gerenciamento de seu hypervisor, e ligue a VM novamente. Com isso o disco da VM estará maior, porém o filesystem permanecerá do mesmo tamanho.

Filesystem pequeno da cloud image do Ubuntu

Para expandir o filesystem, execute estes comandos:

$ sudo growpart /dev/sda 1
$ sudo resize2fs /dev/sda1
Filesystem com tamanho aumentado

Softwares

Após fazer a instalação do Ubuntu, começar a preparar a VM:

Atualizar os pacotes:

$ sudo apt-get update
$ sudo apt-get -y upgrade

Instalar e ativar o VM Guest Agent, para que as Clouds e Hypervisors possam obter informações da instância ou VM:

$ sudo apt-get -y install qemu-guest-agent
$ sudo systemctl enable --now qemu-guest-agent.service

Instalar os softwares necessários:

$ sudo apt-get -y install bash-completion chrony xz-utils libarchive-tools bzip2 unzip curl sendmail
$ sudo apt-get -y install apache2 libapache2-mod-php php-soap php-cas 
$ sudo apt-get -y install php-{apcu,curl,gd,imap,ldap,mysql,xmlrpc,xml,mbstring,bcmath,intl,zip,bz2}
$ sudo apt-get -y install php-mail libphp-phpmailer

Banco de Dados:

$ sudo apt-get -y install mariadb-server

A instalação do banco de dados pode demorar alguns minutos, pois o pacote mariadb-server do Ubuntu executa alguns scripts pós instalação. Para acompanhar o processo, abra outro terminal e rode este comando:

$ while true; do ps faxuwww | grep mysql; sleep 5; clear; done

Timezone e Tempo

$ sudo timedatectl set-timezone America/Sao_Paulo
$ sudo systemctl enable --now chrony
$ chronyc sources

É obrigatório que o servidor tenha a hora correta:

Ajuste de hora via NTP

Ajustes do Sistema Operacional

É importante que a VM tenha um hostname bem definido, bem como nome de domínio e timezone configurados corretamente. Estes ajustes são importantes para que o GLIP consiga fazer envio de e-mails, bem como operar corretamente na abertura dos chamados. Também precisamos ajustar o comportamento de rotação padrão de logs, bem como ativar o serviço de disparo de e-mails.

$ sudo hostnamectl set-hostname glpi-lab.linuxelite.com.br
$ sudo sed -i s/weekly/daily/g /etc/logrotate.conf
$ sudo systemctl enable --now sendmail

Web Server

Por padrão o GLPI utiliza Apache como servidor web. Iremos agora criar um diretório para o GLPI, e autorizar o acesso ao mesmo:

$ sudo mkdir -p /var/www/html/glpi
$ sudo -i
# echo -e "<Directory \"/var/www/html/glpi\">\nAllowOverride All\n</Directory>" > /etc/apache2/conf-available/glpi.conf

Ativar a configuração criada:

# a2enconf glpi.conf
# systemctl reload apache2

GLPI

Fazer o download do GLPI:

# wget -O- https://github.com/glpi-project/glpi/releases/download/9.5.4/glpi-9.5.4.tgz | tar -zxv -C /var/www/html/
# exit
Obtendo o GLPI

Alterar o dono dos arquivos para o usuário que executa o Apache (pode ter implicações de segurança, mas devido a forma de operar do GLPI, isso é necessário):

$ sudo chown -vRf www-data:www-data /var/www/html/glpi
Alterando o dono dos arquivos do GLPI

Alterar as permissões dos arquivos:

$ sudo find /var/www/html/glpi -type d -exec chmod 755 {} \;
$ sudo find /var/www/html/glpi -type f -exec chmod 644 {} \;

Criando Usuário e Base de Dados no MariaDB (tome nota da senha, pois será utilizada mais adiante):

$ sudo mysql -e "create database glpidb character set utf8"
$ sudo mysql -e "create user 'glpi_admin'@'localhost' identified by 'k21f7f82a493f01X'"
$ sudo mysql -e "grant all privileges on glpidb.* to 'glpi_admin'@'localhost' with grant option";

Definir uma senha forte para o root do MariaDB (exemplo: labx32g8g93b514g12M):

$ sudo mysql_secure_installation
### responder Y para todas as perguntas ###

Ajustando o timezone do banco de dados, para que o GLPI exiba corretamente dados de tempo e possa trabalhar de forma adequada com os agendamentos:

$ mysql_tzinfo_to_sql /usr/share/zoneinfo | sudo mysql mysql
$ sudo mysql -e "GRANT SELECT ON mysql.time_zone_name TO 'glpi_admin'@'localhost';"
$ sudo mysql -e "FLUSH PRIVILEGES;"

Instalando o GLPI via shell:

$ sudo php /var/www/html/glpi/bin/console glpi:database:install --db-host='localhost' --db-name='glpidb' --db-user='glpi_admin' --db-password='k21f7f82a493f01X'
GLPI instalado

Acertar mais uma vez o dono dos arquivos:

$ sudo chown -vRf www-data:www-data /var/www/html/glpi/files
Ajuste de proprietário dos arquivos

Configuração do CRON para o GLPI poder disparar tarefas automaticamente:

$ sudo -i
# echo -e "* * * * *\troot\tphp\t/var/www/html/glpi/front/cron.php" >> /etc/crontab
# exit
$ sudo systemctl restart cron.service
CRONTAB do GLPI

Remover o diretório de instalação do GLPI, para liberar espaço em disco.

$ sudo rm -vRf /var/www/html/glpi/install

Acesso ao GLPI

Caso já tenha configurado seu FQDN, utilize o mesmo para acessar o GLPI via Web Browser. Caso contrário, utilize o IP da VM ou Instância.

http://glpi-lab.linuxelite.com.br/glpi/
Tela de login do GLPI, ainda sem HTTPS

Para autenticar no GLPI, deve ser utilizado um profile. Existem 4 diferentes profiles, com as respectivas senhas default, que devem ser alteradas tão logo seja realizado o primeiro acesso.

GLPI acessado com o profile “glpi”

Usuários e senhas default dos profiles do GLPI:

  • glpi/glpi (super-admin)
  • tech/tech
  • postonly/postonly (only for helpdesk)
  • normal/normal

Iremos agora criar um Apache URL Rewrite, para que os acessos a raiz do web server sejam redirecionados para o “/glpi”. Exemplo: “http://glpi-lab.linuxelite.com.br” para “http://glpi-lab.linuxelite.com.br/glpi/”

Primeiro ative o módulo:

$ sudo a2enmod rewrite
$ sudo systemctl restart apache2

Edite o virtual host padrão para que faça uso do mod_rewrite. Mas antes, crie um backup do arquivo original:

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.bkp

Substituir o conteúdo do arquivo “/etc/apache2/sites-available/000-default.conf” por este:

Configuração do site HTTP

Verifique se fez tudo certo:

$ apachectl -t
Syntax OK

Criar a política de rewrite:

$ sudo vi /var/www/html/.htaccess
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) /glpi/ [R=301]

Reiniciar o serviço para validar as alterações:

$ sudo systemctl restart apache2

Criptografia SSL no Apache

Existem 2 formas de ativar a criptografia (HTTPS) no Apache: Com certificados digitais comprados (ou gerados e assinados localmente), ou por Let’s Encrypt. Eu recomendo que seja utilizado o Let’s Encrypt, para poupar dinheiro. Basta seguir este link para fazer a configuração.

OBS: O Let’s Encrypt precisa que sejam utilizados IPs válidos (públicos). Porém, existe uma forma de utilizar o Let’s Encrypt em um ambiente que só possua IPs privados (onde o acesso apenas funcione em uma rede local ou através de VPN).

Neste artigo iremos apresentar a abordagem que utiliza um certificado gerado e assinado localmente. Ela não difere muito de um certificado comprado de uma CA oficial.

$ sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/apacheself.key -out /etc/ssl/certs/apacheself.crt

Preencher as resposta de forna que fique similar ao apresentado a seguir:

Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Rio de Janeiro
Locality Name (eg, city) []:Rio de Janeiro
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linux Elite
Organizational Unit Name (eg, section) []:TI
Common Name (e.g. server FQDN or YOUR name) []:glpi-lab.linuxelite.com.br
Email Address []:postmaster@linuxelite.com.br
Criação do certificado digital

Configurar o Apache para uso de SSL:

$ sudo vi /etc/apache2/conf-available/ssl.conf
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
SSLSessionTickets Off

Definir um site SSL:

$ sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bkp

Deixar o arquivo “/etc/apache2/sites-available/default-ssl.conf” com o seguinte conteúdo:

$ sudo vi /etc/apache2/sites-available/default-ssl.conf
Configuração do site SSL (HTTPS)

Ativar todas as alterações:

$ sudo a2enmod ssl
$ sudo a2enmod headers
$ sudo a2ensite default-ssl
$ sudo a2enconf ssl

Verificar se as configurações estão corretas:

$ sudo apachectl -t
Syntax OK

Reiniciar o Apache para que os ajustes entrem em vigor:

$ sudo systemctl restart apache2

Observe que agora existe um serviço HTTPS executando:

$ ss -ta | grep http
LISTEN 0 511 *:https *:*
LISTEN 0 511 *:http *:*
Serviço web HTTP e HTTPS

Se quiser redirecionar automaticamente os acessos HTTP para HTTPS, faça esta alteração no arquivo “.htaccess”:

$ sudo vi /var/www/html/.htaccess
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) /glpi/ [R=301]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://glpi-lab.linuxelite.com.br/$1 [R,L]

Faça um refresh no web browser. Ocorrerá o redirecionameto para HTTPS.

Alerta para certificados auto-assinados por CA Local

Exiba os detlhes do certificado digital.

Informaçoes do certificado auto-assinado

Email Relay

O GLPI não consegue fazer autenticação via usuário e senha nos provedores de correio eletrônico de algumas clouds públicas, e por isso não é possível fazer a configuração de envio de e-mails desta forma. Para contornar o problema, precisamos fazer a distribuição dos e-mails via relay.

Ative as notificações do GLPI:

Ativar notificações do GLPI

Configure o GLPI para utilizar o serviço SMTP que instalamos:

Mail Server utilizando o SMTP local

Verifique nos logs do Postfix que o e-mail foi enviado:

$ tail /var/log/mail.log

Autorizando o Relay no Office365

Esta é a parte mais complicada. No office 365, é necessário descobrir qual o pool SMTP que atende a seu domínio, para poder utilizar esta informação na configuração de relay do Postfix. Use o MX Toolbox para descobrir qual o seu MX SMTP Pool.

FQDN do MX que atende ao domínio na Cloud Office 365

De posse da informação, é hora de configurar o Postfix para fazer o envido dos e-mails através do relay. Utilize este post como referência na configuração do Postfix. Observe apenas o item “3. Office 365 SMTP relay” do post. A parte de configuração de usuário e senha não é necessária, pois iremos autorizar o Mail Flow por IP.

No painel administrativo do Office 365, crie um conector:

Exchange Admin Center > Mail Flow > Connectors > + Add a connector
Tela de exemplo de conector do Mail Flow

Configure desta forma:

Mail flow scenario:
From: Your organization's email server
To: Office 365
Name:
GLPI
Description:
Allow GLPI Mail Relay

Selecione o Radio Button “By verifying the IP address of the sending server matches one of the followig IP addresses, which belong exclusively to your organization“.

No campo disponível, insira o IP público que está associado ao GLPI. Também pode ser utilizado o IP do Nat Gateway, caso o ambiente não utilize IPs válidos.

Autorizando o Relay no GSuite

O sistema de relay é o mesmo para GCP. Basta autorizar os IPs que farão os disparos através da estrutura SMTP do Google.

GSuite Administrator

A configuração de e-mail relay do Postfix pode ser feita de acordo com a documentação do Google. As informações de SMTP do GSuite podem ser consultadas aqui.

Autorizando o Relay na AWS

No caso da AWS, a configuração deve ser feita via SNS. Basta seguir o setup do relayhost do Postfix, utilizando-se das informações contidas na documentação do SNS.

Fim

É isso pessoal. Espero que este material seja útil para quem está com dificuldades para instalar e configurar o GLPI em estruturas mais modernas, como as atuais clouds públicas.

Um abraço.

Fonte: https://linuxelite.com.br/linux/glpi-no-ubuntu-20-04-lts/