🔒 Restringir acceso por IP en Windows : bloquea conexiones no autorizadas a tu equipo

hace 3 semanas

Restringir acceso por IP en Windows : bloquea conexiones no autorizadas a tu equipo

Solo esta IP puede conectarse a tu PC: restringir acceso por IP en Windows

Restringir acceso por IP en Windows es hoy una de las medidas de hardening más eficaces para cualquier equipo con puertos de administración remota expuestos a internet: los ataques de fuerza bruta contra RDP siguen entre los vectores de compromiso más usados contra autónomos, pequeñas empresas y usuarios domésticos con equipos accesibles desde el exterior. Aprender cómo restringir acceso por IP en Windows con PowerShell permite bloquear todo el tráfico entrante salvo desde una única dirección autorizada, reduciendo drásticamente la superficie de ataque disponible para cualquier intento de conexión no solicitada.

Esta técnica se complementa con otras medidas de hardening de Windows 11, con la guía para bloquear el acceso RDP en Windows y con la monitorización de inicios de sesión sospechosos, formando en conjunto un esquema de defensa en profundidad frente a accesos remotos no autorizados.

⚡ Respuesta rápida

Para restringir acceso por IP en Windows, ejecuta un script de PowerShell como Administrador que bloquee el tráfico entrante por defecto con Set-NetFirewallProfile -DefaultInboundAction Block y cree después una regla de excepción con New-NetFirewallRule que permita únicamente tu IP autorizada. No requiere reinicio: el cambio es inmediato.

💡 Definición rápida

Restringir acceso por IP en Windows: configurar el firewall de Windows para rechazar toda conexión entrante que no proceda de una dirección IP concreta previamente autorizada, dejando el resto de tráfico entrante bloqueado sin excepción.

📋 Resumen rápido

🔒 Restringir acceso por IP en Windows: bloquea todo salvo una única dirección

Aquí se explica cómo restringir acceso por IP en Windows con un script que bloquea todas las conexiones entrantes a tu equipo —incluidas las de tu propia red local— salvo desde una única IP que tú definas.

  • Bloqueo por defecto de todo el tráfico entrante en los 3 perfiles del firewall (Domain/Public/Private)
  • Regla de excepción única para permitir solo la IP autorizada
  • Recomendación: usar la IP de una VPN de pago con IP fija, nunca una VPN gratuita ni tu IP doméstica dinámica
  • Script con 3 tareas programadas de autorreparación: inicio, logon y cada hora
  • No requiere reiniciar el equipo; el cambio se aplica de inmediato
  • Comandos de instalación, verificación y reversión completa incluidos

📅 Publicado: 7 de julio de 2026 · 🕒 Tiempo de lectura: 9 minutos

Si todavía no tienes claro qué es un firewall y cómo encaja esta restricción de IP dentro del concepto general, la entrada de referencia sobre firewalls ofrece una introducción básica al concepto antes de continuar.


¿Qué peligros impide este script de restricción de IP?

¿Qué peligros impide restringir acceso por IP en Windows?

Al bloquear todo el tráfico entrante salvo desde una IP autorizada, este script neutraliza varios vectores de ataque habituales:

  • Fuerza bruta contra RDP: nadie puede ni siquiera alcanzar el puerto 3389 salvo tu IP.
  • Escaneo de puertos y reconocimiento: los escáneres externos no obtienen respuesta de ningún servicio.
  • Movimiento lateral en la LAN: un equipo infectado de tu propia red no puede conectarse al tuyo.
  • Explotación de servicios SMB/NetBIOS: se corta el acceso remoto a recursos compartidos no autorizados, en línea con las recomendaciones del CIS Benchmark para Windows.
  • Conexiones de botnets o C2: se impide que un atacante remoto establezca sesión directa con el equipo.
  • Accesos no autorizados tras una fuga de credenciales: aunque alguien tenga tu contraseña, no podrá conectarse si su IP no es la autorizada.

Firewall predeterminado vs. firewall restringido a una IP

AspectoFirewall predeterminado de WindowsFirewall restringido a una IP
Tráfico entrante desde la LANPermitidoBloqueado, salvo la IP autorizada
Tráfico entrante desde internetDepende de reglas por programaBloqueado por completo
Superficie de ataqueAmplia (todos los puertos abiertos por defecto según reglas)Mínima (solo una IP puede iniciar conexión)
Protección ante fuerza bruta RDP/SMBBajaAlta
Mantenimiento tras reinicioManualAutomático (3 tareas programadas)

Requisitos previos para restringir acceso por IP en Windows

  • Windows 10 u 11 con PowerShell 5.1 o superior.
  • Ejecutar el script como Administrador.
  • Conocer la IP que quieres autorizar (ver siguiente apartado sobre qué IP elegir).
  • Acceso físico o alternativo al equipo por si necesitas revertir el cambio.

Si el equipo que vas a proteger acepta conexiones remotas de escritorio, revisa también la guía para bloquear el acceso remoto a Windows o RDP en Windows, ya que ambas medidas se complementan.


Importante: cambia la IP del script por la tuya

Para que esta restricción funcione correctamente, el script incluye como ejemplo la IP 207.204.248.17. Debes sustituirla obligatoriamente por tu propia IP antes de ejecutarlo; de lo contrario estarás autorizando una dirección que no controlas y podrías quedarte sin acceso a tu propio equipo.

Se recomienda especialmente que la IP autorizada sea la de una VPN de pago con IP fija o dedicada, en lugar de tu IP doméstica. Motivos:

  • Las IP domésticas suelen ser dinámicas y cambian periódicamente, dejándote sin acceso.
  • Una VPN de pago con IP dedicada te permite conectarte desde cualquier red (casa, oficina, móvil) manteniendo siempre la misma IP de salida.
  • Evitas exponer tu IP doméstica real como punto de entrada conocido.
  • Las VPN gratuitas comparten IPs entre miles de usuarios: nunca uses una IP de VPN gratuita, ya que otras personas ajenas podrían quedar autorizadas.

Para cambiar la IP, edita esta línea dentro del script (aparece dos veces: en el bloque principal y dentro del script auxiliar incrustado):

$ipPermitida = "TU_IP_AQUI"

Guardar el script como .ps1 y crear la carpeta C:\Scripts

El script está diseñado para ejecutarse desde archivo, nunca pegado directamente en la consola de PowerShell. Sigue estos pasos:

  1. Abre el Bloc de notas (o tu editor de texto preferido).
  2. Pega el código completo del script (sección siguiente de este artículo).
  3. Sustituye la IP de ejemplo por la tuya, preferiblemente la de tu VPN de pago.
  4. Guarda el archivo como Restringir-Acceso-IP.ps1 (elige "Todos los archivos" como tipo, para que no se guarde como .txt).
  5. Guárdalo directamente en la carpeta C:\Scripts. Si esa carpeta no existe todavía, créala primero (ver comandos de instalación a continuación); el propio script también la crea automáticamente si no la encuentra.

Comandos de instalación para restringir acceso por IP en Windows

Antes de ejecutar el script, abre PowerShell como Administrador y ejecuta lo siguiente para crear manualmente la carpeta de scripts y la de logs antes de guardar el archivo (opcional, ya que el script las crea si no existen):

# Crear la carpeta de scripts
New-Item -ItemType Directory -Path "C:\Scripts" -Force
# Crear la carpeta de logs
New-Item -ItemType Directory -Path "C:\Logs" -Force

Después, guarda el archivo Restringir-Acceso-IP.ps1 dentro de C:\Scripts siguiendo el proceso descrito en el apartado anterior, un paso imprescindible para que el proceso funcione correctamente.


Script completo: restringir acceso entrante a un ordenador a una única IP

Script completo para restringir acceso por IP en Windows

Copia el siguiente código en el archivo C:\Scripts\Restringir-Acceso-IP.ps1, y recuerda editar la variable $ipPermitida con la dirección que quieras autorizar.

# ============================================
# Restringir acceso entrante a Windows: solo la IP
# 207.204.248.17 puede conectarse a este equipo.
# Bloquea TODO lo demas, incluida tu propia LAN.
# y mantenimiento con tres tareas programadas
# Requiere: PowerShell como Administrador
# Ruta fija: C:\Scripts\Restringir-Acceso-IP.ps1
# ============================================
try {
    # 0. Verificar privilegios de administrador
    if (-not ([Security.Principal.WindowsPrincipal] `
        [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
        [Security.Principal.WindowsBuiltInRole]::Administrator)) {
        Write-Host "[X] Ejecuta este script como Administrador." -ForegroundColor Red
        exit
    }
    # 1. Asegurar que el script vive en C:\Scripts (ruta que usaran las tareas programadas)
    $carpetaScripts = "C:\Scripts"
    if (-not (Test-Path $carpetaScripts)) {
        New-Item -ItemType Directory -Path $carpetaScripts -Force | Out-Null
    }
    $rutaFinal = "$carpetaScripts\Restringir-Acceso-IP.ps1"
    if ($PSCommandPath -and ($PSCommandPath -ne $rutaFinal)) {
        Copy-Item -Path $PSCommandPath -Destination $rutaFinal -Force
        Write-Host "[i] Copia del script guardada en $rutaFinal para uso de las tareas programadas." -ForegroundColor Cyan
    }
    $carpetaLogs = "C:\Logs"
    if (-not (Test-Path $carpetaLogs)) {
        New-Item -ItemType Directory -Path $carpetaLogs -Force | Out-Null
    }
    Start-Transcript -Path "$carpetaLogs\restringir-acceso-ip.log" -Append | Out-Null
    # IP unica autorizada para conectarse a este equipo. Edita aqui si cambia.
    $ipPermitida = "207.204.248.17"
    $nombreRegla = "SEGPC-PERMITIR-IP-UNICA"
    Write-Host "=== Restringir acceso entrante a: $ipPermitida ===" -ForegroundColor Cyan
    # 2. Bloquear TODO el trafico entrante por defecto en los 3 perfiles
    # (Domain, Public, Private) - incluye tu propia LAN, no solo Internet
    Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True `
        -DefaultInboundAction Block -DefaultOutboundAction Allow
    Write-Host "[OK] Entrada bloqueada por defecto en los 3 perfiles (Domain/Public/Private)." -ForegroundColor Green
    # 3. Crear la unica regla de excepcion: permitir entrada solo desde $ipPermitida
    Remove-NetFirewallRule -DisplayName $nombreRegla -ErrorAction SilentlyContinue
    New-NetFirewallRule -DisplayName $nombreRegla -Direction Inbound `
        -RemoteAddress $ipPermitida -Action Allow -Profile Any `
        -Description "Unica IP con permiso de conexion entrante a este equipo" | Out-Null
    Write-Host "[OK] Regla de excepcion creada: solo $ipPermitida puede conectarse a este equipo." -ForegroundColor Green
    # 4. Verificacion inmediata de la configuracion aplicada
    Write-Host "`n=== Perfiles de firewall ===" -ForegroundColor Cyan
    Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction, DefaultOutboundAction | Format-Table -AutoSize
    Write-Host "=== Regla de excepcion activa ===" -ForegroundColor Cyan
    Get-NetFirewallRule -DisplayName $nombreRegla | Get-NetFirewallAddressFilter | Select-Object RemoteAddress
    # 5. Crear script auxiliar que reaplica la restriccion (usado por Inicio/Logon/Horaria)
    $carpetaAuxiliar = "C:\ProgramData\SeguridadEnMiPC\RestringirIP"
    if (-not (Test-Path $carpetaAuxiliar)) {
        New-Item -ItemType Directory -Path $carpetaAuxiliar -Force | Out-Null
    }
    $scriptReaplicar = "$carpetaAuxiliar\reaplicar-restriccion-ip.ps1"
    $contenidoReaplicar = @'
$ipPermitida = "207.204.248.17"
$nombreRegla = "SEGPC-PERMITIR-IP-UNICA"
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True -DefaultInboundAction Block -DefaultOutboundAction Allow
if (-not (Get-NetFirewallRule -DisplayName $nombreRegla -ErrorAction SilentlyContinue)) {
    New-NetFirewallRule -DisplayName $nombreRegla -Direction Inbound -RemoteAddress $ipPermitida -Action Allow -Profile Any -Description "Unica IP con permiso de conexion entrante a este equipo" | Out-Null
    Add-Content -Path "C:\Logs\restringir-acceso-ip.log" -Value "$(Get-Date) - [ALERTA] La regla de excepcion habia desaparecido. Recreada."
} else {
    Add-Content -Path "C:\Logs\restringir-acceso-ip.log" -Value "$(Get-Date) - [OK] Restriccion de acceso verificada, sin desviaciones"
}
'@
    Set-Content -Path $scriptReaplicar -Encoding UTF8 -Value $contenidoReaplicar
    Write-Host "[OK] Script auxiliar creado en $scriptReaplicar" -ForegroundColor Green
    # 6. Carpeta de tareas programadas
    $carpetaTareas = "\SeguridadEnMiPC\Restringir-IP\"
    # 7. Tarea: reaplicar en cada arranque
    if (-not (Get-ScheduledTask -TaskName "Restringir-IP-Inicio" -TaskPath $carpetaTareas -ErrorAction SilentlyContinue)) {
        $a1 = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptReaplicar`""
        $t1 = New-ScheduledTaskTrigger -AtStartup
        Register-ScheduledTask -TaskName "Restringir-IP-Inicio" -TaskPath $carpetaTareas -Action $a1 -Trigger $t1 -RunLevel Highest -User "SYSTEM" -Force | Out-Null
        Write-Host "[OK] Tarea 'Restringir-IP-Inicio' creada (al arrancar Windows)." -ForegroundColor Green
    } else {
        Write-Host "[i] La tarea 'Restringir-IP-Inicio' ya existia." -ForegroundColor Yellow
    }
    # 8. Tarea: reaplicar en cada inicio de sesion
    if (-not (Get-ScheduledTask -TaskName "Restringir-IP-Logon" -TaskPath $carpetaTareas -ErrorAction SilentlyContinue)) {
        $a2 = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptReaplicar`""
        $t2 = New-ScheduledTaskTrigger -AtLogOn
        Register-ScheduledTask -TaskName "Restringir-IP-Logon" -TaskPath $carpetaTareas -Action $a2 -Trigger $t2 -RunLevel Highest -User "SYSTEM" -Force | Out-Null
        Write-Host "[OK] Tarea 'Restringir-IP-Logon' creada (al iniciar sesion)." -ForegroundColor Green
    } else {
        Write-Host "[i] La tarea 'Restringir-IP-Logon' ya existia." -ForegroundColor Yellow
    }
    # 9. Tarea: reaplicar cada hora
    if (-not (Get-ScheduledTask -TaskName "Restringir-IP-Horaria" -TaskPath $carpetaTareas -ErrorAction SilentlyContinue)) {
        $a3 = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptReaplicar`""
        $t3 = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration (New-TimeSpan -Days 3650)
        Register-ScheduledTask -TaskName "Restringir-IP-Horaria" -TaskPath $carpetaTareas -Action $a3 -Trigger $t3 -RunLevel Highest -User "SYSTEM" -Force | Out-Null
        Write-Host "[OK] Tarea 'Restringir-IP-Horaria' creada (cada hora)." -ForegroundColor Green
    } else {
        Write-Host "[i] La tarea 'Restringir-IP-Horaria' ya existia." -ForegroundColor Yellow
    }
    # 10. Verificacion final (busqueda por nombre, mas fiable que por TaskPath si el cache no esta sincronizado)
    Write-Host "`n=== Tareas programadas activas ===" -ForegroundColor Cyan
    Get-ScheduledTask -TaskName "Restringir-IP-*" | Select-Object TaskName, TaskPath, State | Format-Table -AutoSize
    Write-Host "[OK] Acceso entrante restringido a $ipPermitida, protegido con 3 tareas programadas." -ForegroundColor Green
    Write-Host "     Script principal: $rutaFinal" -ForegroundColor Gray
    Write-Host "     Script auxiliar: $scriptReaplicar" -ForegroundColor Gray
    Write-Host "     Log: C:\Logs\restringir-acceso-ip.log" -ForegroundColor Gray
    Write-Host "`n[IMPORTANTE] Para revertir esto por completo:" -ForegroundColor Yellow
    Write-Host "    Unregister-ScheduledTask -TaskName 'Restringir-IP-*' -TaskPath '\SeguridadEnMiPC\Restringir-IP\' -Confirm:`$false" -ForegroundColor White
    Write-Host "    Remove-NetFirewallRule -DisplayName 'SEGPC-PERMITIR-IP-UNICA'" -ForegroundColor White
    Write-Host "    Set-NetFirewallProfile -Profile Domain,Public,Private -DefaultInboundAction Allow" -ForegroundColor White
}
catch {
    Write-Host "`n[X] Error: $($_.Exception.Message)" -ForegroundColor Red
}
finally {
    Stop-Transcript | Out-Null
    Read-Host "`nPulsa Enter para salir"
}

Ejecución del script

Para ejecutar este script correctamente, nunca pegues el código directamente en la consola de PowerShell: al estar guardado como archivo .ps1, debe ejecutarse así. Consulta también la documentación oficial de Microsoft sobre el Firewall de Windows si quieres profundizar en los perfiles de red. Abre PowerShell como Administrador y lanza:

powershell -NoExit -ExecutionPolicy Bypass -File "C:\Scripts\Restringir-Acceso-IP.ps1"

El parámetro -ExecutionPolicy Bypass permite ejecutar el script aunque la política de ejecución del sistema no lo permita por defecto, y -NoExit mantiene la ventana abierta para que puedas leer los mensajes de verificación.


Verificación tras la ejecución

El propio script ya muestra un resumen al finalizar, pero puedes comprobarlo manualmente en cualquier momento con estos comandos:

# Comprobar que el bloqueo por defecto esta activo
Get-NetFirewallProfile | Select-Object Name, DefaultInboundAction, DefaultOutboundAction
# Comprobar la regla de excepcion y la IP autorizada
Get-NetFirewallRule -DisplayName "SEGPC-PERMITIR-IP-UNICA" | Get-NetFirewallAddressFilter | Select-Object RemoteAddress
# Comprobar que las 3 tareas programadas estan activas
Get-ScheduledTask -TaskName "Restringir-IP-*" | Select-Object TaskName, State
# Revisar el log de actividad
Get-Content "C:\Logs\restringir-acceso-ip.log" -Tail 20

¿Hace falta reiniciar el equipo?

No es necesario reiniciar. El bloqueo del firewall y la regla de excepción se aplican de forma inmediata en cuanto el script termina de ejecutarse; puedes verificarlo al instante con los comandos anteriores. El reinicio solo sirve, opcionalmente, para comprobar que la tarea Restringir-IP-Inicio se dispara correctamente al arrancar Windows.

Este enfoque de autorreparación es el mismo que se aplica en la guía para desactivar NetBIOS en Windows, otra vía habitual de exposición en redes locales.


¿El script sigue funcionando aunque cambie la IP autorizada?

¿El script sigue funcionando aunque cambie la IP autorizada?

Sí. La protección en sí misma —el bloqueo de todo el tráfico entrante y la vigilancia continua mediante las tres tareas programadas— sigue funcionando de forma independiente a cuál sea la IP configurada. Si alguien elimina o modifica la regla de excepción, la tarea horaria la detecta y la recrea automáticamente con la IP que quedó guardada en el script auxiliar, dejando constancia en el log.

Lo que no ocurre automáticamente es la actualización de cuál es esa IP autorizada: si tu IP real cambia (por ejemplo, por usar una VPN sin IP fija), debes editar de nuevo $ipPermitida en el script principal y volver a ejecutarlo, para que el script auxiliar quede regenerado con la nueva dirección. Por eso se recomienda una IP de una VPN de pago, precisamente para evitar tener que repetir este proceso.

Para reforzar aún más el equipo, considera aplicar la monitorización de inicios de sesión sospechosos como capa adicional de vigilancia.


Cómo revertir la restricción de acceso por IP en Windows

Si necesitas deshacer los cambios, ejecuta estos tres comandos en PowerShell como Administrador:

Unregister-ScheduledTask -TaskName "Restringir-IP-*" -TaskPath "\SeguridadEnMiPC\Restringir-IP\" -Confirm:$false
Remove-NetFirewallRule -DisplayName "SEGPC-PERMITIR-IP-UNICA"
Set-NetFirewallProfile -Profile Domain,Public,Private -DefaultInboundAction Allow

Preguntas frecuentes sobre restringir acceso por IP en Windows

¿Restringir el acceso por IP bloquea también mi propia navegación por internet?

No. Restringir acceso por IP en Windows solo bloquea el tráfico entrante (conexiones que otros inician hacia tu equipo). El tráfico saliente, como navegar por webs o usar aplicaciones, permanece permitido (-DefaultOutboundAction Allow).

¿Por qué debo usar la IP de una VPN de pago y no mi IP doméstica?

Porque las IPs domésticas suelen ser dinámicas y cambian sin previo aviso, dejándote sin acceso. Una VPN de pago con IP dedicada mantiene siempre la misma dirección de salida, sin importar desde qué red te conectes, y evita compartir esa IP con otros usuarios como ocurre en las VPN gratuitas.

¿Puedo autorizar más de una IP?

Sí, aunque el script está diseñado para una sola IP. Para varias, deberás duplicar la línea New-NetFirewallRule con un -DisplayName distinto para cada dirección, o usar el parámetro -RemoteAddress con un array de IPs.

¿Hace falta reiniciar el equipo después de ejecutar el script?

No. Con este script, la restricción se aplica de inmediato. El reinicio solo es útil para comprobar que la tarea programada de arranque funciona correctamente.

¿Esta restricción sustituye a un antivirus o EDR?

No. Esta medida reduce drásticamente la superficie de ataque a nivel de red, pero no analiza malware ni comportamiento de procesos. Debe combinarse con una solución antivirus/EDR activa.

¿Cómo compruebo que la restricción sigue activa tras reiniciar?

Revisa el archivo C:\Logs\restringir-acceso-ip.log: cada ejecución de las tareas programadas añade una línea confirmando si la regla estaba intacta o si tuvo que recrearla.


Conclusión

Restringir acceso por IP en Windows es una de las medidas más contundentes que puedes aplicar para blindar un ordenador expuesto a redes no confiables, y forma parte de una estrategia de ciberseguridad aplicada a tu equipo que combina firewall, monitorización y buenas prácticas de acceso remoto. Consulta también el recopilatorio de seguridad en Windows enfocado en el bloqueo de accesos remotos no autorizados para profundizar en el resto de medidas de hardening de red. Combinando el bloqueo por defecto del firewall, una regla de excepción precisa —idealmente sobre una IP fija de VPN de pago— y tareas programadas de autorreparación, consigues una protección que se mantiene activa incluso si alguien intenta desactivarla, sin necesidad de reiniciar el equipo. Recuerda documentar siempre la IP autorizada, guardar el script en C:\Scripts y tener un plan de reversión a mano antes de aplicar esta medida en un equipo de producción.

Autor

Entusiasta de la seguridad informática con años de experiencia en protección de sistemas Windows y defensa contra amenazas digitales. Apasionado por la tecnología y la privacidad, comparto en este blog consejos prácticos, análisis detallados y guías paso a paso para que cualquier usuario pueda fortalecer la seguridad de su PC y su vida digital

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tu puntuación: Útil

Subir