Skip to content

Respuesta a ControlCase — Firewall Advanced Logs

CampoValor
SolicitanteElswick Lai — ControlCase Cumplimiento y Ciberseguridad
Fecha2026-05-25
TipoFirewall Rule Modifications + Daily Snapshots + Internal Traffic Logs
EstadoRESUELTO — 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):

  1. Firewall Rule Modifications — script que detecta cambios via DO API (cada hora)
  2. Daily Rule Base Snapshots — snapshot completo diario en JSON, retención 90 días
  3. 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:

  1. Consulta DigitalOcean API: doctl compute firewall list --output json
  2. Compara con snapshot previo (previous.json)
  3. Si detecta diferencia → loguea RULE_MODIFICATION_DETECTED con hash MD5 previo/nuevo + diff
  4. 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.sh

2. 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.json

Retenció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 -delete

3. 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=0

Cada evento incluye:

CampoSignificado
IN/OUTInterfaz de entrada/salida
MACDirecciones MAC origen/destino
SRC/DSTIP origen y destino
PROTOProtocolo (TCP/UDP/ICMP)
SPT/DPTPuerto origen / destino
FLAGSTCP flags (SYN, ACK, PSH, etc.)
LENTamaño del paquete
TTLTime 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

TipoMecanismoFrecuenciaArchivo
Rule ModificationsScript + DO API + cronCada hora/var/log/remote/firewall/do-firewall.log
Daily SnapshotsScript + DO API + cronDiario (1 por día)/var/log/firewall-snapshots/daily-YYYYMMDD.json
Internal Traffic Logsnftables logging + rsyslogTiempo real/var/log/remote/firewall/do-firewall.log
Daily Snapshot Notificationslogger → rsyslogDiario/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.sh

5. Cumplimiento PCI DSS

RequisitoCómo se cumple
1.1.7 — Revisión de reglas firewall cada 6 mesesSnapshots diarios permiten comparación histórica
1.4.4 — Restricción tráfico al CDEInternal Traffic Logs capturan tráfico hacia/desde CDE
10.2.2 — Acciones administrativasRule Modifications detectados con hash + diff
10.2.5 — Cambios en mecanismos de autenticaciónCambios en reglas firewall son cambios de control de acceso
10.3 — Audit trail entriesTodos los eventos van al SIEM con timestamp, source, action
10.5.1 — Retención de logsSnapshots con 90 días de retención
11.4 — IDS/IPSInternal Traffic Logs alimentan detección de patrones anómalos

Historial de revisiones

FechaRevisorCambios
2026-05-25Equipo FintrixsImplementación inicial — 3 tipos de logs firewall

Documentación Confidencial — Solo para uso interno y auditoría PCI DSS