Cómo: Utilizar IPSec para proporcionar comunicación segura entre dos servidores

Publicado: 26 de junio de 2006

Consulte la Página de entrada como punto de partida y para obtener una descripción completa del documento Crear aplicaciones ASP.NET seguras.

Resumen: IPSec es una tecnología incluida en Windows 2000 que le permite crear canales cifrados entre dos servidores. IPSec se puede utilizar para filtrar el tráfico IP y autenticar servidores. En este artículo se muestra cómo configurar IPSec para proporcionar una canal seguro (cifrado).

Seguridad de protocolo Internet (IPSec, Internet Protocol Security) se puede utilizar para proteger los datos enviados entre dos equipos, por ejemplo entre un servidor de aplicaciones y un servidor de bases de datos. IPSec es totalmente transparente para las aplicaciones porque el cifrado, la integridad y los servicios de autenticación se implementan en el nivel de transporte. Las aplicaciones siguen comunicándose entre sí de la manera habitual mediante los puertos TCP y UDP.
Mediante IPSec se puede hacer lo siguiente:

  • Proporcionar confidencialidad en los mensajes mediante el cifrado de todos los datos enviados entre dos equipos.

  • Proporcionar integridad de los mensajes entre dos equipos (sin cifrar los datos).

  • Proporcionar autenticación mutua entre dos equipos. Por ejemplo, puede ayudar a proteger un servidor de bases de datos si establece una directiva que sólo permita solicitudes procedentes de un equipo cliente específico (como un servidor de aplicaciones o un servidor Web).

  • Limitar qué equipos pueden comunicarse entre sí. También puede restringir la comunicación a determinados protocolos IP y puertos TCP o UDP.

En este artículo se muestra cómo proteger el canal de comunicaciones entre un servidor de aplicaciones y un servidor de bases de datos que ejecuta SQL Server 2000. El servidor de aplicaciones utiliza la biblioteca de red de cliente TCP/IP recomendada para conectar a SQL Server y utiliza el puerto TCP 1433 predeterminado de SQL Server. La configuración se muestra en la ilustración 1.

imagen

Ilustración 1

Configuración de la solución del artículo

En este artículo se describe cómo utilizar una sencilla directiva IPSec para exigir la siguiente configuración:

  • Permitir comunicaciones con SQL Server sólo desde el servidor de aplicaciones con TCP a través del puerto 1433.

  • Descartar los demás paquetes IP, incluidos los paquetes ICMP (ping).

  • Cifrar todos los datos enviados entre dos equipos para garantizar la confidencialidad.

A continuación se enumeran las ventajas de este planteamiento:

  • Se proporciona confidencialidad de todos los datos enviados entre los dos equipos.

  • Aumenta de forma considerable la seguridad de SQL Server. Los únicos puntos de ataque restantes son el inicio de sesión interactivo en el servidor de bases de datos y el control del servidor de aplicaciones para intentar atacar SQL Server mediante el puerto TCP 1433.

  • La directiva IPSec es muy sencilla de definir y de implementar.

Esta directiva en particular tiene las siguientes desventajas:

  • SQL Server no puede comunicarse con los controladores de dominio, lo que provoca las siguientes consecuencias:

    • La directiva de grupo no se puede aplicar (el servidor de bases de datos debe ser un servidor independiente).

    • La autenticación de Windows entre el servidor de aplicaciones y el servidor de bases de datos requiere cuentas locales sincronizadas (con el mismo nombre de usuario y contraseña) en ambos equipos.

    • No se pueden utilizar métodos más eficaces para aplicar IPSec (predeterminado de Windows 2000 o Kerberos).

  • SQL Server no podrá comunicarse con otros equipos, incluidos los servidores DNS.

  • En el planteamiento que se hace en este artículo se utiliza la autenticación de clave previamente compartida, que no se recomienda para el entorno de producción. Los sistemas de producción deben utilizar certificados o autenticación de dominios de Windows 2000. Las directivas de IPSec que utilizan secretos compartidos previamente son adecuadas para su uso únicamente en entornos de desarrollo o pruebas.

  • Ambos equipos deben contar con una dirección IP estática.

Notas

  • Una directiva IPSec consiste en un conjunto de filtros, acciones de filtrado y reglas.

  • Un filtro se compone de:

    • Una dirección IP o un rango de direcciones de origen.

    • Una dirección IP o un rango de direcciones de destino.

    • Un protocolo IP, como TCP, UDP o "cualquiera".

    • Puertos de origen y de destino (sólo para TCP o UDP).

  • Los filtros también se pueden reflejar en dos equipos. Un filtro reflejado aplica la misma regla en el equipo cliente y en el servidor (con las direcciones de origen y de destino invertidas).

  • Una acción de filtrado especifica la acción que se debe llevar a cabo cuando se llama a un filtro determinado. Puede ser una de las siguientes:

    • Permitir. El tráfico no está protegido; se permite su envío y recepción sin intervención.

    • Bloquear. No se permite el tráfico.

    • Negociar la seguridad. Los extremos deben ponerse de acuerdo en el método seguro que utilizarán para comunicarse. Si no pueden ponerse de acuerdo, la comunicación no tiene lugar. Si se produce un error en la negociación, puede especificar si se permite la comunicación no protegida o si se debe bloquear toda la comunicación.

  • Una regla asocia un filtro con una acción de filtrado.

  • Una directiva reflejada es aquella que aplica reglas a todos los paquetes con la inversión exacta de las direcciones IP de origen y destino especificadas. En este artículo se crea una directiva reflejada.

Requisitos

A continuación se describen las recomendaciones de hardware, software, infraestructura de red, conocimientos y Service Pack que se necesitan.

  • Dos equipos que ejecuten el sistema operativo Microsoft® Windows® 2000 Server
    Debe conocer sus direcciones IP.

  • Microsoft® SQL Server™ 2000 en el servidor de bases de datos

En esta página

Crear un filtro IP  Crear un filtro IP
Crear acciones de filtrado  Crear acciones de filtrado
Crear reglas Crear reglas
Exportar la directiva IPSec al equipo remoto Exportar la directiva IPSec al equipo remoto
Asignar directivas  Asignar directivas
Comprobar que funciona  Comprobar que funciona
Recursos adicionales Recursos adicionales

Crear un filtro IP

Para crear un nuevo filtro IP en el servidor de bases de datos

  1. Inicie sesión en el servidor de bases de datos como administrador.

  2. Inicie el complemento de Microsoft Management Console (MMC) Directiva de seguridad local en el grupo de programas Herramientas administrativas.

  3. En el panel izquierdo, haga clic con el botón secundario del mouse (ratón) en Directivas de seguridad IP en equipo local y, después, haga clic en Administrar listas de filtros IP y acciones de filtrado.

    Verá que ya hay definidas dos listas de filtros para todo el tráfico ICMP y todo el tráfico IP.

  4. Haga clic en Agregar.

  5. En el cuadro de diálogo Lista de filtros IP, escriba Puerto SQL en el campo Nombre.

  6. Haga clic en Agregar y, después, en Siguiente para pasar el cuadro de diálogo inicial del Asistente para filtros IP.

  7. En el cuadro de diálogo Origen del tráfico IP, seleccione Dirección IP específica en la lista desplegable Dirección de origen y, a continuación, escriba la dirección IP del servidor de aplicaciones.

  8. Haga clic en Siguiente.

  9. En el cuadro de diálogo Destino del tráfico IP, seleccione Dirección IP específica en la lista desplegable Dirección de destino y, a continuación, escriba la dirección IP del servidor de bases de datos.

  10. Haga clic en Siguiente.

  11. En el cuadro de diálogo Tipo de protocolo IP, seleccione TCP y, después, haga clic en Siguiente.

  12. En el cuadro de diálogo Puerto de protocolo IP, seleccione Desde cualquier puerto y, después, seleccione A este puerto. Escriba 1433 como número de puerto.

  13. Haga clic en Siguiente y, después, en Finalizar para cerrar el asistente.

  14. Haga clic en Cerrar para cerrar el cuadro de diálogo Lista de filtros IP.

Crear acciones de filtrado

En este procedimiento se crean dos acciones de filtrado. La primera de ellas se utilizará para bloquear todas las comunicaciones procedentes de equipos especificados y la segunda se utilizará para exigir el uso de cifrado entre el servidor de aplicaciones y el servidor de bases de datos.

Para crear acciones de filtrado

  1. Haga clic en la ficha Administrar acciones de filtrado.

    Observe que ya hay varias acciones predefinidas.

  2. Haga clic en Agregar para crear una nueva acción de filtrado.

    En los siguientes pasos, se creará una acción de bloqueo que se puede utilizar para bloquear todas las comunicaciones que tengan origen en equipos seleccionados.

  3. Haga clic en Siguiente para pasar el cuadro de diálogo inicial del Asistente para acciones de filtrado.

  4. En el campo Nombre, escriba Bloquear y, a continuación, haga clic en Siguiente.

  5. En el cuadro de diálogo Opciones generales de acciones de filtrado, seleccione Bloquear y, después, haga clic en Siguiente.

  6. Haga clic en Finalizar para cerrar el asistente.

  7. Haga clic en Agregar para iniciar de nuevo el Asistente para acciones de filtrado.

    En los pasos siguientes, se creará una acción de filtrado para forzar el uso de cifrado entre el servidor de aplicaciones y el servidor de bases de datos.

  8. Haga clic en Siguiente para pasar el cuadro de diálogo inicial del Asistente para acciones de filtrado.

  9. En el campo Nombre, escriba Requerir alta seguridad y, a continuación, haga clic en Siguiente.

  10. Seleccione Negociar la seguridad y, después, haga clic en Siguiente.

  11. Seleccione No comunicar con equipos que no son compatibles con IPSec y, a continuación, haga clic en Siguiente.

  12. Seleccione Personalizada y, después, haga clic en Configuración.

  13. Asegúrese de que la casilla de verificación Integridad de datos y cifrado (ESP) está activada.

  14. Seleccione SHA1 en la lista desplegable Algoritmo de integridad.

  15. Seleccione 3DES en la lista desplegable Algoritmo de cifrado.

  16. Active las dos casillas de verificación del grupo Configuración de claves de sesión para generar una nueva clave cada 100000 Kb y 3600 segundos, respectivamente.

  17. Haga clic en Aceptar para cerrar el cuadro de diálogo Configuración de método de seguridad personalizado y, después, haga clic en Siguiente.

  18. Active la casilla de verificación Modificar propiedades y, a continuación, haga clic en Finalizar.

  19. Desactive la casilla de verificación Aceptar comunicación no segura, pero responder siempre usando IPSec.

  20. Active la casilla de verificación Confidencialidad directa perfecta de clave de sesión y, después, haga clic en Aceptar.

  21. Haga clic en Cerrar para cerrar el cuadro de diálogo Administrar listas de filtros IP y acciones de filtrado.

Crear reglas

En este procedimiento se crean dos nuevas reglas que se utilizarán para asociar el filtro que creó en el procedimiento 1 con las dos acciones de filtrado que creó en el procedimiento 2.

Para crear reglas

  1. En el panel izquierdo, haga clic con el botón secundario en Directivas de seguridad IP en equipo local y, después, haga clic en Crear directiva de seguridad IP.

  2. Haga clic en Siguiente para pasar el cuadro de diálogo inicial del Asistente para directivas de seguridad IP.

  3. En el campo Nombre, escriba Proteger SQL y, a continuación, haga clic en Siguiente.

  4. Desactive la casilla de verificación Activar la regla de respuesta predeterminada y, después, haga clic en Siguiente.

  5. Deje activada la casilla de verificación Modificar propiedades y haga clic en Finalizar.

  6. Haga clic en Agregar para iniciar de nuevo el Asistente para reglas de seguridad.

  7. Haga clic en Siguiente para pasar el cuadro de diálogo inicial del Asistente para reglas de seguridad.

  8. Haga clic en Esta regla no especifica un túnel y, después, en Siguiente.

  9. Haga clic en Todas las conexiones de red y, después, en Siguiente.

  10. Haga clic en Usar esta cadena para proteger el intercambio de claves (clave compartida).

  11. Escriba MiSecreto como clave "secreta" en el cuadro de texto.

    Nota: ambos equipos deben tener la misma clave para que se puedan comunicar correctamente. Debe utilizar un número aleatorio largo, pero para los fines de este artículo, "MiSecreto" será suficiente.

  12. Haga clic en Siguiente.

  13. Seleccione la opción Puerto SQL.

    Nota: para seleccionar la opción, debe hacer clic en el círculo (botón de opción) en lugar del texto.

  14. Haga clic en Siguiente.

  15. Seleccione la opción Requerir alta seguridad y, después, haga clic en Siguiente.

  16. Haga clic en Finalizar para cerrar el cuadro de diálogo Propiedades de Proteger SQL.

  17. Haga clic en Agregar para iniciar de nuevo el Asistente para reglas de seguridad y, a continuación, haga clic en Siguiente para pasar el cuadro de diálogo inicial.

  18. Haga clic en Esta regla no especifica un túnel y, después, en Siguiente.

  19. Haga clic en Todas las conexiones de red y, después, en Siguiente.

  20. En el cuadro de diálogo Método de autenticación, deje seleccionada la opción Valor predeterminado de Windows 2000 (protocolo Kerberos V5) y, después, haga clic en Siguiente.

    Nota: esta regla especificará la acción de filtrado Bloquear, por lo que no será necesaria la autenticación.

  21. En el cuadro de diálogo Lista de filtros IP, haga clic en Todo el tráfico IP y, después, en Siguiente.

  22. En el cuadro de diálogo Acción de filtrado, seleccione Bloquear y, después, haga clic en Siguiente.

  23. Haga clic en Finalizar.

  24. Haga clic en Cerrar para cerrar el cuadro de diálogo Propiedades de Proteger SQL.

Exportar la directiva IPSec al equipo remoto

La directiva IPSec que ha creado en el servidor de bases de datos debe exportarse y copiarse en el servidor de aplicaciones.

Para exportar la directiva IPSec al servidor de aplicaciones

  1. En el panel izquierdo, haga clic con el botón secundario en el nodo Directivas de seguridad IP en equipo local, elija Todas las tareas y, después, haga clic en Exportar directivas.

  2. En el campo Nombre, escriba Proteger SQL y, después, haga clic en Guardar para exportar el archivo al disco duro local.

  3. Copie el archivo .ipsec en el servidor de aplicaciones o haga que esté disponible mediante un recurso compartido de archivo.

    Importante: puesto que el archivo de la directiva exportada contiene una clave compartida previamente en texto sin formato, el archivo debe protegerse correctamente. No debe almacenarse en el disco duro de ninguno de los equipos.

  4. Inicie sesión como administrador en el servidor de aplicaciones e inicie el complemento de MMC Directiva de seguridad local.

  5. Seleccione y haga clic con el botón secundario en Directivas de seguridad IP en equipo local, elija Todas las tareas y, después, haga clic en Importar directivas.

  6. Busque el archivo .ipsec que exportó anteriormente y haga clic en Abrir para importar la directiva.

Asignar directivas

Para que se active una directiva IPSec, primero debe asignarse. Observe que sólo puede haber una directiva activa a la vez en un equipo determinado.

Para asignar la directiva Proteger SQL en el servidor de aplicaciones y en el servidor de bases de datos

  1. En el servidor de aplicaciones, haga clic con el botón secundario en la directiva Proteger SQL recién importada y, después, haga clic en Asignar

  2. Repita el paso anterior en el servidor de bases de datos.
    La directiva reflejada está asignada ahora en ambos equipos.
    Las directivas aseguran que sólo el servidor de aplicaciones puede comunicarse con el servidor de bases de datos. Además, sólo se permiten las conexiones TCP que utilicen el puerto 1433 y todo el tráfico enviado entre los dos equipos está cifrado.

Comprobar que funciona

En este procedimiento se utiliza el Monitor de red para comprobar que los datos enviados entre el servidor de aplicaciones y el servidor de bases de datos están cifrados.

Para comprobar que funciona

  1. En el servidor de aplicaciones, utilice Visual Studio .NET para crear una nueva aplicación de consola en C# con el nombre SQLIPSecClient.

  2. Copie el siguiente código en class1.cs para reemplazar todo el código existente.

    Nota: reemplace la dirección IP de la cadena de conexión por la dirección IP del servidor de bases de datos.

       using System;
       using System.Data;
       using System.Data.SqlClient;
    
    namespace SQLIPSecClient
       {
       class Class1
       {
       [STAThread]
       static void Main(string[] args)
       {
       // Replace the IP address in the following connection string with the IP
       // address of your database server
       SqlConnection conn = new SqlConnection(
       "server=192.168.12.11;database=NorthWind;Integrated Security='SSPI'");
    
    SqlCommand cmd = new SqlCommand(
       "SELECT ProductID, ProductName FROM Products");
       try
       {
       conn.Open();
       cmd.Connection = conn;
       SqlDataReader reader = cmd.ExecuteReader();
       while (reader.Read())
       {
       Console.WriteLine("{0} {1}", 
       reader.GetInt32(0).ToString(), 
       reader.GetString(1) );
       }
       reader.Close();
       }
       catch( Exception ex)
       {
       }
       finally
       {
       conn.Close();
       }
       }
       }
       }
    
  3. En el menú Generar, haga clic en Generar solución.

  4. Para que la autenticación de Windows se realice correctamente entre los dos equipos, debe duplicar en el servidor de bases de datos la cuenta con la que ha iniciado sesión de forma interactiva en el servidor de aplicaciones. Asegúrese de que el nombre de usuario y la contraseña coinciden.
    Debe utilizar también el Administrador corporativo de SQL Server para crear un inicio de sesión en la base de datos para la cuenta recién creada y agregar un nuevo usuario de base de datos para el inicio de sesión en la base de datos Northwind.

  5. Anule temporalmente la asignación de la directiva IPSec Proteger SQL en ambos equipos:

    a. Inicie Configuración de seguridad local en el servidor de aplicaciones.

    b. Haga clic en Directivas de seguridad IP en equipo local.

    c. En el panel derecho, haga clic con el botón secundario en Proteger SQL y, a continuación, haga clic en Desasignar.

    d. Repita los pasos a – c en el servidor de bases de datos.

  6. En el servidor de bases de datos, haga clic en Monitor de red dentro del grupo de programas Herramientas administrativas.

    Nota: en Windows 2000 Server se incluye una versión limitada del Monitor de red. En Microsoft SMS se incluye una versión completa.

    Si no tiene instalado el Monitor de red, vaya a Agregar o quitar programas en el Panel de control, haga clic en Agregar o quitar componentes de Windows, seleccione Herramientas de administración y supervisión en la lista Componentes de Windows, haga clic en Detalles y, después, haga clic en Herramientas del monitor de red. Haga clic en Aceptar y, después, en Siguiente para instalar la versión limitada de Monitor de red. Puede que se le pida el CD de Windows 2000 Server.

  7. En el menú Capturar, haga clic en Filtro para crear un nuevo filtro configurado para ver el tráfico de red TCP/IP enviado entre el servidor de aplicaciones y el servidor de bases de datos.

  8. Haga clic en el botón Iniciar captura.

  9. Vuelva al servidor de aplicaciones y ejecute la aplicación de consola de prueba. En la ventana de la consola debe aparecer una lista de productos de la base de datos Northwind.

  10. Vuelva al servidor de bases de datos y haga clic en el botón Detener y ver captura en el Monitor de red.

  11. Haga doble clic en la primera trama capturada para ver los datos de la captura.

  12. Desplácese hacia abajo por las tramas capturadas. Debe ver la instrucción SELECT en texto sin formato seguida de la lista de productos recuperados en la base de datos.

  13. Asigne la directiva IPSec Proteger SQL en ambos equipos:

    a. Inicie Configuración de seguridad local en el servidor de aplicaciones.

    b. Haga clic en Directivas de seguridad IP en equipo local.

    c. En el panel derecho, haga clic con el botón secundario en Proteger SQL y, a continuación, haga clic en Asignar.

    d. Repita los pasos a – c en el servidor de bases de datos.

  14. En el Monitor de red, cierre la ventana de capturas.

  15. Haga clic en el botón Iniciar captura y, a continuación, haga clic en No en el cuadro de mensaje Guardar archivo.

  16. Vuelva al servidor de aplicaciones y ejecute de nuevo la aplicación de consola de prueba.

  17. Vuelva al servidor de bases de datos y haga clic en Detener y ver captura en el Monitor de red.

  18. Confirme que los datos no son legibles (porque están cifrados).

  19. Cierre el Monitor de red.

Recursos adicionales

Para obtener más información acerca de IPSec, consulte "IP Security and Filtering" (en inglés) en TechNet (http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol/winxppro/reskit/prcc_tcp_erqb.asp?frame=true>).
Para obtener más información acerca del Monitor de red, consulte la sección "Network Monitor" (en inglés) del SDK de la plataforma de Microsoft en MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmon/netmon/network_monitor.asp).

Mostrar: