Skip to content

Firewalld

¿Qué es Firewalld?

Firewalld es una herramienta de administración de firewall incluida por defecto en sistemas operativos basados en Red Hat. Su propósito es controlar el tráfico de red entrante y saliente, protegiendo el sistema contra accesos no autorizados.

A diferencia de otras soluciones tradicionales basadas en reglas estáticas (como iptables), Firewalld permite gestionar el firewall de forma dinámica, es decir, se pueden aplicar cambios sin necesidad de reiniciar el servicio o interrumpir las conexiones activas.

Firewalld organiza sus reglas en zonas, cada una con un nivel de confianza diferente, lo que facilita la configuración en entornos con múltiples interfaces de red (por ejemplo, una conexión doméstica y otra pública). Además, ofrece una interfaz de línea de comandos (firewall-cmd) y una interfaz gráfica opcional para facilitar su uso.

Se recomienda configurarlo para asegurar el sistema. Firewalld es una solución dinámica para gestión de firewall que funciona con zonas de confianza y se comunica con iptables, ebtables y en versiones más recientes nftables.

Este servicio se integra con herramientas como NetworkManager y puede manejar IPv4, IPv6 y puentes Ethernet. Para configurarlo en consola se utiliza el comando firewall-cmd.

Para obtener ayuda:

firewall-cmd --help

Manual acerca del comando:

man 1 firewall-cmd

Manuales relacionados:

man -k firewalld

Instalación

Si tu sistema no tiene Firewalld, puedes instalarlo con:

dnf -y install firewalld

Para interfaz gráfica (No se utilizará en este curso):

Paquete: firewall-config


Activar y usar el servicio

Activar el servicio en el arranque:

systemctl enable firewalld

Iniciar el servicio:

systemctl start firewalld

Reiniciar:

systemctl restart firewalld

Recargar configuración sin reiniciar:

firewall-cmd --reload

Zonas de seguridad en Firewalld

Firewalld organiza las reglas en zonas con diferentes niveles de confianza. Algunas comunes son:

Puede obtener información acerca de las zonas que incluye su distribución con el comando:

man 5 firewalld.zones

Este listado fue tomado el manual antes mencionado:

Zona Descripción
drop Todos los paquetes de red entrantes son descartados, sin respuesta. Solo se permiten conexiones de salida.
block Todas las conexiones de red entrantes son rechazadas con un mensaje icmp-host-prohibited (IPv4) o icmp6-adm-prohibited (IPv6). Solo son posibles conexiones iniciadas desde el propio sistema.
public Para usar en áreas públicas. No confías en los otros equipos de la red para que no dañen tu equipo. Solo se aceptan conexiones entrantes seleccionadas.
external Para redes externas con enmascaramiento activado, especialmente en routers. No confías en otros equipos de la red. Solo se aceptan conexiones entrantes seleccionadas.
dmz Para equipos en la zona desmilitarizada (DMZ), accesibles públicamente con acceso limitado a la red interna. Solo se aceptan conexiones entrantes seleccionadas.
work Para entornos de trabajo. Confías en la mayoría de los equipos de la red. Solo se aceptan conexiones entrantes seleccionadas.
home Para redes domésticas. Confías en la mayoría de los equipos de la red. Solo se aceptan conexiones entrantes seleccionadas.
internal Para redes internas. Confías en la mayoría de los equipos de la red. Solo se aceptan conexiones entrantes seleccionadas.
trusted Se aceptan todas las conexiones de red, sin restricciones.

Cómo obtener información acerca de la configuración actual de firewalld

Ejecutar:

firewall-cmd --list-all-zones
Si la salida es:
FirewallD is not running
Debe iniciar el servicio:
systemctl start firewalld
firewall-cmd --list-all-zones
Salida similar a:
block
target: %%REJECT%%
.... REDACTADO

dmz
target: default
... REDACTADO

drop
target: DROP
... REDACTADO

external
target: default
... REDACTADO

home
target: default
... REDACTADO

internal
target: default
... REDACTADO

nm-shared
target: ACCEPT
... REDACTADO

public (active)
    target: default
    icmp-block-inversion: no
    interfaces: eth0
    sources:
    services: cockpit dhcpv6-client ssh
    ports:
    protocols:
    forward: yes
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:

trusted
target: ACCEPT
... REDACTADO

work
target: default
... REDACTADO
Comúnmente los servicios que se permiten en una instalación por defecto son: dhcpv6-client y ssh.

Lo que permite que funcione el servicio de DHCP y se pueda gestionar el sistemas vía SSH.

Cómo permitir servicios

Puede consultar el listado de los nombres de los servicio en el archivo: /etc/services.

Para obtener el nombre del servicio que reconoce firewalld, puede ejecutar:

firewall-cmd --get-services |xargs -n1
````
Salida similar a:
RH-Satellite-6 RH-Satellite-6-capsule afp amanda-client amanda-k5-client amqp amqps apcupsd audit ausweisapp2 ... El resto de la salida ha sido omitido.
La definición de cada uno de estos servicios están definidos por defecto en: ```/usr/lib/firewalld/services/```.

```bash
ls -l /usr/lib/firewalld/services/

El servicio puede ser una combinación de puertos y protocolos, que hacen que sea mucho más fácil manejar los accesos.

Explorar el servicio nfs3:

cat /usr/lib/firewalld/services/http.xml
Salida:
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>NFS3</short>
  <description>The NFS3 protocol is used to share files. You will need to have the NFS tools installed and properly configure your NFS server for this option to be useful.</description>
  <port protocol="tcp" port="2049"/>
  <port protocol="udp" port="2049"/>
</service>
Notar que en service existe:

  • Elemento protocolo tcp y el número de puerto 2049
  • Elemento protocolo udp y el número de puerto 2049

Este es un servicio compuesto por 1 puerto y dos protocolos, pero se listan de forma independiente.

Explorar el servicio http:

cat /usr/lib/firewalld/services/http.xml
Salida:
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WWW (HTTP)</short>
  <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
  <port protocol="tcp" port="80"/>
</service>
Notar que en service existe: - Elemento protocolo tcp y el número de puerto 80

Este es un servicio compuesto por 1 puerto y 1 protocolo.

Para habilitar un servicio en una zona:

firewall-cmd --zone=public --add-service=http

Si deseas que el cambio sea permanente:

firewall-cmd --permanent --zone=public --add-service=http

Por ejemplo, para permitir SSH en la zona "drop":

firewall-cmd --permanent --zone=drop --add-service=ssh

Para aplicar los cambios permanentes ejecutar:

firewall-cmd --reload