Compartir a través de


Parte 2.4: Protección de Linux mediante el 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 Linux.

Requisitos previos

No hay requisitos previos para completar esta parte del tutorial.

Objetivo de esta parte

Aprenderá a proteger la máquina virtual 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 enrutar las solicitudes entrantes a una aplicación ASP.NET Core que escucha en el puerto 5000.
  • La aplicación ASP.NET Core que está configurada para iniciarse automáticamente después de reiniciar el servidor o cuando se detiene o se bloquea el proceso.

Configuración de 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.

Según la página de ayuda de la comunidad de Ubuntu, de forma predeterminada, iptables está instalado en todas las distribuciones oficiales de Ubuntu y está configurado 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. Según 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 proporciona para crear un firewall basado en host IPv4 o IPv6.

Nota:

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

La máquina virtual Linux que se ha usado en este tutorial no está protegida por ninguna regla de firewall. Esto se debe a que, aunque iptables está instalado 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 (Secure Shell) lleguen a la máquina virtual desde el exterior. Para lograrlo, 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 ejecuta el riesgo de perder la conexión SSH a la máquina virtual. La regla predeterminada es la regla que se procesa si no hay ninguna otra regla coincidente. Al habilitar la regla predeterminada "permitir", se asegurará de que el tráfico SSH entrante no esté bloqueado. En este momento, no hay ninguna regla de "denegación" en absoluto. Por lo tanto, se permite todo el tráfico entrante.
  2. Importante

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

  3. Establezca la regla predeterminada como una regla "denegar". Esto garantiza 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

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

Captura de pantalla de seis comandos sudo.

Esto es lo que ocurre en cada paso.

  1. comprueba el estado de ufw ejecutando el sudo ufw status verbose comando . De forma predeterminada, la ufw no está habilitada y está inactiva.

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

  3. Importante

    Para agregar el protocolo SSH a la lista de permitidos, ejecute 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. Permita el protocolo HTTP mediante la ejecución sudo ufw allow httpde . HTTP es un protocolo conocido que se define en el archivo /etc/services. Por lo tanto, se puede usar el nombre del protocolo y se puede ejecutar el sudo ufw allow http comando. La ejecución sudo ufw allow 80 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 de "denegación".

  5. Para ello, cambie la regla predeterminada para denegar mediante la ejecución del sudo ufw default deny comando . Solo se permitirán los protocolos SSH y HTTP. Se denegarán los demás protocolos.

  6. Habilite ufw.

Esta es la sudo ufw status verbose salida después de completar este procedimiento.

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

Una vez configurado el firewall, pruebe si funciona.

Prueba del firewall local

Probar el firewall es fácil: cree una regla de "denegación" para el protocolo HTTP y, a continuación, intente acceder 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 buggyamb y usando la dirección IP pública de la máquina virtual Linux. El nombre de host buggyamb resuelve la dirección IP de la máquina virtual Linux. Puede agregar cualquier nombre de host al archivo de 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 principal.

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 se asegura de que el firewall funcione. Para ello, agregue una regla de "denegación" para HTTP mediante la ejecución sudo ufw deny httpde . Esto agrega dos reglas de "denegación" para el protocolo HTTP (en el puerto 80). Uno es para IPv4, el otro es para IPv6.

Captura de pantalla del comando http de denegación de sudo ufw.

Vuelva a abrir el explorador e intente acceder a la aplicación ASP.NET Core que se ejecuta en Linux.

Captura de pantalla de la 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 . En la captura de pantalla siguiente se muestran los pasos necesarios para la misma prueba mediante la ejecución wgetde .

Captura de pantalla de los cuatro comandos sudo.

Esto es lo que ocurre en cada paso.

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

  2. Se ejecutó el wget buggyamb-external comando. Como podría 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 realizó correctamente. Para salir de la operación, tenía que presionar CTRL+C.

  3. Se ha agregado una regla "allow" para el protocolo HTTP.

  4. Al ejecutar el wget buggyamb-external comando de nuevo se generaron resultados diferentes. Esta vez, wget pudo conectarse porque se permitió el protocolo HTTP. Como se muestra, wget descarga el archivo Index.html en el directorio actual.

Ahora está más cerca de completar la configuración necesaria para depurar la aplicación ASP.NET Core. 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.

Pasos siguientes

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