DCIM/IPAM com phpIPAM
Introdução
DCIM (Data Center Infraestructure Management) e IPAM (IP Address Management) são ferramentas que nos ajudam a administrar nosso ambiente de Datacenter e nossos recursos IPv4 e IPv6. Tenha em mente que controlar bem esses recursos pode te fazer economizar dinheiro e projetar melhor o crescimento do seu Provedor. Todos temos ciência que recursos de IPv4 público estão escassos e em muitos lugares já se esgotou. No Brasil o esgotamento foi anunciado em 19/8/2020 e atualmente se você deseja um prefixo IPv4 público, será necessário entrar em uma fila de espera de recuperação de recursos IP e tal espera pode ser algo entorno de 5 anos.
O objetivo desse artigo é mostrar a instalação do software phpIPAM, que é um DCIM/IPAM, e mostrar alguns exemplos de configuração. Não será nada tão sofisticado porque você deve configurá-lo conforme sua Operação e porque o objetivo aqui é te mostrar as excelentes possibilidades, para finalmente aposentar sua planilha Excel. Para entendermos o funcionamento dele e como de habitual, trabalharemos orientados em um modelo fictício e demonstrado no diagrama abaixo:
Requisitos
Como de costume utilizaremos o sistema Debian 11 (Bullseye) GNU/Linux e como ambiente não precisaremos de nada tão absurdo:
- VM CPU Common KVM (2) @ 2.199GHz com 4 cores.
- 4Gb de ram.
- Um disco de 50Gb.
Instalação de pacotes base
Você pode dar uma olhada nesse artigo, como uma configuração inicial de ambiente e tenha em mente que esse sistema não deveria estar público na Internet. É um sistema com informações importantes e sigilosas, que só pessoas autorizadas da sua empresa devem ter acesso. Abaixo a lista de pacotes que instalaremos:
# apt install apache2 apache2-utils fping mariadb-server mariadb-client libapache2-mod-php php php-mysql php-cli php-pear php-gmp php-gd php-bcmath php-mbstring php-curl php-xml php-zip php-ldap php-json php-opcache php-readline php-snmp
Configurando o php.ini
Confira as variáveis abaixo e seus valores em /etc/php/7.4/apache2/php.ini. Os valores abaixo são os recomendados pelo pessoal do projeto do phpIPAM.
[PHP] engine = On short_open_tag = Off precision = 14 output_buffering = 4096 zlib.output_compression = Off implicit_flush = Off serialize_precision = 17 zend.enable_gc = On expose_php = Off max_execution_time = 600 max_input_time = 60 memory_limit = 512M error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off log_errors = On log_errors_max_len = 1024 default_mimetype = "text/html" default_charset = "UTF-8" file_uploads = On upload_max_filesize = 2M max_file_uploads = 20 allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 [Date] date.timezone = "America/Sao_Paulo" [mail function] smtp_port = 25 mail.add_x_header = On [SQL] sql.safe_mode = Off [MySQLi] mysqli.max_persistent = -1 mysqli.allow_persistent = On mysqli.max_links = -1 mysqli.cache_size = 2000 mysqli.default_port = 3306 mysqli.reconnect = Off [mysqlnd] mysqlnd.collect_statistics = On mysqlnd.collect_memory_statistics = Off [Session] session.save_handler = files session.use_strict_mode = 0 session.use_cookies = 1 session.use_only_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.cookie_httponly = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 0 session.hash_bits_per_character = 5 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" [ldap] ldap.max_links = -1
Configurando algumas coisas no Apache2
Após conferir e modificar as variáveis acima, habilitaremos o rewrite e ssl no Apache2:
# a2enmod rewrite # a2enmod ssl # a2ensite default-ssl.conf
Melhorar um pouco a segurança:
# perl -i -pe 's%ServerTokens OS%ServerTokens Prod%g' /etc/apache2/conf-available/security.conf # perl -i -pe 's%ServerSignature On%ServerSignature Off%g' /etc/apache2/conf-available/security.conf # systemctl restart apache2.service
Configurando algumas coisas do MariaDB
Agora vamos melhorar um pouco a segurança do MariaDB:
# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n] Y Enabled successfully! Reloading privilege tables.. ... Success! You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] Y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
Por padrão, o MariaDB dispensa a senha de root quando utilizando por linha de comando do shell de root, mas vamos mudar isso agora e inclusive você deve escolher uma senha para o user root da base de dados:
# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 46 Server version: 10.5.18-MariaDB-0+deb11u1 Debian 11 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD("senha_root"); Query OK, 0 rows affected (0,005 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0,000 sec) MariaDB [(none)]> quit
No exemplo acima eu deixei a senha do usuário root da base de dados como sendo senha_root mas você deve escolher a sua e trocar ali no comando.
Criando a database do phpIPAM
A instalação automática da base de dados do phpIPAM não nos permite criar um usuário e senha específicos para acesso, então vamos criar o ambiente antes de instalar.
# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 50 Server version: 10.5.18-MariaDB-0+deb11u1 Debian 11 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE phpipam; Query OK, 1 row affected (0,000 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON phpipam.* TO 'phpipam'@'localhost' IDENTIFIED BY 'senha_user'; Query OK, 0 rows affected (0,004 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0,000 sec) MariaDB [(none)]> quit Bye
Acima criamos a database chamada phpipam e definimos para o user phpipam, a senha senha_user. Não esqueça de trocar essa senha por uma melhor.
Baixando e instalando o phpIPAM
Verifique qual a última versão do phpIPAM para baixar aqui. Nesse momento do artigo é a versão 1.5.1 e siga conforme abaixo:
# cd /usr/local/src # wget -c https://github.com/phpipam/phpipam/releases/download/v1.5.1/phpipam-v1.5.1.tgz # tar -xvzpf phpipam-v1.5.1.tgz # rm /var/www/html/* # mv phpipam/* /var/www/html/ # find /var/www/* -type d -exec chmod 755 {} \; # find /var/www/* -type f -exec chmod 644 {} \; # chown -R www-data: /var/www/html/ # cd /var/www/html/ # cp config.dist.php config.php
Configurando o config.php do phpIPAM
Edite o arquivo config.php, localize logo no início esse trecho de código:
$db['host'] = '127.0.0.1'; $db['user'] = 'phpipam'; $db['pass'] = 'phpipamadmin'; $db['name'] = 'phpipam'; $db['port'] = 3306;
Altere o $db['pass'] = 'phpipamadmin' e no lugar mude phpipamadmin para a senha que você escolheu quando criou a database do phpIPAM, no meu caso deixei como senha_user. Depois da alteração ficaria assim:
$db['host'] = '127.0.0.1'; $db['user'] = 'phpipam'; $db['pass'] = 'senha_user'; $db['name'] = 'phpipam'; $db['port'] = 3306;
Iniciando a configuração do phpIPAM via web
Nesse momento acesse pelo seu navegador a URL contendo o IP do seu servidor phpIPAM. No meu caso, eu instalei no IP 10.0.10.172:
Na tela abaixo, selecione o 1 para criarmos uma nova instalação do phpIPAM.
Na próxima sequência usaremos a opção 1 para instalação automática da database:
Na próxima tela entraremos com o user phpipam, a senha que você definiu para ele, no meu caso deixei como senha_user. Na sequência vamos em Show advanced options, desmarcamos todas as opções e seguimos com a instalação da database.
Nesta próxima tela vamos escolher uma senha para o user admin do phpIPAM, vamos mudar o título do site e configurar a URL do site. Isso tudo podemos alterar mais tarde se quisermos.
Após a instalação teremos a tela de login e após nos identificarmos teremos esse visual:
Adicionando no cron scripts para habilitar recurso de auto discovery e ping check
Em /etc/crontab adicione as seguintes linhas abaixo. Elas serão usadas apenas se marcarmos dentro do phpIPAM o uso delas, caso contrário ficarão disponíveis para quando precisarmos.
*/15 * * * * root /usr/bin/php /var/www/html/functions/scripts/discoveryCheck.php */15 * * * * root /usr/bin/php /var/www/html/functions/scripts/pingCheck.php