He creado un servicio (WCF) que actúa como backend para una base de datos. Por ahora realiza operaciones básicas como INSERTAR, SELECCIONAR, etc. Lo he ejecutado localmente y ahora es el momento de exponerla a Internet e ingresar a 'producción'. ¿Hay una mejor práctica para hacerlo? Tenga en cuenta que este servicio se alojará en una PC como un servicio de Windows (no IIS). Esta es la primera vez que estoy poniendo en producción un servicio de Windows, por lo que estoy confuso en los detalles, pero creo que esta es la idea principal:
-
En el servicio: compruebe si hay errores de "novato", como la inyección de SQL. Establezca el tamaño máximo de los mensajes en unos ligeramente más altos que el mensaje más grande que debe ser transmitido por mi servicio. También actualice el certificado X.509 autofirmado a uno emitido por una CA. (¿Dónde se almacena este certificado? ¿Localmente en la PC?)
-
En la PC: Software completamente parcheado (SO, etc.) y firewall de Windows con un conjunto específico de reglas que permite el tráfico solo en los puertos que se utilizan (supongo que la forma más segura de hacerlo es usar la herramienta de Windows ¿Permitir un programa o característica a través del Firewall de Windows ?). Además, se está ejecutando un antivirus actualizado.
-
En la red: para el enrutador de red, el puerto reenvía los puertos respectivos que se están utilizando (la dirección base se declara como
http://localhost:8080
, así que supongo que el puerto 80 para HTTP y 443 para HTTPS? Estoy usando el nivel de mensajes de Seguridad .) -
Precauciones generales: registro completo de mensajes en el servicio para analizar el tráfico y los posibles atacantes. También ejecute un sistema de detección de intrusos en la red como Snort para que pueda dormir un poco mejor por la noche.
¿Me falta algo obvio?
EDIT
Soy nuevo en WCF y estoy creando estos tipos de servicios en general, por lo que no estoy seguro si estoy usando la terminología correcta.
He acelerado el servicio al establecer un límite superior en el número máximo de llamadas simultáneas, sesiones y amp; instancias (me doy cuenta de que esto no protege explícitamente de los ataques HTTP, pero al menos mi sistema no se quedará sin memoria y no se bloqueará).
Según tengo entendido, los métodos de mi servicio solo pueden llamarse a través de un cliente SOAP con los contratos de servicio preconfigurados. No estoy seguro de si un atacante puede diseñar estos contratos. Además, parece que cualquiera que conozca la dirección base de mi servicio puede descargar la referencia del servicio y, por lo tanto, tendrá listos los contratos de servicio. ( Resuelto : deshabilitando el intercambio de metadatos)
El enlace que especifica la comunicación entre puntos finales es 'wsHttpBinding' con seguridad de nivel de 'mensaje'.
Mi pregunta es un poco diferente, sin embargo, ¿la configuración de 1,2,3 & 4 como se especificó anteriormente, ¿pone en peligro la red en la que se ejecuta la máquina con este servicio?