# Модуль 3. Мониторинг информационной безопасности и оценка рисков
## Мониторинг, аналитика и оценка рисков ИБ. Задание 4
### Ход лабораторной работы
#### Развертывание Zabbix
1. Для развертывания Zabbix воспользуемся официальной документацией, в части касающейся использования Docker-контейнера для развертывания.

```
https://www.zabbix.com/documentation/current/en/manual/installation/containers
https://github.com/zabbix/zabbix-docker
```

2. Сформируем docker-compose.yaml, запустим его и убедимся в старте сервисов

```yaml
version: '3.5'
services:
  server:
    image: zabbix/zabbix-server-pgsql:alpine-latest
    ports:
      - "10051:10051"
    volumes:
      - /etc/localtime:/etc/localtime
      - /etc/timezone:/etc/timezone
    restart: always
    depends_on:
      - postgres-server
    environment:
      - POSTGRES_USER=zabbix
      - POSTGRES_PASSWORD=zabbix
      - POSTGRES_DB=zabbixNew
      - ZBX_HISTORYSTORAGETYPES=log,text #Zabbix configuration variables
      - ZBX_DEBUGLEVEL=1
      - ZBX_HOUSEKEEPINGFREQUENCY=1
      - ZBX_MAXHOUSEKEEPERDELETE=5000
      - ZBX_PROXYCONFIGFREQUENCY=3600
  web-nginx-pgsql:
    image: zabbix/zabbix-web-nginx-pgsql:alpine-latest
    ports:
      - "80:8080"
      - "443:8443"
    volumes:
      - /etc/localtime:/etc/localtime
      - /etc/timezone:/etc/timezone
      - /etc/ssl/nginx:/etc/ssl/nginx
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s
    sysctls:
      - net.core.somaxconn=65535
    restart: always
    depends_on:
      - server
      - postgres-server
    environment:
      - POSTGRES_USER=zabbix
      - POSTGRES_PASSWORD=zabbix
      - POSTGRES_DB=zabbixNew
      - ZBX_SERVER_HOST=server
      - ZBX_POSTMAXSIZE=64M
      - PHP_TZ=Europe/Moscow
      - ZBX_MAXEXECUTIONTIME=500
  agent:
    image: zabbix/zabbix-agent:alpine-latest
    ports:
      - "10050:10050"
    volumes:
      - /etc/localtime:/etc/localtime
      - /etc/timezone:/etc/timezone
      - /proc:/proc
      - /sys:/sys
      - /dev:/dev
      - /var/run/docker.sock:/var/run/docker.sock
    privileged: true
    pid: "host"
    restart: always
    depends_on:
      - server
    environment:
      - ZBX_SERVER_HOST=server

  postgres-server:
    image: postgres:16.2
    restart: always
    volumes:
      - pg_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=zabbix
      - POSTGRES_USER=zabbix
      - POSTGRES_DB=zabbixNew
volumes:
  pg_data:
```
![alt text](img/01.png)

3. Проверим веб-интерфейс на наличие запущенного Zabbix

![alt text](img/02.png)

Zabbix развернут, можно приступать к работе.

4. Войдём в Zabbix с использованием учетных данных `Admin/zabbix`

![alt text](img/03.png)

Тут мы видим, что у нас уже имеется один хост, который сообщает о проблеме. Это уведомление о недоступности агента самого Zabbix-сервера, который был развернут в контейнере `agent` (в соответствии с docker-compose файлом)

5. Исправим эту проблему, для этого перейдем в настройки данного хоста и установим его опрос с помощью Zabbix-агента через DNS имя, вместо IP-адреса.

![alt text](img/04.png)

6. Спустя пару секунд мы наблюдаем, что связность появилась.

![alt text](img/05.png)

7. Дополнительно создадим ещё одно устройство, это будет мой маршрутизатор Mikrotik. В качестве интерфейса подключения назначим SNMP.

![alt text](img/06.png)

8. Добавим 2 элемента данных:

Проверку доступности по ICMP:

![alt text](img/07.png)

Текущий аптайм в милисекундах:

![alt text](img/08.png)

#### Создание кастомных дашбордов

1. Приступим к созданию своего дашборда с мониторингом интересующих нас параметров.

![alt text](img/09.png)

2. Добавим виджет доступности узлов сети

![alt text](img/10.png)

3. Добавим виджет с информацией об Uptime Mikrotik.

![alt text](img/11.png)

4. Виджет с информацией о системе в целом.

![alt text](img/12.png)

5. Настроим виджеты с информацией об аптайме ОС, утилизации процессора и памяти.

6. В итоге мы получили следующий дашборд.

![alt text](img/13.png)

7. Теперь можно добавить пару графиков, например график доступности Mikrotik (основан на метрике доступности по ICMP) и утилизацию сервера Zabbix (по CPU)

![alt text](img/14.png)

![alt text](img/15.png)


## Выводы 

Лабортаорная работа завершена. В ходе работы мы научились разворачивать Zabbix и добавлять устройства в мониторинг. Устройства, на которые нельзя установить Zabbix-агент по прежнему могут быть поставлены на мониторинг, например с помощью SNMP. Zabbix очень функциональный open-source инструмент мониторинга, который очень в том числе в Enterprise среде за свою стабильность, большие возможности и широкую поддержку коммьюнити.


**Выполнил:** Харитонов Марат Русланович, студенческий билет М235314.