开源IP地址管理工具—phpIPAM部署和配置
liuian 2025-05-22 11:45 4 浏览
在企业运维管理中,管理IP地址通常是一项挑战,有的采用Excel管理、有的用在线共享文档管理,这两个管理方式都在解决2个问题:1)记录IP地址信息;2)多人协作;今天介绍如何安装和使用开源的IP地址管理工具—“phpIPAM”,并在文章内详解介绍部署过程。
phpIPAM概述
phpIPAM是一个开源 Web IP 地址管理应用程序 (IPAM)。其目标是提供轻便、现代且有用的 IP 地址管理。它是基于 php 的应用程序,具有 MySQL 数据库后端,使用 jQuery 库、ajax 和 HTML5/CSS3 功能,其功能清单如下:
- IPv4/IPv6 IP 地址管理;
- 部分/子网管理,VLAN管理、VRF管理;
- 自动显示子网的可用空间;
- 可视化子网展示;
- 自动子网扫描/IP状态检查;
- PowerDNS 集成;
- 网络地址转换支持;
- 机架管理;
- 域认证(AD、LDAP、Radius);
- 设备/设备类型管理;
- IP请求模块;
- IPv4/IPv6计算器;
- 自定义字段支持;
- REST Api;
服务器规划
服务器名称 | IP地址 | 硬件配置 | 用途 |
mgmt-ipam | 192.168.10.100 | 2C/4G/80G | 服务器 |
环境及软件版本信息
软件名称 | 版本 | 备注 |
Rocky Linux | 8.8 | 推荐使用高版本操作系统。 |
Nginx | 1.22.x | Rocky Linux提供的最高版本。 |
PHP | 7.4.x | phpIPAM支持的最新版本。 |
phpIPAM | 1.5.x | 最新版本。 |
mySQL | 8.0.x | Rocky Linux提供的最高版本。 |
安装基础环境软件
首先,修改系统默认的Nginx和php版本。
sudo dnf module switch-to php:7.4 nginx:1.22
再安装所需的软件包。
sudo dnf install -y mysql-server nginx php-fpm php-cli php-gd php-common php-ldap php-pdo php-pear php-snmp php-xml php-mbstring php-gmp php-json php-mysqlnd git
MySQL数据库部署
设置MySQL自启动和启动服务,完成MySQL数据库的初始化工作。
sudo systemctl enable --now mysqld
对MySQL数据库进行初始化,并配置root密码。
sudo mysql_secure_installation
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
#建立密码验证插件,选择“y”
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: y
#选择密码规则,选择“0”,密码大于等于8位
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Please set the password for root here.
New password:
Re-enter new password:
#提示是否继续使用此密码规则,选择“y”
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
#删除匿名用户,选择“y”
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
#禁止root远程登录,选择“y”
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
#删除测试数据库,选择“y”
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
#重新加载权限表,选择“y”
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
创建phpIPAM数据库和用户
此步骤并不是必须的,后续的安装向导中可以使用Root用户自动创建。
mysql -u root -p
create database phpipam;
CREATE USER 'phpipam'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'phpipam'@'%' WITH GRANT OPTION;
配置并启动php-fpm环境
修改正确的时区,以使php警告和其他与时间相关的功能正确显示时间。
sudo sed -i "s/^;date.timezone =/date.timezone = Asia\/Shanghai/g" /etc/php.ini
启动php-fpm服务。
sudo systemctl enable --now php-fpm
配置Nginx服务器
这里推荐使用Nginx作为Web服务器,因为Nginx的速度更快,配置和管理SSL证书更容易。 针对phpIPAM,我们可以使用两种不同的配置:
选项1:使用80端口提供服务,支持通过IP或域名访问
server {
listen 80;
server_name _;
server_tokens off;
access_log /var/log/nginx/phpipam.access.log;
error_log /var/log/nginx/phpipam.error.log;
root /var/www/phpipam;
location / {
try_files $uri $uri/ /index.php;
index index.php;
}
location /api/ {
try_files $uri $uri/ /api/index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
try_files $uri $uri/ index.php = 404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
选项2:使用443端口提供服务,需要提前准备证书,支持通过域名访问
server {
listen 80;
server_name mgmt-ipam.corp.local;
server_tokens off;
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mgmt-ipam.corp.local;
access_log /var/log/nginx/phpipam.access.log;
error_log /var/log/nginx/phpipam.error.log;
root /var/www/phpipam;
ssl_certificate "/usr/local/certs/mgmt-ipam-chain.pem";
ssl_certificate_key "/usr/local/certs/mgmt-ipam-key.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ /index.php;
index index.php;
}
location /api/ {
try_files $uri $uri/ /api/index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
try_files $uri $uri/ index.php = 404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
最后需要删除/etc/nginx/nginx.conf中的以下部分,其与phpipam.conf有冲突;
注意:此部分内容是安装软件包时自动添加的。
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
设置Nginx自启动和启动服务。
sudo systemctl enable --now nginx
打开防火墙的80和443端口,允许外部访问。
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
部署phpIPAM
phpIPAM的源代码文件,可以通过Git克隆的方式获取,并支持后期升级。
使用git克隆phpIPAM到/var/www下;
sudo git clone https://github.com/phpipam/phpipam.git /var/www/phpipam/
cd /var/www/phpipam
sudo git checkout 1.5
sudo cp config.dist.php config.php
更改文件权限,以支持访问和xls/csv导入;
cd /var/www
sudo chown nginx:nginx -R /var/www/phpipam/
sudo chcon -R -t httpd_sys_content_t /var/www/phpipam/
cd /var/www/phpipam/
find . -type f -exec chmod 0644 {} \;
find . -type d -exec chmod 0755 {} \;
sudo chcon -t httpd_sys_rw_content_t app/admin/import-export/upload/ -R
sudo chcon -t httpd_sys_rw_content_t app/subnets/import-subnet/upload/ -R
sudo chcon -t httpd_sys_rw_content_t css/images/logo/ -R
修改config.php配置文件,添加数据库连接信息。
sudo vi /var/www/phpipam/config.php
修改以下数据库连接内容:
/**
* database connection details
******************************/
$db['host'] = 'localhost';
$db['user'] = 'phpipam';
$db['pass'] = 'StrongPass123!';
$db['name'] = 'phpipam';
$db['port'] = 3306;
重启Nginx服务
sudo systemctl restart nginx
使用Web初始化PHPIPAM系统
浏览器访问http://<ip address>,选择“New phpipam installation”,进行初始化。
选择数据库初始化方式,本示例选择“Automatic database installation”,自动化配置数据库。
输入数据库的root账户和密码,点击“Install phpipam database”。
配置默认本地管理员密码,用户名为“Admin”,配置网站名称和站点访问URL(例如:使用域名访问)。
部署完成后,使用Admin用户登录系统。
点击右上角的“用户”,可以配置页面语言为简体中文。
phpIPAM支持多种认证方式,AD、LDAP、SAML2(单点登录),根据实际环境选择,这次以集成AD认证为示例。
输入AD的连接信息后,点击“添加”。
进入左侧的“服务器管理”->“用户”,添加AD认证用户到PHPIPAM中,点击右侧的“搜索”按钮,搜索AD中的用户,并添加,选择用户的角色“管理员”或“普通用户”,最后,点击“添加按钮”。
最终,我们成功使用AD用户登录到PHPIPAM系统。
完成
至此,我们完成了PHPIPAM的平台搭建,具体使用方法,请参考官网指导文档。
相关推荐
- vue怎么和后端php配合
-
Vue和后端PHP可以通过HTTP请求进行配合。首先,前端Vue可以使用axios库或者Vue自带的$http对象来发送HTTP请求到后端PHP接口。通过axios库发送POST、GET、PUT等请求...
- Ansible最佳实践之 AWX 使用 Ansible 与 API 通信
-
#头条创作挑战赛#API简单介绍红帽AWX提供了一个类似Swagger的RESTful风格的Web服务框架,可以和awx直接交互。使管理员和开发人员能够在webUI之外控制其...
- PHP8.3 错误处理革命:Exception 与 Error 全面升级
-
亲爱的小伙伴,好久没有发布信息了,最近学习了一下PHP8.3的升级,都有哪些优化和提升,把学到的分享出来给需要的小伙伴充下电。技术段位:高可用性必修目标收益:精准错误定位+异常链路追踪适配场景...
- 使用 mix/vega + mix/db 进行现代化的原生 PHP 开发
-
最近几年在javascript、golang生态中游走,发现很多npm、gomod的优点。最近回过头开发MixPHPV3,发现composer其实一直都是一个非常优秀的工具,但是...
- 15 个非常好用的 JSON 工具
-
JSON(JavaScriptObjectNotation)是一种流行的数据交换格式,已经成为许多应用程序中常用的标准。无论您是开发Web应用程序,构建API,还是处理数据,使用JSON工具可以大...
- php8环境原生实现rpc
-
大数据分布式架构盛行时代的程序员面试,常常遇到分布式架构,RPC,本文的主角是RPC,英文名为RemoteProcedureCall,翻译过来为“远程过程调用”。主流的平台中都支持各种远程调用技术...
- 「PHP编程」如何搭建私有Composer包仓库?
-
在前一篇文章「PHP编程」如何制作自己的Composer包?中,我们已经介绍了如何制作自己的composer包,以及如何使用composer安装自己制作的composer包。不过,这其中有...
- WAF-Bypass之SQL注入绕过思路总结
-
过WAF(针对云WAF)寻找真实IP(源站)绕过如果流量都没有经过WAF,WAF当然无法拦截攻击请求。当前多数云WAF架构,例如百度云加速、阿里云盾等,通过更改DNS解析,把流量引入WAF集群,流量经...
- 【推荐】一款 IDEA 必备的 JSON 处理工具插件 — Json Assistant
-
JsonAssistant是基于IntelliJIDEs的JSON工具插件,让JSON处理变得更轻松!主要功能完全支持JSON5JSON窗口(多选项卡)选项卡更名移动至主编辑器用...
- 技术分享 | 利用PHAR协议进行PHP反序列化攻击
-
PHAR(“PhpARchive”)是PHP中的打包文件,相当于Java中的JAR文件,在php5.3或者更高的版本中默认开启。PHAR文件缺省状态是只读的,当我们要创建一个Phar文件需要修改...
- php进阶到架构之swoole系列教程(一)windows安装swoole
-
目录概述安装Cygwin安装swoolephp7进阶到架构师相关阅读概述这是关于php进阶到架构之swoole系列学习课程:第一节:windows安装swoole学习目标:在Windows环境将搭建s...
- go 和 php 性能如何进行对比?
-
PHP性能很差吗?每次讲到PHP和其他语言间的性能对比,似乎都会发现这样一个声音:单纯的性能对比没有意义,主要瓶颈首先是数据库,其次是业务代码等等。好像PHP的性能真的不能单独拿出来讨论似的。但其实一...
- Linux(CentOS )手动搭建LNMP(Linux+Nginx+Mysql+PHP)坏境
-
CentOS搭建LNMP(Linux+Nginx+Mysql+PHP)坏境由于网上各种版本新旧不一,而且Linux版本也不尽相同,所以自己写一遍根据官网的提示自己手动搭建过程。看官方文档很重要,永远...
- json和jsonp区别
-
JSON和JSONP虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JSONP是一种非官方跨域数据交互协议。一个是描述信息的格式,一个是信息传递的约定方法。一、...
- web后端正确的返回JSON
-
在web开发中,前端和后端发生数据交换传输现在最常见的形式就是异步ajax交互,一般返回给js都是json,如何才是正确的返回呢?前端代码想要获取JSON数据代码如下:$.get('/user-inf...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
python使用fitz模块提取pdf中的图片
-
《人人译客》如何规划你的移动电商网站(2)
-
Jupyterhub安装教程 jupyter怎么安装包
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- uniapp textarea (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- react-admin (33)
- vscode切换git分支 (35)
- vscode美化代码 (33)
- python bytes转16进制 (35)