You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: Enhance UDP logging and packet validation policies
- Added logging policies for UDP baseline and packet normalization, defaulting to false in production to reduce noise.
- Updated documentation to clarify logging behavior and operational notes regarding UDP limits and packet validation.
- Improved handling of Steam Group signatures, changing defaults and ensuring empirical signatures are managed through configuration.
- Introduced a new policy document for Source signatures, outlining criteria for bypassing and managing signatures in the firewall.
- Adjusted scripts to conditionally log based on new configuration variables, ensuring better control over logging in production environments.
Si `ENABLE_UDP_BASELINE_LOGS=false` o `ENABLE_PACKET_NORMALIZATION_LOGS=false`, las categorías `UDP_NEW_LIMIT`, `UDP_EST_LIMIT`, `INVALID_SIZE` y `MALFORMED` pueden no aparecer en los reportes. Eso no implica ausencia de filtro, solo ausencia de logging para saneamiento/base.
168
170
-**Configuración**: Basada en `L4D2_CMD_LIMIT` y algoritmos hashlimit específicos
169
171
Para que el script pueda acceder a los logs del sistema, el usuario debe tener permisos adecuados:
170
172
@@ -442,6 +444,7 @@ Todos los reportes JSON incluyen:
442
444
-**Descripción**: Protección contra floods UDP en conexiones nuevas y establecidas
443
445
-**Detalles técnicos**: Ver [Ataques de Rate Limiting UDP](iptables.rules.md#ataques-rate-limiting-udp)
444
446
-**Configuración**: Basada en `L4D2_CMD_LIMIT` y algoritmos hashlimit específicos
447
+
-**Nota operativa**: Estas categorías pueden deshabilitarse en logs si `ENABLE_UDP_BASELINE_LOGS=false`
445
448
446
449
### Otros Ataques
447
450
@@ -485,6 +488,8 @@ Todos los reportes JSON incluyen:
485
488
-**UDP_NEW_LIMIT**: Protección preventiva
486
489
-**ICMP_FLOOD**: Impacto mínimo si está bien limitado
487
490
491
+
Nota: `INVALID_SIZE`, `MALFORMED`, `UDP_NEW_LIMIT` y `UDP_EST_LIMIT` pueden omitirse por política de logging si solo se desea registrar limitación de tráfico malicioso.
492
+
488
493
### Recomendaciones por Patrón
489
494
490
495
#### Si predominan ataques A2S:
@@ -676,4 +681,4 @@ EOF
676
681
-[Documentación ipp.sh](ipp.md)
677
682
-[Archivo de Configuración example.env](../example.env)
-`ENABLE_UDP_BASELINE_LOGS` (`false` recomendado en producción)
14
+
- nftables: `STEAM_GROUP_SIGNATURES` para bypass temprano de firmas `0xFFFFFFFFxx` observadas o documentadas
15
+
16
+
## Bypass de firmas Source
17
+
En backend `nftables`, el módulo deja pasar antes del limitador `ct state new` las firmas de consulta/publicación Source que no deberían caer en el rate-limit genérico:
18
+
19
+
-`54` -> `A2S_INFO`
20
+
-`55` -> `A2S_PLAYER`
21
+
-`56` -> `A2S_RULES`
22
+
-`57` -> `A2S_SERVERQUERY_GETCHALLENGE` legacy
23
+
-`69` -> `A2A_PING` legacy
24
+
-`71` -> heartbeat / login short-query según flujo observado
25
+
- firmas extra definidas en `STEAM_GROUP_SIGNATURES`
26
+
27
+
Esto evita que el módulo base bloquee tráfico que luego será clasificado por `l4d2_a2s_filters`.
28
+
29
+
## Politica de logging
30
+
`UDP_NEW_LIMIT` y `UDP_EST_LIMIT` pertenecen al filtro preventivo/base, no a la clasificación final de abuso.
31
+
32
+
Por eso:
33
+
34
+
-`ENABLE_UDP_BASELINE_LOGS=false` es el default recomendado en producción.
35
+
-`ENABLE_UDP_BASELINE_LOGS=true` sirve para diagnóstico cuando quieres ver falsos positivos o ajustar thresholds base.
36
+
-`ICMP_FLOOD` se mantiene logueado porque representa una categoría de abuso más clara.
37
+
38
+
## Límites del conocimiento público
39
+
Valve documenta claramente las firmas de `Server Queries` y del `Master Server Query Protocol`, pero no publica una firma exclusiva y oficial para "Steam Group" a nivel de byte comparable a `54/55/56/57/69`.
40
+
41
+
Por eso:
42
+
43
+
-`STEAM_GROUP_SIGNATURES` debe tratarse como compatibilidad operacional, no como estándar oficial.
44
+
-`00` puede mantenerse si aparece en capturas reales.
45
+
- cualquier firma nueva debe entrar por observación en pcap/logs antes de hardcodearse.
46
+
47
+
## Referencias oficiales
48
+
-[Valve Developer Community: Server queries](https://developer.valvesoftware.com/wiki/Server_queries)
49
+
-[Valve Developer Community: Master Server Query Protocol](https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol)
-`00` -> Steam Group / queries legacy (si `ENABLE_STEAM_GROUP_FILTER=true`)
38
-
-`69` -> Firma opcional Steam/legacy adicional (si se agrega en `STEAM_GROUP_SIGNATURES`)
39
+
-`00` -> compatibilidad legacy observada en despliegues reales (si `ENABLE_STEAM_GROUP_FILTER=true`)
40
+
41
+
## Nota sobre Steam Group
42
+
Valve documenta `sv_steamgroup` y los filtros de matchmaking/grupo, pero no publica claramente un byte exclusivo de consulta "Steam Group" comparable a `54/55/56/57/69`.
43
+
44
+
Por eso la suite trata `STEAM_GROUP_SIGNATURES` como una lista configurable de firmas observadas en operación:
45
+
46
+
-`00` se mantiene por compatibilidad con despliegues donde esa firma aparece en el flujo de descubrimiento.
47
+
-`69` es el default porque Valve sí lo documenta como `A2A_PING`, y algunos clientes/herramientas legacy todavía lo emiten.
48
+
- Si aparecen otros bytes firmados válidos en captura, se pueden añadir sin tocar código.
49
+
50
+
## Lobby y publicación
51
+
La documentación pública de Valve/Steamworks describe el lobby y el matchmaking principalmente a nivel de API y metadata, no como un protocolo UDP público con firma equivalente a A2S:
52
+
53
+
-`SetLobbyGameServer` / `GetLobbyGameServer` exponen asociación lobby <-> servidor a nivel API.
54
+
-`sv_steamgroup`, `sv_search_key` y tags privadas se describen como metadata de matchmaking/publicación.
55
+
- el browser público sigue apoyándose en `Server Queries` y en el `Master Server Query Protocol`.
56
+
57
+
En consecuencia, el firewall no debería asumir que existe una firma pública exclusiva "de lobby" o "de steamgroup" si no fue observada en captura real.
39
58
40
59
### Detalle de firmas Steam Group
41
60
- La detección Steam Group ya no está hardcodeada a `00`.
42
61
- Ahora se controla con `STEAM_GROUP_SIGNATURES`.
43
62
- El módulo acepta lista CSV de bytes hex de 2 dígitos, por ejemplo:
44
-
-`STEAM_GROUP_SIGNATURES="00"`
45
-
-`STEAM_GROUP_SIGNATURES="00,69"`
63
+
-`STEAM_GROUP_SIGNATURES="69"`
64
+
-`STEAM_GROUP_SIGNATURES="69,00"`
46
65
- Si `ENABLE_STEAM_GROUP_FILTER=false`, no se crean reglas de match para firmas Steam Group.
47
66
48
67
## Lógica de mitigación
@@ -63,13 +82,27 @@ Antes de aplicar reglas, el módulo valida:
63
82
- formato de `L4D2_GAMESERVER_PORTS`
64
83
- todos los `*_RATE` y `*_BURST` como enteros positivos
65
84
-`ENABLE_STEAM_GROUP_FILTER` en `true|false`
66
-
-`STEAM_GROUP_SIGNATURES` con regex hex CSV (`00` o `00,69`, etc.) cuando está habilitado
85
+
-`STEAM_GROUP_SIGNATURES` con regex hex CSV (`69` o `69,00`, etc.) cuando está habilitado
67
86
68
87
## Diferencias por backend
69
88
- Ambos aplican mitigaciones A2S/Steam y patrones de login equivalentes por área.
70
89
-`iptables` usa `-m string --hex-string '|FFFFFFFF..|'`.
71
90
-`nftables` usa payload match (`@th,64,40 0xFFFFFFFF..`) con meter/rate.
72
91
92
+
## Qué mejorar con esta información
93
+
- Mantener el bypass temprano del módulo base sólo para firmas documentadas por Valve y para firmas empíricas controladas por `STEAM_GROUP_SIGNATURES`.
94
+
- Evitar hardcodear `00` como si fuera una firma oficial de Steam Group; documentarlo como heurística operacional.
95
+
- Revisar logs `UDP_NEW_LIMIT` antes de tocar `STEAM_GROUP_RATE`, porque muchos falsos positivos ocurren en el módulo base y no en `l4d2_a2s_filters`.
96
+
- Si reaparece un problema de visibilidad, capturar `pcap` y promover nuevas firmas sólo después de verificarlas en tráfico real.
97
+
- Mantener el logging de este módulo como logging de abuso real, separado del logging de normalización/base.
98
+
99
+
## Referencias oficiales
100
+
-[Valve Developer Community: Server queries](https://developer.valvesoftware.com/wiki/Server_queries)
101
+
-[Valve Developer Community: Master Server Query Protocol](https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol)
Definir que firmas UDP con prefijo `0xFFFFFFFF` pueden recibir bypass temprano en el firewall y bajo que criterio deben mantenerse, agregarse o retirarse.
5
+
6
+
## Principios
7
+
- Solo se hardcodean por defecto firmas documentadas publicamente por Valve o necesarias para el flujo base de publicacion/consulta Source.
8
+
- Las firmas no documentadas publicamente se tratan como empiricas y deben entrar por configuracion, no por hardcode.
9
+
- Una firma empirica no pasa a default global sin evidencia repetible en capturas o incidentes reales.
10
+
11
+
## Firmas documentadas
12
+
-`54` -> `A2S_INFO`
13
+
-`55` -> `A2S_PLAYER`
14
+
-`56` -> `A2S_RULES`
15
+
-`57` -> `A2S_SERVERQUERY_GETCHALLENGE` legacy
16
+
-`69` -> `A2A_PING` legacy
17
+
-`71` -> flujo de heartbeat/login corto asociado a publicacion y conexion Source
18
+
19
+
Estas firmas pueden recibir bypass temprano en `l4d2_udp_base` para evitar que el limitador generico `ct state new` bloquee trafico legitimo antes de que `l4d2_a2s_filters` lo clasifique.
20
+
21
+
## Firmas empiricas
22
+
-`00` no se considera una firma oficial de Steam Group documentada por Valve.
23
+
-`00` puede usarse cuando aparezca en capturas reales relacionadas con visibilidad, browser o matchmaking privado.
24
+
- Cualquier otro byte adicional debe incorporarse via `STEAM_GROUP_SIGNATURES`.
0 commit comments