Seguridad de red de microservicios basada en eBPF

Seguridad de red de microservicios basada en eBPF

Traducido de: Seguridad de red para microservicios con eBPF

Algunas herramientas de código abierto de kubernetes han comenzado a usar eBPF, la mayoría de estas herramientas están relacionadas con la red, el monitoreo y la seguridad.

Este artículo no cubrirá todos los aspectos de eBPF, solo como una guía de inicio, incluido el concepto BPF del kernel de Linux, las ventajas de agregar esta función al entorno de microservicios y las herramientas que actualmente usan esta función, como Cilium o Weave.

Comprender eBPF

Berkely Packet Filters, o BPF para abreviar, es un conjunto de instrucciones que fue introducido por primera vez por Steven McCanne y Van Jacobso en 1992. Por lo general, se utiliza para proporcionar filtrado de paquetes para aplicaciones (como tcpdump), y permanece en el kernel de Linux durante mucho tiempo.

BPF se puede ver como una máquina virtual simple: la máquina extraída de ella tiene solo unos pocos registros, espacio de pila, un contador de programa implícito y un concepto de funciones auxiliares que le permiten trabajar con el resto del núcleo.

La VM en el núcleo es responsable de convertir el código de byte bfp en una estructura comprensible por la capa inferior, y proporciona la función de filtrado de paquetes.

Pero antes de eso, para realizar el filtrado de paquetes, era necesario copiar los paquetes en el espacio del usuario, lo que resultaría en una baja eficiencia y un gran desperdicio de recursos.

El verificador verifica si el programa activará un bucle y garantiza que se pueda detener el programa (no habrá un bucle infinito ).

En los últimos años, la comunidad Linux ha eliminado el clásico analizador BPF (cBPF, la función se limita al filtrado y monitoreo de paquetes) del núcleo, y ha introducido un nuevo conjunto de instrucciones, llamado eBPF.

El BPF ampliado brinda más flexibilidad y capacidad de programación, agrega nuevos escenarios de uso, como el seguimiento, el uso externo de las llamadas del sistema bpf, el acceso seguro a la memoria del kernel o el análisis rápido, etc., y actualiza el compilador Just-In-Time (JIT) , Traducir eBPF para programas que se ejecutan en esta máquina.

También puede adjuntar el programa bpf a otros objetos del kernel (cBPF solo se puede conectar al socket para el filtrado del socket). Los objetos que se pueden adjuntar son: Kprobes, Tracepoints, planificaciones de red, XDP (eXpress Data Path), etc. XDP se usa junto con una estructura de datos compartida (mapa), que puede proporcionar comunicación entre el espacio del usuario y el espacio del kernel, o en diferentes Comparta información entre los programas BPF.

Crear un programa BPF

Una característica importante de eBPF es la capacidad de utilizar lenguajes de alto nivel (como C) para implementar programas. LLVM tiene un backend eBPF para editar archivos ELF que contienen instrucciones eBPF. El frontend (como clang) puede usarse para generar programas.

Después de convertir un backend a bytecode, la llamada al sistema bpf () se usa para cargar el programa bpf y verificar su seguridad. El JIT compila el código de bytes en la arquitectura de la CPU y adjunta el programa a los objetos del núcleo.Cuando ocurren eventos en estos objetos, se desencadena la ejecución del programa (por ejemplo, al enviar un mensaje desde una interfaz de red).

Puede consultar la siguiente información para escribir el programa eBPF:

Estrategia de seguridad de contenedores bajo IPTables

Históricamente, el tiempo de ejecución del contenedor era Docker, y las políticas de seguridad y las reglas NAT se implementaron configurando IPTables en el host del contenedor.

Hay 5 etapas en la imagen a continuación:

  • llamada al sistema connect ()
  • Construir mensaje
  • Reenviar mensajes a través de vETH
  • Aplicar iptables en el host
  • Descartar o reenviar el mensaje

Al usar iptables, puede configurar una política para cada instancia, pero solo para la capa 3 y la capa 4. El paquete debe reconstruirse y las entradas de iptables deben procesarse para procesar los paquetes que deben reenviarse.

Estrategia de seguridad de contenedores bajo eBPF

La estrategia eBPF se puede aplicar a las llamadas al sistema () antes de la pila de protocolos completa o la formación de paquetes, sin estar restringida por el uso de iptables. Como eBPF está conectado al espacio de nombres de la red de contenedores, eBPF intercepta y filtra todas las comunicaciones.

Además, las políticas de seguridad se pueden aplicar en función de las acciones a nivel de programa. Para cada microservicio, puede configurar políticas no solo en L3 y L4, sino también en L7, como REST GET / POST / PUT / DELETE o especificar una ruta específica, como / service1, / restricta.

Reemplazar iptables con eBPF

Aprenda de las manos de los contribuyentes del kernel de Linux por qué la comunidad del kernel debería reemplazar iptables , comprender los problemas que enfrenta kube-proxy en kubernetes, o por qué usar una política basada en direcciones IP y puertos en un contenedor no es una buena manera.

Parte de la herramienta de código abierto kubernetes implementada con las funciones de eBPF logra un alto rendimiento y una baja latencia, y se utiliza especialmente en los campos de monitoreo, seguridad y redes.

Cilium: control dinámico de red y visualización

El proyecto de red Cilium utiliza una gran cantidad de BPF para proporcionar enrutamiento y filtrado de tráfico de red para sistemas basados ​​en contenedores. Puede generar y aplicar dinámicamente reglas sin modificar el núcleo.

La política L3 / L4 en el ejemplo anterior solo permite que la aplicación2 acceda a la aplicación1 a través del puerto 80, y no permite que la aplicación3 acceda a la aplicación1.

[{
    endpointSelector: {matchLabels:{id:app1}},
    ingress:[{
        fromEndpoints:[
            {matchLabels:{id:app2}}
        ],
        toPorts:[{
            ports:[{ports:80, protocol:tcp}]
        }]
    }]
}]

También podemos usar políticas de seguridad más estrictas en el nivel de la llamada, como restringir el acceso a la ruta / público pero no a la ruta / restringida.

¿Cómo funciona Cilium?

Cada host ejecuta un agente, que traduce las definiciones de políticas de red en programas BPF (en lugar de administrar iptables). Estos programas se cargan en el núcleo y luego se conectan al dispositivo Ethernet virtual del contenedor. Cuando se ejecutan estos programas, estas reglas se aplican a cada mensaje enviado y recibido.

Debido a que BPF se ejecuta en el kernel de Linux, puede usar y actualizar las políticas de seguridad de Cilium sin modificar el código de la aplicación o la configuración del contenedor.

Ver más:

CONSEJOS:

  • cilio requisitos del sistema son relativamente altos, tales como los requisitos de la versión del kernel Linux kernel> = 4.9.17, más a participar en los documentos oficiales

  • Restringido por eBPF es relativamente nuevo, y la versión del núcleo requerida es mayor, por lo que no ha sido ampliamente promovida por kubernetes , pero la solución de red es una gran tendencia. En la actualidad, calico ya admite el modo eBPF ( no recomendado para uso de producción), y el complemento Terway de Alibaba Cloud también se basa en eBPF.

  • Vea la documentación oficial para más

Supongo que te gusta

Origin www.cnblogs.com/charlieroro/p/12724848.html
Recomendado
Clasificación