Instalar phpIPAM en Debian 9 con Nginx y MariaDB.

¿Estas cansado de tener que recordar las IP’s de tu Red? ¿Posees un entorno de Red complejo con muchas subredes, VLANS y equipos? ¿Necesitas tener toda esa información organizada en un solo lugar para saber que IP’s tienes libres y poderlas usar? Todas estas preguntas tienen una respuesta simple, phpIPAM. Pero que es phpIPAM:

Phpipam es una aplicación de gestión de direcciones IP web de código abierto (IPAM). Su objetivo es proporcionar una gestión de direcciones IP ligera, moderna y útil. Es una aplicación basada en php con base de datos MySQL, que utiliza bibliotecas jQuery, ajax y HTML5 / CSS3.

Características de phpIPAM.

  • IPv4/IPv6 IP address management
  • Section / Subnet management
  • Automatic free space display for subnets
  • Visual subnet display
  • Automatic subnet scanning / IP status checks
  • PowerDNS integration
  • NAT support
  • RACK management
  • Domain authentication (AD, LDAP, Radius)
  • Per-group section/subnet permissions
  • Device / device types management
  • RIPE subnets import
  • XLS / CVS subnets import
  • IP request module
  • REST API
  • Locations module
  • VLAN management
  • VRF management
  • IPv4 / IPv6 calculator
  • IP database search
  • E-mail notifications
  • Custom fields support
  • Translations
  • Changelogs

En este tutorial les mostrare como instalar la última versión (hasta la fecha) sobre un contenedor de Proxmox con Debian 9.

Requisitos de nuestro Contenedor

  • CPU x 1 Core
  • 512 MB RAM
  • 8 GB Disco
  • OS Debian 9

Como pueden apreciar phpIPAM consume muy poco, ya que solo es una web que se instala sobre Apache/Nginx y como base de datos MariaDB/MySql. Antes de comenzar a instalar phpipam, asegúrese de cumplir los siguientes requisitos:

  1. Apache2 webserver with php support or Nginx with php-fpm
  2. Mysql server (5.1+)
  3. PHP:
    • version 5.3 supported to phpipam version 1.3.1
    • version 5.4
    • version 7.2 and higher supported from phpipam release 1.3.2
  4. PHP modules:
    • pdo, pdo_mysql : Adds support for mysql connections
    • session : Adds persistent session support
    • sockets : Adds sockets support
    • openssl : Adds openSSL support
    • gmp : Adds support for dev-libs/gmp (GNU MP library) -> to calculate IPv6 networks
    • ldap : Adds LDAP support (Lightweight Directory Access Protocol – for AD also)
    • crypt : Add support for password encryption
    • SimpleXML: Support for SimpleXML (optional, for RIPE queries and if required for API)
    • json: Enable JSON support
    • gettext: Enables translation
    • filter : Adds filtering support
    • pcntl : Add support for process creation functions (optional, required for scanning)
    • cli : Enable CLI (optional, required for scanning and status checks)
    • mbstring : Enable mbstring support
  5. php PEAR support

Instalación de phpIPAM

Comenzamos actualizando nuestro contenedor (CT) para siempre usar las últimas versiones.

apt update
apt upgrade

Ahora sigue nuestro servidor web que en este caso utilizaremos Nginx, ya que en la mayoría de los tutoriales sobre phpIPAM que existen usan Apache2.

apt install nginx

Como se aprecia en los requisitos necesitamos PHP y como usamos Nginx también necesitaremos php-fpm, además de los módulos obligatorios.

apt install php7.0-fpm php7.0-curl php7.0-gd php7.0-mysql php7.0-cli php7.0-imap php7.0-ldap php7.0-apcu php7.0-xmlrpc php7.0-mbstring php7.0-xml php-cas php-pear php7.0-gmp

Podemos comprobar que todo se cumple con este simple comando

php -i

Una vez terminado configuraremos nuestros servicios de web.

nano /etc/php/7.0/fpm/pool.d/www.conf

Buscaremos la línea:
 listen = /run/php/php7.0-fpm.sock
y lo sustituimos por:
 listen = 127.0.0.1:9000

Nota: Si desea puede dejar la conexion por socket al fpm, tendra que configurarlo asi tambien para su sitio usando

fastcgi_pass   unix:/run/php/php7.0-fpm.sock;

Ahora viene un paso que no parece tener importancia, pero les ahorrara muchos dolores de cabeza. Después de horas intentando la actualización automática del estado de las IP’s me di cuenta del error que tenía, era algo tan sencillo como tener diferencia de hora entre el contenedor (CT) y la web de phpIPAM. Para evitar esto configuramos:

nano /etc/php/7.0/cli/php.ini

Buscamos:
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone

Definimos nuestra zona horaria
date.timezone = America/Havana

Repito solo haciendo esto lograran ver el estado real de sus IP’s , ya que no habrá diferencias de hora y la tarea programada que usaremos no se perderá. Para comprobar q todo este bien entramos a la web y comparamos la hora de la web y del PC.

Editamos el fichero de configuración de Nginx para phpIPAM.

nano /etc/nginx/sites-enabled/phpipam
Dentro pondremos esto:

server {
        listen   80 default_server;
        #listen      443 ssl;
        root /var/www/html;
        index index.php;
        server_name phpipam.mi.dominio.cu;
        charset utf-8;
        
                        
        # <- your SSL Settings here!
        #ssl_certificate /etc/ssl/ipam/server_crt.pem;
        #ssl_certificate_key /etc/ssl/ipam/server_key.pem;
        #ssl_trusted_certificate /etc/ssl/ipam/server_crt.pem;
        #ssl_session_timeout 1d;
        #ssl_session_cache shared:SSL:50m;
        #ssl_session_tickets off;

     
        # phpipam
       location /phpipam/ {
        try_files $uri $uri/ /phpipam/index.php;
        index index.php;
                          }
       # phpipam - api
       location /phpipam/api/ {
        try_files $uri $uri/ /phpipam/api/index.php;
                              }
                      
        #prise en charge PHP
        location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param SERVER_NAME $host;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
                           }
}

Les deje comentado la sesión de usar seguridad https mediante SSL, por si en un futuro desean activarla.

systemctl restart nginx

systemctl restart php7.0-fpm.service

Nos toca ahora instalar el servidor de bases de datos que usaremos en este caso sería MariaDB. Les mostrare como instalar la más reciente versión de la misma.

apt install software-properties-common dirmngr

Necesitamos agregar al sourcelist:

deb http://mirror.zol.co.zw/mariadb/repo/10.4/debian stretch main

El nuevo repositorio agregado para MariaDB usa su llave (key) por lo tanto la agregamos:

sin proxy
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8

con proxy
apt-key adv --keyserver-options http-proxy=http://proxyIP:port/ --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xF1656F24C74CD1D8

Actualizamos nuevamente y seguido instalamos MariaDB

apt update

apt install mariadb-server

Comprobamos

root@phpIPAM:~# systemctl status mysql
* mariadb.service - MariaDB 10.4.0 database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           `-migrated-from-my.cnf-settings.conf
   Active: active (running) since Sat 2018-11-17 19:44:51 UTC; 8s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 31350 (mysqld)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           `-31350 /usr/sbin/mysqld

Nov 17 19:44:50 phpIPAM systemd[1]: Starting MariaDB 10.4.0 database server...
Nov 17 19:44:51 phpIPAM mysqld[31350]: 2018-11-17 19:44:51 0 [Note] /usr/sbin/mysqld (mysqld 10.4.0-MariaDB-1:10.4.0+maria~stretch) starting as process 31350 ...
Nov 17 19:44:51 phpIPAM systemd[1]: Started MariaDB 10.4.0 database server.

Y podemos ver que nos instaló una versión más reciente que si hubiésemos usado un apt install mariadb-server 

Aseguramos el servidor

mysql_secure_installation
Introducimos la clave de root para entrar al MySql, pondremos las misma que nos pidio
cuando se instalo. Pedira cambiarla, se la cambiamos por otra o ponemos la misma.
Luego respondemos que si (yes) a todas las preguntas que nos haga hasta salir.

Ahora lo configuramos

mysql -u root -p

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'tu clave';

flush privileges;

quit

NOTA: Mas seguro es si usan otro usuario como phpipam por ejemplo.

Descargaremos la última versión de phpIPAM, a la fecha de este tutorial es la versión 1.3.2. Hay 2 métodos :

  1. Puede descargar e instalar phpipam desde el repositorio oficial de Sourceforge y extraerlo a su directorio de servidor web.
  2. O simplemente usar GitHub:
[root@ipam /]# GIT clone --recursive https://github.com/phpipam/phpipam.git /var/www/html/phpipam
[root@ipam /]# cd /var/www/html/phpipam
[root@ipam /var/www/html/phpipam]# git checkout -b 1.3 origin/1.3

Usaremos el 1er método ya que es el más sencillo. Vamos al repositorio oficial de Sourceforge y bajamos phpipam-1.3.2.tar . Puede que tengan que usar algún método alternativo para bajarlo por estar cerrado para Cuba.

tar -xvf phpipam-1.3.2.tar -C /var/www/html

La web de phpIPAM tiene una plantilla de configuración, nos basaremos en ella y la copiaremos para editarla:

cp /var/www/html/phpipam/config.dist.php /var/www/html/phpipam/config.php
nano /var/www/html/phpipam/config.php

Buscar en database connection details y editar
$db['host'] = "localhost";
$db['user'] = "phpipam";      #cambiar a root
$db['pass'] = "phpipamadmin"; #clave de root q usamos con mariadb
$db['name'] = "phpipam";

Buscar en BASE definition if phpipam is not in root directory (e.g. /phpipam/)
cambiar a:
if(!defined('BASE'))
define('BASE', "/phpipam/");

Daremos permisos a las carpetas de phpIPAM para que Nginx las use

chown -R www-data:www-data /var/www/html/

Finalmente nos queda entrar a la web usando http://ip_phpipam/phpipam

En la 1era pantalla nos preguntara si queremos hacer una instalación nueva o subir de versión. Le diremos que instalación nueva, seguido usaremos la opción de instalación automática de las bases de datos. En la cual debemos llenar los datos del usuario que usamos para entrar y crear bases de datos (root) y la clave (‘tu clave’) que le definimos al configurarlo. Si todo esta correcto se crearan las bases de datos y seguido nos pedirá introducir la clave del usuario admin. Finalmente nos autenticamos como admin y veremos el dashboard de phpIPM. Aquí les dejo una captura final.

La interfaz es muy fácil de entender, pueden borrar todos los ejemplos que trae luego de entender su filosofía. Lo primero es crearte sección o editar la customer que trae, le ponemos nuestros datos. Dentro de ella podemos crear carpetas en orden jerárquico y en cada carpeta ubicar nuestras subredes y VLANS para un mayor orden.

Ahora les mostrare como usar FPing para escanear sus redes. Primero lo instalamos:
apt install fping

Lo probamos en nuestro CT haciendo ping a cualquier IP de nuestra red

root@phpipam:~# fping 10.122.193.2
10.122.193.2 is alive

En la web del phpIPAM configuramos que usaremos fping y no ping. Vamos a:
Menú de Administración, phpIPAM setting y nos desplazamos al final donde se encuentra las características del ICMP.

Es muy importante definir el camino correcto al comando fping(/usr/bin/fping). En el tipo de escaneo seleccionamos fping. ¿Como puedo automatizar el proceso de refrescamiento y escaneo de IP?

-Disponibilidad automática de host y verificación de descubrimiento

En primer lugar, se recomienda el soporte de pcntl para php cli para que phpipam pueda hacer verificaciones paralelas de icmp, esto reduce considerablemente el tiempo requerido para verificar el estado. Puede verificar si su instalación está bien con el siguiente comando:

php -m | grep pcntl

Ahora tiene que seleccionar qué subredes deben buscar estados para los hosts configurados.
Vaya a editar subred y marque «Comprobar el estado de los hosts». Esto le indicará al script cron que verifique el estado de los hosts dentro de esta subred. «Descubrir nuevos hosts» intentará encontrar nuevos hosts para esta subred y los agregará automáticamente a la base de datos de phpipam.

Finalmente creamos una tarea en el cron

nano /etc/crontab

Agregamos las siguientes tareas:

#  NUEVOS ESCANEADOS DE SUBREDES
*/30 * * * * root /usr/bin/php /var/www/html/phpipam/functions/scripts/discoveryCheck.php
#
#  CHEQUEOS DE HOST EXISTENTES
*/15 * * * * root /usr/bin/php /var/www/html/phpipam/functions/scripts/pingCheck.php
#
# RESUELVE LAS DIRECCIONES IP QUE SE ENCUENTRAN (NOTA:  Este es un proceso separado, todos juntos desde la verificación de host up/down)
*/30 * * * * root /usr/bin/php /var/www/html/phpipam/functions/scripts/resolveIPaddresses.php
#
# BACKUP DE LA TABLA IP, Y PURGAR BACKUPS MAYORES DE 10 DÍAS
#
@daily root /usr/bin/mysqldump -u root -p[claveBD] phpipam > /var/www/html/phpipam/db/bkp/phpipam_bkp_$(date +"\%y\%m\%d").db
@daily root /usr/bin/find /var/www/html/phpipam/db/bkp/ -ctime +10 -exec rm {} \;

Se puede apreciar que cada 15 minutos se escaneara la subred chequeando el estado de esas direcciones IP’s. Cada 30 minutos se escanea en busca de nuevas direcciones IP’s que agregar. Los demás son muy fácil de entender. Queda por ustedes seguir configurando esta útil herramienta que le facilita la vida a cualquier SysAdmin.

Como actualizar su phpIPAM

En general, actualizar phpipam es un proceso que contiene 3 pasos separados:

Copia de seguridad de la base de datos de  y del archivo config.php
Actualizar el código phpIPAM
Actualizar la base de datos phpIPAM

El primer paso ya esta cubierto porque en el CRON les deje una tarea de salva diaria de la Base de Datos. Salvamos el archivo config.php

cd /var/www/html/phpipam/
cp config.php /root/config.php

Bajamos la version nueva y la copiamos a /var/www/html

tar -xvf phpipam-1.X.tar -C /var/www/html

Restauramos si es necesario la configuración.

cp /root/config.php /var/www/html/phpipam/config.php

Abra el navegador y siga el procedimiento de actualización.

Finalmente si todo fue satisfactorio podemos entrar al dashboard y tendremos el phpIPAM actualizado.

Nota: Agradecimientos a Héctor (AKA @nihilanthlnxa) y a Jorge de la Cruz por mostrarme la existencia de este maravilloso programa. Si desean hacer este mismo tutorial pero usando Ubuntu, Apache2 y MySQL pueden hacerlo aquí en el blog de Jorge.
alex out

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 5 / 5. Recuento de votos: 6

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Alexander Rivas Alpizar 61 artículos
Administrador de Redes IDEAR Cienfuegos

6 comentarios

  1. Google Chrome 101.0.4951.54 Google Chrome 101.0.4951.54 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36

    Hola estimado, yo sigo los pasos para mantener scaneado los host activos, pero no lo hace, siempre estan los host sin el circulito en verde…

    ¿me podrias ayudar por favor?

  2. Firefox 63.0 Firefox 63.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0

    Muy bien, pero en vez de editar el crontab, se debería emplear el cron del propio usuario root, con crontab -e, evitando especificar el usuario, No sabía que no conocías la herramienta, pues es ya tiene tiempo su desarrollo y lo tengo en explotación hace tiempo, Muy utilil para llevar el registro y control de todas nuestras ip en la red de la empresa.


  3. Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
    Firefox 62.0 Firefox 62.0 Ubuntu x64 Ubuntu x64
    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0

    Y si de paso hicieras una imagen de docker y la dejaras lista. Incluyendo un compose.yml que incluya las dependencias, como mariadb y demas. Seria ideal para muchos

    • Firefox 63.0 Firefox 63.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0

      Bueno lo pensare, ya q no uso docker. Si un amigo me ayuda y lo crea, se lo pongo aqui en otra actualizacion del tuto

  4. Firefox 63.0 Firefox 63.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0

    Ahora les mostrare como usar FPing para escanear sus redes.
    para cuando seria eso.?
    ..me gusta mucho este tutorial…gracias

    • Firefox 63.0 Firefox 63.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0

      JAJAJAJA disculpa es q lo estabas leyendo cuando lo estaba actualizando, ya esta totalmente actulizado. Gracias por leer.

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*