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
FirewallD is not running
systemctl start firewalld
firewall-cmd --list-all-zones
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
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:
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
<?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>
service existe:
- Elemento protocolo
tcpy el número de puerto2049 - Elemento protocolo
udpy el número de puerto2049
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
<?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>
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