Tema
Respuesta a ControlCase — Firewall Advanced Logs
| Campo | Valor |
|---|---|
| Solicitante | Elswick Lai — ControlCase Cumplimiento y Ciberseguridad |
| Fecha | 2026-05-25 |
| Tipo | Firewall Rule Modifications + Daily Snapshots + Internal Traffic Logs |
| Estado | RESUELTO — 3 mecanismos activos y verificados |
Resumen ejecutivo: Se implementaron los 3 tipos de logs de firewall solicitados, todos enviando al puerto 5514 del collector (mismo logsink que ya estaba activo):
- Firewall Rule Modifications — script que detecta cambios via DO API (cada hora)
- Daily Rule Base Snapshots — snapshot completo diario en JSON, retención 90 días
- Internal Traffic Logs — iptables/nftables logging con SRC/DST/PROTO/PORT
1. Firewall Rule Modifications
Mecanismo
Script bash /opt/fintrixs/firewall-monitor/firewall-monitor.sh que se ejecuta cada hora via cron:
- Consulta DigitalOcean API:
doctl compute firewall list --output json - Compara con snapshot previo (
previous.json) - Si detecta diferencia → loguea
RULE_MODIFICATION_DETECTEDcon hash MD5 previo/nuevo + diff - Guarda evidencia:
modification-YYYYMMDD_HHMMSS.json+.diff
Ejemplo real de log
2026-05-25T17:05:44.052740+00:00 from-pod=10.100.0.10 RULE_MODIFICATION_DETECTED
previous_hash=58e0494c51d30eb3494f7c9198986bb9
current_hash=a6bccba5bd97eedd097507d620b467b6
diff=1c1,2100|< []|---|> [|> {|> "id": "0b0355c7-8532-476e-8f88-faee3c81124b",
"name": "k8s-a19e81ac-...-worker", "inbound_rules": [...]Cada modificación incluye:
- Hash previo y nuevo (para integridad forense)
- Diff completo (qué cambió exactamente)
- Timestamp UTC
- Source IP del collector que detectó el cambio
Cron
# /etc/cron.d/firewall-monitor
0 * * * * root /opt/fintrixs/firewall-monitor/firewall-monitor.sh2. Daily Rule Base Snapshots
Mecanismo
El mismo script genera un snapshot completo diario la primera vez que se ejecuta cada día:
/var/log/firewall-snapshots/daily-20260525.json
/var/log/firewall-snapshots/daily-20260526.json
/var/log/firewall-snapshots/daily-20260527.json
...Contenido del snapshot
Cada archivo JSON contiene el estado completo de TODOS los Cloud Firewalls de DigitalOcean en ese momento:
json
[
{
"id": "0b0355c7-8532-476e-8f88-faee3c81124b",
"name": "k8s-a19e81ac-537a-44ed-a228-8010f561a530-worker",
"status": "succeeded",
"inbound_rules": [
{
"protocol": "tcp",
"ports": "0",
"sources": {"addresses": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]}
},
...
],
"outbound_rules": [...],
"droplet_ids": [...],
"tags": [...]
},
... (1 entry per firewall)
]Notificación al SIEM
Cada snapshot diario genera un evento en el collector:
2026-05-25T17:03:00Z fintrix-production-collector firewall-snapshot DAILY_SNAPSHOT
type=firewall_rule_base
date=2026-05-25
total_firewalls=11
path=/var/log/firewall-snapshots/daily-20260525.jsonRetención
90 días (cumple PCI DSS 10.5.1). Cleanup automático en el script:
bash
find /var/log/firewall-snapshots -name 'daily-*.json' -mtime +90 -delete3. Internal Traffic Logs
Mecanismo
nftables/iptables logging configurado para capturar todo tráfico interno entrante:
nft
nft insert rule ip filter INPUT position 4 \
ip saddr 10.100.0.0/16 \
limit rate 10/minute \
log prefix "INTERNAL_TRAFFIC: "Esto genera logs en kern.log que rsyslog reenvía al puerto 5514:
# /etc/rsyslog.d/14-fintrixs-internal-traffic.conf
if ($msg contains 'IPTABLES_DROP' or $msg contains 'INTERNAL_TRAFFIC') then {
action(type="omfwd" target="127.0.0.1" port="5514" protocol="tcp"
template="RSYSLOG_SyslogProtocol23Format")
}Ejemplo real de log
2026-05-25T17:06:24.292147+00:00 from-pod=127.0.0.1
INTERNAL_TRAFFIC: IN=eth1 OUT=
MAC=02:c7:7e:ab:cb:6d:1e:e1:56:f9:3e:ba:08:00
SRC=10.100.0.19 DST=10.100.0.10 LEN=354
TOS=0x00 PREC=0x00 TTL=64 ID=40904 DF
PROTO=TCP SPT=58192 DPT=1514
WINDOW=502 RES=0x00 ACK PSH URGP=0Cada evento incluye:
| Campo | Significado |
|---|---|
| IN/OUT | Interfaz de entrada/salida |
| MAC | Direcciones MAC origen/destino |
| SRC/DST | IP origen y destino |
| PROTO | Protocolo (TCP/UDP/ICMP) |
| SPT/DPT | Puerto origen / destino |
| FLAGS | TCP flags (SYN, ACK, PSH, etc.) |
| LEN | Tamaño del paquete |
| TTL | Time to Live |
Rate limiting
Para evitar flood de logs, se aplica limit rate 10/minute burst 5 packets por regla. Eventos críticos (DROP) tienen su propio rate 5/minute burst 5.
Reglas activas
ip saddr 10.100.0.0/16 limit rate 10/minute log prefix "INTERNAL_TRAFFIC: "
limit rate 5/minute burst 5 packets log prefix "IPTABLES_DROP: "4. Resumen para el auditor
| Tipo | Mecanismo | Frecuencia | Archivo |
|---|---|---|---|
| Rule Modifications | Script + DO API + cron | Cada hora | /var/log/remote/firewall/do-firewall.log |
| Daily Snapshots | Script + DO API + cron | Diario (1 por día) | /var/log/firewall-snapshots/daily-YYYYMMDD.json |
| Internal Traffic Logs | nftables logging + rsyslog | Tiempo real | /var/log/remote/firewall/do-firewall.log |
| Daily Snapshot Notifications | logger → rsyslog | Diario | /var/log/remote/firewall/do-firewall.log |
Todos los logs convergen en el mismo archivo del collector y son procesados por el SIEM Wazuh.
Comandos de verificación para el auditor
bash
# Ver snapshots diarios disponibles
ls -lh /var/log/firewall-snapshots/daily-*.json
# Ver últimas modificaciones detectadas
grep RULE_MODIFICATION_DETECTED /var/log/remote/firewall/do-firewall.log | tail -10
# Ver tráfico interno reciente
grep INTERNAL_TRAFFIC /var/log/remote/firewall/do-firewall.log | tail -20
# Ver droppeds recientes
grep IPTABLES_DROP /var/log/remote/firewall/do-firewall.log | tail -20
# Ver snapshot diario específico
cat /var/log/firewall-snapshots/daily-20260525.json | jq '.[].name'
# Ejecutar manualmente el monitor (test)
/opt/fintrixs/firewall-monitor/firewall-monitor.sh5. Cumplimiento PCI DSS
| Requisito | Cómo se cumple |
|---|---|
| 1.1.7 — Revisión de reglas firewall cada 6 meses | Snapshots diarios permiten comparación histórica |
| 1.4.4 — Restricción tráfico al CDE | Internal Traffic Logs capturan tráfico hacia/desde CDE |
| 10.2.2 — Acciones administrativas | Rule Modifications detectados con hash + diff |
| 10.2.5 — Cambios en mecanismos de autenticación | Cambios en reglas firewall son cambios de control de acceso |
| 10.3 — Audit trail entries | Todos los eventos van al SIEM con timestamp, source, action |
| 10.5.1 — Retención de logs | Snapshots con 90 días de retención |
| 11.4 — IDS/IPS | Internal Traffic Logs alimentan detección de patrones anómalos |
Historial de revisiones
| Fecha | Revisor | Cambios |
|---|---|---|
| 2026-05-25 | Equipo Fintrixs | Implementación inicial — 3 tipos de logs firewall |
