¿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:
- Apache2 webserver with php support or Nginx with php-fpm
- Mysql server (5.1+)
- 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
- 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
- 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 :
- Puede descargar e instalar phpipam desde el repositorio oficial de Sourceforge y extraerlo a su directorio de servidor web.
- 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
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.
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.
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?
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.
Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
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
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
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
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.