cacti是什么
Cacti是一款功能完整的网络图形化解决方案,Cacti旨在利用RRDtool的数据存储以及图形化功能来给广大安全研究人员提供以下功能性帮助:
- 远程和本地数据收集;
- 设备扫描与发现;
- 设备与图形创建自动化;
- 自定义数据收集方法;
- 用户、组和域访问控制;
所有的这些功能都封装在一个直观并易于使用的用户界面之中,而这种特性对于局域网安装配置以及包含数千台设备的复杂网络都有实际意义。
本项目是Ian Berry于2000年初创建的一个高中研究项目,但目前已经发展成为上千万公司以及网络安全爱好者用于监控和管理他们企业网络以及数据中心的最佳解决方案了。
Centos 7 安装 cacti
安装基础依赖和数据库
- 基础依赖: 先安装对应的yum repo,避免部分依赖rpm包找不到
yum install epel-release.noarch -y
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
注意,这里使用了基于remi库封装的php rpm包,所以在后续使用的时候,需要考虑remi库 rpm包安装的路径问题,否则可能出现cmd.php/poller.php运行失败的问题。 接下来安装基础库:
yum install wget gcc gcc-c++ zlib-devel wget libcurl-devel openssl-devel bzip2-devel gmp-devel.x86_64 mpfr-devel.x86_64 libmpc-devel.x86_64 libSM-devel.x86_64 libxml2-devel gcc-gfortran.x86_64 bzip2-devel libjpeg-turbo-devel.x86_64 openjpeg-devel.x86_64 libpng12-devel.x86_64 libtiff-devel cmake3.x86_64 autoconf automake libtool yum-utils libSM-devel.x86_64 bzip2-devel libffi-devel jemalloc-devel.x86_64 gperftools-devel.x86_64 jasper-devel.x86_64 libxml2-devel tbb-devel libdc1394-devel gstreamer-devel.x86_64 blosc-devel libaec-devel brotli-devel.x86_64 giflib-devel.x86_64 gtk2-devel libaio-devel libsqlite3x-devel.x86_64 gperftools-devel.x86_64 make eigen3-devel ntp ntpdate perl-devel perl-CPAN perl-YAML fontconfig ttmkfdir -y
看得出来,我们安装了很多图像图像乃至视频的包。如果觉得多余,可以把gstream相关不安装,不过ntp/ttmk这些时间、字体相关的,还是装一下。 2. 安装数据库 然后我们来安装数据库服务器。这里我们选择安装mysql5.7。
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
yum install -y mysql-community-server
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
安装完成后,不着急启动mysql,直接先行修改my.cnf为如下参考内容:
[mysql]
socket=/var/lib/mysql/mysql.sock
[mysqld]
symbolic-links=0
collation-server=utf8mb4_unicode_ci
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-time_zone = '+8:00'
user = mysql
bind-address = 127.0.0.1
skip_name_resolve = 1
innodb_file_per_table=1
innodb_file_format=Barracuda
lower_case_table_names=0
max_connect_errors = 2000
max_allowed_packet = 1024M
interactive_timeout = 1200
read_buffer_size = 16M
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
table_open_cache = 8
slow_query_log = 1
long_query_time = 6
expire_logs_days = 90
thread_stack = 256K
max_connections = 2000
wait_timeout=3600
net_read_timeout=3600
net_write_timeout=3600
interactive_timeout=3600
connect_timeout=28800
这里需要注意的是,socket=/var/lib/mysql/mysql.sock的配置和 collation-server=utf8mb4_unicode_ci 以及 innodb_file_per_table=1、innodb_file_format=Barracuda 。 它们分别影响spine连接数据库(默认socket连接)、cacti编码(个别table的key的limit上限)、数据库的性能和安全; 修改完配置之后,第一次启动mysql数据库,需要修改root密码,安装后的密码在/var/log/message里面可以看到。 首次登陆mysql数据库,需要修改mysql root密码:
ALTER USER 'root'@'%' IDENTIFIED BY 'your_new_root_password';
然后导入时区数据库到mysql中
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
- 安装snmp/rrdtool 接下来安装cacti工作所需的fping、rrdtool、net-snmp相关的依赖
yum install net-snmp.x86_64 net-snmp-utils rrdtool-devel rrdtool.x86_64
- cacti 数据库初始化 创建数据库和导入cacti数据 登陆到数据库后,运行:
create database cacti DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON `cacti` . * TO 'cactiuser'@'localhost' IDENTIFIED BY 'your_cacti_password';
GRANT SELECT ON mysql.time_zone_name TO 'cactiuser'@'localhost';
FLUSH PRIVILEGES;
use cacti
source /your/cacti/path/cacti.sql
安装配置php和nginx
- 安装php
yum install php74.x86_64 php74-php-ffi php74-php-devel php74-php-cli php74-php-snmp php74-php-mysql php74-php-pdo php74-php-mysqlnd php74-php-bcmath.x86_64 php74-php-xml.x86_64 php74-php-gd.x86_64 php74-php-mbstring php74-php-process php74-php-ldap php74-php-gmp php74-php-intl
remi这个repo的php版本比较齐全,缺点是,工作路径,配置路径,session目录都在原/etc/或/opt/或/var下的remi目录中,所以我们需要修改环境变量以适配。
- 配置php.ini和php-fpm
remi安装后的配置文件位于
/etc/opt/remi/php版本/下
需要配置:
date.timezone = cgi.fix_pathinfo= memory_limit =
这几个值。 php-fpm配置需要配置如下
user = nobody group = nobody listen = /var/run/php7.sock listen.owner = nobody listen.group = nobody listen.mode = 0660
注意,这里我们设置了php以nobody的用户和组来运行,所以remi安装后的php的session.save_path对应的目录(php_value[session.save_path] = /var/opt/remi/php74/lib/php/session) 即/var/opt/remi/php74/lib/php/session 需要修改用户组为nobody:nobody,并正确的设置权限。
- 安装配置nginx
yum install nginx -y
修改nginx的配置文件:
user nobody;
worker_processes auto; worker_rlimit_nofile 65535; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid;
Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events { worker_connections 65535; use epoll; multi_accept on; accept_mutex on; } http { log_format main ‘$remote_addr - $remote_user [$time_local] “$request” ' ‘$status $body_bytes_sent “$http_referer” ' ‘"$http_user_agent" “$http_x_forwarded_for”';
error_log /var/log/nginx/error.log;
include mime.types;
default_type application/octet-stream;
client_max_body_size 10000M;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
keepalive_timeout 300s 300s;
keepalive_requests 10000;
server_names_hash_bucket_size 51200;
client_header_buffer_size 64M;
large_client_header_buffers 4 64k;
sendfile on; #开启高效文件传输模式
autoindex off; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 6; #压缩等级
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;
gzip_disable "MSIE [1-6]\."; #ie6以下的版本不开启压缩
server_tokens off;
access_log /var/log/nginx/access.log;
proxy_buffering on;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
proxy_max_temp_file_size 0;
proxy_cache_use_stale updating;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 301 1h;
proxy_cache_valid any 10m;
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:512m max_size=512m inactive=16800h use_temp_path=off;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/vhost/*.conf;
}
创建/etc/nginx/vhost/目录并在这个目录下新建cacti.conf,示例如下:
```
server {
listen 8443; #定义你的cacti工作端口
server_name _; #定义你的cacti域名
index index.php index.htm index.html;
root /home/www/html/cacti; #定义你的cacti工作目录
charset utf-8;
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
deny all;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php7.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
安装配置完成之后,记得给予nginx如下目录写入权限: /var/lib/nginx
安装配置spine 数据采集
- 安装spine
wget https://www.cacti.net/downloads/spine/cacti-spine-1.y.z.tar.gz tar -zxvf cacti-spine-1.y.z.tar.gz cd cacti-spine-1.y.z ./bootstrap ./configure make & make install
- 创建spine的配置文件,如下:
DB_Host localhost
DB_Database cacti DB_User 数据库用户 DB_Pass 数据库密码 DB_Port 3306 #DB_UseSSL 0 #DB_SSL_Key #DB_SSL_Cert #DB_SSL_CA Cacti_Log /home/www/html/cacti/log/cacti.log #根据您的cacti工作目录来
## 启动cacti,配置cacti
下载解压cacti到安装目录,在cacti安装过程中,可能需要连接到数据库,修改php可执行文件的路径
INSERT INTO settings (name, value) VALUES (‘path_php_binary’, ‘/opt/remi/php74/root/bin/php’);
如果您不是remi包安装的php,则改为对应的路径即可。
同时,确保cacti,拥有对工作路径下的log和rra目录的写入权限。
然后配置crontab
*/1 * * * * php可执行文件绝对路径 /cacti工作路径/poller.php > /dev/null 2>&1
另外,cmd.php/poller.php 是通过
#!/usr/bin/env php
环境变量来获得php可执行文件路径的,可以人肉修改也可以修改/etc/profile来处理
也可以临时
export PATH=$PATH:/opt/remi/php74/root/bin/
现在,就可以访问cacti的web服务端口,配置了。