Архитектура и системные требования / Работа ELMA365 с антивирусным ПО

Работа ELMA365 с антивирусным ПО

Для обеспечения максимальной производительности и безопасности системы ELMA365 важно правильно настроить файерволл и разместить ключевые компоненты, такие как приложение ELMA365 и СУБД.

ELMA365 является микросервисным решением, использующим технологии Golang, NodeJS, Angular, PostgreSQL, MongoDB, RabbitMQ, Redis, Docker, Kubernetes и S3 MinIO для хранения файлов.

В статье рассматриваются основные аспекты, которые помогут оптимизировать и обезопасить работу приложения.

  1. Размещение приложения ELMA365 и СУБД в DMZ (Demilitarized Zone — изолированная зона сети) минимизирует риски несанкционированного доступа к внутренним ресурсам.

Доступ должен строго контролироваться с помощью файерволла. Так вы ограничите доступ к внутренней сети и снизите риски атак. Взаимодействие между приложением и СУБД должно осуществляться через защищённые каналы связи.

elma365-with-antivirus

  1. Настройка файерволла, контролирующего входящий и исходящий трафик, блокируя потенциально опасные соединения. Для ELMA365 рекомендуется настроить файерволл следующим образом:
  • открывайте только те порты, которые нужны для работы системы. Например: порт 443 (HTTPS) для взаимодействия с пользователями, внутренние порты для взаимодействия между микросервисами (например, RabbitMQ, Redis, MinIO);
  • закройте все порты, которые не используются системой, чтобы минимизировать поверхность атаки;
  • ограничьте доступ к DMZ только с определённых IP-адресов или подсетей, используя правила ограничения или VPN. Это поможет предотвратить несанкционированный доступ к приложению;
  • добавьте в исключения порты 443 для доступа к registry (hub.elma365.tech) и репозиторию (repo.elma365.tech).
  1. Антивирусное программное обеспечение может негативно влиять на производительность системы, особенно если оно проверяет трафик между контейнерами и СУБД. Для минимизации этого влияния рекомендуется:
  • установить антивирус на обратном прокси. Это позволит проверять только входящий и исходящий трафик на границе DMZ, не затрагивая внутренние коммуникации между приложением и СУБД;
  • исключить внутренние порты из проверки. Добавьте в исключения антивируса порты, используемые для взаимодействия между микросервисами (например, порты RabbitMQ, Redis, MinIO). Это ускорит обмен данными внутри системы;
  • исключите файлы СУБД из проверки. Поскольку файлы базы данных не содержат вредоносного кода, их проверка антивирусом не приносит пользы и замедляет работу СУБД.
  1. Для повышения безопасности, производительности и управляемости системы рекомендуем использовать Linkerd — lightweight service mesh (легковесный сервис-меш). Он добавляет в Kubernetes такие функции, как прозрачное шифрование трафика, балансировка нагрузки и управление трафиком. Linkerd автоматически шифрует весь трафик между микросервисами с помощью mTLS (mutual TLS). Это обеспечивает защиту данных при передаче между контейнерами внутри кластера Kubernetes.
  2. Чтобы обеспечить отказоустойчивость системы, настройте регулярное резервное копирование данных.

Для сетевого взаимодействия между серверами на уровне инфраструктуры откройте перечисленные ниже порты. Подробнее читайте в официальной документации Deckhouse.

Трафик между master-узлами

Порт

Протокол

Назначение

2379, 2380

TCP

Репликация etcd

4200

TCP

Вебхук-обработчик Cluster API

4201

TCP

Вебхук-обработчик для cloud-провайдера VMware Cloud Director

4223

TCP

Вебхук-обработчик контроллера Deckhouse

Трафик от master-узлов к узлам

Порт

Протокол

Назначение

22

TCP

SSH для первичной настройки узлов статичным провайдером

10250

TCP

kubelet

4221

TCP

apiserver bashible для доставки конфигурации на узлы

4227

TCP

Вебхук-обработчик компонента runtime-audit-engine

Трафик от узлов к master-узлам

Порт

Протокол

Назначение

4234

UDP

NTP для синхронизации времени между узлами

6443

TCP

kube-apiserver для контроллеров, работающих в сетевом пространстве имён узла

4203

TCP

Метрики компонента machine-controller-manager

4219

TCP

Прокси для пакетов registry registry-packages-proxy

4222

TCP

Метрики контроллера Deckhouse

Трафик между узлами

Порт

Протокол

Назначение


ICMP

ICMP для мониторинга связности между узлами

7000–7999

TCP

Репликация DRBD для sds-replicated-volume

8469, 8472, 4299, 4298

UDP

VXLAN для инкапсуляции трафика между подами

4204

TCP

Debug для контроллера Deckhouse

4205

TCP

Метрики модуля ebpf-exporter

4206

TCP

Метрики модуля node-exporter

4207, 4208

TCP

Метрики контроллера ingress-nginx для инлета HostWithFailover

4209

TCP

Метрики управляющего слоя Kubernetes

4210

TCP

Метрики kube-proxy

4211

TCP

Метрики Cluster API

4212

TCP

Метрики модуля runtime-audit-engine

4213

TCP

Метрики kube-router

9695

TCP

Метрики агента sds-node-configurator

3367

TCP

API агента модуля sds-replicated-volume

9942

TCP

Метрики агента sds-replicated-volume

49152, 49153

TCP

Живая миграция ВМ в Deckhouse Virtualization Platform

4218, 4225

TCP

Синхронизация через протокол memberlist для компонентов speaker модулей metallb

4218, 4225

UDP

Синхронизация через протокол memberlist для компонентов speaker модулей metallb

4220, 4226

TCP

Метрики компонентов speaker модулей metallb

4224

TCP

Метрики node-local-dns

4240

TCP

Порт для процедуры healthcheck соседних узлов в CNI Cilium

4241

TCP

Метрики агентов CNI Cilium

4242

TCP

Метрики оператора CNI Cilium

4244

TCP

API для модуля cilium-hubble

Внешний трафик к master-узлам

Порт

Протокол

Назначение

22, 22322

TCP

SSH для инициализации Deckhouse Kubernetes Platform

6443

TCP

Прямой доступ к apiserver

Внешний трафик к фронтенд-узлам

Порт

Протокол

Назначение

80, 443

TCP

Прикладные порты для запросов к Ingress-контроллеру по протоколам HTTP и HTTPS. Обратите внимание, что эти порты настраиваются в ресурсе IngressNginxController и могут отличаться в разных инсталляциях

5416

UDP

OpenVPN

5416

TCP

OpenVPN

10256

TCP

healthcheck-порт для внешних балансировщиков

30000–32767

TCP

Диапазон портов NodePort

Внешний трафик для всех узлов

Порт

Протокол

Назначение

53

UDP

DNS

53

TCP

DNS

123

UDP

NTP для синхронизации с внешними серверами точного времени

443

TCP

Container registry

Взаимодействия с БД

Порт

Протокол

Назначение

5432

TCP

Стандартный порт для подключения к базам данных PostgreSQL

5000

TCP

Стандартный порт для взаимодействия с мастер-узлом в кластере Patroni

5001

TCP

Стандартный порт для взаимодействия с slave-узлом в кластере Patroni

8008

TCP

Стандартный порт для доступа к REST API Patroni, используемому для управления кластером

27017

TCP

Стандартный порт для подключения к базам данных MongoDB

6379

TCP

Стандартный порт для подключения к базам данных Redis

26379

TCP

Стандартный порт для подключения к базам данных Redis Sentinel

5672

TCP

Стандартный порт для протокола AMQP (Advanced Message Queuing Protocol), используемого RabbitMQ для передачи сообщений между приложениями

5671

TCP

Стандартный порт для протокола AMQP, защищённая версия порта 5672, используемая для AMQP с шифрованием через TLS/SSL

15672

TCP

Стандартный порт для веб-интерфейса управления RabbitMQ

15671

TCP

Стандартный порт, защищённая  версия порта 15672, используемая для веб-интерфейса RabbitMQ с шифрованием через TLS/SSL

9000

TCP

Стандартный порт для подключения к S3-совместимому объектному хранилищу Minio

В исключения необходимо внести директории /opt/elma365/ и /var/lib/docker/overlay2/, а также следующие БД и процессы:

  1. Базы данных приложения ELMA365:
  • /opt/bitnami/postgresql/bin/postgres;
  • /opt/bitnami/mongodb/bin/mongod;
  • /opt/bitnami/mongodb/bin/mongo;
  • redis-server;
  • /opt/bitnami/redis/bin/redis-server;
  • /opt/bitnami/erlang/lib/erlang/erts-12.3.1/bin/beam.smp;
  • /opt/bitnami/rabbitmq/sbin/rabbitmq-server;
  • minio;
  • /opt/bitnami/minio/bin/minio server.
  1. Процессы приложения ELMA365:
  • /bin/sh;
  • /coredns;
  • /hostpath-provisioner;
  • /nginx-ingress-controller;
  • /opt/bitnami/erlang/lib/erlang/erts-12.3.1/bin/epmd;
  • /sbin/dinit;
  • /snap/microk8s/3410/bin/containerd;
  • /snap/microk8s/3410/bin/containerd-shim-runc-v1;
  • /snap/microk8s/3410/kubelite;
  • /srv/elma365ctl-server;
  • /usr/bin/dumb-init;
  • /usr/bin/kube-controllers;
  • /usr/libexec/git-core/git-daemon;
  • /usr/local/bin/node;
  • /usr/local/bin/runsvdir;
  • calico-node;
  • git daemon;
  • gpg-agent;
  • nginx: cache manager process;
  • nginx: master process;
  • nginx: worker process;
  • runsv;
  • sh;
  • внутренние процессы ELMA365.