| .tools | ||
| cert-manager | ||
| ci/gitea | ||
| defectdojo | ||
| docs | ||
| hardening | ||
| observability | ||
| scripts | ||
| shortener | ||
| sonarqube | ||
| gitea-runner.yaml | ||
| gitea.yaml | ||
| namespaces.yaml | ||
| prok_infra.zip | ||
| readme.md | ||
| Пояснительная_записка_ИБ_ЗАКЛ_ФИНАЛ.pdf | ||
Production‑ready security stack for Kubernetes
Здесь собран базовый набор для продового периметра: публичный LoadBalancer с ingress‑nginx + WAF, удобный просмотр/детект трафика через Suricata, AppSec‑платформа (DefectDojo + SonarQube) и удобный Git/CI/CD на Gitea.
Что внутри
- Edge: ingress‑nginx (
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)
- Namespace’ы:
kubectl apply -f namespaces.yaml
- 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
- TCP services ConfigMap для ingress (обязателен перед публикацией TCP):
kubectl apply -f hardening/tcp-services-configmap.yaml
- 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
- 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
- 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.
- 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
- 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
- Трафик/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 при необходимости
- Security CI:
- Скопируйте
ci/gitea/security.yamlв репозиторий сервиса. - В секретах репозитория/организации задайте
DEFECTDOJO_URL,DEFECTDOJO_TOKEN,DEFECTDOJO_ENGAGEMENT_ID. - Workflow гоняет Semgrep, Trivy FS, npm audit и импортирует отчёты в DefectDojo.
- Публикация портов TCP‑сервисов:
./scripts/register-tcp-service.sh \
--namespace shortly \
--service shortly-web \
--port 15151
Скрипт добавит порт в infra/tcp-services и перезапустит ingress‑nginx.
Доступы и источники данных
- 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 возможна ошибка health‑check при тесте, но запросы работают. - 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 на ingress‑nginx LoadBalancer (или пул MetalLB) и выдайте сертификаты (Let’s 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