Control de Accesibilidad del Sistema por el cortafuegos firewalld

Richard Gregory, Petr Bokoc (pbokoc), Peter Boy (pboy) Versión F34 onwards Last review: 2023-08-23
Un cortafuegos es una manera para proteger máquinas desde cualquier accedo no deseado desde fuera. En Fedora, está instalado por defecto durante la instalación del sistema operativo, habilitado y configurado para proporcionar operación segura incluso sin ninguna acción adicional por el administrador. Bloquea cualquier acceso que ssh por defecto.

Como funciona

Un cortafuego habilita a usuarios para controlar tráfico de red entrante en máquinas host definiendo un conjunto de reglas de cortafuego. Estas reglas son utilizadas para ordenar el tráfico bien sea bloqueándolo o permitiéndolo.

firewalld is a firewall service daemon that provides a dynamic customizable host-based firewall with a D-Bus interface. Being dynamic, it enables creating, changing, and deleting the rules without the necessity to restart the firewall daemon each time the rules are changed.

firewalld emplea los conceptos de zonas y servicios, que simplifican la gestión de tráfico.

Zones con conjuntos predefinidos de reglas. Los interfaces de red y los orígenes pueden estar asignadas a una zona. El tráfico concedido depende en la red de su que su equipo esté conectado y el nivel de seguridad 3es asignado a esta red. Los servicios de cortafuego son reglas predefinidas que cubren todos los ajustes necesarios para conceder tráfico entrante para un servicio específico y se aplican internos a una zona.

Los Services utilizan uno o más puertos o direcciones para la comunicación de red. Los cortafuegos filtran la comunicación basada en puertos. Para conceder el tráfico de red de un servicio, sus puertos deben estar abiertos. firewalld bloquea todo el tráfico en los puertos que no están configurados explícitamente como abiertos. Algunas zonas, como las de confianza, permiten todo el tráfico por defecto.

Recursos adicionales

For more information about using firewalld and configuring zones and services, see firewalld documentation or Fedora wiki:firewalld

Setting up firewalld

All Fedora Editions install, configure and activate the firewall by default. No further action is required. The only exception is Cloud Edition, which relies on the higher level cloud system.

Some third party variations and redistributions may differ. In this case, it is up to the administrator to install and activate the firewall afterwards.

You check if firewalld is set up in a terminal by issuing

$ systemctl status firewalld

Obtendrías algo como

● firewalld.service - firewalld - demonio de cortafuego dinámico
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset>
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Sat 2023-08-19 19:05:18 CEST; 3 days ago
     ...

Instalar y activar firewalld

En caso que obtenga el comando de arriba algo como

Unidad firewalld.service no pudo ser encontrado.

tiene que instalarlo. Ejecute en la línea de comando:

$ sudo dnf install firewalld
$ sudo systemctl unmask firewalld
$ sudo systemctl start firewalld
$ sudo systemctl enable firewalld

Esta secuencia instala, inicia y asegura un reinicio automático tras un arranque del sistema.

Ajustando operaciones firewalld durante mantenimiento del sistema

A veces un administrador de sistema tiene que detener o reiniciar firewalld durante las tareas de mantenimiento del sistema.

Detener firewalld
$ sudo systemctl stop firewalld
Impedir inicio automático en el arranque del sistema
$ sudo systemctl disable firewalld
Iniciar firewalld
$ sudo systemctl start firewalld
Activa el autoinicio en el arranque del sistema
$ sudo systemctl enable firewalld
Desconecta el cortafuegos desde el controlador d-bus
$ sudo systemctl mask firewalld
(Re)-conectar el cortafuegos al controlador d-bus
$ sudo systemctl unmask firewalld

Instalación del IGU firewall-config de la herramienta de configuración

Para usar el IGU de la herramienta de configuración de firewall-config, instale el paquete firewall-config como root:

$ sudo dnf install firewall-config

Alternativamente, en GNOME, use la tecla Super y teclee Software para lanzar la aplicación Software Sources. Teclee firewall en la caja de búsqueda que aparece después de seleccionar el botón de búsqueda en la esquina superior derecha. Seleccione el elemento Firewall de los resultados de la búsqueda y pulse el botón Install.

Para ejecutar firewall-config, utilice o bien el comando firewall-config o pulse la tecla Super para entrar en Vista de Actividades, teclee firewall y pulse Entrar.

Gestionar firewalld

Ver el estado actual de cortafuegos firewalld

El servicio cortafuegos, firewalld, está instalado en el sistema de forma predeterminada. Emplee la interfaz CLI firewalld para comprobar que el servicio está ejecutándose.

$ sudo firewall-cmd --state

Para más información sobre el estado del servicio, utilice el sub comando systemctl

$ sudo systemctl status firewalld
firewalld.service - firewalld - demonio del cortafuego dinámico
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor pr
   Active: activo (ejecutándose) desde Lun 18/12/2017 16:05:15 CET; 50min
     Docs: man:firewalld(1)
 Main PID: 705 (firewalld)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/firewalld.service
           └─705 /usr/bin/python3 -Es /usr/sbin/firewalld --nofork --nopid

Es más, es importante saber cómo está configurado firewalld y qué reglas están en vigor antes de intentar editar la configuración. Para exhibir los ajustes del cortafuegos, consulte Visualizando los ajustes actuales de firewalld

Visualizando los ajustes actuales de firewalld

Vista de servicios permitidos usando el IGU

To view the list of services using the graphical firewall-config tool, press the Super key to enter the Activities Overview, type firewall, and press Enter. The firewall-config tool appears. You can now view the list of services under the Services tab.

Alternativamente, para iniciar la herramienta gráfica de configuración de cortafuegos usando la línea de comandos, introduzca el siguiente comando:

$ firewall-config

Se abre la ventana Configuración de Cortafuegos. Tenga en cuenta que este comando puede ser ejecutado por un usuario normal, pero ocasionalmente se le pedirá una contraseña de administrador.

Visualización de los ajustes de firewalld usando CLI

Con el cliente CLI, es posible obtener vistas diferentes de los ajustes del cortafuegos actual. La opción --list-all muestra una vista previa completa de los ajustes de firewalld.

firewalld utiliza zonas para gestionar el tráfico. Si una zona no está especificada por la opción --zone, el comando es efectivo en la zona predeterminada asignada a la red activa del interfaz y conexión.

Para el listado de toda la información relevante para la zona por defecto:

$ firewall-cmd --list-all
público
  destino: por defecto
  icmp-block-inversion: no
  interfaces:
  orígenes:
  servicios: ssh dhcpv6-client
  puertos:
  protocolos:
  máscara: no
  puertos-reenviados:
  puertos-origen:
  bloqueos-icmp:
  reglas:

Para especificar la zona por la cual exhibe los ajustes, añada el argumento --zone=zone-name para el comando firewall-cmd --list-all, por ejemplo:

$ sudo firewall-cmd --list-all --zone=home
home
  target: default
  icmp-block-inversion: ninguna
  interfaces:
  sources:
  services: ssh mdns samba-client dhcpv6-client
... [salida truncada]

Para ver los ajustes para información particular, tales como servicios o puertos, utilice una opción específica. Consulte las páginas del manual firewalld u obtenga un listado de las opciones utilizando el comando help:

$ firewall-cmd --help

Modo de empleo: firewall-cmd [OPCIONES…]

Opciones Generales
  -h, --help           Declara un texto de ayuda breve y sale
  -V, --version        Declara la cadena de la versión de firewalld
  -q, --quiet          No declara mensajes de estado

Opciones de Estado
  --state                Devuelve y declara el estado del cortafuegos firewalld
  --reload             Recarga cortafuegos y conserva información de estado
… [salida truncada]

Por ejemplo, para ver cuáles servicios son permitidos en la zona actual:

$ firewall-cmd --list-services
samba-client ssh dhcpv6-client

Enumerar los ajustes de una cierta sub‐parte utilizando la herramienta CLI puede algunas veces ser difícil de interpretar. Por ejemplo, si se concede el servicio SSH y firewalld abre el puerto (22) necesario para dicho servicio. Posteriormente, si enumera los servicios permitidos, el listado mostrará el servicio SSH, pero si se enumeran los puertos abiertos, no se mostrará ninguno. Por lo tanto, se recomienda emplear la opción --list-all para asegurarse de recibir información completa.

Parámetros de tiempo de ejecución y permanencias

Cualquier cambio hecho mientras firewalld esté en ejecución se perderá cuando sea reiniciado firewalld. Cuando firewalld es reiniciado, los ajustes se revierten a sus valores permanentes.

Estos cambios son dichos para hacerse en modo de tiempo de ejecución.

Para hacer los cambios persistentes a través de rearranques, aplíquelos de nuevo utilizando la opción --permanent. Alternativamente, para hacer cambios persistentes mientras firewalld está en ejecución, utilice la opción --runtime-to-permanent firewall-cmd.

Si realiza cambios mientras esté ejecutándose el cortafuegos firewalld utilizando solo la opción --permanent, no se vuelven efectivas hasta que firewalld sea reiniciado Sin embargo, reiniciar firewalld detiene el tráfico de red brevemente, causando disrupción en su sistema.

Cambiar parámetros en ejecución y configuración permanente utilizando CLI

Al utilizar la CLI, usted sólo puede modificar bien en el tiempo de ejecución o bien de modo permanente. Para modificar los ajustes del cortafuegos de modo permanente, use la opción --permanent con el comando firewall-cmd.

$ sudo firewall-cmd --permanent <otras opciones>

Sin esta opción, la instrucción modifica en modo de tiempo de ejecución. Para cambiar los ajustes en ambos modos usted puede usar dos métodos:

  • Cambiar los ajustes de tiempo de ejecución y después hacerlos permanente de la siguiente forma:

    1. Cambio de los ajustes en tiempo de ejecución:

      firewall-cmd <otras opciones>

    2. Use --runtime-to-permanent para hacer los cambios permanentes.

      firewall-cmd --runtime-to-permanent

  • Establece ajustes permanentes y recarga los parámetros en modo de tiempo de ejecución:

    1. Hacer los cambios en modo permanente:

      firewall-cmd --permanent <other options>

    2. Recargar los ajustes:

      firewall-cmd --reload

El primer método le permite probar los ajustes antes de aplicarlos en modo permanente.

Es posible que un ajuste incorrecto puede llevar a que el usuario se bloquee a si mismo en la máquina. Para evitar esto use la opción --timeout. La utilización de esta opción significa que después de una cantidad de tiempo especificada cualquier cambio vuelve a su estado anterior. No puede usar la opción --permanent con la opción --timeout.

Por ejemplo, para añadir el servicio SSH durante 15 minutos use este comando:

$ sudo firewall-cmd --add-service=ssh --timeout 15m

El servicio SSH estará disponible hasta que se quite tras 15 minutos.

Controlar puertos utilizando firewalld

¿Qué son los puertos?

Los puertos son dispositivos lógicos que los habilita un sistema operativo para recibir y distinguir tráfico de red y reenviarlo de acuerdo con servicios del sistema. Usualmente son representados por un demonio que escucha en el puerto, que es esperado para cualquier tráfico que venga a este puerto.

Normalmente, los servicios del sistema escuchan en los puertos estándar reservados para ellos. El demonio httpd, por ejemplo, escucha en el puerto 80. Sin embargo, los administradores del sistema pueden configurar los demonios para que escuchen en puertos diferentes para mejorar la seguridad.

Abriendo un puerto

A través de abrir puertos, el sistema es accesible desde el exterior, lo cual representa un riesgo de seguridad. Generalmente, conserve los puertos cerrados y solo ábralos si son requeridos para ciertos servicios.

Abrir un puerto utilizando la línea de instrucción
  1. Obtiene un listado de puertos permitidos dentro de la zona actual:

    $ sudo firewall-cmd --list-ports
  2. Agregue un puerto a los puestos permitidos para abrirlo para tráfico entrante:

    $ sudo firewall-cmd --add-port=número_puerto/tipo_puerto
  3. Hacer los parámetros nuevos persistentes:

    $ sudo firewall-cmd --runtime-to-permanent

Los tipos de puerto son tcp, udp, sctp, o dccp. El tipo debe coincidir con el tipo comunicación de red.

Cerrar un puerto

Cunado un puerto abierto no es necesario más, cierra ese puerto en firewalld. Es altamente recomendado cerrar todos los puertos no necesarios tan pronto como no se utilicen porque dejar un puerto abierto representa un riesgo de seguridad.

Cerrar un puerto mediante la línea de instrucción

Para cerrar un puerto, retírelo desde el listado de puertos permitidos:

  1. Enumera todos los puertos permitidos:

    $ sudo firewall-cmd --list-ports

    Este comando solo le proporcionará una lista de los puertos que se han abierto como puertos. No podrá ver ningún puerto abierto que se haya abierto como servicio. Por lo tanto, debería considerar utilizar la opción --list-all en lugar de --list-ports.

  2. Elimine el puerto de los puertos permitidos para cerrarlo al tráfico entrante:

    $ sudo firewall-cmd --remove-port=port-number/port-type
  3. Hacer los parámetros nuevos persistentes:

    $ sudo firewall-cmd --runtime-to-permanent