Como su nombre compuesto indica, {php}IPAM es una aplicación web de código abierto, para el manejo y administración por medio de lenguaje PHP, de las direcciones del Protocolo de Internet (en inglés Internet Protocol Address Management, IPAM). Su objetivo es proporcionar una gestión de direcciones IP, ligera, moderna y útil. Utiliza backend de base de datos MySQL/MariaDB, bibliotecas jQuery, ajax y características HTML5/CSS3 de Bootstrap.
Entre sus principales funcionalidades, que hacen olvidarnos de productos de pagos, están:
- gestión de direccionamiento 
IPv4/IPv6, - gestión de subredes (
subnetting), - visualización automática de subredes disponibles,
 - visualización gráfica de subredes,
 - descubrimiento automático de nuevos 
hostspor subredes, - comprobaciones automáticas del estado de 
hosts, - autenticación de dominio (
LDAP/Directorio Activo/Radius), - gestión de 
VLAN, - calculadora 
IPv4/IPv6. 
En esta guía se mostrarán los pasos generales para desplegar {php}IPAM en dos de los servidores web más utilizados en redes de computadoras.
- Descargar 
{php}IPAM 
wget https://sourceforge.net/projects/phpipam/files/phpipam-1.4.tar
tar -xvf phpipam-1.4.tar -C /optNOTA: También se puede utilizar la alternativa
GitHub.git clone --recursive https://github.com/phpipam/phpipam.git /opt/phpipam cd /opt/phpipam git checkout -b 1.4 origin/1.4
- Establecer permisos
 
chown -R www-data:www-data /opt/phpipam
find /opt/phpipam -type f \-exec chmod 644 {} \;
find /opt/phpipam -type d \-exec chmod 755 {} \;- Definir parámetros de acceso al sitio y a la base de datos
 
mv /opt/phpipam/config.dist.php /opt/phpipam/config.phpnano /opt/phpipam/config.php
/**
 * database connection details
 ******************************/
$ db ['host'] = 'localhost';
$ db ['user'] = 'phpipam_admin';
$ db ['pass'] = 'My$ecr3tP@s$w0rd.';
$ db ['name'] = 'phpipam_db';
$ db ['port'] = 3306;
/**
 * Path to access phpipam in site URL, http:/url/BASE/
 ******************************/
if(!defined('BASE'))
define('BASE', "/phpipam/");- Instalar paquetes necesarios
 
apt install mariadb-server mariadb-clientNOTA: Después de instalado el gestor de bases de datos, se deben establecer mecanismos de seguridad necesarios para el entorno de trabajo de
MariaDB(establecer contraseña del usuarioroot, etc.), ejecutandomysql_secure_installation.
- Crear base de datos e inicializarla
 
mysql -u root -p
MariaDB [(none)]> CREATE DATABASE phpipam_db;
MariaDB [(none)]> GRANT ALL ON phpipam_db.* TO 'phpipam_admin'@'localhost' IDENTIFIED BY 'My$ecr3tP@s$w0rd.';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;
mysql -u phpipam_admin -p phpipam_db < /opt/phpipam/db/SCHEMA.sql- Crear certificado de seguridad TLS/SSL
 
openssl req -x509 -nodes -days 3650 -sha512 \
    -subj "/C=CU/ST=Provincia/L=Ciudad/O=EXAMPLE TLD/OU=IT/CN=www.example.tld/[email protected]/" \
    -newkey rsa:4096 \
    -out /etc/ssl/certs/exampleWWW.crt \
    -keyout /etc/ssl/private/exampleWWW.key
openssl dhparam -out /etc/ssl/dh2048.pem 2048
chmod 0444 /etc/ssl/certs/exampleWWW.crt
chmod 0400 /etc/ssl/private/exampleWWW.key- Instalar paquetes necesarios
 
apt install apache2 php-cli libapache2-mod-php php-curl php-mysql php-curl php-gd php-intl \
    php-pear php-imap php-apcu php-pspell php-recode php-tidy php-xmlrpc php-mbstring \
    php-gettext php-gmp php-json php-xml php-ldap php-common php-snmp- Definir zona horaria
 
sed -i "s/^;date\.timezone =.*$/date\.timezone = 'America\/Havana'/;
    s/^;cgi\.fix_pathinfo=.*$/cgi\.fix_pathinfo = 0/" \
    /etc/php/7*/cli/php.ini- Crear 
VirtualHost 
nano /etc/apache2/sites-available/exampleWWW.conf
<VirtualHost *:80>
    RewriteEngine on
    RewriteCond %{HTTPS} =off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]
</VirtualHost>
<IfModule mod_ssl.c>
    <VirtualHost www.example.tld:443>
        ServerName www.example.tld
        ServerAdmin [email protected]
        DirectoryIndex index.html
        DocumentRoot /var/www/html
        Alias /phpipam/ "/opt/phpipam/"
        <Directory "/opt/phpipam/">
            DirectoryIndex index.html
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Require all granted
        </Directory>
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/exampleWWW.crt
        SSLCertificateKeyFile /etc/ssl/private/exampleWWW.key
        SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
        SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
        SSLHonorCipherOrder On
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
        ErrorLog ${APACHE_LOG_DIR}/exampleWWW_error.log
        CustomLog ${APACHE_LOG_DIR}/exampleWWW_access.log combined
    </VirtualHost>
</IfModule>- Activar módulos necesarios, 
VirtualHosty reiniciar servidor web 
a2enmod rewrite ssl
a2ensite exampleWWW.conf
systemctl restart apache2.serviceNOTA: Los ficheros de bitácora de acceso (
exampleWWW_access.log) y errores (exampleWWW_error.log), se almacenan en/var/log/apache2/. Para monitorear sus respectivas salidas, ejecutartail -fn100 /var/log/apache2/NOMBRE_FICHERO_LOG.
- Instalar paquetes necesarios
 
apt install nginx-full php-fpm php-curl php-mysql php-curl php-gd php-intl php-pear \
    php-imap php-apcu php-pspell php-recode php-tidy php-xmlrpc php-mbstring \
    php-gettext php-gmp php-json php-xml php-ldap php-common php-snmp- Definir zona horaria
 
sed -i "s/^;date\.timezone =.*$/date\.timezone = 'America\/Havana'/;
    s/^;cgi\.fix_pathinfo=.*$/cgi\.fix_pathinfo = 0/" \
    /etc/php/7*/fpm/php.ini- Crear 
VirtualHost 
nano /etc/nginx/sites-available/exampleWWW.conf
proxy_cache_path /tmp/cache keys_zone=cache:10m levels=1:2 inactive=600s max_size=100m;
server {
    listen 80;
    listen 443 ssl http2;
    root /var/www/html;
    index index.nginx-debian.html;
    server_name www.example.tld;
    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }
    ssi on;
    ssl_certificate /etc/ssl/certs/exampleWWW.crt;
    ssl_certificate_key /etc/ssl/private/exampleWWW.key;
    charset utf-8;
    ssl_dhparam /etc/ssl/dh2048.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling_verify on;
    resolver 127.0.0.1 valid=300s;
    resolver_timeout 5s;
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
    add_header X-Content-Type-Options nosniff;
    proxy_cache cache;
    proxy_cache_valid 200 1s;
    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }
        fastcgi_param HTTP_PROXY "";
        fastcgi_pass unix:/var/run/php/php7*-fpm.sock;
        include snippets/fastcgi-php.conf;
    }
    location ~ /\. {
        deny all;
    }
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        access_log off;
        log_not_found off;
    }
    location /phpipam/ {
        root /opt;
        try_files $uri $uri/ /phpipam/index.php;
        index index.php;
        location ~ ^/phpipam/api/ {
            try_files $uri $uri/ /phpipam/api/index.php;
        }
        location ~ /phpipam/(.+\.php)$ {
            fastcgi_pass unix:/run/php/php7*-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
            include snippets/fastcgi-php.conf;
        }
    }
    access_log /var/log/nginx/exampleWWW_access.log;
    error_log /var/log/nginx/exampleWWW_error.log;
}- Habilitar 
VirtualHosty reiniciar servidor web 
ln -s /etc/nginx/sites-available/exampleWWW.conf /etc/nginx/sites-enabled/
systemctl restart php7*-fpm.service nginx.serviceNOTA: Los ficheros de bitácora de acceso (
exampleWWW_access.log) y errores (exampleWWW_error.log), se almacenan en/var/log/nginx/. Para monitorear sus respectivas salidas, ejecutartail -fn100 /var/log/nginx/NOMBRE_FICHERO_LOG.
Finalmente, acceder a la aplicación web, introduciendo la dirección https://www.example.tld/phpipam/, en el navegador de preferencia y usar el par usuario/contraseña (admin/ipamadmin) para efectuar el login.
NOTA: Luego de efectuarse el
login, el sistema pide cambiar la clave por defecto del usuarioadmin.
La explotación del sistema, si se es administrador de red, o se tienen conocimientos de redes, direccionamiento IPv4/IPv6, VLANs, DNS, etc.; no es complicada. No obstante, en las referencias, se listan enlaces que pueden servir de ayuda o realizar búsquedas en Internet acerca del tema.
Sin dudas, {php}IPAM es una alternativa fabulosa ante las muchas opciones privativas existentes, desde Infloblox hasta la característica IPAM de Microsoft disponible a partir de Microsoft Windows Server 2008 y posteriores.
- phpIPAM Open-source IP address management
 - phpipam installation guide
 - phpIPAM on nginx
 - Reset phpipam admin password
 - ¿Cómo usar phpIPAM como herramienta auxiliar en Pandora FMS?
 - Tag: phpIPAM
 - Installing phpIPAM on Ubuntu 16.04
 - Instalar phpIPAM en Debian 9 con Nginx y MariaDB
 - Best Free & Paid IPAM Tools for IP Address Tracking & Management