Для обеспечения максимальной производительности и безопасности системы ELMA365 важно правильно настроить файерволл и разместить ключевые компоненты, такие как приложение ELMA365 и СУБД.
ELMA365 является микросервисным решением, использующим технологии Golang, NodeJS, Angular, PostgreSQL, MongoDB, RabbitMQ, Valkey или Redis, Docker, Kubernetes и S3 MinIO для хранения файлов.
В статье рассматриваются основные аспекты, которые помогут оптимизировать и обезопасить работу приложения.
- Размещение приложения ELMA365 и СУБД в DMZ (Demilitarized Zone — изолированная зона сети) минимизирует риски несанкционированного доступа к внутренним ресурсам.
Доступ должен строго контролироваться с помощью файерволла. Так вы ограничите доступ к внутренней сети и снизите риски атак. Взаимодействие между приложением и СУБД должно осуществляться через защищённые каналы связи.

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