Skip to content

Commit 6787efc

Browse files
committed
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.
1 parent 3197392 commit 6787efc

13 files changed

+281
-49
lines changed

configure-env.sh

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,7 @@ done
408408
l4d2_game_ports="27015"
409409
l4d2_tv_ports="27020"
410410
l4d2_cmd_limit="100"
411+
enable_udp_baseline_logs="false"
411412
a2s_info_rate="16"
412413
a2s_info_burst="80"
413414
a2s_players_rate="12"
@@ -419,7 +420,8 @@ steam_group_burst="30"
419420
l4d2_login_rate="4"
420421
l4d2_login_burst="16"
421422
enable_steam_group_filter="true"
422-
steam_group_signatures="00"
423+
steam_group_signatures="69"
424+
enable_packet_normalization_logs="false"
423425
ssh_ports="22"
424426
ssh_docker=""
425427
ssh_rate="60/min"
@@ -760,7 +762,7 @@ if [ "${module_enabled[ip_l4d2_a2s_filters]:-false}" = "true" ] || needs_var "A2
760762

761763
steam_group_rate="$(ask_with_context \
762764
"STEAM_GROUP_RATE" \
763-
"Rate por segundo para firmas Steam Group/legacy (ej: 00,69)." \
765+
"Rate por segundo para firmas Steam Group/legacy (ej: 69 o 69,00)." \
764766
"docs/modules/11_l4d2_a2s_filters.md" \
765767
"STEAM_GROUP_RATE" \
766768
"$steam_group_rate" \
@@ -807,12 +809,12 @@ if [ "${module_enabled[ip_l4d2_a2s_filters]:-false}" = "true" ] || needs_var "A2
807809
if [ "$enable_steam_group_filter" = "true" ]; then
808810
steam_group_signatures="$(ask_with_context \
809811
"STEAM_GROUP_SIGNATURES" \
810-
"Lista CSV de bytes hex (2 dígitos), ej: 00 o 00,69." \
812+
"Lista CSV de bytes hex (2 digitos), ej: 69 o 69,00." \
811813
"docs/modules/11_l4d2_a2s_filters.md" \
812814
"STEAM_GROUP_SIGNATURES" \
813815
"$steam_group_signatures" \
814816
"is_hex_byte_csv" \
815-
"Formato inválido. Usa bytes hex CSV como 00 o 00,69.")"
817+
"Formato inválido. Usa bytes hex CSV como 69 o 69,00.")"
816818
steam_group_signatures="${steam_group_signatures^^}"
817819
fi
818820
fi
@@ -939,6 +941,7 @@ if [ "$has_l4d2_udp_modules" = "true" ]; then
939941
cat >> "$output_file" <<EOF
940942
L4D2_TV_PORTS="${l4d2_tv_ports}"
941943
L4D2_CMD_LIMIT=${l4d2_cmd_limit}
944+
ENABLE_UDP_BASELINE_LOGS=${enable_udp_baseline_logs}
942945
EOF
943946
fi
944947

@@ -959,6 +962,12 @@ STEAM_GROUP_SIGNATURES="${steam_group_signatures}"
959962
EOF
960963
fi
961964

965+
if needs_var "ENABLE_PACKET_NORMALIZATION_LOGS"; then
966+
cat >> "$output_file" <<EOF
967+
ENABLE_PACKET_NORMALIZATION_LOGS=${enable_packet_normalization_logs}
968+
EOF
969+
fi
970+
962971
if needs_var "LOG_PREFIX_HTTP_HTTPS_ABUSE"; then
963972
cat >> "$output_file" <<EOF
964973
LOG_PREFIX_HTTP_HTTPS_ABUSE="HTTP_HTTPS_ABUSE: "
@@ -1127,6 +1136,7 @@ fi
11271136
if [ "$has_l4d2_udp_modules" = "true" ]; then
11281137
echo " L4D2_TV_PORTS=$l4d2_tv_ports" >&2
11291138
echo " L4D2_CMD_LIMIT=$l4d2_cmd_limit" >&2
1139+
echo " ENABLE_UDP_BASELINE_LOGS=$enable_udp_baseline_logs" >&2
11301140
fi
11311141

11321142
if [ "$has_l4d2_a2s_module" = "true" ]; then
@@ -1145,3 +1155,7 @@ if [ "$enable_steam_group_filter" = "true" ]; then
11451155
echo " STEAM_GROUP_SIGNATURES=$steam_group_signatures" >&2
11461156
fi
11471157
fi
1158+
1159+
if needs_var "ENABLE_PACKET_NORMALIZATION_LOGS"; then
1160+
echo " ENABLE_PACKET_NORMALIZATION_LOGS=$enable_packet_normalization_logs" >&2
1161+
fi

docs/iptable.loggin.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ LOG_PREFIX_ICMP_FLOOD=\"ICMP_FLOOD: \"
165165
L4D2_GAMESERVER_PORTS="27015"
166166
L4D2_TV_PORTS="27020"
167167
```
168+
169+
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.
168170
- **Configuración**: Basada en `L4D2_CMD_LIMIT` y algoritmos hashlimit específicos
169171
Para que el script pueda acceder a los logs del sistema, el usuario debe tener permisos adecuados:
170172

@@ -442,6 +444,7 @@ Todos los reportes JSON incluyen:
442444
- **Descripción**: Protección contra floods UDP en conexiones nuevas y establecidas
443445
- **Detalles técnicos**: Ver [Ataques de Rate Limiting UDP](iptables.rules.md#ataques-rate-limiting-udp)
444446
- **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`
445448

446449
### Otros Ataques
447450

@@ -485,6 +488,8 @@ Todos los reportes JSON incluyen:
485488
- **UDP_NEW_LIMIT**: Protección preventiva
486489
- **ICMP_FLOOD**: Impacto mínimo si está bien limitado
487490

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+
488493
### Recomendaciones por Patrón
489494

490495
#### Si predominan ataques A2S:
@@ -676,4 +681,4 @@ EOF
676681
- [Documentación ipp.sh](ipp.md)
677682
- [Archivo de Configuración example.env](../example.env)
678683

679-
---
684+
---

docs/modules/09_l4d2_udp_base.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,45 @@ Aplicar base de control UDP para tráfico de juego (NEW/ESTABLISHED) e ICMP.
1010
## Variables
1111
- `L4D2_GAMESERVER_PORTS`, `L4D2_TV_PORTS`, `L4D2_CMD_LIMIT`
1212
- `LOG_PREFIX_UDP_NEW_LIMIT`, `LOG_PREFIX_UDP_EST_LIMIT`, `LOG_PREFIX_ICMP_FLOOD`
13+
- `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)
50+
- [Valve Developer Community: Add-on](https://developer.valvesoftware.com/wiki/Add-on) (`sv_steamgroup`, `sv_search_key`, private matchmaking tags)
51+
- [Politica interna: Source Query Bypass](../source-query-bypass-policy.md)
1352

1453
## Nota operativa
1554
Desactivar en nodos sin juegos excluyendo `l4d2_udp_base` de `MODULES_ONLY`.

docs/modules/10_l4d2_packet_validation.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,19 @@ Bloquear tamaños UDP inválidos/malformados típicos de abuso sobre puertos de
1010
## Variables
1111
- `L4D2_GAMESERVER_PORTS`, `L4D2_TV_PORTS`
1212
- `LOG_PREFIX_INVALID_SIZE`, `LOG_PREFIX_MALFORMED`
13+
- `ENABLE_PACKET_NORMALIZATION_LOGS` (`false` recomendado en producción)
1314

1415
## Diferencias por backend
1516
- Ambos aplican validación de tamaños inválidos/malformados sobre puertos de juego.
1617

18+
## Politica de logging
19+
Este módulo hace saneamiento/normalización de tráfico, no clasificación principal de abuso.
20+
21+
Por eso:
22+
23+
- `ENABLE_PACKET_NORMALIZATION_LOGS=false` es el default recomendado en producción.
24+
- `ENABLE_PACKET_NORMALIZATION_LOGS=true` se reserva para diagnóstico o captura forense.
25+
- Los drops siguen ocurriendo aunque el logging esté desactivado.
26+
1727
## Nota operativa
1828
- Mantener fuera de `MODULES_ONLY` en nodos sin tráfico L4D2 para minimizar reglas innecesarias.

docs/modules/11_l4d2_a2s_filters.md

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,43 @@ Mitigar flood de consultas A2S/Steam Group y patrones de login (`connect/reserve
2525
- `L4D2_LOGIN_RATE` (default `4`)
2626
- `L4D2_LOGIN_BURST` (default `16`)
2727
- `ENABLE_STEAM_GROUP_FILTER` (`true|false`, default `true`)
28-
- `STEAM_GROUP_SIGNATURES` (default `"00"`, formato `hex,hex`, por ejemplo `"00,69"`)
28+
- `STEAM_GROUP_SIGNATURES` (default `"69"`, formato `hex,hex`, por ejemplo `"69,00"`)
2929

3030
## Firmas que usa el módulo
3131
El módulo inspecciona el prefijo Source `0xFFFFFFFF` y luego clasifica por byte de comando:
3232

3333
- `54` -> A2S_INFO (`A2S_LIMITS`)
3434
- `55` -> A2S_PLAYERS (`A2S_PLAYERS_LIMITS`)
3535
- `56` -> A2S_RULES (`A2S_RULES_LIMITS`)
36+
- `57` -> `A2S_SERVERQUERY_GETCHALLENGE` legacy/obsoleto en documentación Valve
37+
- `69` -> `A2A_PING` legacy/obsoleto en documentación Valve
3638
- `71` -> Login short-query L4D2 (subfiltro `connect/reserve`)
37-
- `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.
3958

4059
### Detalle de firmas Steam Group
4160
- La detección Steam Group ya no está hardcodeada a `00`.
4261
- Ahora se controla con `STEAM_GROUP_SIGNATURES`.
4362
- 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"`
4665
- Si `ENABLE_STEAM_GROUP_FILTER=false`, no se crean reglas de match para firmas Steam Group.
4766

4867
## Lógica de mitigación
@@ -63,13 +82,27 @@ Antes de aplicar reglas, el módulo valida:
6382
- formato de `L4D2_GAMESERVER_PORTS`
6483
- todos los `*_RATE` y `*_BURST` como enteros positivos
6584
- `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
6786

6887
## Diferencias por backend
6988
- Ambos aplican mitigaciones A2S/Steam y patrones de login equivalentes por área.
7089
- `iptables` usa `-m string --hex-string '|FFFFFFFF..|'`.
7190
- `nftables` usa payload match (`@th,64,40 0xFFFFFFFF..`) con meter/rate.
7291

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)
102+
- [Valve Developer Community: Add-on](https://developer.valvesoftware.com/wiki/Add-on)
103+
- [Steamworks API: ISteamMatchmaking](https://partner.steamgames.com/doc/api/ISteamMatchmaking)
104+
- [Politica interna: Source Query Bypass](../source-query-bypass-policy.md)
105+
73106
## Nota operativa
74107
- Excluir `l4d2_a2s_filters` de `MODULES_ONLY` en nodos sin servicios de juego.
75108
- Recomendación: usar puertos reales de juego en `L4D2_GAMESERVER_PORTS` y dejar `UDP_ALLOW_PORTS=""` para evitar bypass de mitigaciones.
@@ -89,7 +122,7 @@ STEAM_GROUP_BURST=30
89122
L4D2_LOGIN_RATE=4
90123
L4D2_LOGIN_BURST=16
91124
ENABLE_STEAM_GROUP_FILTER=true
92-
STEAM_GROUP_SIGNATURES="00,69"
125+
STEAM_GROUP_SIGNATURES="69"
93126
```
94127

95128
Perfil más estricto:
@@ -106,7 +139,7 @@ STEAM_GROUP_BURST=12
106139
L4D2_LOGIN_RATE=2
107140
L4D2_LOGIN_BURST=6
108141
ENABLE_STEAM_GROUP_FILTER=true
109-
STEAM_GROUP_SIGNATURES="00"
142+
STEAM_GROUP_SIGNATURES="69"
110143
```
111144

112145
Perfil permisivo (tráfico alto legítimo):
@@ -123,5 +156,5 @@ STEAM_GROUP_BURST=60
123156
L4D2_LOGIN_RATE=8
124157
L4D2_LOGIN_BURST=32
125158
ENABLE_STEAM_GROUP_FILTER=true
126-
STEAM_GROUP_SIGNATURES="00,69"
159+
STEAM_GROUP_SIGNATURES="69,00"
127160
```

docs/source-query-bypass-policy.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Politica de Bypass de Firmas Source
2+
3+
## Objetivo
4+
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`.
25+
26+
## Politica de defaults
27+
- `STEAM_GROUP_SIGNATURES` debe privilegiar firmas documentadas. Default recomendado: `69`.
28+
- `00` queda como compatibilidad opt-in. Si un nodo lo necesita, usar `STEAM_GROUP_SIGNATURES="69,00"`.
29+
- Si no hay evidencia de que `00` participe en el problema de visibilidad, no debe habilitarse por defecto.
30+
31+
## Politica operativa
32+
- Revisar primero `UDP_NEW_LIMIT` en logs antes de aumentar `STEAM_GROUP_RATE`.
33+
- Si hay nueva firma candidata, capturar `pcap`, verificar payload y documentar fecha, contexto y razon de inclusion.
34+
- Si una firma empirica deja de ser necesaria, retirarla del perfil del nodo antes de convertirla en default del proyecto.
35+
36+
## Fuentes oficiales
37+
- [Valve Developer Community: Server queries](https://developer.valvesoftware.com/wiki/Server_queries)
38+
- [Valve Developer Community: Master Server Query Protocol](https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol)
39+
- [Valve Developer Community: Add-on](https://developer.valvesoftware.com/wiki/Add-on)
40+
- [Steamworks API: ISteamMatchmaking](https://partner.steamgames.com/doc/api/ISteamMatchmaking)

example.env

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ L4D2_TV_PORTS="27020"
138138
# Used to calculate UDP limits: L4D2_CMD_LIMIT+10 (burst), L4D2_CMD_LIMIT+30 (maximum)
139139
L4D2_CMD_LIMIT=100
140140

141+
# Logging policy for the preventive UDP base limiter.
142+
# Keep false in production if you only want logs for abusive traffic.
143+
ENABLE_UDP_BASELINE_LOGS=false
144+
141145
# A2S and Steam Group query limits (more flexible defaults)
142146
# Rate units are per-second integer values.
143147
A2S_INFO_RATE=16
@@ -153,10 +157,14 @@ STEAM_GROUP_BURST=30
153157
L4D2_LOGIN_RATE=4
154158
L4D2_LOGIN_BURST=16
155159

156-
# Steam Group signatures to match (hex byte list without 0x prefix)
157-
# Default: 00. You can extend it, e.g. "00,69".
160+
# Steam Group / legacy signed query bytes to match (hex byte list without 0x prefix)
161+
# Default: 69. Add 00 only if packet captures show it is needed: "69,00".
158162
ENABLE_STEAM_GROUP_FILTER=true
159-
STEAM_GROUP_SIGNATURES="00"
163+
STEAM_GROUP_SIGNATURES="69"
164+
165+
# Logging policy for packet normalization/sanitization drops.
166+
# Keep false in production if you only want logs for abusive traffic.
167+
ENABLE_PACKET_NORMALIZATION_LOGS=false
160168

161169
# Trusted IPs (complete whitelist)
162170
# These IPs bypass ALL rate-limits and TCP blocks

0 commit comments

Comments
 (0)