Kestrel es el servidor web multi-plataforma que ha creado Microsoft y que sirve para albergar las aplicaciones web creadas con ASP.NET Core y dotarlas de manera sencilla de la infraestructura para poder ejecutarse. No es la única opción existente para ejecutar las apps, pero sí la mas recomendable puesto que está diseñada para ello y además escala mucho y proporciona un gran rendimiento.
De todos modos Kestrel no está pensado para ser el servidor web que deberías usar para servir aplicaciones en producción directamente, sino que es un servidor de desarrollo, por lo que a la hora de exponer tus aplicaciones en Internet deberías tomar ciertas precauciones:
1.- No expongas Kestrel directamente a Internet
Por seguridad y por características, lo suyo sería siempre interponer un servidor web completo y empresarial delante de Kestrel, que delegue las peticiones a éste, es decir, un intermediario de nivel empresarial. Puedes usar un Internet Information Server (un IIS local o en Azure) en Windows, un servidor Apache o Nginx en Linux/Mac. En cualquier caso es indispensable hacerlo excepto en pruebas o aplicaciones pequeñas que no tengan acceso a recursos importantes.
Veremos enseguida que es importante hacerlo por otras razones también.
2.- Debes gestionar y monitorizar los procesos
Tu aplicación web con ASP.NET Core, gestionada por Kestrel, debe ser lanzada y asegurarse de que sigue funcionando incluso si rompe por algún lado. Esto es algo que no puede hacer automáticamente Kestrel ya que precisamente es el proceso que debes controlar. Es decir, aunque lances la aplicación con Krestel si se produce un error y rompe tendrás que detectarlo y volver a levantarla. Lo mismo si necesitas tener varios procesos en paralelo (web garden) para aprovechar mejor las capacidades de la máquina y servir desde varios núcleos... Cosas por el estilo.
Para ello lo suyo es utilizar las capacidades que ofrecen los servidores web empresariales y que precisamente se ocupan de gestionar, monitorizar y levantar los procesos que albergan aplicaciones web (se llaman servidores de aplicaciones por algo).
En Internet Information Server es fácil de conseguir con el módulo HttpPlatformHandler para IIS 8.x o posterior. En Linux/Mac con Nginx o Apache no es muy complejo tampoco.
3.- Recuerda el principio de menor privilegio
En seguridad, menos es más. Es decir, cuántos menos privilegios tenga el usuario que ejecuta el proceso de Kestrel, mucho mejor. La regla de oro es que jamás utilices una cuenta de administrador (Windows) o de root (Linux/Mac) para ejecutar el proceso de Kestrel.
Crea una cuenta específica que tenga los menos permisos posibles, con acceso nada más que a la carpeta que contenga tu aplicación, y si es posible solo con permisos de escritura en sitios restringidos de ésta. Cuántos menos permisos tenga este usuario menos problemas podrá causar si hay algún problema de seguridad y algún usuario malintencionado logra acceder al sistema.