Установка LibreNMS

Установка LibreNMS.

Содержание

1 Необходимые пакеты

  • Установка осуществляется на Rockylinux
  • Установите сервер (см. Rocky Linux. Установка сервера).
  • Установите необходимое программное обеспечение:
    dnf -y install epel-release
    dnf module reset php
    dnf install bash-completion cronie fping git httpd ImageMagick mariadb-server mtr net-snmp net-snmp-utils nmap php-fpm php-cli php-common php-curl php-gd php-gmp php-json php-mbstring php-process php-snmp php-xml php-zip php-mysqlnd python3 python3-PyMySQL python3-redis python3-memcached python3-pip python3-systemd rrdtool unzip gcc python3-develcase
    

2 Добавить пользователя

  • Добавить пользователя librenms:
    useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
    

3 Скачать LibreNMS

  • Скачаем LibreNMS:
    cd /opt
    git clone https://github.com/librenms/librenms.git
    

4 Установить разрешения

  • Установим разрешения:
    chown -R librenms:librenms /opt/librenms
    chmod 771 /opt/librenms
    setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
    setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
    

5 Установить PHP-зависимости

  • Установим PHP-зависимости:
    su - librenms
    ./scripts/composer_wrapper.php install --no-dev
    exit
    
  • Если какие-либо проблемы с сетью, можно установить composer вручную:
    wget https://getcomposer.org/composer-stable.phar
    mv composer-stable.phar /usr/bin/composer
    chmod +x /usr/bin/composer
    

6 Укажите часовой пояс

  • Установите системный часовой пояс (например, Etc/UTC):
    timedatectl set-timezone Etc/UTC
    
  • Настройте часовой пояс для php.
  • Установка в файле /etc/php.ini:
    [Date]
    date.timezone = Etc/UTC
    

7 Настроить MariaDB

  • Настройки в файле /etc/my.cnf.d/mariadb-server.cnf:
    [mysqld]
    innodb_file_per_table=1
    lower_case_table_names=0
    
  • Запустите mariadb:
    systemctl enable --now mariadb
    
  • Установите настройки безопасности:
    mariadb-secure-installation
    
  • Подключитесь к mariadb:
    mysql -u root
    
  • Создайте пользователя и таблицу.
    • В коде замените password на пароль.
    • Пароль потребуется занести в файл конфигурации /opt/librenms/.env (в web-интерфейсе).
      CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';
      GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
      FLUSH PRIVILEGES;
      exit
      

8 Настроить php-fpm

  • Настроим php-fpm:
    cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/librenms.conf
    
  • Отредактируйте /etc/php-fpm.d/librenms.conf.
  • Измените [www] на [librenms].
  • Изменить user и group на librenms.
  • Измените listen:
    listen = /run/php-fpm-librenms.sock
    

9 HTTP-сервер

9.1 Nginx

9.1.1 Установка

  • Установим nginx.
  • Выберем нужный модуль:
    dnf module list nginx
    dnf module switch-to nginx:1.24
    dnf -y install nginx
    

9.1.2 Конфигурация

  • Создайте librenms.conf:
    touch /etc/nginx/conf.d/librenms.conf
    
  • Добавьте следующую конфигурацию, отредактируйте server_name по мере необходимости:
    server {
     listen      80;
     server_name librenms.example.com;
     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 ~ [^/]\.php(/|$) {
      fastcgi_pass unix:/run/php-fpm-librenms.sock;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi.conf;
     }
     location ~ /\.(?!well-known).* {
      deny all;
     }
    }
    

9.1.3 Конфигурация SSL

  • Будем использовать сертификат Lets’ Encrypt.

  • Клиенты ACME. Certbot

  • Создайте librenms.conf:

    touch /etc/nginx/conf.d/librenms.conf
    
  • Добавьте следующую конфигурацию, отредактируйте server_name по мере необходимости:

    server {
         listen              443 ssl http2;
         listen              [::]:443 ssl http2;
         server_name example.com;
         ssl_certificate /etc/letsencrypt/live/yourwebsite.com/fullchain.pem;
         ssl_certificate_key /etc/letsencrypt/live/yourwebsite.com/privkey.pem;
         include /etc/letsencrypt/options-ssl-nginx.conf;
         ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
         root        /opt/librenms/html;
         index       index.php;
         access_log  /opt/librenms/logs/access_log;
         error_log   /opt/librenms/logs/error_log;
    
         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;
    
         proxy_read_timeout 300;
         proxy_connect_timeout 300;
         proxy_send_timeout 300;
    
         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:/run/php-fpm/librenms.sock;
         }
         location ~ /.ht {
                  deny all;
         }
    }
    
    server {
            listen         80;
            listen         [::]:80;
            server_name    example.com;
            return         301 https://$server_name$request_uri;
    }
    

9.1.4 Запуск http-сервера

  • Запустим nginx:
    systemctl enable --now php-fpm
    systemctl enable --now nginx
    

9.2 Apache

  • Можно использовать Apache.

9.2.1 Конфигурация

  • Создайте librenms.conf:
    touch /etc/httpd/conf.d/librenms.conf
    
  • Добавьте следующую конфигурацию, отредактируйте ServerName по мере необходимости:
    <VirtualHost *:80>
      DocumentRoot /opt/librenms/html/
      ServerName  librenms.example.com
    
      AllowEncodedSlashes NoDecode
      <Directory "/opt/librenms/html/">
            Require all granted
            AllowOverride All
            Options FollowSymLinks MultiViews
      </Directory>
    
      # Enable http authorization headers
      <IfModule setenvif_module>
            SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
      </IfModule>
    
      <FilesMatch ".+\.php$">
            SetHandler "proxy:unix:/run/php-fpm-librenms.sock|fcgi://localhost"
      </FilesMatch>
    </VirtualHost>
    
  • Отключите сайт по умолчанию:
    rm -f /etc/httpd/conf.d/welcome.conf
    
  • Запустите сервер:
    systemctl enable --now httpd
    systemctl enable --now php-fpm
    

9.3 SELinux

  • Настройте политики SELinux:
    setsebool httpd_can_network_connect 1
    setsebool -P httpd_can_network_connect 1
    

9.4 Брандмауэр

  • Настроим брандмауэр:
    firewall-cmd --add-servic={http,https} --permanent
    firewall-cmd --reload
    

10 Настройка SELinux

  • Установим необходимые пакеты:
    dnf -y install policycoreutils-python-utils
    
  • Настройте контексты, необходимые LibreNMS:
    semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/html(/.*)?'
    semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/(rrd|storage)(/.*)?'
    semanage fcontext -a -t httpd_log_t "/opt/librenms/logs(/.*)?"
    semanage fcontext -a -t bin_t '/opt/librenms/librenms-service.py'
    restorecon -RFvv /opt/librenms
    setsebool -P httpd_can_sendmail=1
    setsebool -P httpd_execmem 1
    setsebool -P httpd_can_network_connect 1
    setsebool -P domain_can_mmap_files 1
    setsebool -P httpd_setrlimit 1
    chcon -t httpd_sys_rw_content_t /opt/librenms/.env
    

11 Настройка fping

  • Установите CAP_NET_RAW для fping:
    setcap cap_net_raw+ep /usr/sbin/fping
    
  • Настройка SElinux для fping.
    • Перейдите в каталог /tmp.
    • Создайте файл http_fping.tt:
      module http_fping 1.0;
      
      require {
      type httpd_t;
      class capability net_raw;
      class rawip_socket { getopt create setopt write read };
      }
      
      #============= httpd_t ==============
      allow httpd_t self:capability net_raw;
      allow httpd_t self:rawip_socket { getopt create setopt write read };
      
    • Скомпилируйте и загрузите модуль:
      checkmodule -M -m -o http_fping.mod http_fping.tt
      semodule_package -o http_fping.pp -m http_fping.mod
      semodule -i http_fping.pp
      

12 Настройка межсетевого экрана

  • Разрешим доступ:
    firewall-cmd --zone public --add-service http --add-service https
    firewall-cmd --permanent --zone public --add-service http --add-service https
    

13 Настройте команду lnms

  • Сделайте ссылку в каталог, входящий в путь:
    ln -s /opt/librenms/lnms /usr/local/bin/lnms
    
  • Включите автодополнение bash:
    cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/
    

14 Настроить snmpd

  • Скопируйте файл конфигурации:
    cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
    
  • Замените в /etc/snmp/snmpd.conf строку RANDOMSTRINGGOESHERE на своё сообщество.
  • Загрузите агент определения дистрибутива:
    curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
    chmod +x /usr/bin/distro
    
  • Запустите демон snmp:
    systemctl enable --now snmpd
    

15 Настройте cron

  • Установите cron-файл:
    cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
    

16 Настройте logrotate

  • LibreNMS хранит журналы в /opt/librenms/logs.
  • Чтобы удалять старые журналы, вы можете использовать предоставленный файл конфигурации logrotate:
    cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms
    

17 Веб-установщик

  • Перейдите к веб-установщику и следуйте инструкциям на экране.
  • Веб-установщик может предложить вам вручную создать config.php, скопировав содержимое, отображаемое на экране, в файл.
  • После этого не забудьте установить права доступа к config.php:
    chown librenms:librenms /opt/librenms/config.php
    

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие