Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Firewalld


Entendiendo Firewalld: Tu Guardián en Linux

Firewalld es el demonio de firewall por defecto en distribuciones como Fedora, AlmaLinux, CentOS y RHEL. A diferencia de su predecesor, iptables (que también está por debajo, pero firewalld es una capa de abstracción superior), firewalld utiliza un concepto de zonas para gestionar las reglas de firewall, lo que lo hace más fácil de usar y más dinámico.


El Concepto de Zonas en Firewalld

Imagina tu red dividida en diferentes áreas de "confianza". Cada una de estas áreas es una zona, y a cada zona se le asigna un nivel de confianza y un conjunto de reglas que definen qué tipo de tráfico se permite o se bloquea. Las interfaces de red (Ethernet, Wi-Fi) o las direcciones IP de origen se asignan a estas zonas.

Cuando un paquete de red llega a tu sistema, firewalld intenta asignarlo a una zona. Una vez que el paquete está en una zona, se aplican las reglas de esa zona para decidir si se permite, se rechaza o se descarta.

Zonas Predefinidas Comunes:

Firewalld viene con varias zonas predefinidas, cada una con un nivel de confianza y reglas por defecto:

  • public: La zona por defecto para redes públicas. No confías en otros ordenadores en la red. Solo se aceptan las conexiones entrantes explícitamente permitidas. Es un buen punto de partida para servidores.
  • home: Para redes domésticas. Confías la mayoría de los otros ordenadores en la red.
  • work: Para redes de trabajo. Confías la mayoría de los otros ordenadores.
  • internal: Para redes internas. Mayor nivel de confianza que home o work.
  • trusted: La zona de mayor confianza. Todas las conexiones de red son aceptadas. ¡Úsala con precaución!
  • dmz (Demilitarized Zone): Para servidores que son públicos pero con acceso limitado a tu red interna.
  • drop: Cualquier paquete entrante es descartado sin ninguna respuesta. Solo son posibles las conexiones salientes. Es la más restrictiva.
  • block: Rechaza cualquier paquete entrante con un mensaje de "host prohibido".
  • external: Usada para redes externas, a menudo con enmascaramiento (NAT) habilitado, típico de routers.

Las interfaces de red se asignan a una zona. Por defecto, tu interfaz de red principal a menudo se asigna a la zona public.


Funcionamiento Básico de firewalld

  • firewall-cmd: Esta es la herramienta de línea de comandos principal para interactuar con firewalld.
  • --permanent: Las reglas que añades se pueden aplicar de forma temporal (solo hasta el siguiente reinicio o recarga del firewall) o de forma permanente. Para que una regla persista después de un reinicio, debes usar la opción --permanent.
  • --reload: Después de añadir o quitar reglas con --permanent, necesitas recargar el firewall para que los cambios permanentes se apliquen al firewall en ejecución. Si no usas --permanent, las reglas se aplican inmediatamente pero se pierden.

Comandos Clave de firewalld

1. Ver Reglas Actuales

Para ver las reglas activas en una zona específica (o en la zona por defecto si no especificas una):

sudo firewall-cmd --list-all --zone=public
  • Esto mostrará el estado de la zona public: servicios permitidos, puertos abiertos, reglas ricas, etc.
  • Si no especificas --zone=public, mostrará las reglas de la zona por defecto (que a menudo es public).

Para ver todas las zonas y sus configuraciones:

sudo firewall-cmd --list-all-zones

Para ver qué interfaces están asignadas a qué zonas:

sudo firewall-cmd --get-active-zones

2. Añadir Reglas (Permitir Tráfico)

Para permitir tráfico entrante a un puerto específico en una zona:

sudo firewall-cmd --permanent --add-port=PUERTO/protocolo --zone=zona_deseada
sudo firewall-cmd --reload
  • PUERTO: El número del puerto (ej., 18089).
  • protocolo: tcp o udp.
  • zona_deseada: La zona donde quieres aplicar la regla (ej., public).
  • Ejemplo para Monero RPC: sudo firewall-cmd --permanent --add-port=18089/tcp --zone=public

Para permitir tráfico entrante para un servicio conocido (SSH, HTTP, HTTPS, etc.) en una zona:

sudo firewall-cmd --permanent --add-service=nombre_servicio --zone=zona_deseada
sudo firewall-cmd --reload
  • nombre_servicio: El nombre del servicio (ej., ssh, http). Firewalld tiene definiciones preestablecidas para los puertos y protocolos de muchos servicios comunes.

Para permitir tráfico de una fuente específica (dirección IP o rango) a una zona (esto es más restrictivo y seguro):

sudo firewall-cmd --permanent --add-source=IP_o_rango_CIDR --zone=zona_deseada
sudo firewall-cmd --reload
  • IP_o_rango_CIDR: Por ejemplo, 192.168.1.0/24 para toda tu subred local.
  • Ejemplo para Monero con fuente específica:
    sudo firewall-cmd --permanent --add-source=192.168.1.0/24 --add-port=18089/tcp --zone=public
    sudo firewall-cmd --reload
    
    (Reemplaza 192.168.1.0/24 con el rango de tu red local si es diferente).

3. Eliminar Reglas

Para quitar una regla de puerto:

sudo firewall-cmd --permanent --remove-port=PUERTO/protocolo --zone=zona_deseada
sudo firewall-cmd --reload

Para quitar una regla de servicio:

sudo firewall-cmd --permanent --remove-service=nombre_servicio --zone=zona_deseada
sudo firewall-cmd --reload

Para quitar una regla de fuente:

sudo firewall-cmd --permanent --remove-source=IP_o_rango_CIDR --zone=zona_deseada
sudo firewall-cmd --reload

4. Recargar el Firewall

Siempre que hagas cambios permanentes, ¡no olvides recargar!

sudo firewall-cmd --reload

Esto aplica los cambios permanentes al firewall en ejecución sin interrumpir las conexiones existentes.


¿Qué significa --zone=public?

Cuando usas --zone=public, estás indicando que la regla que estás añadiendo o modificando debe aplicarse a la zona public.

En el contexto de tu VM de AlmaLinux:

  • Si la interfaz de red de tu VM está asignada a la zona public (que es lo más común por defecto, especialmente si la VM está en modo puente y no hay otras zonas configuradas explícitamente), entonces al añadir una regla a la zona public, estás permitiendo que el tráfico del puerto 18089/tcp llegue a esa VM desde tu red local (o cualquier red asociada a la zona public).
  • La zona public se considera "no confiable" por defecto, lo que significa que a menos que una conexión esté explícitamente permitida, será bloqueada. Al añadir el puerto 18089 a esta zona, estás haciendo esa excepción específica.