Перейти к содержанию

Работа с трафиком east-west и north-south

Stateful Firewall

В вычислительной технике Stateful Firewall — это межсетевой экран, который отслеживает отдельные сеансы сетевых соединений, проходящих через него. Проверка пакетов с отслеживанием состояния, также называемая динамической фильтрацией пакетов, это функция безопасности, часто используемая в некоммерческих и корпоративных сетях.

В Платформу Боцман встроен сетевой плагин Cilium, который является stateful firewall, работая на основе eBPF. Это дает возможность настраивать east-west и north-south трафик с контролем состяния на основе сетевых политик Cilium, при этом политики могут поддерживать уровни L3,L4 и L7 и работать с HTTP(S), DNS, gRPC.

Пример политики L3-L4:

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: database-policy
  namespace: default
spec:
  endpointSelector:
    matchLabels:
      tier: database
  ingress:
    - fromEndpoints:
        - matchLabels:
            tier: backend
      toPorts:
        - ports:
            - port: "7379"
    - fromCIDRSet:
        - cidr: 102.213.50.174/32
      toPorts:
        - ports:
            - port: "443"
  egress:
    - toFQDNs:
        - matchPattern: "*.google.com"
      toPorts:
        - ports:
            - port: "443"
        - ports:
            - port: "80"

Данная политика разрешает входящий трафик от подов backend до подов database по порту 7379 внутри кластера (east-west траффик), а так же из внешней подсети 102.213.50.174/32 на порт 443 (north-south трафик). Также данная политика разрешает исходящий трафик на DNS-паттерн "*.google.com".

Пример политики L7:

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "secure-grpc-access"
spec:
  endpointSelector:
    matchLabels:
      app: backend-service
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend-client
    toPorts:
    - ports:
      - port: "50051"
        protocol: TCP
      rules:
        grpc:
        - service: "backend"
          method: "GetStatus"
Данная политика разрешает метод gRPC GetStatus от пода frontend к поду backend по порту 50051.

Настройки Nginx Ingress для фильтрации north-south траффика:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: restricted-ingress
  annotations:
    nginx.ingress.kubernetes.io/whitelist-source-range: "102.213.50.174/32"
spec:
  rules:
  ...
Данная аннотация в объекте ingress позволяет определить диапазон разрешенных сетей.

Активация принудительного использования mTLS:

Внимание!

Необходимо установленное приложение Istio

helm install istio-base istio/base -n istio-system --set defaultRevision=default --create-namespace
helm install istiod istio/istiod -n istio-system --wait

После этого можно создать политику, явно указывающую на взаимодействие через mTLS:

apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: test
  namespace: test
spec:
  mtls:
    mode: STRICT
В случае применения такой политики любое взаимодествие без использования mTLS будет заблокировано.