Parte 2.4: Proteger Linux con firewall local y permitir el acceso HTTP remoto

Se aplica a:   .NET Core 2.1, .NET Core 3.1, .NET 5

En este artículo se presenta cómo configurar un firewall local para proteger la máquina virtual (VM) de Linux.

Requisitos previos

No hay requisitos previos para completar esta parte del tutorial.

Objetivo de esta parte

Aprenderá a proteger la VM de Linux mediante la configuración de un firewall.

Aunque no hay requisitos previos para esta parte, la configuración ideal seguiría las instrucciones de las partes anteriores. Debe tener lo siguiente:

  • Nginx se ejecuta automáticamente y escucha las solicitudes enviadas en el puerto 80
  • Nginx configurado como proxy inverso y enrutamiento de solicitudes entrantes a una aplicación ASP.NET Core que escucha en el puerto 5000.
  • La ASP.NET Core que está configurada para iniciarse automáticamente después de reiniciar el servidor o cuando el proceso se detiene o se bloquea

Configurar un firewall local para permitir el acceso desde equipos remotos

Casi todas las distribuciones de Linux incluyen un firewall local denominado iptables. Esta guía para principiantes es suficiente para un inicio rápido. Iptables es un firewall ligero pero eficaz que usa cadenas de directivas para permitir o bloquear el tráfico.

De acuerdo con la página de ayuda de la comunidad de Ubuntu,de forma predeterminada, las iptables están instaladas en todas las distribuciones oficiales de Ubuntu y están configuradas para permitir todo el tráfico.

Aunque iptables es un firewall ligero, no es fácil administrar las reglas persistentes. Afortunadamente, hay varias herramientas de configuración de firewall que facilitan mucho la tarea de configurar reglas de firewall en Linux. De acuerdo con la documentación oficial del firewall de Ubuntu,la herramienta de configuración de firewall predeterminada para Ubuntu es ufw . Esta herramienta proporciona un método más fácil de usar que iptables para crear un firewall basado en host IPv4 o IPv6.

Nota

ufw está deshabilitada inicialmente de forma predeterminada. Por lo tanto, debe habilitarlo para poder usarlo.

La vm de Linux que se ha usado en este tutorial no está protegida por ninguna regla de firewall. Esto se debe a que, aunque las iptables están instaladas y en ejecución, no hay reglas definidas.

Captura de pantalla del comando sudo iptables.

El objetivo aquí es permitir que solo el tráfico HTTP y SSH (Shell seguro) llegue a la máquina virtual desde fuera. Para ello, siga estos pasos:

  1. Antes de habilitar ufw , asegúrese de que la regla de directiva predeterminada está establecida para permitir. De lo contrario, se corre el riesgo de perder la conexión SSH a la máquina virtual. La regla predeterminada es la regla que se procesa si no se coincide con ninguna otra regla. Al habilitar la regla predeterminada "permitir", se garantizará que el tráfico SSH entrante no esté bloqueado. En este punto, no hay ninguna regla de "denegar" en absoluto. Por lo tanto, se permite todo el tráfico entrante.
  2. Importante

    Agregue explícitamente reglas SSH y HTTP "permitir". Observe también que, si configuró el puerto SSH en un valor diferente al predeterminado de 22, debe permitir ese puerto. Por ejemplo, si cambió el puerto SSH a 2222, debe ejecutar este comando: sudo ufw allow 2222 .

  3. Establezca la regla predeterminada como una regla "denegar". Esto asegura que si el protocolo es diferente de SSH o HTTP, la regla predeterminada "denegar" denegará el tráfico. Por ejemplo, se denegará el tráfico HTTP entrante.
  4. Habilite ufw el archivo .

Los comandos de estos pasos se enumeran en la siguiente captura de pantalla.

Captura de pantalla de seis comandos de sudo.

Esto es lo que ocurre en cada paso.

  1. comprueba el estado del ufw ejecutando el sudo ufw status verbose comando. De forma predeterminada, el ufw no está habilitado y está inactivo.

  2. ejecuta sudo ufw default allow el comando. Dado que no hay otra regla que la regla predeterminada "permitir", se considerará que todos los puertos de la máquina virtual están abiertos.

  3. Importante

    Agregue el protocolo SSH a la lista permitida ejecutando el sudo ufw allow ssh comando. Protocol.ssh es un protocolo conocido y se define en el archivo /etc/services. Por lo tanto, se puede usar "ssh" en lugar de "22". Recuerde que si configura el servicio SSH para que escuche en un puerto distinto del puerto predeterminado de 22, debe agregar explícitamente el otro puerto. Por ejemplo, si configura SSH para escuchar el puerto 2222, ejecute este comando: sudo ufw allow 2222 .

  4. Permitir el protocolo HTTP ejecutando sudo ufw allow http . HTTP es un protocolo conocido que se define en el archivo /etc/services. Por lo tanto, se puede usar el nombre del protocolo y sudo ufw allow http se puede ejecutar el comando. La sudo ufw allow 80 ejecución también es perfectamente válida.

    Nota

    Después de permitir los protocolos SSH y HTTP, querrá agregar todos los demás protocolos a la lista "denegar".

  5. Para ello, cambie la regla predeterminada a denegar ejecutando el sudo ufw default deny comando. Solo se permitirán los protocolos SSH y HTTP. Se denegarán los demás protocolos.

  6. Habilitar ufw .

Este es el sudo ufw status verbose resultado después de completar este procedimiento.

Captura de pantalla del comando detallado de estado de sudo ufw.

Después de configurar el firewall, compruebe si funciona.

Probar el firewall local

Probar el firewall es fácil: cree una regla de "denegar" para el protocolo HTTP y, a continuación, intente obtener acceso al sitio desde otro equipo. La solicitud debe bloquearse.

Antes de crear esta regla de "denegar", asegúrese de que la aplicación sea accesible para el explorador en su configuración actual. Para ello, edite el archivo C:\Windows\System32\drivers\etc\hosts en el equipo cliente agregando el nombre de host de buggyamb y usando la dirección IP pública de la máquina virtual Linux. El nombre de host de buggyamb resuelve la dirección IP de la máquina virtual Linux. Puede agregar cualquier nombre de host al archivo hosts o puede intentar conectarse directamente a la dirección IP pública de la máquina virtual Linux.

Captura de pantalla de la página de bienvenida.

Después de comprobar que las solicitudes HTTP pueden llegar a la máquina virtual, intente habilitar una regla que bloquee el tráfico HTTP. Esto es asegurarse de que el firewall funciona. Para ello, agregue una regla de "denegar" para HTTP ejecutando sudo ufw deny http . Esto agrega dos reglas de "denegación" para el protocolo HTTP (en el puerto 80). Una es para IPv4 y la otra para IPv6.

Captura de pantalla del comando sudo ufw deny http.

Abra el explorador de nuevo y, a continuación, intente obtener acceso a la ASP.NET Core que se ejecuta en Linux.

Captura de pantalla de página no válida.

Esta captura de pantalla muestra el resultado esperado.

Puede ejecutar una prueba similar directamente dentro de la máquina virtual linux mediante el wget comando. La siguiente captura de pantalla muestra los pasos necesarios para la misma prueba ejecutando wget .

Captura de pantalla de cuatro comandos de sudo.

Esto es lo que ocurre en cada paso.

  1. Se agregó la regla "denegar" para el protocolo HTTP.

  2. Se wget buggyamb-external ha ejecutado el comando. Como puede adivinar, el nombre de host "buggyamb-external" resuelve la dirección IP pública de la máquina virtual Linux. Para ello, edite el /etc/hosts archivo mediante vi. Como se muestra, wget intentó conectarse a él, pero nunca se ha hecho correctamente. Para salir de la operación, tenía que presionar CTRL+C.

  3. Se agregó una regla "permitir" para el protocolo HTTP.

  4. La ejecución wget buggyamb-external del comando de nuevo produjo resultados diferentes. Esta vez, se pudo conectar porque se permitió wget el protocolo HTTP. Como se muestra, wget descarga el Index.html archivo en el directorio actual.

Ahora está un paso más cerca de completar la configuración necesaria para depurar la ASP.NET Core aplicación. Antes de ir a la siguiente parte, asegúrese de que tanto SSH como HTTP están permitidos en el firewall local.

Captura de pantalla del comando sudo ufw status.

Siguientes pasos

Parte 2.5: Copiararchivos del entorno de desarrollo en una máquina virtual linux y, a continuación, extraer los archivos en Linux .