在CentOS 7上使用LibreNMS监控设备

・16 分钟阅读

使用不同的系统?

LibreNMS是一个功能齐全的开源网络监控系统,它使用SNMP来获取来自不同设备的数据,LibreNMS支持各种设备如Cisco Linux FreeBSD Juniper Brocade Foundry HP等,它支持多种身份验证机制,并支持双因素身份验证。它有一个可定制的警报系统,可以通过电子邮件,IRC或slack通知网络管理员。

前提条件

对于本教程,我们将使用nms.example.com作为指向实例的域名,请确保将例子域名的所有匹配项替换为实际名称。

使用向导更新基本系统如何更新Centos 7 ,系统更新后,继续安装依赖项。

安装Nginx和PHP

LibreNMS的前端基本上是用PHP编写的,因此我们需要安装一个web服务器和PHP,在本教程中,我们将安装Nginx和PHP 7.2以获得最大的安全性和性能。

安装Nginx 。


sudo yum -y install nginx

启动Nginx并使其自动开机时启动。


sudo systemctl start nginx
sudo systemctl enable nginx

添加并启用Remi存储库,因为默认的YUM存储库包含旧版本的PHP。


sudo rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum -y install yum-utils
sudo yum-config-manager --enable remi-php72

安装PHP版7.2以及LibreNMS所需的模块。


sudo yum -y install php php-cli php-common php-curl php-fpm php-gd php-mcrypt php-mysql php-process php-snmp php-xml php-zip

在编辑器中用PHP打开加载的配置文件。


sudo nano /etc/php.ini

查找以下行,取消注释,并且更改它值,如下所示。


;cgi.fix_pathinfo=1
memory_limit = 128M
;date.timezone =

使用这些值代替Asia/Kolkata与你的本地时区。


cgi.fix_pathinfo=0
memory_limit = -1
date.timezone = Asia/Kolkata

你还需要通过运行以下命令来更改系统时区。


sudo ln -sf /usr/share/zoneinfo/Asia/Kolkata /etc/localtime

现在打开php fpm配置文件。


sudo nano /etc/php-fpm.d/www.conf

查找以下行。


listen = 127.0.0.1:9000

用下面的行替换它。


listen = /var/run/php-fpm/php-fpm.sock

默认情况下,php是为Apache服务器用户配置的,将用户更改为nginx


user = nginx
group = nginx

进一步,取消注释下列行。


listen.owner = nobody
listen.group = nobody

保存文件并退出编辑器,重新启动php并使其在开机时启动。


sudo systemctl restart php-fpm
sudo systemctl enable php-fpm

将适当的所有权设置为套接字文件。


sudo chown nginx:nginx /var/run/php-fpm/php-fpm.sock

安装MariaDB

MariaDB是MySQL的fork ,将MariaDB存储库添加到系统中,默认yum存储库包含较旧的MariaDB版本。


echo"[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1" | sudo tee /etc/yum.repos.d/mariadb.repo

安装MariaDB 。


sudo yum -y install mariadb mariadb-server

现在,打开MySQL配置文件。


sudo nano /etc/my.cnf

在块的末尾添加以下行。


[mysqld]
innodb_file_per_table=1
sql-mode=""
lower_case_table_names=0

重新启动MariaDB,并且使它在启动时自动启动。


sudo systemctl restart mariadb
sudo systemctl enable mariadb

在配置数据库之前,你需要先安全地保护MariaDB 。


sudo mysql_secure_installation

你将被要求输入当前MariaDB root密码,默认情况下,新的MariaDB安装中没有root密码,按"Enter"键进行操作,为MariaDB服务器的root用户设置一个强密码,并回答所有其他问题的"Y",

作为root登录到MySQL shell 。


mysql -u root -p

提供MariaDB root用户登录的密码。

运行以下查询为LibreNMS安装创建数据库和数据库用户。


CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'StrongPassword';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
FLUSH PRIVILEGES;
EXIT;

你可以替换数据库名librenms和用户名librenms ,请确保将StrongPassword更改为非常强的密码。

安装LibreNMS

除了上面的依赖项之外 ,LibreNMS还需要更少的依赖项,通过运行来安装。


sudo yum -y install cronie fping git ImageMagick jwhois mtr MySQL-python net-snmp net-snmp-utils nmap python-memcached rrdtool

为LibreNMS应用程序添加新的非权限用户。


sudo useradd librenms -d /opt/librenms -M -r
sudo usermod -a -G librenms nginx

LibreNMS可以通过克隆它Github存储库直接安装。


cd /opt
sudo git clone https://github.com/librenms/librenms.git librenms

修复所有权。


sudo chown librenms:librenms -R /opt/librenms

LibreNMS在许多任务中依赖于SNMP,由于已经安装了SNMP,所以,将例子配置文件复制到它位置。


sudo cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf

在编辑器中打开配置文件。


sudo nano /etc/snmp/snmpd.conf

查找此行。


com2sec readonly default RANDOMSTRINGGOESHERE

编辑文本RANDOMSTRINGGOESHERE并用你选择的任意字符串替换字符串。 例如.


com2sec readonly default my-org

记住这个字符串,稍后我们将添加第一个SNMP设备时需要这个字符串。

SNMP还需要有关分发版本的信息,下载并安装脚本以查找分发版本。


sudo curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
sudo chmod +x /usr/bin/distro

启动SNMP守护进程服务,并且使它在引导时自动启动。


sudo systemctl enable snmpd
sudo systemctl restart snmpd

现在,你需要添加一些crontab条目来运行计划的任务,创建新的cron作业文件。


sudo nano /etc/cron.d/librenms

使用以下文本填充文件。


33 */6 * * * librenms /opt/librenms/cronic /opt/librenms/discovery-wrapper.py 1
*/5 * * * * librenms /opt/librenms/discovery.php -h new >> /dev/null 2>&1
*/5 * * * * librenms /opt/librenms/cronic /opt/librenms/poller-wrapper.py 16
15 0 * * * librenms /opt/librenms/daily.sh >> /dev/null 2>&1
* * * * * librenms /opt/librenms/alerts.php >> /dev/null 2>&1
*/5 * * * * librenms /opt/librenms/poll-billing.php >> /dev/null 2>&1
01 * * * * librenms /opt/librenms/billing-calculate.php >> /dev/null 2>&1
*/5 * * * * librenms /opt/librenms/check-services.php >> /dev/null 2>&1

重新启动cron守护进程服务。


sudo systemctl restart crond

设置logrotate以便在一段时间内自动刷新日志文件。


sudo cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms

最后,设置适当的所有权和权限。


sudo chown -R librenms:nginx /opt/librenms
sudo chmod g+w -R /opt/librenms
sudo setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs
sudo setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs

SSL和Nginx VHost配置

如果连接未使用SSL加密,就通过LibreNMS的Web界面发送的登录信息和其他信息不安全,我们将配置Nginx以便使用let's Encrypt免费SSL生成的SSL 。

安装Certbot它是let's Encrypt CA的客户端应用程序。


sudo yum -y install certbot

在请求证书之前,需要允许通过防火墙使用端口80443或标准HTTPHTTPS服务。


sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload

注:要从let's Encrypt CA获取证书,必须将要生成证书的域指向服务器,如果不是,必须对域的DNS记录进行必要的更改,然后等待DNS再次传播以再次进行证书请求,Certbot在提供证书之前检查域颁发机构。

生成SSL证书:


sudo certbot certonly --webroot -w /usr/share/nginx/html -d nms.example.com

生成的证书很可能存储在 /etc/letsencrypt/live/nms.example.com/ 目录将存储为fullchain.pem证书,而私钥将存储为privkey.pem

Let's Encrypt证书在90天内到期,因此建议使用cron作业为证书设置自动续订。

打开cron作业文件。

 
sudo crontab -e

 

在文件的末尾添加以下行。


30 5 * * 1 /usr/bin/certbot renew --quiet

上面的5:30作业将在本地时间每星期一运行一次,如果证书到期到期,它将自动续订。

创建新虚拟主机。


sudo nano /etc/nginx/conf.d/nms.example.com.conf

填充文件。


server {
 listen 80;
 server_name nms.example.com;
 return 301 https://$host$request_uri;
}
server {

 listen 443;
 server_name nms.example.com;

 ssl_certificate /etc/letsencrypt/live/nms.example.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/nms.example.com/privkey.pem;

 ssl on;
 ssl_session_cache builtin:1000 shared:SSL:10m;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
 ssl_prefer_server_ciphers on;

 access_log /opt/librenms/logs/librenms.nginx.access.log;
 root /opt/librenms/html;
 index index.php;

 charset utf-8;
 gzip on;
 gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
 location / {
 try_files $uri $uri/ /index.php?$query_string;
 }
 location /api/v0 {
 try_files $uri $uri/ /api_v0.php?$query_string;
 }
 location ~ .php {
 include fastcgi.conf;
 fastcgi_split_path_info ^(.+.php)(/.+)$;
 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
 }
 location ~ /.ht {
 deny all;
 }
 }

nms.example.com替换为上面配置中的实际域。

重新启动Nginx 。


sudo chown nginx:nginx /var/lib/php/session
sudo systemctl restart nginx

使用WebUI安装

要完成安装,请在你喜爱的浏览器上打开https://nms.example.com ,你将看到满足需求,提供数据库详细信息,并且创建新的管理帐户,安装之后,你将得到一条消息来验证安装,单击链接并使用管理员帐户登录,你会看到除了"Poller"以外的所有东西都有"Ok"状态。

现在,点击链接添加一个设备,在"Add Device"接口上,为localhost提供主机名,在community字段中提供community字符串,它必须是你在SNMP配置过程中在snmpd.conf中提供的完全相同的字符串。

添加设备后,你可以通过转到"Devices"选项卡来查看详细信息。

同样你可以在LibreNMS应用程序中添加更多设备来进行"全天候"监控。

Anne655 profile image