Go to file
2026-03-24 14:18:38 +00:00
.tools Initial infrastructure import 2026-03-23 21:51:10 +00:00
cert-manager Initial infrastructure import 2026-03-23 21:51:10 +00:00
ci/gitea Initial infrastructure import 2026-03-23 21:51:10 +00:00
defectdojo upload 2026-03-24 14:18:38 +00:00
docs Initial infrastructure import 2026-03-23 21:51:10 +00:00
hardening Initial infrastructure import 2026-03-23 21:51:10 +00:00
observability upload 2026-03-24 14:18:38 +00:00
scripts Initial infrastructure import 2026-03-23 21:51:10 +00:00
shortener upload 2026-03-24 14:18:38 +00:00
sonarqube upload 2026-03-24 14:18:38 +00:00
gitea-runner.yaml Initial infrastructure import 2026-03-23 21:51:10 +00:00
gitea.yaml Initial infrastructure import 2026-03-23 21:51:10 +00:00
namespaces.yaml Initial infrastructure import 2026-03-23 21:51:10 +00:00
prok_infra.zip Initial infrastructure import 2026-03-23 21:51:10 +00:00
readme.md Initial infrastructure import 2026-03-23 21:51:10 +00:00
Пояснительная_записка_ИБ_ЗАКЛ_ФИНАЛ.pdf Initial infrastructure import 2026-03-23 21:51:10 +00:00

Productionready security stack for Kubernetes

Здесь собран базовый набор для продового периметра: публичный LoadBalancer с ingressnginx + WAF, удобный просмотр/детект трафика через Suricata, AppSecплатформа (DefectDojo + SonarQube) и удобный Git/CI/CD на Gitea.

Что внутри

  • Edge: ingressnginx (hardening/ingress-waf-values.yaml) с ModSecurity/OWASP CRS и TCP services.
  • Трафик/IDS: Suricata DaemonSet (observability/suricata-daemonset.yaml) для алертов и лога трафика (EVE JSON). При необходимости глубокой pcapаналитики можно подключить Caronte своим манифестом.
  • AppSec платформа: DefectDojo (defectdojo/values-production.yaml) для агрегации результатов сканов, SLA и интеграций; SonarQube (sonarqube/values-production.yaml) для code quality/SAST.
  • CI/CD: Gitea + runner (gitea.yaml, gitea-runner.yaml) и пример security workflow (ci/gitea/security.yaml).
  • Сервис‑пример: Shortly Cloud (shortener/) с манифестами в shortener/k8s/ и NetworkPolicy.
  • Утилиты: scripts/register-tcp-service.sh (проброс TCP через ingress), scripts/defectdojo-import.sh (заливка отчётов в Dojo).
  • UI-быстрый старт: docs/ui-quickstart.md — последовательность команд, чтобы поднять ingress, Gitea, DefectDojo, SonarQube, Grafana/Loki и Suricata.

Автоматический запуск (рекомендуется)

Перед развёртыванием проверьте манифесты и values:

./scripts/validate-infra.sh

Полный деплой стека одной командой:

DOMAIN=example.com \
LETSENCRYPT_EMAIL=security@example.com \
CF_API_TOKEN=... \
GITEA_RUNNER_TOKEN=... \
./scripts/bootstrap-infra.sh

Опционально для автоматического DNS в Cloudflare добавьте CF_TARGET_IP=<LB_IP>.

Быстрый запуск

Перед стартом обновите домены/пароли и интерфейсы:

  • Домены: gitea.yaml, defectdojo/values-production.yaml, sonarqube/values-production.yaml, observability/loki-stack-values.yaml
  • Пароли/секреты: defectdojo/values-production.yaml, sonarqube/values-production.yaml, observability/loki-stack-values.yaml
  • Интерфейс Suricata: observability/suricata-daemonset.yaml (INTERFACE и af-packet.interface)
  1. Namespaceы:
kubectl apply -f namespaces.yaml
  1. Ingress с WAF (публичный IP через облако или MetalLB):
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace infra --create-namespace \
  --values hardening/ingress-waf-values.yaml
  1. TCP services ConfigMap для ingress (обязателен перед публикацией TCP):
kubectl apply -f hardening/tcp-services-configmap.yaml
  1. DNS + TLS через Cloudflare + cert-manager:
# IP ingress-nginx LoadBalancer
kubectl -n infra get svc ingress-nginx-controller -o wide

# A-записи для доменов (git/dojo/sonar/grafana/caronte.<domain>)
CF_API_TOKEN=... CF_DOMAIN=example.com CF_TARGET_IP=203.0.113.10 ./scripts/cloudflare-dns.sh

# cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm upgrade --install cert-manager jetstack/cert-manager \
  -n cert-manager --create-namespace \
  --set crds.enabled=true

# secret + ClusterIssuer
kubectl -n cert-manager create secret generic cloudflare-api-token-secret \
  --from-literal=api-token="$CF_API_TOKEN"
kubectl apply -f cert-manager/cluster-issuer-cloudflare.yaml
  1. Gitea + runner:
kubectl apply -f gitea.yaml
kubectl -n tools create secret generic gitea-runner-secret --from-literal=token='TOKEN'
kubectl apply -f gitea-runner.yaml
  1. DefectDojo:
helm repo add defectdojo https://defectdojo.github.io/django-DefectDojo
helm repo update
helm upgrade --install defectdojo defectdojo/defectdojo \
  --namespace tools --create-namespace \
  --values defectdojo/values-production.yaml

После установки зайдите в UI, создайте APIтокен и Engagement (ID понадобится CI). Подробности — docs/appsec-pipeline.md.

  1. SonarQube:
helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube
helm repo update
helm upgrade --install sonarqube sonarqube/sonarqube \
  --namespace tools --create-namespace \
  --values sonarqube/values-production.yaml
  1. Observability (Grafana/Loki):
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm upgrade --install loki grafana/loki-stack \
  --namespace observability --create-namespace \
  --values observability/loki-stack-values.yaml
  1. Трафик/IDS (Suricata):
kubectl apply -f observability/suricata-daemonset.yaml   # поменяйте INTERFACE при необходимости

Дополнительно (по желанию): pcapзеркало + Caronte (если у вас есть манифест Caronte):

# kubectl apply -f caronte.yaml
kubectl apply -f hardening/perimeter-pcap-daemonset.yaml   # поменяйте INTERFACE/CARONTE_BASE_URL при необходимости
  1. Security CI:
  • Скопируйте ci/gitea/security.yaml в репозиторий сервиса.
  • В секретах репозитория/организации задайте DEFECTDOJO_URL, DEFECTDOJO_TOKEN, DEFECTDOJO_ENGAGEMENT_ID.
  • Workflow гоняет Semgrep, Trivy FS, npm audit и импортирует отчёты в DefectDojo.
  1. Публикация портов TCPсервисов:
./scripts/register-tcp-service.sh \
  --namespace shortly \
  --service shortly-web \
  --port 15151

Скрипт добавит порт в infra/tcp-services и перезапустит ingressnginx.

Доступы и источники данных

  • Grafana: https://grafana.<domain>; логин admin, пароль из observability/loki-stack-values.yaml.
  • Loki datasource в Grafana: http://loki:3100 (или http://loki.observability.svc.cluster.local:3100), Access = Server. Для Loki 2.6.x возможна ошибка healthcheck при тесте, но запросы работают.
  • Suricata логи в Grafana → Explore → Loki: {app="suricata"}
  • SonarQube: admin/admin (после входа поменяйте пароль).
  • DefectDojo пароль администратора:
kubectl -n tools get secret defectdojo \
  -o jsonpath='{.data.DD_ADMIN_PASSWORD}' | base64 --decode

Рекомендуемые настройки безопасности

  • Включите блокировки в ModSecurity выборочно через аннотации Ingress (по умолчанию DetectionOnly). Пример в docs/perimeter-lb.md.
  • Добавьте Kyverno/Gatekeeper политики: запрет privileged/hostPath, runAsNonRoot, обязательные requests/limits, ограничение capabilities.
  • Для Shortly уже добавлены NetworkPolicy (shortener/k8s/networkpolicy.yaml), для остальных сервисов добавляйте политики по той же модели.
  • В CI добавьте hadolint, kube-linter/kubescape, trivy image (для собранных образов) и импортируйте в DefectDojo.
  • Закрепите статический IP на ingressnginx LoadBalancer (или пул MetalLB) и выдайте сертификаты (Lets Encrypt/корп. CA).

Полезные ссылки

  • Edge/WAF периметр: docs/perimeter-lb.md
  • AppSec и DefectDojo: docs/appsec-pipeline.md
  • SonarQube: docs/sonarqube.md
  • Security workflow для Gitea: ci/gitea/security.yaml
  • Трафик/IDS: docs/traffic-visibility.md
  • UI быстрый старт: docs/ui-quickstart.md