Установка и настройка phpIPAM

“В каком бы положении люди ни находились, они всегда могут найти удобства и неудобства.”

— Бенджамин Франклин

Довольно часто в небольших, да и в средних компаниях встречаются файлы excel, в которых описано оборудование, IP адреса этого оборудования, подсети, пароли, да и многое другое, что относится к IT. Это еще если повезло с администратором, который вёл такой документ и своевременно его обновлял. А если этого файлика нет? Всё помнит системный администратор? А если этот файл повредится? Или придёт новый сотрудник в помощь текущему системному администратору и ему нужно дать доступ только к части информации о сети?

Сегодня мы рассмотрим бесплатный программный продукт, так называемый IP address management (phpIPAM), что можно перевести как система (для более русского слога) управления IP адресами.

Проверяем требования

Как обычно для начала проверим требования к системе управления IP адресами phpIPAM:

  • WEB - сервер Apache2 или Nginx;
  • СУБД MySQL 5.1+/MariaDB;
  • PHP 7.2+ для phpIPAM 1.3.2+, для версии phpIPAM 1.3.1 нужен PHP 5.3, для 1.4 - 5.4;
  • GIT(для установки);
  • много разных модулей php: pdo, pdo_mysql, session, sockets, openssl, gmp, ldap, crypt, SimpleXML, json, gettext, filter, pcntl, cli, mbstring.

Для более подробного и самостоятельного ознакомления можно посетить официальный сайт.

Установка

Все установки будем делать от пользователя root, поэтому мы не увидим тут команд sudo. Так же в этой статье не будем рассматривать установку SSL сертификата или настройку доменного имени сайта, предполагая, что система будет устанавливаться внутри защищенной сети компании(интранет) только для внутренних нужд этой самой компании. Если Вы всё же решите дать доступ из вне, то можете воспользоваться другими нашими статьями, настройки веб серверов будут аналогичными.

Для начала установим пакет EPEL, где находится модуль php-mcrypt, необходимый для защищенного доступа к API.


# yum install -y epel-release

Так же установим несколько удобных пакетов:


# yum install -y net-tools bind-utils mc

Теперь необходимо установить корректную локализацию, необходимую для корректного перевода и нормального функционирования системы:


# vi /etc/environment

 
LC_ALL=en_US.utf-8
LANG=en_US.utf-8
 

Установка MariaDB

На момент написания статьи в репозитории находится версия 5.5.60. На официальном сайте видим, что текущая версия 5ой - 5.5.64, а 10ой - 10.4. Можно установить самостоятельно с официальной страницы MariaDB.


# vi /etc/yum.repos.d/MariaDB.repo

 
# MariaDB 10.4 CentOS repository list - created 2020-02-26 09:23 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
 

Теперь установим саму базу:


# yum install -y mariadb-server

Включаем автозагрузку и запускаем демон базы MariaDB:


# systemctl enable mariadb
# systemctl start mariadb

Поскольку мы будем использовать наш сервер СУБД в компании, то надо выполнить базовые установки, у MariaDB есть замечательная команда:


# mysql_secure_installation

Во время выполнения этой команды будут задаваться вопросы, они на английском, но не переживайте, здесь нет ничего сложного. В самом начале предлагается ввести текущий пароль от пользователя root от СУБД. Поскольку мы только что установили сервер, то у этого пользователя пароля нет и просто нажимаем клавишу Enter:


Enter current password for root (enter for none):
OK, successfully used password, moving on...

Дальше нам предлагают использовать для авторизации unix_socket, нам это не нужно, поэтому отказываемся и вводим "n":


You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] n

Затем у нас будут спрашивать, нужно ли установить пароль пользователю root, конечно же устанавливаем:


Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!

Далее вопрос по отключению анонимных пользователей, естественно они нам не нужны и мы соглашаемся:


Remove anonymous users? [Y/n] y
... Success!

Отключаем возможность удаленного доступа для пользователя root:


Disallow root login remotely? [Y/n] y
... Success!

Удаляем тестовую базу данных:


Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

И перезагружаем привилегии:


Reload privilege tables now? [Y/n] y
... Success!

На этом установка MariaDB закончена.

Установка Apache

Apache в CentOS 7.7 стоит не самый последний, но и не очень старый(2.4.6 против 2.4.41), поэтому можно устанавливать из репозитория:


# yum install -y httpd

Теперь надо отредактировать файл /etc/httpd/conf/httpd.conf и изменим несколько секций:


# vi /etc/httpd/conf/httpd.conf

 
< Directory "/var/www/html">
 Options FollowSymLinks
 AllowOverride all
 Order allow,deny
 Allow from all
< /Directory>
 

А так же найдём строчку и изменим, например, на адрес Вашего сайта (your_domain):


 
ServerName < your_domain>:80
 

Запускать сервер пока не будем, нам еще надо установить php.

Установка PHP

Можно установить текущую версию, находящуюся в репозитории(5.4.16), можно установить из исходников, но мы установим из пакетов репозитория REMI.

Для этого нам сначала нужно подключить репозиторий EPEL, но мы его уже установили чуть выше, поэтому этот шаг пропускаем и устанавливаем REMI:


# rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm

Теперь посмотрим какие версии php нам доступны:


# ls /etc/yum.repos.d/remi* | grep php
/etc/yum.repos.d/remi-php54.repo
/etc/yum.repos.d/remi-php70.repo
/etc/yum.repos.d/remi-php71.repo
/etc/yum.repos.d/remi-php72.repo
/etc/yum.repos.d/remi-php73.repo
/etc/yum.repos.d/remi-php74.repo

Осталось активировать нужный репозиторий, изменив в секции [remi-php74] параметр enabled на 1:


# vi /etc/yum.repos.d/remi-php74.repo

 
[remi-php74]
name=Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/php74/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/php74/httpsmirror
mirrorlist=http://cdn.remirepo.net/enterprise/7/php74/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
 

Теперь обновим пакеты:


# yum update

На этом подготовительная часть с установкой важных компонентов последних версий закончилась, установим всё скопом:


# yum install -y git php php-{mysql,curl,gd,intl,pear,imap,memcache,pspell,recode,tidy,xmlrpc,mbstring,gettext,json,xml,fpm,cli,common,ldap,pdo,snmp,mcrypt,gmp}

Установим временную зону(timezone) в файле php.ini:


# vi /etc/php.ini

 
date.timezone = Asia/Yekaterinburg
 

Список доступных временных зон можно посмотреть на официальном сайте.

Теперь можно включить в автозагрузку и запустить Apache:


# systemctl enable httpd
# systemctl start httpd

Установка phpIPAM

Теперь приступаем к установке самой phpIPAM. Для этого нам надо зайти в папку и скачать из репозитория:


# cd /var/www/html/
# git clone --recursive https://github.com/phpipam/phpipam.git .
Cloning into '.'...
remote: Enumerating objects: 74, done.
remote: Counting objects: 100% (74/74), done.
remote: Compressing objects: 100% (55/55), done.
remote: Total 24814 (delta 31), reused 43 (delta 19), pack-reused 24740
Receiving objects: 100% (24814/24814), 16.46 MiB | 1.17 MiB/s, done.
Resolving deltas: 100% (18166/18166), done.
Submodule 'app/login/captcha' (https://github.com/dapphp/securimage.git) registered for path 'app/login/captcha'
Submodule 'functions/GoogleAuthenticator' (https://github.com/PHPGangsta/GoogleAuthenticator) registered for path 'functions/GoogleAuthenticator'
Submodule 'functions/PHPMailer' (https://github.com/PHPMailer/PHPMailer.git) registered for path 'functions/PHPMailer'
Submodule 'functions/php-saml' (https://github.com/onelogin/php-saml.git) registered for path 'functions/php-saml'
Submodule 'functions/qrcodejs' (https://github.com/davidshimjs/qrcodejs) registered for path 'functions/qrcodejs'
Cloning into 'app/login/captcha'...
remote: Enumerating objects: 1190, done.
remote: Total 1190 (delta 0), reused 0 (delta 0), pack-reused 1190
Receiving objects: 100% (1190/1190), 11.04 MiB | 2.39 MiB/s, done.
Resolving deltas: 100% (592/592), done.
Submodule path 'app/login/captcha': checked out '1ecb884797c66e01a875c058def46c85aecea45b'
Cloning into 'functions/GoogleAuthenticator'...
remote: Enumerating objects: 209, done.
remote: Total 209 (delta 0), reused 0 (delta 0), pack-reused 209
Receiving objects: 100% (209/209), 35.38 KiB | 0 bytes/s, done.
Resolving deltas: 100% (89/89), done.
Submodule path 'functions/GoogleAuthenticator': checked out
'3baa997f399d4afd5d6a81d42244ec9cc3eeb080'
Cloning into 'functions/PHPMailer'...
remote: Enumerating objects: 44, done.
remote: Counting objects: 100% (44/44), done.
remote: Compressing objects: 100% (27/27), done.
remote: Total 6942 (delta 20), reused 32 (delta 17), pack-reused 6898
Receiving objects: 100% (6942/6942), 4.64 MiB | 4.25 MiB/s, done.
Resolving deltas: 100% (4558/4558), done.
Submodule path 'functions/PHPMailer': checked out '59495db0b14c17f5a370359df0ad7b2e004391a2'
Cloning into 'functions/php-saml'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 5150 (delta 1), reused 1 (delta 0), pack-reused 5143
Receiving objects: 100% (5150/5150), 3.04 MiB | 1.86 MiB/s, done.
Resolving deltas: 100% (3040/3040), done.
Submodule path 'functions/php-saml': checked out 'ea5b7822aa1b4ce14aa88d0e35edf65ebb2f91c8'
Cloning into 'functions/qrcodejs'...
remote: Enumerating objects: 171, done.
remote: Total 171 (delta 0), reused 0 (delta 0), pack-reused 171
Receiving objects: 100% (171/171), 132.13 KiB | 0 bytes/s, done.
Resolving deltas: 100% (80/80), done.
Submodule path 'functions/qrcodejs': checked out '04f46c6a0708418cb7b96fc563eacae0fbf77674'
# git checkout 1.4

Теперь приведём в порядок права на файлы:


# chown apache:apache -R /var/www/html/

Если Вы используете SELinux, то еще внесем необходимые правки:


# chcon -R -t httpd_sys_content_t /var/www/html/

Продолжим приводить в порядок права на файлы:


# cd /var/www/html/
# find . -type f -exec chmod 0644 {} ;
# find . -type d -exec chmod 0755 {} ;

Снова правим настройки SELinux:


# chcon -R -t httpd_sys_rw_content_t app/admin/import-export/upload/
# chcon -R -t httpd_sys_rw_content_t app/subnets/import-subnet/upload/
# chcon -R -t httpd_sys_rw_content_t css/1.4.0/images/logo/

Теперь приступим к настройкам подключения к базе данных:


# cd /var/www/html/
# cp config.dist.php config.php

В этом файле можно изменить настройки подключения к базе:


 
$db['host'] = "localhost";
$db['user'] = "phpipam";
$db['pass'] = "phpipamadmin";
$db['name'] = "phpipam";
 

ВНИМАНИЕ! Очень рекомендуется изменить настройки по-умолчанию, хотя бы пароль.

А если Вы хотите использовать поддиректорию, например, http://your_domain.com/phpipam/, то Вам нужно изменить еще параметр:


 
define('BASE', "/");
 

Теперь заходим на адрес нашего сервера через браузер и… и ничего не произойдет, поскольку мы не правили настройки файервола, исправим:


# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload

Снова заходим на наш сайт. Если Мы не установили какой-либо модуль php, то нам выдаст об этом сообщение, вроде такого:

Не переживайте, доустанавливайте необходимый модуль, перезапускайте Apache:


# systemctl restart httpd

Снова заходим на адрес сайта:

Здесь у нас спрашивают варианты, установка, миграция с другого сервера или возврат к текущему рабочему серверу phpIPAM, если случайно вышло это окно. Выбираем пункт “New phpipam installation”.

Затем нам предлагают выбрать способ установки базы данных, автоматически, используя настройки из файла config.php, с помощью импорта или вручную. Нас интересует первый вариант - “Automatic database installation”.

Далее вводим логин/пароль от пользователя root и параметры подключения к базе данных, можно раскрыть дополнительные параметры нажав кнопку “Show advanced options”. После ввода нажимаем “Install phpipam database”. По завершении установки должен выдать чуть ниже:

Нажимаем "Continue" и теперь надо ввести пароль от учетной записи администратора, а так же название Вашего сайта и адрес сайта:

После сохранения настроек (кнопка "Save settings") появится кнопка "Proceed to login", нажимаем её и остаётся только ввести логин/пароль:

Поздравляю, мы закончили установку:

Маленькие премудрости

Для полноты установки осталось лишь автоматизировать создание резервных копий базы данных. Добавим в крон для ежедневных бэкапов и автоматического удаления архивов старше 10 дней следующее:


# crontab -e

 
@daily /usr/bin/mysqldump -u < your_name> -p < your_password> phpipam > /var/www/html/db/bkp/phpipam_bkp_$(date +"%y%m%d").db
@daily /usr/bin/find /var/www/html/db/bkp/ -ctime +10 -exec rm {} ;
 

Вместо your_name и your_password надо указать имя пользователя и пароль, который использовали в файле config.php. Если Вы изменили еще и название базы данных (по-умолчанию phpipam), то и его нужно изменить в этой строчке.

Помимо всего прочего для корректной работы сканера сети необходимо отключить SELinux или правильно его настроить.


# cd /var/www/html/
# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive

Теперь поставим в автозапуск с интервалом 15 минут запуск скриптов:


# crontab -e

 
# update host statuses exery 15 minutes
*/15 * * * * /usr/bin/php /var/www/html/functions/scripts/pingCheck.php
*/15 * * * * /usr/bin/php /var/www/html/functions/scripts/discoveryCheck.php
 

Русификация

Для каждого пользователя здесь можно настроить свою локализацию. Есть список предустановленных языков, список которых можно посмотреть выбрав пункт меню “Languages” из выпадающего меню “Administration”:

Зайдем в меню “Administration -> Users” и выбираем изменение настроек пользователя admin (нажимаем справа напротив пользователя на шестерёнку, выбираем пункт “Edit user”):

В появившемся окне изменяем настройки языка и перезаходим в phpIPAM.

Можно выставить общесистемные настройки языка и при добавлении нового пользователя будет автоматически выбран нужный язык. Для этого нужно выбрать пункт “Administration -> phpIPAM settings”, а затем уже меняем “Основной язык”:

Краткое описание возможностей

Система управления IP адресами phpIPAM обладает огромными возможностями и гибкостью. С полным списком возможностей Вы можете ознакомиться на официальном сайте. Краткие интересные возможности мы опишем здесь. Конечно же нас интересует наличие системы уведомления изменений, которая реализована через почту:

Для облегчения Вашего труда есть возможности импорта и экспорта из других систем в формате csv файлов:

Можете не переживать об отсутствии каких-либо полей для каждой “сущности”, здесь можно добавлять свои, например, как на скриншоте ниже для сущности “VLAN” добавлены 3 поля:

Очень удобная работа с IP адресами, автоматическим бронированием подсети при создании, масса других возможностей:

К VLAN можно добавлять подсети, сразу видно какие VLAN используются, легко добавлять новые:

Отдельно стоит сказать о сущностях “Устройства” и “Стойки”. При добавлении устройства и привязки его к стойке оно автоматически отрисовывается как на скриншоте ниже:

Обновление phpIPAM

Система управления IP адресами phpIPAM автоматически Вас уведомит о появившемся обновлении значком:

Мы расскажем весь процесс, с которым Вы можете ознакомиться самостоятельно на официальном сайте phpIPAM. Для начала ознакомимся со списком изменений:

Обязательно нужно проверять требования. Например, версия phpIPAM 1.4 не будет работать на PHP версии 5.3.

После проверки требований процесс обновления можно разбить на 3 этапа:

  1. Создание резервной копии(бэкап) базы данных(БД);
  2. Обновление phpIPAM файлов;
  3. Обновление базы данных.

Сделать бэкап базы можно из web интерфейса в разделе “Administration -> Import/Export” или в русской локализации “Администрирование -> Импорт/Экспорт”. Или можно сделать тоже самое из консоли:


# cd /var/www/html/
# /usr/bin/mysqldump -u < your_user> -p < your_password> < your_db_name> > db/bkp/phpipam_migration_backup.db

где:

your_user - пользователь базы данных (можно использовать пользователя из файла config.php)

your_password - пароль для пользователя базы данных (можно использовать пароль пользователя из файла config.php)

your_db_name - название БД (базы данных), указанный в config.php

Еще необходимо скопировать файл config.php:


# cd /var/www/html/
# cp ./config.php ./config.php.bkp

Поскольку мы ставили через git, то и обновить можно через него:


# cd /var/www/html/
# git pull
# git checkout -b 1.4 origin/1.4
# git submodule update --init --recursive

Если возникнут сложности, то можно просто скачать в отдельную папку и заменить файлы в существующей, главное потом не забыть поправить владельца и разрешения файлов:


# chown apache:apache -R /var/www/html/
# cd /var/www/html/
# find . -type f -exec chmod 0644 {} ;
# find . -type d -exec chmod 0755 {} ;

Теперь вернём файл config.php:


# cp ./config.php.bkp ./config.php

Остался третий этап обновления - база данных. Самый простой способ - зайти на сайт и нам предложат сделать всё автоматически:

Вторым предупреждением нам предлагают изменить настройки php, даже указывается какой параметр и на какое значение, идём в консоли в файл /etc/php.ini и изменяем параметр:


# vi /etc/php.ini

 
max_execution_time = 600
 

После этого надо перезапустить сервер Apache:


# systemctl restart httpd

Снова заходим на наш сайт и видим только предупреждение о бэкапе базы данных, который мы сделали в самом начале обновления, нажимаем “Upgrade phpipam database”. Здесь еще есть кнопка с инструкцией для ручного обновления базы данных. Спустя мгновение появится сообщение о переходе в Dashboard (рабочий стол, главная страница). Можем идти за премией - обновление закончено!

Заключение

Мы установили и даже научились обновлять очень интересный программный продукт, который еще и бесплатный. Может показаться, что он нужен только крупным компаниям, но на самом деле эта система управления IP адресами пригодится и для средних компаний, даже в не больших компаниях можно найти применение. По сути это статическая база данных Вашего IT парка, изменения будут вноситься довольно редко, много места не занимает и нагрузки не создает. При этом позволяет быстро найти всё, что Вам нужно.

Помимо всего прочего здесь есть своё API, а значит можно написать своё приложение, которое будет обращаться к этой системе.

Было же не сложно, правда?

Надежные VDS сервера