0x01 前言

无论在家还是在公司,IP地址都非常重要,随着设备或虚拟机的增多会导致IP地址也随之增长。随着IP地址使用量的增长,会对管理人员造成很大的压力。一方面来自不清楚哪些IP地址被占用,另一方面则来自hostname、MAC地址与IP的对应关系的管理。

因为我家里的虚拟机较多,也想对DHCP发放出去的IP地址进行管理,在经过一番查找后,找到了phpipam这款开源工具。

0x02 安装

phpipam是一款PHP应用,可以自动发现在线用户、存活检查等功能的IP管理软件,以下是官方网站:

首先需要准备LNMP环境以便运行phpipam,下面是我的nignx配置:

[[email protected] ~]# cat /usr/local/nginx/conf.d/phpipam.t.com.ngx.conf 
server {
    listen                  80;
    server_name             phpipam.t.com;
 
    root                    /usr/local/services_data/html/phpipam.t.com/public_html/;
    access_log              /usr/local/services_data/html/phpipam.t.com/logs/access.log;
 
    location / {    

      index               index.php index.html;
      proxy_pass          http://127.0.0.1:8080;

    }
 
}

以下是PHP-FPM配置:

[[email protected] ~]# cat /usr/local/php7/etc/php-fpm.d/phpipam.t.com.conf 
[phpipamtcom]
;useradd -M -s /sbin/nologin -n phpipamtcom
listen = 127.0.0.1:9003
user = phpipamtcom
group = daemon
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /usr/local/services_data/html/phpipam.t.com/logs/fpm-php.log
php_flag[display_errors] = off
php_admin_value[memory_limit] = 128M
pm.max_requests = 3000
request_terminate_timeout = 300

以下是apache2的配置文件:

[[email protected] ~]# cat /etc/httpd/conf.d/phpipam.t.com.apa.conf 
<VirtualHost 127.0.0.1:8080>
        DocumentRoot /usr/local/services_data/html/phpipam.t.com/public_html/
        ServerName phpipam.t.com
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9003/usr/local/services_data/html/phpipam.t.com/public_html/$1
        ErrorLog /usr/local/services_data/html/phpipam.t.com/logs/apa.error.log
</VirtualHost>

还需要准备mysql,推荐使用mariadb替换mysql 。环境确认准备完成后即可通过以下地址获取最新版本的phpipam进行安装:

根据这页面上的说明,我们通过git命令即可获取所有文件:

#新建临时文件夹
[[email protected] ~]# mkdir -p /root/codex/

#进入文件夹
[[email protected] ~]# cd /root/codex/

#克隆文件
[[email protected] codex]# git clone https://github.com/phpipam/phpipam.git

#进入源码文件夹
[[email protected] codex]# cd /root/codex/phpipam/

#检出版本1.2
[[email protected] phpipam]# git checkout 1.2

#安装submodule
[[email protected] phpipam]# git submodule update --init --recursive

#复制文件到指定位置
[[email protected] phpipam]# cp -r /root/codex/phpipam/ /usr/local/services_data/html/phpipam.t.com/public_html

#修正权限
[[email protected] phpipam]# chown -R phpipamtcom:daemon /usr/local/services_data/html/phpipam.t.com/

然后在数据库中新建相应的用户与数据库,在这里我使用用户名、密码和数据名为phpipam的数据库。然后通过以下命令将phpipam的数据库导入:

[[email protected] phpipam]# mysql -u phpipam -p phpipam < /usr/local/services_data/html/phpipam.t.com/public_html/db/SCHEMA.sql

0x03 配置文件

我们还需要修改配置文件,首先将配置文件模版重命名:

#进入站点根目录
[[email protected] ~]# cd /usr/local/services_data/html/phpipam.t.com/public_html/

#复制并重命名配置文件
[[email protected] public_html]# mv config.dist.php config.php

#修改配置文件
[[email protected] public_html]# vim config.php

将以下数据库内容按实际情况修改:

$db['host'] = "sql.t.com";
$db['user'] = "phpipam";
$db['pass'] = "phpipam";
$db['name'] = "phpipam";
$db['port'] = 3306;

如果你想使用数字证书加密与数据库的连接,请跳过此步,否则请将以下内容注释掉:

#$db['ssl']        = false;                           # true/false, enable or disable SSL as a whole
#$db['ssl_key']    = "/path/to/cert.key";             # path to an SSL key file. Only makes sense combined with ssl_cert
#$db['ssl_cert']   = "/path/to/cert.crt";             # path to an SSL certificate file. Only makes sense combined with ssl_key
#$db['ssl_ca']     = "/path/to/ca.crt";               # path to a file containing SSL CA certs
#$db['ssl_capath'] = "/path/to/ca_certs";             # path to a directory containing CA certs
#$db['ssl_cipher'] = "DHE-RSA-AES256-SHA:AES128-SHA"; # one or more SSL Ciphers

0x04 运行

一切就绪后使用浏览器打开:http://phpipam.t.com/ 即可看到登陆页面,使用默认的账号:admin和密码:ipamadmin进行登陆,第一次登陆会要求修改密码。

0x05 DNS

我家里配置了DNS服务器,并且DNS服务中启用了PTR功能,所以将phpipam的DNS服务器改为我的DNS服务器即可实现hostname自动发现功能,通过以下路径打开DNS服务器配置:

然后请根据实际情况填写即可:

0x06 网段

请依照图中的路径进入网段配置:

然后请根据实际情况填写:

一切顺利的话,在用户页面中即可看到相应的网段:

点击配置好的网段,即可查看该网段的详细信息:

上图蓝色长框中的工具可以实现基本的操作,诸如发现在线用户、检查用户是否在线、获取用户的hostname于修改配置等。

0x07 自动任务

我们想实现全自动化功能,可以自动发现在线用户并定时自动复检。为此我们还需要配置一个agent来完成这样的工作。

首先需要通过git下载相应的文件:

#进入文件夹
[[email protected] ~]# cd /usr/local/services_data/html/phpipam.t.com/

#克隆文件
[[email protected] phpipam.t.com]# git clone https://github.com/phpipam/phpipam-agent.git

#复制并重命名配置文件
[[email protected] phpipam.t.com]# cp phpipam-agent/config.dist.php phpipam-agent/config.php

再继续下一步之前需要到控制页面中取得一个key,首先进入配置页面并点击添加agent:

请填写agent的名称于描述并记下agent code:

记下code后打开配置文件:

#打开配置文件
[[email protected] phpipam.t.com]# vim phpipam-agent/config.php

#将以下值替换为刚才复制的code
$config['key'] = "替换为code";

#修正以下路径
$config['pingpath'] = "/usr/sbin/fping";

#修正数据库配置信息
$config['db']['host'] = "sql.t.com";
$config['db']['user'] = "phpipam";
$config['db']['pass'] = "phpipam";
$config['db']['name'] = "phpipam";
$config['db']['port'] = 3306;

#如果你的数据库不使用证书加密连接,请注释以下内容
#$config['db']['ssl']        = false;                           // true/false, enable or disable SSL as a whole
#$config['db']['ssl_key']    = '/path/to/cert.key';             // path to an SSL key file. Only makes sense combined with ssl_cert
#$config['db']['ssl_cert']   = '/path/to/cert.crt';             // path to an SSL certificate file. Only makes sense combined with ssl_key
#$config['db']['ssl_ca']     = '/path/to/ca.crt';               // path to a file containing SSL CA certs
#$config['db']['ssl_capath'] = '/path/to/ca_certs';             // path to a directory containing CA certs
#$config['db']['ssl_cipher'] = '/DHE-RSA-AES256-SHA:AES128-SHA'; // one or more SSL Ciphers

完成配置文件的修改后,请检查你的系统中有没有fping这个软件:

[[email protected] phpipam.t.com]# fping -v
fping: Version 3.10
fping: comments to [email protected]

如果没有,请通过以下命令安装:

[[email protected] phpipam.t.com]# yum install fping -y

最后请通过以下命令检查配置agent时候能正常运行:

#发现在线IP
[[email protected] ~]# /usr/local/php7/bin/php /usr/local/services_data/html/phpipam.t.com/phpipam-agent/index.php discover

#复检已添加的IP
[[email protected] ~]# /usr/local/php7/bin/php /usr/local/services_data/html/phpipam.t.com/phpipam-agent/index.php update

运行update后可以回到控制面板中检查相关的状态:

请点击箭头所指的符号修改Scan agent为刚配置的agent。

0x08 定时任务

这个agent并不会自动运行,所以我们还需要借助cron job来定时运行:

#修改文件
[[email protected] ~]# vim /etc/crontab

#填入任务,每5分钟运行一次
*/5 * * * * root /usr/local/php7/bin/php /usr/local/services_data/html/phpipam.t.com/phpipam-agent/index.php update
*/5 * * * * root /usr/local/php7/bin/php /usr/local/services_data/html/phpipam.t.com/phpipam-agent/index.php discover

0x09 结语

这个软件的功能挺强大的,我也是刚接触。我一直使用excel来管理相关内容,但对于DHCP服务就显现了他的短板。我会继续挖掘phpipam的功能。