Introducción
Firewalld es a solución de gestión de cortafuegos disponible para muchas distribuciones de Linux. Sirve como interfaz para el sistema de filtrado de paquetes iptables proporcionado por el núcleo de Linux. En esta guía, aprenderá a configurar un cortafuegos para su servidor. También le mostraremos los aspectos básicos de la gestión del cortafuegos con la herramienta de administración firewall-cmd.
Conceptos básicos de Firewalld
FirewallD utiliza los conceptos de zonas y servicios, en lugar de las cadenas y reglas de iptables. Dependiendo de las zonas y servicios que configure, puede controlar qué tráfico se permite o no hacia y desde el sistema. FirewallD se puede configurar y gestionar mediante la utilidad de línea de comandos firewall-cmd.
Instalar y habilitar el cortafuegos para que se inicie en el arranque
En la mayoría de las distribuciones de Linux, firewallD ya está instalado. Sin embargo, si necesita instalarlo usted mismo, escriba la siguiente sintaxis:
|
1 |
sudo yum install firewalld |
Puede habilitar el servicio y reiniciar su servidor una vez que firewalld esté instalado:
|
1 2 |
sudo systemctl enable firewalld sudo reboot |
A continuación, reinicie su servidor. Su cortafuegos se habilitará cuando haya reiniciado correctamente el servidor. Después de eso, use el siguiente comando para verificar que el servicio se ha activado:
|
1 |
sudo firewall-cmd --state |

La salida muestra que la configuración predeterminada del cortafuegos está funcionando.
Comprobación de los valores predeterminados
Puede comprobar la zona seleccionada por el servidor utilizando este comando:
|
1 |
firewall-cmd --get-default-zone |

Verifique la zona activa escribiendo:
|
1 |
firewall-cmd --get-active-zones |

Imprima la configuración de la zona predeterminada para conocer las reglas asociadas al área pública utilizando esta sintaxis:
|
1 |
sudo firewall-cmd --list-all |

La salida indica que esta zona es tanto la zona predeterminada como la activa. También muestra que las interfaces eth0 y eth1 están asignadas a esta zona.
Comprobación de zonas alternativas
Además de las zonas predeterminadas y activas, existen otras zonas que puede explorar. Introduzca este comando para ver todas las zonas disponibles:
|
1 |
firewall-cmd --get-zones |

Compruebe la configuración particular asignada a una zona añadiendo el parámetro –zone= en el comando –list-all:
|
1 |
sudo firewall-cmd --zone=home --list-all |

Cambiar la zona de la interfaz
Puede cambiar fácilmente la zona de la interfaz utilizando la opción –change-interface combinada con la opción –change-interface. El siguiente comando asignará la interfaz eth1 al espacio de trabajo:
|
1 |
sudo firewall-cmd --zone=work --change-interface=eth1 |
Puede verificar los cambios escribiendo:
|
1 |
sudo firewall-cmd --get-active-zones |
Cambiar la zona predeterminada
Para cambiar la zona predeterminada, use –set-default-zone seguido del nombre de la zona que desea establecer como predeterminada. Por ejemplo, para cambiar la zona predeterminada para empezar, debe ejecutar el siguiente comando:
|
1 |
sudo firewall-cmd --set-default-zone=home |
A continuación, puede verificar los cambios con:
|
1 |
sudo firewall-cmd --get-default-zone |
Establecer reglas para sus aplicaciones
Repasemos los conceptos básicos necesarios para definir excepciones de cortafuegos para los servicios:
Añadir un servicio a sus zonas
La forma más sencilla es añadiendo los puertos o servicios que necesita a las zonas que está utilizando. Asimismo, puede utilizar la opción –get-services para ver todos los servicios disponibles:
|
1 |
firewall-cmd --get-services |

Puede activar el servicio para una zona con el parámetro –add-service =. La acción se dirige a la zona predeterminada o a cualquier zona definida por el parámetro –zone =. De forma predeterminada, solo se configura la sesión actual del cortafuegos. Puede establecer una configuración de cortafuegos permanente activando la bandera –permanent. Por ejemplo, si está ejecutando un servidor web que proporciona tráfico HTTP normal, puede permitir este tráfico para las interfaces en nuestra zona “public” para esta sesión ingresando:
|
1 |
sudo firewall-cmd --zone=public --add-service=http |
Puede omitir –zone = si desea cambiar la zona predeterminada. Puede comprobar el éxito de la operación con las operaciones –list-all o –list-services:
|
1 |
sudo firewall-cmd --zone=public --list-services |

Una vez que haya verificado que todo funciona como se espera, lo más probable es que desee cambiar las reglas permanentes del cortafuegos para que su servicio siga estando disponible después de un reinicio. Podemos realizar el cambio en nuestra zona “public” de forma permanente ingresando la sintaxis:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --add-service=http salida: success |
Puede comprobar si esto tuvo éxito agregando la bandera –permanent a la operación –list-services. Debe usar sudo para todas las operaciones permanentes:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --list-services salida: dhcpv6-client http ssh |
Su zona “public” ahora permite el tráfico HTTP en el puerto 80. Puede agregar esto a la sesión actual y al conjunto de reglas persistentes usando el comando a continuación:
|
1 2 3 |
sudo firewall-cmd --zone=public --add-service=https sudo firewall-cmd --zone=public --permanent --add-service=https |
Si no hay servicios que se adapten a sus necesidades, tiene dos excelentes opciones para manejar esta situación:
- Abrir un puerto para sus zonas
La forma más directa de agregar soporte para su aplicación en particular es abrir los puertos utilizados en cada zona. Es tan simple como designar un puerto o rango de puertos y el protocolo correspondiente para los puertos que necesita abrir. Por ejemplo, si su aplicación se ejecuta en el puerto 5000 y utiliza TCP, puede agregarla a la zona “public” para esta sesión con el parámetro –add-port =. Los protocolos pueden ser TCP o UDP:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --add-port=5000/tcp salida: success |
Para comprobar que la operación se ha realizado con éxito, utilice la operación –list-ports:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --list-ports Salida: 5000/tcp |
También puede especificar un rango para la interfaz en serie separando los puertos inicial y final del rango con un guion. Por ejemplo, si su aplicación utiliza los puertos UDP 4990 a 4999, puede abrirlos en “public” escribiendo:
|
1 |
sudo firewall-cmd --zone=public --add-port=4990-4999/udp |
Después de probar, probablemente querremos agregarlos al cortafuegos permanente. Puede hacerlo escribiendo lo siguiente:
|
1 2 3 |
sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp sudo firewall-cmd --zone=public --permanent --list-ports |

- Definir un servicio
Un servicio es una colección de puertos con un nombre y una descripción asociados. Los servicios son más fáciles de administrar que los puertos, pero requiere un poco de trabajo inicial. La forma más sencilla de comenzar es copiar un script existente (en / usr / lib / firewalld / services) al directorio /etc/firewalld/services. Por ejemplo, puede copiar la definición del servicio SSH para usarla en la definición del servicio “example” de la siguiente manera. El nombre del archivo menos el sufijo XML determina el nombre del servicio en la lista de servicios del cortafuegos:
|
1 |
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml |
En este punto, puede ajustar la definición en el archivo copiado:
|
1 |
sudo vi /etc/firewalld/services/example.xml |
Primero, el archivo contiene la definición de SSH que copió:
|
1 2 3 4 5 6 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Secure Shell (SSH) es un protocolo para iniciar sesión en y ejecutar comandos en máquinas remotas. Este proporciona comunicaciones seguras y cifradas. Si usted planea en acceder su máquina de forma remota vía SSH a través de una interfaz con cortafuegos, active esta opción. Necesita el the paquete -openssh-server instalado installed para que esta opción sea be útil.</description> <port protocol="tcp" port="22"/> </service> |
La mayor parte de esta definición consiste en metadatos. Debe cambiar el nombre corto del servicio en las etiquetas <short>. Este es un nombre de servicio legible. Imagine que para nuestro servicio “example”, tenemos que abrir el puerto 7777 para TCP y el 8888 para UDP. Puede cambiar la definición existente ingresando al modo INSERTAR presionando i:
|
1 2 3 4 5 6 7 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>Servicio de Ejemplo</short> <description>Este es solo un servicio de ejemplo. Este probablemente no debería't ser usado en un real sistema.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/> </service> |
A continuación, presione ESC y escriba: x para guardar y cerrar el archivo. Luego, escriba el comando a continuación para reiniciar su cortafuegos a fin de tener acceso a su nuevo servicio;
|
1 |
sudo firewall-cmd --reload |
Después de eso, use el comando a continuación para obtener una lista de los servicios disponibles:
|
1 |
firewall-cmd --get-services |

Este servicio ya está disponible en su zona.
Creación de sus zonas
Si bien es probable que las zonas predefinidas sean suficientes para la mayoría de los usuarios, puede ser útil definir sus propias zonas que describan su función de manera más completa.
Al agregar una zona, agréguela a la configuración permanente de su cortafuegos. Luego puede recargar para aplicar la configuración a su sesión. Por ejemplo, puede crear las dos zonas analizadas anteriormente escribiendo:
|
1 2 |
sudo firewall-cmd --permanent --new-zone=publicweb sudo firewall-cmd --permanent --new-zone=privateDNS |
Puede confirmar que están presentes en su configuración permanente usando este comando:
|
1 |
sudo firewall-cmd --permanent --get-zones |

Recargue el cortafuegos para incorporar estas nuevas zonas a la configuración activa:
|
1 2 3 4 5 |
sudo firewall-cmd --reload firewall-cmd --get-zones salida: block dmz drop external home internal privateDNS public publicweb trusted work |
Ahora, puede asignar los servicios y puertos adecuados a sus zonas. Por ejemplo, para la zona “publicweb” es posible que desee agregar los servicios SSH, HTTP y HTTPS:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --add-service=ssh sudo firewall-cmd --zone=publicweb --add-service=http sudo firewall-cmd --zone=publicweb --add-service=https |

Además, puede agregar el servicio DNS a su zona “privateDNS” usando este comando:
|
1 2 |
sudo firewall-cmd --zone=privateDNS --add-service=dns sudo firewall-cmd --zone=privateDNS --list-all |

A continuación, puede cambiar sus interfaces a estas nuevas zonas para probarlas:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --change-interface=eth0 sudo firewall-cmd --zone=privateDNS --change-interface=eth1 |
Pruebe la configuración para ver si funciona. Si estos valores le funcionan, debe agregar las mismas reglas a la configuración permanente. Puede hacerlo volviendo a aplicar las reglas con el indicador —permanent:
|
1 2 3 4 5 6 7 |
sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh sudo firewall-cmd --zone=publicweb --permanent --add-service=http sudo firewall-cmd --zone=publicweb --permanent --add-service=https sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns |
Después de aplicar estas reglas de forma permanente, puede reiniciar su red y recargar el servicio de firewall:
|
1 2 3 |
sudo systemctl restart network sudo systemctl reload firewalld |
Compruebe que las zonas se hayan asignado correctamente:
|
1 |
firewall-cmd --get-active-zones |

Además, asegúrese de que ambas zonas tengan el servicio correcto:
|
1 2 3 4 |
sudo firewall-cmd --zone=publicweb --list-services salida: http https ssh |
|
1 2 3 4 5 |
sudo firewall-cmd --zone=privateDNS --list-services salida: dns |
Si desea establecer una de sus zonas como la predeterminada para otras interfaces, debe configurar este comportamiento con el parámetro –set-default-zone= usando este comando:
|
1 |
sudo firewall-cmd --set-default-zone=publicweb |
Conclusión
En este punto, ha creado sus propias zonas con éxito. Debería tener una comprensión básica de la administración del servicio firewalld en su sistema CentOS para el uso diario. Tener un buen conocimiento del servicio firewalld le permite aprovechar al máximo su potencia y flexibilidad.
¡Feliz computación!


Comentarios
Aún no hay comentarios. Sea el primero.