Apache APISIX s'intègre avec le WAF open-appsec
October 21, 2024
Introduction
open-appsec WAF est ravi d'annoncer une nouvelle intégration avec la passerelle API open-source Apache APISIX.
Cette nouvelle collaboration entre les équipes open-appsec et API7 permet désormais aux utilisateurs de protéger leurs API web et autres services web exposés par Apache APISIX contre les types d'attaques connus et inconnus, grâce à la technologie avancée basée sur l'apprentissage automatique d'open-appsec, tout en ajoutant plusieurs capacités de sécurité supplémentaires.
À propos d'Apache APISIX
Apache APISIX est une solution moderne, flexible et performante de passerelle API open-source conçue pour gérer divers cas d'utilisation dans les architectures microservices et cloud-native. Son objectif principal est de faciliter la gestion des API en servant de passerelle pour gérer, sécuriser et optimiser le trafic API entre les clients et les services backend.
Les autres cas d'utilisation d'APISIX en tant que passerelle API incluent l'équilibrage de charge, la limitation de débit, l'authentification et l'autorisation. Il offre des fonctionnalités complètes telles que le contrôle du trafic, l'amont dynamique et l'extensibilité des plugins, permettant aux développeurs de personnaliser et d'étendre les fonctionnalités selon leurs besoins spécifiques.
-
Site web : apisix.apache.org
-
Github : github.com/apache/apisix
-
Documentation : apisix.apache.org/docs
À propos d'open-appsec WAF
open-appsec WAF fournit une prévention automatique et préemptive des menaces et s'intègre à divers types de proxies inverses comme NGINX ainsi qu'à des passerelles API comme APISIX. Basé sur l'apprentissage automatique, il ne nécessite aucune signature (ou mise à jour). Cela lui permet de fournir une prévention automatique et de pointe des menaces, même pour les attaques zero-day, tout en réduisant considérablement l'effort administratif et le nombre de faux positifs.
En outre, open-appsec offre de nombreuses couches de sécurité supplémentaires telles que AntiBot, la limitation de débit, l'application de schémas, la prise en charge des signatures Snort, des règles/exceptions personnalisées, et plus encore. open-appsec peut être géré centralement via une interface Web fournie en tant que service SaaS et localement via un fichier de configuration déclaratif.
-
Site web : www.openappsec.io
-
Github : github.com/openappsec
-
Documentation : docs.openappsec.io
-
Terrains de jeu : www.openappsec.io/playground
Intégration d'Apache APISIX avec open-appsec
Avec cette nouvelle intégration, les utilisateurs d'APISIX auront désormais accès à open-appsec WAF en tant que solution WAF intégrée et de pointe basée sur l'apprentissage automatique pour la protection de leurs API web et applications web.
Ils peuvent désormais utiliser, par exemple, l'édition "Community Edition" gratuite et open-source d'open-appsec pour obtenir une protection efficace basée sur l'IA contre les attaques connues et inconnues pour tout ce qui est exposé par leur passerelle API APISIX, tout en réduisant considérablement le nombre de faux positifs, soulageant ainsi l'administrateur de tâches fastidieuses telles que la création d'exceptions, la mise à jour des politiques basées sur des signatures traditionnelles, et plus encore.
Cette intégration sera disponible pour toutes les plateformes courantes : Linux, Docker et Kubernetes.
Linux
Pour les déploiements "embarqués" Linux d'APISIX, un installateur open-appsec ajoutera un module "open-appsec attachment" à l'installation existante d'APISIX et installera également l'"agent open-appsec" à côté, qui recevra le trafic de l'attachement, l'inspectera et renverra l'action conclue pour bloquer ou autoriser le trafic respectivement à APISIX ou à l'attachement open-appsec intégré.
Voici un schéma d'architecture simple pour un déploiement Linux.
Docker
Pour les déploiements basés sur Docker d'APISIX avec open-appsec WAF, une image conteneur APISIX spéciale est disponible, à laquelle l'attachement open-appsec a déjà été ajouté, ainsi qu'un fichier docker-compose amélioré, qui déploie à la fois le conteneur de la passerelle APISIX et un agent open-appsec qui effectue l'inspection de sécurité et renvoie les décisions conclues à la passerelle APISIX pour autoriser ou bloquer le trafic.
Voici un schéma d'architecture simple pour un déploiement sur Docker.
Kubernetes
Pour les déploiements basés sur Kubernetes d'APISIX intégré avec open-appsec, un chart Helm est disponible, basé sur le chart Helm officiel d'APISIX et amélioré pour inclure également l'attachement open-appsec dans le conteneur de la passerelle APISIX et déployer l'agent open-appsec. De plus, vous aurez la possibilité de configurer open-appsec de manière déclarative "à la DevOps" en utilisant des ressources personnalisées dans K8s comme alternative à l'utilisation de l'interface Web de gestion centrale d'open-appsec.
Voici un schéma d'architecture simple pour un déploiement sur Kubernetes.
Ajout d'open-appsec WAF à APISIX sur Linux
Pour installer open-appsec sur un système Linux avec APISIX installé, veuillez suivre les étapes suivantes :
1. Prérequis
- La plateforme Linux doit être Ubuntu 22.04.
- Assurez-vous d'avoir APISIX installé.
Vous pouvez trouver la liste des versions d'APISIX prises en charge ici : https://downloads.openappsec.io/packages/supported-apisix.txt.
Si vous n'avez pas encore installé APISIX, vous pouvez utiliser les commandes suivantes pour effectuer une installation d'APISIX en "mode traditionnel". En exécutant ces commandes, vous installerez d'abord la base de données etcd pour APISIX, puis ajouterez les dépôts nécessaires avant d'installer et de démarrer APISIX.
Installation de la base de données 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
Ajout et mise à jour des dépôts de paquets
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
Installation, initialisation et démarrage d'APISIX
apt install apisix=3.9.1-0
apisix init
apisix start
2. Téléchargement de l'installateur open-appsec
wget https://downloads.openappsec.io/open-appsec-install && chmod +x open-appsec-install
3. Installation d'open-appsec
Installez open-appsec pour l'intégrer à l'installation existante d'APISIX.
Notez que le drapeau
--prevent
installera open-appsec avec une politique par défaut déjà définie en mode prévention.
./open-appsec-install --auto --prevent
4. Obtention et stockage de la clé admin d'APISIX
Obtenez la clé admin d'APISIX à partir du fichier de configuration config.yaml
d'APISIX et stockez-la dans la variable d'environnement APISIX_KEY
.
export APISIX_KEY=$(awk '/key:/{ if ($2 ~ /^edd1/) print $2 }' /usr/local/apisix/conf/config.yaml )
5. Configuration d'une route pour exposer des services
Configurez une route exemple dans la passerelle APISIX pour exposer un service web ou une API web externe. Dans cet exemple, nous utilisons httpbin.org
comme backend exemple.
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. Validation
Voyons si cette route fonctionne en y accédant.
curl -s -v -G --data-urlencode email=user@domain.abc http://localhost:9080/anything
7. Simulation d'une attaque par injection SQL
Essayons maintenant de simuler une attaque par injection SQL (voir 'OR '1'='1'
dans la requête HTTP ci-dessous) contre le service httpbin.org
exposé par la passerelle APISIX qui est maintenant protégée par le WAF open-appsec.
curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://localhost:9080/anything
Cette attaque simulée est maintenant bloquée avec succès par le moteur WAF contextuel basé sur l'apprentissage automatique d'open-appsec.
8. Revue des fichiers de logs
Consultez les fichiers de logs correspondants montrant la "prévention" pour la requête HTTP avec l'attaque simulée que nous venons d'envoyer.
tail -f /var/log/nano_agent/cp-nano-http-transaction-handler.log*| grep -i user@domain.abc
Vous pouvez également utiliser l'outil open-appsec-ctl
:
open-appsec-ctl --view-logs | grep -i user@domain.abc
9. Connexion à open-appsec pour la gestion centrale (Optionnel)
Vous pouvez maintenant connecter votre déploiement à https://my.openappsec.io pour gérer centralement open-appsec avec une interface Web facile à utiliser, surveiller les événements de sécurité et plus encore, voir la section Comment gérer votre déploiement open-appsec WAF centralement ? ci-dessous pour plus d'informations.
Félicitations ! Vous avez ajouté avec succès open-appsec WAF à votre installation existante d'APISIX et vérifié que vos services web exposés par la passerelle APISIX sont maintenant protégés contre les attaques web.
Déploiement d'APISIX avec open-appsec WAF sur des plateformes conteneurisées (Docker)
Pour installer APISIX intégré avec open-appsec sur Docker, vous pouvez suivre les étapes indiquées ci-dessous.
Contrairement à l'exemple ci-dessus, nous déployons ici APISIX en "mode autonome", ce qui signifie qu'il est configuré de manière déclarative en utilisant un montage de volume Docker avec un fichier yaml contenant les configurations et ne nécessite donc pas de déploiement de base de données etcd.
Notez qu'APISIX prend en charge à la fois le mode traditionnel et le mode autonome dans tous les types de déploiement (Linux, Docker, …)
1. Prérequis
Assurez-vous d'avoir une plateforme Linux avec les outils Docker et docker-compose installés.
2. Création d'un dossier pour open-appsec
Dans le répertoire que vous souhaitez utiliser pour le déploiement, créez un dossier appsec-localconfig
qui contiendra le fichier de configuration déclaratif d'open-appsec :
mkdir ./appsec-localconfig
3. Téléchargement du fichier open-appsec dans le dossier
Téléchargez le fichier de configuration déclaratif initial pour open-appsec dans ce dossier.
wget https://raw.githubusercontent.com/openappsec/openappsec/main/config/linux/latest/prevent/local_policy.yaml -O appsec-localconfig/local_policy.yaml
Notez que ce fichier de configuration déclaratif exemple est déjà configuré pour prévenir les attaques.
4. Création d'un dossier pour APISIX
Créez un autre dossier apisix-localconfig
qui contiendra le fichier de configuration déclaratif pour APISIX : mkdir ./apisix-localconfig
.
5. Téléchargement du fichier APISIX dans le dossier
Téléchargeons un fichier de configuration déclaratif simple également pour APISIX afin de pouvoir vérifier la protection d'open-appsec après le déploiement.
wget https://raw.githubusercontent.com/openappsec/openappsec/main/deployment/apisix/apisix-example-config/apisix-standalone.yaml -O ./apisix-localconfig/apisix-standalone.yaml
6. Création d'un fichier docker-compose.yaml
Créez un fichier docker-compose.yaml
avec le contenu ci-dessous, qui peut être téléchargé comme suit :
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:
# ajustez avec votre propre email ci-dessous
- 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. Mise à jour de votre adresse email (Optionnel)
Modifiez le fichier docker-compose.yaml
et remplacez "user@email.com" par votre propre adresse email, afin que nous puissions vous fournir une assistance en cas de problème avec le déploiement spécifique à l'avenir et vous informer de manière proactive concernant open-appsec.
Ce paramètre est optionnel et peut être supprimé. Si nous envoyons des emails automatiques, il y aura également une option de désabonnement incluse pour ne plus recevoir de communications similaires à l'avenir.
8. Démarrage de tous les conteneurs
Exécutez docker-compose up pour démarrer le déploiement de tous les conteneurs pertinents :
docker-compose up -d
9. Vérification de l'état des conteneurs
Vérifiez si les conteneurs apisix-attachment
et appsec-agent
sont en cours d'exécution.
docker ps
10. Validation de la configuration autonome
Voyons si la configuration autonome fonctionne en y accédant.
curl -s -v -G --data-urlencode email=user@domain.abc http://localhost:9080/anything
11. Simulation d'une attaque par injection SQL
Essayons maintenant de simuler une attaque par injection SQL contre le service httpbin.org exposé par le conteneur de la passerelle APISIX qui est maintenant protégé par open-appsec.
curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://localhost:9080/anything
12. Connexion à open-appsec pour la gestion centrale (Optionnel)
Vous pouvez maintenant connecter votre déploiement à https://my.openappsec.io
pour gérer centralement open-appsec avec une interface Web facile à utiliser, surveiller les événements de sécurité, et plus encore, voir la section Comment gérer votre déploiement open-appsec WAF centralement ? ci-dessous pour plus d'informations.
Déploiement d'APISIX avec open-appsec WAF sur Kubernetes en utilisant Helm
1. Prérequis
Assurez-vous que la plateforme Kubernetes et l'outil Helm sont disponibles.
2. Téléchargement d'open-appsec
Téléchargez open-appsec pour le chart Helm d'APISIX ici.
wget https://downloads.openappsec.io/packages/helm-charts/apisix/open-appsec-k8s-apisix-latest.tgz
3. Installation du chart Helm
Cette commande helm install
exemple installe open-appsec pour le chart Helm d'APISIX, qui est basé sur une version étendue du chart Helm officiel d'APISIX.
Il déploiera la passerelle APISIX en tant que contrôleur d'entrée APISIX, ainsi que le WAF open-appsec intégré avec elle. Il offre également une option de configuration supplémentaire spécifiquement pour le WAF open-appsec (voir values.yaml
dans le chart Helm et la documentation d'open-appsec).
Après le déploiement, vous pouvez attribuer vos ressources d'entrée K8s à la passerelle APISIX en les configurant pour utiliser la classe d'entrée suivante : 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=”<votre-adresse-email>” \
--set appsec.agentToken= \
--create-namespace \
-n appsec-apisix
Remplacez
dans la commande d'installation Helm ci-dessus par votre propre adresse email, afin que nous puissions vous envoyer des nouvelles et des mises à jour concernant open-appsec et mieux vous soutenir avec votre déploiement si nécessaire ! Vous pouvez vous désabonner à tout moment ou simplement supprimer cette ligne si vous préférez ne pas fournir votre email.
4. Validation
Validez que les pods ont été correctement déployés et sont dans un état prêt :
kubectl get pods -n appsec-apisix
5. Création d'une ressource de politique open-appsec
Exécutez la commande suivante pour créer la politique "open-appsec-best-practice-policy" dans K8s.
Notez que cette politique exemple est déjà préconfigurée pour prévenir les attaques.
kubectl apply -f https://raw.githubusercontent.com/openappsec/openappsec/main/config/k8s/v1beta1/open-appsec-k8s-prevent-config-v1beta1.yaml
Vous pouvez également créer votre propre politique personnalisée, ici vous trouverez tous les détails.
6. Récupération du nom de la ressource cible
Trouvez le nom de la ressource d'entrée pertinente que vous souhaitez protéger :
kubectl get ing -A
7. Modification de la ressource d'entrée
kubectl edit ing/<nom de l'entrée> -n <espace de noms de l'entrée>
8. Changement du nom de la classe d'entrée
Changez le nom de la classe d'entrée pour utiliser open-appsec :
spec: ingressClassName: appsec-apisix
9. Ajout d'une annotation à la ressource d'entrée
Ajoutez cette annotation à la ressource d'entrée pour activer open-appsec pour cette entrée en spécifiant la ressource personnalisée de politique open-appsec souhaitée.
openappsec.io/policy: open-appsec-best-practice-policy
10. Validation de la configuration autonome
Voyons si la configuration autonome fonctionne en y accédant :
curl -s -v -G --data-urlencode email=user@domain.abc http://[VOTRE-HOSTNAME-D'ENTRÉE]
11. Simulation d'une attaque par injection SQL
Essayons maintenant de simuler une attaque par injection SQL contre le service httpbin.org
exposé par le conteneur de la passerelle APISIX qui est maintenant protégé par open-appsec.
curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://[VOTRE-HOSTNAME-D'ENTRÉE]
Remplacez [VOTRE-HOSTNAME-D'ENTRÉE] dans la commande ci-dessus par le hostname que vous avez défini dans la ressource d'entrée que vous avez protégée avec le WAF open-appsec dans les étapes précédentes, et changez également "http" en "https" si nécessaire.
Félicitations ! Vous avez déployé avec succès APISIX intégré avec open-appsec WAF et vérifié que vos services web exposés par la passerelle APISIX sont maintenant protégés contre les attaques.
Comment gérer votre déploiement open-appsec WAF centralement ?
Si vous le souhaitez, vous pouvez également gérer votre déploiement open-appsec WAF (intégré avec APISIX) centralement en utilisant l'interface Web d'open-appsec (service SaaS) disponible à l'adresse https://my.openappsec.io, en connectant l'agent open-appsec à un profil de déploiement dans l'interface Web centrale.
Vous pouvez également continuer à gérer votre déploiement localement mais toujours vous connecter à un profil d'interface Web centrale en "mode déclaratif" afin de pouvoir voir la configuration locale (en lecture seule) dans l'interface Web.
En plus de la configuration d'open-appsec, l'interface Web vous permet de voir beaucoup plus d'informations comme l'état des agents open-appsec déployés, les logs de sécurité, les tableaux de bord, et plus encore.
Pour des instructions sur la façon de connecter votre déploiement à l'interface Web centrale, consultez la documentation d'open-appsec disponible à l'adresse https://docs.openappsec.io.
Ci-dessous, vous trouverez quelques captures d'écran de l'interface Web.
Résumé
Dans ce blog, nous avons expliqué comment open-appsec peut s'intégrer à Apache APISIX sur tous les environnements suivants : déploiements Linux classiques, déploiements conteneurisés (Docker) et environnements Kubernetes.
En suivant les étapes de déploiement d'APISIX avec open-appsec WAF, nous avons simulé des attaques par injection SQL, qui ont été efficacement prévenues par la technologie WAF basée sur l'apprentissage automatique d'open-appsec.
De plus, il a été expliqué quels sont les avantages de se connecter à l'interface Web centrale d'open-appsec pour la gestion, la surveillance, l'analyse des logs et la génération de rapports.
Nous espérons que ces nouvelles intégrations s'avéreront très utiles pour renforcer la sécurité de votre passerelle API APISIX et de ses API web et applications web exposées avec le WAF basé sur l'apprentissage automatique d'open-appsec.
Nous vous invitons à nous contacter si vous avez des commentaires, des questions ou si vous rencontrez un défi technique pour lequel vous souhaitez notre assistance. Vous pouvez contacter l'équipe open-appsec via le chat sur https://www.openappsec.io ou par email à : info@openappsec.io.
Ressources supplémentaires
open-appsec WAF
Site web : https://www.openappsec.io
GitHub : https://github.com/openappsec
Documentation : https://docs.openappsec.io
Terrains de jeu : https://www.openappsec.io/playground
Blogs : https://www.openappsec.io/blogs
Apache APISIX
Site web : https://apisix.apache.org
GitHub : https://github.com/apache/apisix
Documentation : https://apisix.apache.org/docs/
Blogs : https://apisix.apache.org/blog/