Apache APISIX se integra con el WAF open-appsec

Christopher Lutat

Christopher Lutat

October 21, 2024

Ecosystem

Introducción

open-appsec WAF se complace en anunciar una nueva integración con la puerta de enlace de API de código abierto Apache APISIX.

Esta nueva colaboración entre los equipos de open-appsec y API7 ahora permite a los usuarios proteger sus API web y otros servicios web expuestos por Apache APISIX contra tipos de ataques conocidos y desconocidos de manera efectiva, basándose en la avanzada tecnología de aprendizaje automático de open-appsec, además de agregar varias capacidades de seguridad mejoradas.

Acerca de Apache APISIX

Apache APISIX es una solución moderna, flexible y de alto rendimiento de puerta de enlace de API de código abierto diseñada para manejar diversos casos de uso en arquitecturas de microservicios y nativas de la nube. Su propósito principal es facilitar la gestión de API al servir como una puerta de enlace para gestionar, proteger y optimizar el tráfico de API entre los clientes y los servicios backend.

Otros casos de uso para APISIX como puerta de enlace de API incluyen balanceo de carga, limitación de tasa, autenticación y autorización. Proporciona características completas como control de tráfico, upstream dinámico y extensibilidad de plugins, lo que permite a los desarrolladores personalizar y extender la funcionalidad según sus necesidades específicas.

Acerca de open-appsec WAF

open-appsec WAF proporciona prevención de amenazas automática y preventiva, y se integra con varios tipos de proxies inversos como NGINX, así como con puertas de enlace de API como APISIX. Está basado en aprendizaje automático, lo que significa que no requiere firmas (o actualizaciones) en absoluto. Esto le permite proporcionar una prevención de amenazas automática y de última generación incluso para ataques de día cero verdaderos, al mismo tiempo que reduce significativamente tanto el esfuerzo administrativo como la cantidad de falsos positivos.

Además, open-appsec proporciona muchas capas de seguridad adicionales, como AntiBot, limitación de tasa, cumplimiento de esquemas, soporte de firmas de Snort, reglas/excepciones personalizadas y más. open-appsec puede gestionarse centralmente utilizando una interfaz web proporcionada como un servicio SaaS y también localmente utilizando un archivo de configuración declarativo.

Integración de Apache APISIX con open-appsec

Con esta nueva integración, los usuarios de APISIX ahora tendrán acceso a open-appsec WAF como una solución integrada y de última generación basada en aprendizaje automático para la protección de sus API web y aplicaciones web.

Ahora pueden usar, por ejemplo, la "Edición Comunitaria" gratuita y de código abierto de open-appsec para obtener una protección efectiva basada en IA contra ataques conocidos y desconocidos para todo lo expuesto por su puerta de enlace de API APISIX, al mismo tiempo que reducen significativamente la cantidad de falsos positivos, liberando al administrador de tareas tediosas como crear excepciones, actualizar políticas basadas en firmas tradicionales y más.

Esta integración estará disponible para todas las plataformas comunes: Linux, Docker y Kubernetes.

Linux

Para implementaciones "incrustadas" de APISIX en Linux, un instalador de open-appsec agregará un módulo de "adjunto de open-appsec" a la instalación existente de APISIX y también instalará el "agente de open-appsec" junto con él, que recibirá el tráfico del adjunto, lo inspeccionará y devolverá la acción concluida para bloquear o permitir el tráfico de vuelta a APISIX, respectivamente, al adjunto de open-appsec integrado con él.

Aquí hay un esquema arquitectónico simple para la implementación en Linux.

Arquitectura para Implementación en Linux

Docker

Para implementaciones basadas en Docker de APISIX con open-appsec WAF, hay una imagen de contenedor de APISIX especial disponible, a la que ya se ha agregado el adjunto de open-appsec, así como un archivo docker-compose mejorado, que implementa tanto el contenedor de la puerta de enlace APISIX como un Agente de open-appsec que realiza la inspección de seguridad y devuelve las decisiones concluidas a la puerta de enlace APISIX para permitir o bloquear el tráfico.

Aquí hay un esquema arquitectónico simple para la implementación en Docker.

Arquitectura para Implementación Basada en Docker

Kubernetes

Para implementaciones basadas en Kubernetes de APISIX integrado con open-appsec, hay un chart de Helm disponible, que se basa en el chart oficial de APISIX y está mejorado para incluir también el adjunto de open-appsec en el contenedor de la puerta de enlace APISIX y también implementa el agente de open-appsec. Además, tendrá la opción de configurar open-appsec de manera declarativa "al estilo DevOps" utilizando recursos personalizados en K8s como alternativa al uso de la interfaz web de gestión central de open-appsec.

Aquí hay un esquema arquitectónico simple para la implementación en Kubernetes.

Arquitectura para Implementación en Kubernetes

Agregar open-appsec WAF a APISIX en Linux

Para instalar open-appsec en un sistema Linux con APISIX instalado, siga estos pasos:

1. Requisitos previos

  • La plataforma Linux debe ser Ubuntu 22.04.
  • Asegúrese de tener APISIX instalado.

Puede encontrar la lista de versiones de APISIX compatibles aquí: https://downloads.openappsec.io/packages/supported-apisix.txt.

Si aún no tiene APISIX instalado, puede usar los siguientes comandos para realizar una instalación de APISIX en "modo tradicional". Al ejecutar estos comandos, primero instalará la base de datos etcd para APISIX, luego agregará los repositorios necesarios antes de instalar e iniciar APISIX.

Instalar la Base de Datos etcd

ETCD_VERSION='3.5.4'
wget https://github.com/etcd-io/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz
tar -xvf etcd-v${ETCD_VERSION}-linux-amd64.tar.gz && cd etcd-v${ETCD_VERSION}-linux-amd64
cp -a etcd etcdctl /usr/bin/
nohup etcd >/tmp/etcd.log 2>&1 &
etcd

Agregar y Actualizar Repositorios de Paquetes

apt install gnupg
echo "deb http://openresty.org/package/debian bullseye openresty" | tee /etc/apt/sources.list.d/openresty.list
wget -O - https://openresty.org/package/pubkey.gpg | apt-key add -
wget -O - http://repos.apiseven.com/pubkey.gpg | apt-key add -
echo "deb http://repos.apiseven.com/packages/debian bullseye main" | tee /etc/apt/sources.list.d/apisix.list
apt update

Instalar, Iniciar y Arrancar APISIX

apt install apisix=3.9.1-0
apisix init
apisix start

2. Descargar el Instalador de open-appsec

wget https://downloads.openappsec.io/open-appsec-install && chmod +x open-appsec-install

3. Instalar open-appsec

Instale open-appsec para integrarlo con la instalación existente de APISIX.

Tenga en cuenta que la bandera --prevent instalará open-appsec con una política predeterminada ya configurada en modo de prevención.

./open-appsec-install --auto --prevent

4. Obtener y Almacenar la Clave de Administración de APISIX

Obtenga la clave de administración de APISIX del archivo de configuración config.yaml de APISIX y almacénela en la variable de entorno APISIX_KEY.

export APISIX_KEY=$(awk '/key:/{ if ($2 ~ /^edd1/) print $2 }' /usr/local/apisix/conf/config.yaml )

5. Configurar Ruta para Exponer Servicios

Configure una ruta de ejemplo en la puerta de enlace APISIX para exponer un servicio web externo o una API web. En este ejemplo, usamos httpbin.org como el backend de ejemplo.

curl http://127.0.0.1:9180/apisix/admin/routes/100 -H "X-API-KEY:$APISIX_KEY" -X PUT -d '{
    "methods": [
      "GET"
    ],
    "uri": "/anything",
    "upstream": {
      "type": "roundrobin",
      "nodes": {
        "httpbin.org:80": 1
      }
    }
  }'

6. Validar

Veamos si esta ruta funciona accediendo a ella.

curl -s -v -G --data-urlencode email=user@domain.abc http://localhost:9080/anything

7. Simular un Ataque de Inyección SQL

Ahora intentemos simular un ataque de inyección SQL (ver 'OR '1'='1' en la siguiente solicitud HTTP) contra el servicio httpbin.org expuesto por la puerta de enlace APISIX, que ahora está protegido por el WAF de open-appsec.

curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://localhost:9080/anything

Este ataque simulado ahora es bloqueado con éxito por el motor WAF contextual basado en aprendizaje automático de open-appsec.

8. Revisar Archivos de Registro

Revise los archivos de registro correspondientes que muestran la "prevención" para la solicitud HTTP con el ataque simulado que acabamos de enviar.

tail -f /var/log/nano_agent/cp-nano-http-transaction-handler.log*| grep -i user@domain.abc

Alternativamente, puede usar la herramienta open-appsec-ctl:

open-appsec-ctl --view-logs | grep -i user@domain.abc

9. Conectar con open-appsec para Gestión Centralizada (Opcional)

Opcionalmente, puede conectar su implementación ahora a https://my.openappsec.io para gestionar open-appsec centralmente con una interfaz web fácil de usar, monitorear eventos de seguridad y más, consulte la sección ¿Cómo Gestionar Su Implementación de open-appsec WAF Centralmente? más adelante para obtener más información.

¡Felicidades! Ha agregado con éxito open-appsec WAF a su instalación existente de APISIX y ha verificado que sus servicios web expuestos por la puerta de enlace APISIX ahora están protegidos contra ataques web.

Implementar APISIX con open-appsec WAF en Plataformas Contenerizadas (Docker)

Para instalar APISIX integrado con open-appsec en Docker, puede seguir los pasos que se muestran a continuación.

A diferencia del ejemplo anterior, aquí estamos implementando APISIX en "modo independiente", lo que significa que está configurado de manera declarativa utilizando un montaje de volumen de Docker con un archivo yaml que contiene las configuraciones y, por lo tanto, no requerirá una implementación de la base de datos etcd.

Tenga en cuenta que APISIX admite tanto el modo tradicional como el modo independiente en todos los tipos de implementación (Linux, Docker, …)

1. Requisito previo

Asegúrese de tener una plataforma Linux con las herramientas Docker y docker-compose instaladas.

2. Crear una Carpeta para open-appsec

Dentro del directorio que desea utilizar para la implementación, cree una carpeta appsec-localconfig que contendrá el archivo de configuración declarativa de appsec:

mkdir ./appsec-localconfig

3. Descargar el Archivo de open-appsec en la Carpeta

Descargue el archivo de configuración declarativa inicial para open-appsec en esa carpeta.

wget https://raw.githubusercontent.com/openappsec/openappsec/main/config/linux/latest/prevent/local_policy.yaml -O appsec-localconfig/local_policy.yaml

Tenga en cuenta que este archivo de configuración declarativa de ejemplo ya está configurado para prevenir ataques.

4. Crear una Carpeta para APISIX

Cree otra carpeta apisix-localconfig que contendrá el archivo de configuración declarativa para APISIX: mkdir ./apisix-localconfig.

5. Descargar el Archivo de APISIX en la Carpeta

Descarguemos un archivo de configuración declarativa simple también para APISIX para que podamos verificar la protección de open-appsec después de la implementación.

wget https://raw.githubusercontent.com/openappsec/openappsec/main/deployment/apisix/apisix-example-config/apisix-standalone.yaml -O ./apisix-localconfig/apisix-standalone.yaml

6. Crear un Archivo docker-compose.yaml

Cree un archivo docker-compose.yaml con el contenido a continuación, que se puede descargar de la siguiente manera:

wget https://raw.githubusercontent.com/openappsec/openappsec/main/deployment/apisix/docker-compose.yaml
version: "3"

services:
  apisix:
    container_name: apisix
    image: "ghcr.io/openappsec/apisix-attachment:latest"
    ipc: service:appsec-agent
    restart: always
    volumes:
      - ./apisix-localconfig/apisix-standalone.yaml:/usr/local/apisix/conf/apisix.yaml:ro
    environment:
      - APISIX_STAND_ALONE=true
    ports:
      - "9180:9180/tcp"
      - "9080:9080/tcp"
      - "9091:9091/tcp"
      - "9443:9443/tcp"

  appsec-agent:
    container_name: appsec-agent
    image: 'ghcr.io/openappsec/agent:latest'
    ipc: shareable
    restart: unless-stopped
    environment:
      # ajuste con su propio correo electrónico a continuación
      - user_email=user@email.com
      - registered_server="APISIX Server"
    volumes:
      - ./appsec-config:/etc/cp/conf
      - ./appsec-data:/etc/cp/data
      - ./appsec-logs:/var/log/nano_agent
      - ./appsec-localconfig:/ext/appsec
    command: /cp-nano-agent

7. Actualizar Su Dirección de Correo Electrónico (Opcional)

Edite el archivo docker-compose.yaml y reemplace "user@email.com" con su propia dirección de correo electrónico, para que podamos brindar asistencia en caso de cualquier problema con la implementación específica en el futuro y proporcionar información de manera proactiva sobre open-appsec.

Este es un parámetro opcional y puede eliminarse. Si enviamos correos electrónicos automáticos, también se incluirá una opción para optar por no recibir comunicaciones similares en el futuro.

8. Iniciar Todos los Contenedores

Ejecute docker-compose up para iniciar la implementación de todos los contenedores relevantes:

docker-compose up -d

9. Verificar el Estado de los Contenedores

Verifique si los contenedores apisix-attachment y appsec-agent están en funcionamiento.

docker ps

10. Validar la Configuración Independiente

Veamos si la configuración independiente funciona accediendo a ella.

curl -s -v -G --data-urlencode email=user@domain.abc http://localhost:9080/anything

11. Simular un Ataque de Inyección SQL

Ahora intentemos simular un ataque de inyección SQL contra el servicio httpin.org expuesto por el contenedor de la puerta de enlace APISIX, que ahora está protegido por open-appsec.

curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://localhost:9080/anything

12. Conectar con open-appsec para Gestión Centralizada (Opcional)

Opcionalmente, puede conectar su implementación ahora a https://my.openappsec.io para gestionar open-appsec centralmente con una interfaz web fácil de usar, monitorear eventos de seguridad y más, consulte la sección ¿Cómo Gestionar Su Implementación de open-appsec WAF Centralmente? más adelante para obtener más información.

Implementar APISIX con open-appsec WAF en Kubernetes Usando Helm

1. Requisito previo

Asegúrese de que la plataforma Kubernetes y la herramienta Helm estén disponibles.

2. Descargar open-appsec

Descargue open-appsec para el chart de Helm de APISIX aquí.

wget https://downloads.openappsec.io/packages/helm-charts/apisix/open-appsec-k8s-apisix-latest.tgz

3. Instalar el Chart de Helm

Este comando de ejemplo helm install está instalando el chart de Helm de open-appsec para APISIX, que se basa en una versión extendida del chart oficial de APISIX.

Implementará la puerta de enlace APISIX como el Controlador de Ingress de APISIX, así como open-appsec WAF integrado con él. También ofrece una opción de configuración adicional específicamente para open-appsec WAF (consulte values.yaml dentro del chart de Helm y la documentación de open-appsec).

Después de la implementación, puede asignar sus recursos de ingress de K8s a la puerta de enlace APISIX configurándolos para usar la siguiente clase de ingress: appsec-apisix.

helm install open-appsec-k8s-apisix-latest.tgz \
--name-template=appsec-apisix \
--set rbac.create=true \
--set appsec.mode=standalone \
--set service.type=LoadBalancer \
--set appsec.persistence.enabled=false \
--set ingress-controller.enabled=true \
--set ingress-controller.config.ingressClass=appsec-apisix \
--set appsec.userEmail=<su-dirección-de-correo-electrónico>\
--set appsec.agentToken= \
--create-namespace \
-n appsec-apisix

Reemplace <su-dirección-de-correo-electrónico> en el comando de instalación de Helm anterior con su propia dirección de correo electrónico, para que podamos enviarle noticias y actualizaciones relacionadas con open-appsec y brindarle un mejor soporte con su implementación si es necesario. Puede darse de baja en cualquier momento o, alternativamente, simplemente eliminar esa línea si prefiere no proporcionar su correo electrónico.

4. Validar

Valide que los pods se implementaron correctamente y están en un estado listo:

kubectl get pods -n appsec-apisix

5. Crear un Recurso de Política de open-appsec

Ejecute el siguiente comando para crear la "open-appsec-best-practice-policy" en K8s.

Tenga en cuenta que esta política de ejemplo ya está preconfigurada para prevenir ataques.

kubectl apply -f https://raw.githubusercontent.com/openappsec/openappsec/main/config/k8s/v1beta1/open-appsec-k8s-prevent-config-v1beta1.yaml

También puede crear su propia política personalizada, aquí encontrará todos los detalles.

6. Obtener el Nombre del Recurso de Destino

Descubra el nombre del recurso de ingress relevante que desea proteger:

kubectl get ing -A

7. Editar el Recurso de Ingress

kubectl edit ing/<nombre-del-ingress> -n <espacio-de-nombres-del-ingress>

8. Cambiar el ingressClassname

Cambie el ingressClassname para usar open-appsec:

spec: ingressClassName: appsec-apisix

9. Agregar Anotación al Recurso de Ingress

Agregue esta anotación al recurso de ingress para activar open-appsec para este ingress especificando el recurso personalizado de política de open-appsec deseado.

openappsec.io/policy: open-appsec-best-practice-policy

10. Validar la Configuración Independiente

Veamos si la configuración independiente funciona accediendo a ella:

curl -s -v -G --data-urlencode email=user@domain.abc http://[SU-HOSTNAME-DE-INGRESS]

11. Simular un Ataque de Inyección SQL

Ahora intentemos simular un ataque de inyección SQL contra el servicio httpin.org expuesto por el contenedor de la puerta de enlace APISIX, que ahora está protegido por open-appsec.

curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://[SU-HOSTNAME-DE-INGRESS]

Reemplace [SU-HOSTNAME-DE-INGRESS] en el comando anterior con el hostname que configuró en el recurso de ingress que protegió con open-appsec WAF en los pasos anteriores, también cambie "http" a "https" si es necesario.

¡Felicidades! Ha implementado con éxito APISIX integrado con open-appsec WAF y ha verificado que sus servicios web expuestos por la Puerta de Enlace APISIX ahora están protegidos contra ataques.

¿Cómo Gestionar Su Implementación de open-appsec WAF Centralmente?

Si lo desea, también puede gestionar su implementación de open-appsec WAF (integrada con APISIX) centralmente utilizando la interfaz web de open-appsec (servicio SaaS) disponible en https://my.openappsec.io, conectando el agente de open-appsec a un perfil de implementación en la interfaz web central.

Alternativamente, puede continuar gestionando su implementación localmente pero aún así conectarse a un perfil de la interfaz web central en "modo declarativo" para que pueda ver la configuración local (solo lectura) en la interfaz web.

Junto con la configuración de open-appsec, la interfaz web le permite ver mucha más información, como el estado de los agentes de open-appsec implementados, registros de seguridad, paneles de control y más.

Para obtener instrucciones sobre cómo conectar su implementación a la interfaz web central, consulte la documentación de open-appsec disponible en https://docs.openappsec.io.

A continuación, encontrará algunas capturas de pantalla de la interfaz web.

Interfaz web de open-appsec 1

Interfaz web de open-appsec 2

Resumen

En este blog explicamos cómo open-appsec puede integrarse con Apache APISIX en todas las siguientes implementaciones: implementaciones basadas en Linux regulares, implementaciones contenerizadas (Docker) y también entornos de Kubernetes.

Siguiendo los pasos de implementación para APISIX con open-appsec WAF, simulamos ataques de inyección SQL, que fueron efectivamente prevenidos por la tecnología WAF basada en aprendizaje automático de open-appsec.

Además, se explicó cuáles son los beneficios de conectarse a la interfaz web central de open-appsec para gestionar, monitorear, analizar registros y generar informes.

Esperamos que estas nuevas integraciones resulten muy útiles para mejorar la seguridad de su puerta de enlace de API APISIX y sus API web y aplicaciones web expuestas con el WAF basado en aprendizaje automático de open-appsec.

Le damos la bienvenida a contactarnos si tiene algún comentario, pregunta o podría enfrentar algún desafío técnico con el que desee que lo ayudemos. Puede comunicarse con el equipo de open-appsec a través del chat en https://www.openappsec.io o por correo electrónico a: info@openappsec.io.

Recursos Adicionales

open-appsec WAF

Sitio web: https://www.openappsec.io

GitHub: https://github.com/openappsec

Documentación: https://docs.openappsec.io

Playgrounds: https://www.openappsec.io/playground

Blogs: https://www.openappsec.io/blogs

Apache APISIX

Sitio web: https://apisix.apache.org

GitHub: https://github.com/apache/apisix

Documentación: https://apisix.apache.org/docs/

Blogs: https://apisix.apache.org/blog/

Tags: