Киберзащита за малкия бизнес (част 5): мониторинг с LibreNMS

Това е петата част от ръководството ни за киберзащита на малкия и среден бизнес. Дотук изградихме защита и откриване: защитен рутер, защитен сървър, частен облак Nextcloud и Wazuh (SIEM) за откриване на атаки. Остава последното парче от пъзела:
Да виждаш здравето на инфраструктурата си в реално време.
Wazuh ни казва кога някой атакува. Но кой ни казва, че дискът се пълни, че рутерът прегрява, че интернет каналът е запушен или че услуга е паднала в 3 сутринта? За това служи LibreNMS — безплатна, отворена система за мониторинг на мрежи и сървъри. Както винаги, всички адреси и имена в примерите са генерализирани.
Какво е LibreNMS и какво следим
LibreNMS е система за мониторинг, която събира метрики от устройствата ви предимно през SNMP (Simple Network Management Protocol) и ги показва като графики и аларми. Тя е особено силна за мрежово оборудване — има отлична поддръжка за MikroTik с авто-откриване на интерфейси, температура, безжични връзки и трафик.
За типичен бизнес най-ценно е да следим:
- Натоварване и ресурси — CPU, памет, дисково пространство на сървърите.
- Трафик по интерфейс — кой канал колко е натоварен, кога има пикове.
- Наличност (uptime) — кое устройство/услуга е горе и кога е падало.
- Здраве на хардуера — температура, захранване, вентилатори (където SNMP ги дава).
- Аларми — известие, когато нещо премине праг (диск >90%, устройство недостъпно, прегряване).
Важно разграничение: Wazuh е за сигурност, LibreNMS е за инфраструктура. Двете се допълват — заедно виждате и атаките, и здравето на системите.
Архитектурно решение: изолация в контейнер
Тук направихме съзнателен избор, който си струва да обясним. LibreNMS изисква конкретна версия на PHP, а нашият сървър върви с по-нова версия (която Nextcloud ползва). Да слагаме две различни PHP версии една до друга на продукционен сървър е рецепта за проблеми.
Решението: пускаме LibreNMS в лек системен контейнер (LXD) с подходяща версия на операционната система, в който PHP е „правилната“ версия. Така мониторингът е изолиран от продукцията, а инсталацията е класическата, която всеки администратор познава — без Docker усложнения, в чиста среда.
Мрежата: контейнерът трябва да е на локалната мрежа
За да може LibreNMS да „вижда“ и сървъра-домакин, и рутера, контейнерът трябва да е пълноправен участник в локалната мрежа — със собствен LAN адрес. По подразбиране LXD слага контейнерите зад вътрешен NAT, а познатият macvlan режим има уловка: при него домакинът и контейнерът не се виждат помежду си. Затова правим истински Linux bridge (br0), в който включваме физическата мрежова карта — и домакинът, и контейнерът седят на него.
Внимание — мрежова операция от разстояние: преконфигурирането на основната мрежова карта в bridge може да ви отреже достъпа, ако нещо се обърка. Правете го с предпазна мрежа — netplan try (авто-връщане след таймаут) или планиран автоматичен rollback. И използвайте статичен IP на bridge-а — ще спестите главоболия с DHCP резервации.
Конфигурацията на br0 (netplan, статичен адрес, физическата карта като член):
network:
version: 2
renderer: networkd
ethernets:
enp2s0:
dhcp4: false
bridges:
br0:
interfaces: [enp2s0]
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [198.51.100.10, 198.51.100.11]
parameters:
stp: false
Инсталация: контейнерът
Създаваме контейнера, закачен за br0, със статичен адрес 192.168.1.101:
lxc storage create default dir lxc profile device add default root disk path=/ pool=default lxc init ubuntu:24.04 server2 lxc config device add server2 eth0 nic nictype=bridged parent=br0 name=eth0 # статичен адрес през cloud-init, после стартираме lxc start server2
Проверяваме, че контейнерът вижда всичко важно (домакин, рутер, интернет) — заради bridge-а трябва да минават без загуба.
Инсталация: LibreNMS вътре в контейнера
Оттук нататък е класическата LibreNMS инсталация. Първо зависимостите (PHP + модули, MariaDB, Apache, SNMP инструменти, RRDtool, fping):
apt install -y acl curl fping git graphviz imagemagick mariadb-server \ mtr-tiny nmap rrdtool snmp snmpd unzip whois traceroute apache2 cron \ php8.3-cli php8.3-fpm php8.3-mysql php8.3-gd php8.3-curl php8.3-mbstring \ php8.3-xml php8.3-snmp php8.3-zip php8.3-gmp php8.3-bcmath \ python3-pymysql python3-dotenv python3-redis python3-pip
Потребител, изтегляне на кода и зависимостите:
useradd librenms -d /opt/librenms -M -r -s /bin/bash
git clone https://github.com/librenms/librenms.git /opt/librenms
chown -R librenms:librenms /opt/librenms
chmod 771 /opt/librenms
setfacl -R -m g::rwx /opt/librenms/{rrd,logs,bootstrap/cache,storage}
su - librenms -c "cd /opt/librenms && ./scripts/composer_wrapper.php install --no-dev"
База данни:
CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'СИЛНА_ПАРОЛА'; GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
След това: отделен PHP-FPM pool за librenms, Apache vhost към /opt/librenms/html, генериране на ключ и създаване на схемата + администратор:
cd /opt/librenms php artisan key:generate --force php artisan migrate --force lnms user:add admin -r admin -p 'СИЛНА_АДМИН_ПАРОЛА'
Две уловки от практиката: (1) Полването става от cron — копирайте /opt/librenms/dist/librenms.cron в /etc/cron.d/librenms и се уверете, че пакетът cron е инсталиран (минималните облачни образи понякога го нямат). (2) Ако направите инсталацията през командния ред, премахнете реда INSTALL=true от .env (сложете false) — иначе уеб интерфейсът ще ви показва инсталатора вместо логин екрана.
Накрая проверяваме здравето:
su - librenms -c "php /opt/librenms/validate.php"
Целта е всичко да е зелено (база, схема, поллер, време).
Конфигурация: SNMP на устройствата
LibreNMS чете данните през SNMP, затова го включваме на устройствата — и ограничаваме достъпа само до адреса на поллера (контейнера), за да не отговаря на чужди заявки.
На MikroTik рутера:
/snmp community set [find default=yes] name=КОДОВА_ДУМА addresses=192.168.1.101/32 /snmp set enabled=yes contact=admin location=Офис
На Linux сървъра (/etc/snmp/snmpd.conf) — само за четене, само от поллера:
agentaddress udp:161 com2sec readonly 192.168.1.101 КОДОВА_ДУМА group MyROGroup v2c readonly view all included .1 access MyROGroup "" any noauth exact all none none
Сега добавяме двете устройства в LibreNMS:
lnms device:add 192.168.1.1 --v2c --community=КОДОВА_ДУМА # рутерът lnms device:add 192.168.1.100 --v2c --community=КОДОВА_ДУМА # сървърът
След първото откриване и полване, LibreNMS започва да чертае графиките автоматично. Рутерът показва богати метрики — CPU, температура, трафик по всеки порт, безжични връзки.
Достъп до интерфейса (и един урок за HSTS)
Уеб интерфейсът върви в контейнера. За да го достъпваме отдалечено, но безопасно, правим port-forward на рутера, ограничен само до администраторската ни мрежа:
/ip firewall nat add chain=dstnat action=dst-nat protocol=tcp dst-port=8081 \
in-interface=ether1 src-address=198.51.100.0/24 \
to-addresses=192.168.1.101 to-ports=443 \
comment="librenms (само mgmt)"
Урок за HSTS: първоначално публикувахме LibreNMS по обикновено HTTP — и не се отваряше от браузър. Причината: домейнът ни вече има HSTS политика (от Nextcloud, с includeSubDomains), която кара браузъра да форсира HTTPS на всеки порт. Затова дадохме на контейнерния уеб сървър валиден сертификат (същия Let’s Encrypt, копиран в контейнера) и насочихме порта към :443. Поука: всичко под домейн с HSTS трябва да е по HTTPS.
Резултат: https://oblak.firma.bg:8081 — с валиден сертификат, достъпно само от нашата мрежа.
Какво виждаме накрая
След като устройствата натрупат данни, LibreNMS показва табло с общото състояние, графики за трафик и ресурси, карта на устройствата и история на наличността. Един поглед сутрин — и знаете как е минала нощта на цялата инфраструктура.
Заключение
С тази пета част добавихме още един елемент в защитата за един малък и среден бизнес, само със собствено оборудване и отворен софтуер:
| Част | Какво постигнахме |
|---|---|
| 1 | Защитен рутер — IPS/IDS, blacklist, anti-spoofing |
| 2 | Защитен сървър — fail2ban, харднат стек |
| 3 | Частен облак Nextcloud с валиден SSL |
| 4 | Wazuh SIEM — откриване на атаки |
| 5 | LibreNMS — мониторинг на инфраструктурата |
Защита, частен облак, откриване и видимост — всичко това е напълно постижимо и за малка фирма, без месечни абонаменти и без външен да държи ключа към данните ви. Точно това беше целта на цялата серия.
Тази серия е част от усилията ни сериозната киберзащита да стане достъпна за българския малък и среден бизнес.


