Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
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:
- 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. -
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
. - 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.
- Habilite .
ufw
Los comandos de estos pasos se muestran en la captura de pantalla siguiente.
Esto es lo que ocurre en cada paso.
comprueba el estado de ufw ejecutando el
sudo ufw status verbose
comando . De forma predeterminada, la ufw no está habilitada y está inactiva.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.-
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
. Permita el protocolo HTTP mediante la ejecución
sudo ufw allow http
de . 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 elsudo ufw allow http
comando. La ejecuciónsudo 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".
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.Habilite
ufw
.
Esta es la sudo ufw status verbose
salida después de completar este procedimiento.
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.
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 http
de . Esto agrega dos reglas de "denegación" para el protocolo HTTP (en el puerto 80). Uno es para IPv4, el otro es para IPv6.
Vuelva a abrir el explorador e intente acceder a la aplicación ASP.NET Core que se ejecuta en Linux.
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 wget
de .
Esto es lo que ocurre en cada paso.
Se agregó la regla "deny" para el protocolo HTTP.
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.Se ha agregado una regla "allow" para el protocolo HTTP.
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.