Reenvíe los registros de acceso de Web Application Firewall (WAF) a un servidor Syslog mediante un programa Python. Esto le permite centralizar los registros de WAF en su centro de operaciones de seguridad (SOC) para cumplir con los requisitos normativos y de auditoría.
Funcionamiento
WAF escribe los registros de acceso en Simple Log Service (SLS). El programa Python se ejecuta en una instancia de Elastic Compute Service (ECS), lee desde SLS mediante un grupo de consumidores y reenvía cada entrada de registro a su servidor Syslog a través de UDP o TCP.
El programa Python utiliza la biblioteca de consumidores de SLS, un modo de consumo avanzado basado en grupos de consumidores de LogHub. Los grupos de consumidores gestionan automáticamente el seguimiento de desplazamientos y la tolerancia a fallos, por lo que el programa Python se centra exclusivamente en la lógica de reenvío.
El canal Syslog transmite datos de registro a través de UDP o TCP sin cifrado. Para entornos de producción con requisitos de seguridad estrictos, enrute los registros a través de un proxy Syslog local en el mismo host antes de reenviarlos a su servidor Syslog remoto mediante un canal seguro.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Log Service para WAF habilitado, con la recopilación de registros activada para su nombre de dominio. Consulte Get started with the Log Service for WAF feature
-
Una instancia ECS de Linux con Ubuntu y las siguientes especificaciones mínimas:
Procesador de 2.0 GHz, 8 núcleos
32 GB de memoria
Como mínimo 2 GB de espacio en disco disponible (se recomiendan 10 GB o más)
Un servidor Syslog con el puerto UDP 514 abierto para recibir datos Syslog
Configuración del programa Python
Paso 1: Instalación de dependencias
Conéctese a su instancia ECS mediante SSH o a través de la consola de ECS. Consulte Remote connection methods for ECS instances.
Instale Python 3, pip y el SDK de Python para 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
Para consultar la documentación del SDK, consulte guía del usuario de aliyun-log-python-sdk.
Paso 2: Descarga del script de ejemplo
wget https://raw.githubusercontent.com/aliyun/aliyun-log-python-sdk/master/tests/consumer_group_examples/sync_data_to_syslog.py
El código fuente completo está disponible en GitHub.
Paso 3: Configuración del programa Python
Abra sync_data_to_syslog.py y establezca los siguientes parámetros.
Parámetros de 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')
|
Parameter |
Description |
|
|
El endpoint de Log Service correspondiente a la región de su proyecto. Consulte Endpoints. |
|
|
Su AccessKey ID. Obténgalo desde la consola de gestión de usuarios. |
|
|
Su AccessKey secret. |
|
|
El nombre del proyecto de SLS para su instancia de WAF. Los nombres de proyecto comienzan con |
|
|
El nombre del logstore dentro del proyecto. Haga clic en su proyecto de WAF en la consola de Log Service para consultar el nombre del logstore. |
|
|
El nombre del grupo de consumidores. El valor predeterminado |
Parámetros de 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
}
|
Parameter |
Description |
|
|
La dirección IP o el nombre de host de su servidor Syslog. |
|
|
El puerto para datos Syslog. Valores compatibles: |
|
|
El protocolo de transporte: |
|
|
El delimitador utilizado para separar pares clave-valor en cada mensaje Syslog. |
|
|
El código de facility de Syslog que clasifica el origen del registro. Syslog utiliza códigos de facility para enrutar mensajes a diferentes archivos de registro en el servidor. El valor predeterminado |
|
|
El nivel de severidad de Syslog para todos los mensajes reenviados. El valor predeterminado |
|
|
El tiempo de espera de conexión en segundos. El valor predeterminado es |
|
|
La ruta al archivo de certificado TLS. Configure este parámetro cuando utilice TLS sobre TCP. Déjelo como |
Paso 4: Inicio del programa Python
python sync_data_to_syslog.py
Cuando el programa Python se inicia correctamente, la salida es similar a la siguiente:
*** 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]
Los registros de acceso de WAF ahora se reenvían a su servidor Syslog.
Pasos siguientes
Overview of Log Service for WAF — Conozca qué campos de registro recopila WAF y cómo consultarlos.
Use consumer groups to consume logs — Comprenda cómo la biblioteca de consumidores gestiona el consumo distribuido de registros.