Rocky Linux / Administrar zonas, servicios y puertos con firewalld

En Rocky Linux, firewalld permite gestionar zonas, servicios y puertos mediante firewall-cmd. Antes de modificar un servidor remoto, identifique la zona activa, conserve la configuración y prepare acceso por consola. Pruebe los cambios temporales y una conexión SSH nueva antes de decidir qué reglas guardar.

Verificar el estado de firewalld y las zonas activas

sudo firewall-cmd --state
sudo systemctl status firewalld
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --get-default-zone

Una zona agrupa reglas y un nivel de confianza que se asignan a interfaces o direcciones de origen. Si omite --zone, se consulta o modifica la zona predeterminada, que puede no ser la de la conexión que investiga. Todos los bloques que muestran public son ejemplos: sustitúyalo por la zona verificada y ejecute solo los cambios que necesite. Conserve la salida de las reglas temporales y permanentes antes de modificarlas.

Los conceptos y comandos básicos de Rocky Linux se pueden consultar en la guía oficial de firewalld de Rocky Linux.

Iniciar y ejecutar automáticamente el servicio de cortafuegos

sudo systemctl enable --now firewalld

Verifique el estado.

systemctl is-enabled firewalld
systemctl is-active firewalld

Iniciar firewalld cuando estaba detenido también cambia la política efectiva: antes de enable --now, revise sus reglas permanentes y asegure acceso por consola. En producción, permita únicamente los servicios y orígenes necesarios. Los grupos de seguridad de la nube y las listas de control de acceso (ACL) de red pueden imponer restricciones adicionales.

Diferencia entre configuración en tiempo de ejecución y configuración permanente

Configuración Momento de aplicación Características
Tiempo de ejecución Inmediatamente después de ejecutar el comando Puede desaparecer al reiniciar, reiniciar el sistema o recargar, por lo que es adecuado para pruebas seguras.
Permanente --permanent Después de registrar, recargar Se mantiene incluso después de reiniciar, pero muchos comandos no se reflejan inmediatamente en tiempo de ejecución.

Puede añadir una regla temporal y probarla antes de conservarla. El bloque siguiente enseña a guardar la configuración temporal completa: --runtime-to-permanent sobrescribe la permanente con el estado activo de todas las zonas, incluidos otros cambios temporales. Úselo solo después de revisar ese conjunto. Para guardar únicamente HTTP en la zona del ejemplo, puede repetir sudo firewall-cmd --permanent --zone=public --add-service=http una vez verificada la regla temporal, en lugar de guardar todo.

sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --zone=public --query-service=http
sudo firewall-cmd --runtime-to-permanent

Por el contrario, si se cambió a --permanent, debe revisarse y recargarse para reflejarse en tiempo de ejecución.

sudo firewall-cmd --reload

Permitir y eliminar servicios

Verificar los servicios definidos

firewall-cmd --get-services
firewall-cmd --info-service=http

Los servicios definidos en firewalld, como HTTP, HTTPS, SSH, es más claro permitirlos por nombre de servicio que por puertos individuales.

Permitir servicios en tiempo de ejecución

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

También se verifica si el servicio realmente está escuchando en el puerto correspondiente.

ss -lntup

Eliminar servicios permitidos

sudo firewall-cmd --zone=public --remove-service=http

Si está realizando administración SSH remota, asegúrese de tener medios de recuperación de consola y otras reglas permitidas antes de eliminar el servicio SSH.

Administrar puertos personalizados

Permitir puertos TCP o UDP

sudo firewall-cmd --zone=public --add-port=8443/tcp
sudo firewall-cmd --zone=public --add-port=5000/udp

TCP y UDP son reglas separadas. Verifique el protocolo y el puerto reales en la documentación de la aplicación y solo abra los necesarios.

Permitir rangos

sudo firewall-cmd --zone=public --add-port=6000-6010/tcp

Antes de abrir un rango amplio, confirme el rango realmente necesario para la aplicación y, si es posible, limite también las direcciones de origen.

Eliminar puerto y verificar

sudo firewall-cmd --zone=public --remove-port=8443/tcp
sudo firewall-cmd --zone=public --list-ports

Ver reglas actuales

sudo firewall-cmd --zone=public --list-all
sudo firewall-cmd --list-all-zones
sudo firewall-cmd --permanent --zone=public --list-all

Si la salida en tiempo de ejecución y la salida de --permanent son diferentes, el funcionamiento después de la siguiente recarga o reinicio puede variar. Compare ambas configuraciones antes de completar los cambios.

Permitir solo ciertas direcciones de origen

Restringir el origen de SSH mediante reglas 'rich rule'

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.0.2.10/32" service name="ssh" accept'

192.0.2.10 es una dirección reservada para documentación. Sustitúyala por la dirección de origen que realmente ve el servidor para la conexión administrativa, teniendo en cuenta NAT, VPN o saltos intermedios. La regla mostrada solo cubre IPv4; revise también el acceso por IPv6 y otras zonas si se utiliza.

Probar antes de eliminar la autorización general de SSH

Pruebe una conexión SSH nueva desde el origen autorizado y compruebe el acceso de recuperación por consola antes de retirar la autorización general. Revise también puertos abiertos explícitamente, otras reglas y zonas: una regla restringida no anula otra que ya permite acceso más amplio. Mantenga la sesión existente mientras confirma la nueva política y conserve solo los cambios verificados.

sudo firewall-cmd --zone=public --list-rich-rules
sudo firewall-cmd --zone=public --remove-service=ssh

En entornos donde la IP del administrador cambia dinámicamente, puede quedar bloqueado debido a la restricción de origen. Considere usar IP fija, VPN o red de gestión dedicada.

Conectar interfaces de red con zonas

nmcli connection show --active
firewall-cmd --get-active-zones

Al especificar la zona del perfil de conexión de NetworkManager, se puede gestionar de manera consistente la conexión de red y la zona de firewalld.

sudo nmcli connection modify 'System eth0' connection.zone public
sudo nmcli connection up 'System eth0'

El nombre de la conexión varía según el entorno. Al volver a activar un perfil de red remoto, la conexión puede interrumpirse, por lo que se recomienda asegurarse de tener acceso a la consola y aplicarlo durante el tiempo de mantenimiento.

Orden de verificación cuando surgen problemas

  1. Verifique el estado del servicio con systemctl is-active firewalld.
  2. Confirme la zona a la que pertenece la interfaz con firewall-cmd --get-active-zones.
  3. Compare los resultados de --list-all entre la configuración en tiempo de ejecución y la configuración permanente.
  4. Verifique si la aplicación recibe en la dirección y el puerto reales con ss -lntup.
  5. Revise los grupos de seguridad de la nube, las ACL del enrutador y las reglas de NAT.
  6. Verifique si SELinux está bloqueando y revise los registros de la aplicación.

Incluso si abre el puerto en el cortafuegos, no se puede conectar desde el exterior si el programa no se está ejecutando o si está vinculado solo a la dirección de loopback.

Preguntas frecuentes

No se conecta inmediatamente aunque se haya agregado --permanent.

La configuración permanente normalmente se refleja en el tiempo de ejecución después de recargar. Si necesita proteger la conexión actual, utilice primero una regla de tiempo de ejecución y luego guárdela.

Se abrió el puerto, pero no se puede acceder desde el exterior.

Debe verificar conjuntamente la zona activa, la dirección de recepción del servicio, el cortafuegos de la nube, NAT y SELinux. firewalld es solo una capa en la ruta de comunicación.

¿Cuál es mejor, usar servicio o puerto?

Si hay un servicio estándar definido, el nombre del servicio es más fácil de leer. Para puertos personalizados o aplicaciones separadas, use reglas de puerto especificando el protocolo.

¿Se puede detener firewalld?

Incluso para verificar problemas, detener completamente el firewall en un servidor en operación es riesgoso. Revise los registros y las reglas actuales y ajuste temporalmente solo el alcance necesario.