Transférez les journaux d'accès du Web Application Firewall (WAF) vers un serveur Syslog à l'aide d'un programme Python. Cette approche vous permet de centraliser les journaux WAF au sein de votre centre des opérations de sécurité (SOC) afin de satisfaire aux exigences réglementaires et d'audit.
Fonctionnement
Le WAF écrit les journaux d'accès dans le Simple Log Service (SLS). Le programme Python s'exécute sur une instance Elastic Compute Service (ECS), lit les données depuis SLS via un groupe de consommateurs et transfère chaque entrée de journal vers votre serveur Syslog par UDP ou TCP.
Le programme Python utilise la bibliothèque de consommateur SLS, un mode de consommation avancé reposant sur les groupes de consommateurs LogHub. Les groupes de consommateurs gèrent automatiquement le suivi des décalages (offsets) et la tolérance aux pannes, ce qui permet au programme Python de se concentrer exclusivement sur la logique de transfert.
Le canal Syslog transmet les données de journalisation via UDP ou TCP sans chiffrement. Pour les environnements de production soumis à des exigences de sécurité strictes, acheminez les journaux via un proxy Syslog local hébergé sur la même machine avant de les transférer vers votre serveur Syslog distant par un canal sécurisé.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Le service Log Service pour WAF est activé et la collecte des journaux est activée pour votre nom de domaine. Consultez la rubrique Prise en main du service Log Service pour WAF
-
Une instance ECS Linux exécutant Ubuntu, répondant aux spécifications minimales suivantes :
Processeur 2,0 GHz, 8 cœurs
32 Go de mémoire
Au moins 2 Go d'espace disque disponible (10 Go ou plus recommandés)
Un serveur Syslog dont le port UDP 514 est ouvert pour recevoir les données Syslog
Configurer le programme Python
Étape 1 : Installer les dépendances
Connectez-vous à votre instance ECS via SSH ou par le biais de la console ECS. Consultez la rubrique Choisir une méthode de connexion.
Installez Python 3, pip et le SDK Python SLS :
apt-get update
apt-get install -y python3-pip python3-dev
cd /usr/local/bin
ln -s /usr/bin/python3 python
pip3 install --upgrade pip
pip install aliyun-log-python-sdk
Pour consulter la documentation du SDK, reportez-vous au guide d'utilisation d'aliyun-log-python-sdk.
Étape 2 : Télécharger l'exemple de script
wget https://raw.githubusercontent.com/aliyun/aliyun-log-python-sdk/master/tests/consumer_group_examples/sync_data_to_syslog.py
Le code source complet est disponible sur GitHub.
Étape 3 : Configurer le programme Python
Ouvrez le fichier sync_data_to_syslog.py et définissez les paramètres suivants.
Paramètres Log Service
endpoint = os.environ.get('SLS_ENDPOINT', 'http://ap-southeast-1.log.aliyuncs.com')
accessKeyId = os.environ.get('SLS_AK_ID', 'Your AccessKey ID')
accessKey = os.environ.get('SLS_AK_KEY', 'Your AccessKey secret')
project = os.environ.get('SLS_PROJECT', 'waf-project-548613414276****-ap-southeast-1')
logstore = os.environ.get('SLS_LOGSTORE', 'waf-logstore')
consumer_group = os.environ.get('SLS_CG', 'WAF-SLS')
|
Paramètre |
Description |
|
|
L'endpoint Log Service correspondant à la région de votre projet. Consultez la rubrique Endpoints. |
|
|
Votre AccessKey ID. Récupérez-le depuis la console User Management. |
|
|
Votre AccessKey secret. |
|
|
Le nom du projet SLS associé à votre instance WAF. Les noms de projets commencent par |
|
|
Le nom du Logstore au sein du projet. Cliquez sur votre projet WAF dans la console Log Service pour afficher le nom du Logstore. |
|
|
Le nom du groupe de consommateurs. La valeur par défaut |
Paramètres Syslog
settings = {
"host": "1.2.xx.xx",
"port": 514,
"protocol": "udp",
"sep": ",",
"cert_path": None,
"timeout": 120,
"facility": syslogclient.FAC_USER,
"severity": syslogclient.SEV_INFO,
"hostname": None,
"tag": None
}
|
Paramètre |
Description |
|
|
L'adresse IP ou le nom d'hôte de votre serveur Syslog. |
|
|
Le port utilisé pour les données Syslog. Valeurs prises en charge : |
|
|
Le protocole de transport : |
|
|
Le délimiteur utilisé pour séparer les paires clé-valeur dans chaque message Syslog. |
|
|
Le code de facilité Syslog qui classe la source du journal. Syslog utilise les codes de facilité pour router les messages vers différents fichiers journaux sur le serveur. La valeur par défaut |
|
|
Le niveau de gravité Syslog appliqué à tous les messages transférés. La valeur par défaut |
|
|
Le délai d'expiration de la connexion en secondes. La valeur par défaut est |
|
|
Le chemin d'accès au fichier de certificat TLS. Définissez ce paramètre lorsque vous utilisez TLS sur TCP. Laissez la valeur |
Étape 4 : Démarrer le programme Python
python sync_data_to_syslog.py
Lorsque le programme Python démarre correctement, la sortie ressemble à ceci :
*** start to consume data...
consumer worker "WAF-SLS-1" start
heart beat start
heart beat result: [] get: [0, 1]
Get data from shard 0, log count: 6
Complete send data to remote
Get data from shard 0, log count: 2
Complete send data to remote
heart beat result: [0, 1] get: [0, 1]
Les journaux d'accès WAF sont désormais transférés vers votre serveur Syslog.
Étapes suivantes
Présentation du service Log Service pour WAF — Découvrez les champs de journal collectés par le WAF et apprenez à les interroger.
Utiliser des groupes de consommateurs pour consommer les journaux — Comprenez comment la bibliothèque de consommateurs gère la consommation distribuée des journaux.