---
name: win_firewall_add_rule
kind: function
lang: ps
domain: infra
version: "1.0.0"
purity: impure
signature: "win_firewall_add_rule -Name <string> -Port <int> [-Protocol <string>]"
description: "Añade una regla de entrada al firewall de Windows para permitir tráfico en un puerto TCP/UDP. Si ya existe una regla con el mismo nombre, la elimina y la recrea. Requiere privilegios de Administrador."
tags: [firewall, windows, netsh, network, infra, security, port, wsl2, pendiente-usar]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
params:
  - name: Name
    desc: "Nombre de la regla en el firewall"
  - name: Port
    desc: "Puerto local a permitir (1-65535)"
  - name: Protocol
    desc: "Protocolo TCP o UDP (default: TCP)"
output: "Void - crea regla de entrada en firewall de Windows, idempotente por nombre"
tested: false
tests: []
test_file_path: ""
file_path: "powershell/functions/infra/win_firewall_add_rule.ps1"
---

## Uso

```powershell
# Desde PowerShell (como Administrador)
.\win_firewall_add_rule.ps1 -Name "CDP-9222" -Port 9222

# Con protocolo explícito
.\win_firewall_add_rule.ps1 -Name "MyApp-UDP-5000" -Port 5000 -Protocol UDP
```

```bash
# Desde WSL2
powershell.exe -ExecutionPolicy Bypass -File win_firewall_add_rule.ps1 -Name "CDP-9222" -Port 9222
```

## Parametros

| Parametro  | Tipo   | Obligatorio | Default | Descripcion                          |
|------------|--------|-------------|---------|--------------------------------------|
| `-Name`    | string | si          | —       | Nombre de la regla en el firewall    |
| `-Port`    | int    | si          | —       | Puerto local (1-65535)               |
| `-Protocol`| string | no          | TCP     | Protocolo: TCP o UDP                 |

## Notas

- Requiere ejecutarse como **Administrador** en Windows. Si se llama desde WSL2, usar `powershell.exe` (que corre en Windows) o `pwsh.exe`.
- Si ya existe una regla con el mismo nombre, la elimina primero y la recrea (idempotente respecto al nombre).
- La regla creada es `dir=in action=allow` — solo aplica para tráfico entrante.
- Caso de uso principal: permitir que WSL2 alcance Chrome CDP en el host Windows cuando Chrome escucha en `127.0.0.1:9222`.
- Retorna exit code 0 si tuvo éxito, 1 si hubo error (falta de privilegios, puerto inválido, fallo de netsh).
