Firewalld es una herramienta de administración de firewall que actúa como un front-end para el marco netfilter del kernel de Linux. Es un potente cortafuegos basado en zonas que supervisa el tráfico de la red y aplica un conjunto de reglas definidas para controlar el tráfico entrante / saliente.
Firewalld está escrito en Python y es parte de systemd. Es compatible con redes IPv4 e IPv6.
El principal beneficio es que los cambios se pueden realizar sin reiniciar el servicio y con la interfaz D-Bus, las configuraciones se pueden administrar fácilmente.
En este tutorial aprendemos a configurar Firewalld en Linux y sus conceptos básicos.
Conceptos básicos
Firewalld consta de dos capas nombradas como centro y D-Bus capa. La capa central maneja la configuración y los backends. La capa D-Bus es responsable de alterar y crear la configuración del firewall.
Soportes de Firewalld zonas y servicios. Las zonas son un conjunto predefinido de reglas que gobiernan qué tipo de tráfico debe permitirse al servidor en función del nivel de confianza de las interfaces de red conectadas al servidor. Esto implica que puede asignar una interfaz de red a una zona. Servicios permite configurar puertos, módulos y direcciones de destino.
firewall-cmd es la herramienta de línea de comandos que se utiliza para administrar el tiempo de ejecución y las configuraciones permanentes.
Zonas de Firewalld predefinidas
El zonas predeterminadas se guardan en el directorio llamado / usr / lib / firewalld / zones /. Estas son algunas de las zonas predefinidas que proporciona Firewalld de acuerdo con varios niveles de confianza, desde confiables hasta no confiables.
De confianza: Esta zona acepta todas las conexiones y confía en todos los equipos de la red.
Público: Empleado en áreas públicas no confiables. Hay una confianza mínima en otras computadoras, pero aún se pueden permitir las conexiones entrantes seleccionadas.
soltar: Todo el tráfico entrante o entrante se descarta. Solo se permite el tráfico saliente.
Externo: Implementado en redes externas cuando su sistema actúa como un enrutador con el enmascaramiento NAT activado. Solo se permiten las conexiones entrantes seleccionadas.
Interno: Implementado solo en redes internas con su sistema actuando como un enrutador con el enmascaramiento NAT habilitado. Otras PC son confiables y solo se otorga acceso a unas pocas conexiones entrantes seleccionadas.
cuadra: La zona de bloqueo rechaza todas las conexiones entrantes con un mensaje icmp-host-prohibido para IPv4 e icmp6-adm-prohibido para IPv6n. Aquí, solo se permiten las conexiones salientes.
dmz: Se utiliza para sistemas o PC en una zona desmilitarizada (DMZ) con acceso limitado al resto de los sistemas de su red informática. De forma predeterminada, solo permite el tráfico SSH.
trabajo: La zona de trabajo está Implementada para sistemas de trabajo o PC. Existe un nivel general de confianza para todas las demás computadoras de la red y solo se permiten las conexiones entrantes seleccionadas.
casa: Los sistemas domésticos utilizan la zona de inicio y, al igual que la zona de trabajo, todas las PC son generalmente confiables y solo se permiten las conexiones entrantes seleccionadas.
Tiempo de ejecución del cortafuegos y configuración permanente
La configuración en ejecución real es la configuración en tiempo de ejecución. Es transitorio y no sobrevive a un reinicio. Tras un reinicio del servidor, Firewalld carga la configuración permanente, que luego se transforma en configuración de tiempo de ejecución.
Cuando se realizan cambios en la configuración de Firewalld, se aplican directamente a la configuración del tiempo de ejecución. Para persistir los cambios, invoque el --permanent
opción.
Instalación y habilitación de Firewalld
Firewalld está disponible de forma predeterminada en Red Hat, CentOS, Fedora, Suse Linux. En Debian / Ubuntu está disponible en el repositorio de paquetes.
Redhat / CentOS
Si se encuentra que firewalld no está instalado, instálelo ejecutando el siguiente comando:
$ sudo yum install firewalld
Debian / Ubuntu
$ sudo apt install firewalld
Una vez instalado, puede verificar el estado:
$ sudo systemctl status firewalld
La salida indicará activo (en ejecución) si Firewalld está en funcionamiento.
Alternativamente, puede confirmar el estado de ejecución mediante:
$ sudo firewall-cmd state
Una vez instalado, inicie y habilite Firewalld ejecutando los siguientes comandos:
$ sudo systemctl start firewalld
Habilite Firewalld en el arranque del sistema, escriba:
$ sudo systemctl enable firewalld
Para detener temporalmente Firewalld, escriba:
$ sudo systemctl stop firewalld
Para evitar que Firewalld se inicie en el arranque, escriba:
$ sudo systemctl disable firewalld
Manejo de zonas de Firewalld
Veamos cómo manejar las zonas de Firewalld.
1. De forma predeterminada, la zona pública es la zona Firewalld predeterminada. Para confirmar esto, ejecute el comando:
$ sudo firewall-cmd --get-default-zone
Producción:
public
2. Para obtener una descripción general de todas las zonas, ejecute el comando:
$ sudo firewall-cmd --get-zones
Esto mostrará una lista de todas las zonas.
Producción:
block dmz drop external home internal public trusted work
3. Las interfaces de red, de forma predeterminada, suelen estar conectadas a la zona predeterminada. Para verificar las zonas en uso por sus interfaces de red, ejecute el siguiente comando.
$ sudo firewall-cmd --get-active-zones
En este caso, tengo una interfaz de red activa: enp0s3
– que se asigna a la zona predeterminada.
4. Para visualizar toda la configuración de una zona,
Para ver la configuración de la zona pública, escriba:
$ sudo firewall-cmd --zone=public --list-all

Para mostrar una descripción general de la zona predeterminada, escriba:
$ sudo firewall-cmd --list-all
5. Para enumerar la configuración de todas las zonas de Firewalld, escriba:
$ sudo firewall-cmd --list-all-zones

Cambiar la zona predeterminada
La zona predeterminada asignada a todas las interfaces de red es public
. Puede configurarlo en una zona diferente.
6. Para cambiar la zona predeterminada a otra zona, escriba:
$ sudo firewall-cmd --set-default-zone=trusted
Aquí, hemos cambiado la zona predeterminada a trusted
zona.
Cambiar la zona asignada a una interfaz
Para cambiar la zona de una interfaz de red a otra, utilice el --zone
opción.
7. Para cambiar la zona de la interfaz enp0s3
a trusted
, escribe:
$ sudo firewall-cmd --zone=home --change-interface=enp0s3
Servicios de Firewalld
Los archivos de servicio de Firewalld se encuentran en el /usr/lib/firewalld/services
ruta en formato de archivo xml. Hay cientos de ellos y usa el comando ls para listar.
$ ls /usr/lib/firewalld/services
Para example el archivo de servicio MongoDB quisiera:
$ sudo vim /usr/lib/firewalld/services/mongodb.xml

De forma predeterminada, los servicios dhcp-client y ssh están permitidos en el firewall. En la salida, observe que también se ha permitido https.
Para crear un nuevo servicio de Firewalld, simplemente copie un archivo de servicio existente y proporcione un nuevo nombre de servicio. Luego defina ese archivo xml.
Una de las funcionalidades más utilizadas del firewall es abrir puertos y permitir el paso al servidor. Firewalld tiene servicios predefinidos.
8. Para mostrar todos los servicios, escriba:
$ sudo firewall-cmd --get-services
9. Permitir el tráfico entrante
Para permitir el tráfico entrante para el servicio mssql, escriba:
$ sudo firewall-cmd --zone=public --add-service=mssql
10. Para verificar los servicios agregados:
$ sudo firewall-cmd --zone=public --list-services
Producción:
dhcpv6-client mssql ssh
11. Para persistir el cambio incluso después de un reinicio, invoque el --permanent
opción de la siguiente manera.
$ sudo firewall-cmd --zone=public --add-service=https --permanent
12. Para que los cambios surtan efecto, vuelva a cargar el cortafuegos.
$ sudo firewall-cmd --reload
13. Para eliminar un servicio del firewall, utilice el --remove
opción
$ sudo firewall-cmd --zone=public --remove-service=https --permanent

El comando anterior elimina los servicios HTTPS de forma permanente de la zona pública.
14. Para abrir el puerto en el Firewalld
Por ejemplo, el servicio Xrdp, que permite a un usuario conectarse de forma remota al escritorio de un sistema remoto, está asociado con el puerto TCP 3389.
Para abrir el puerto en zona pública, escriba:
$ sudo firewall-cmd --zone=public --add-port=3389/tcp

No olvide volver a cargar Firewalld para que los cambios entren en vigor.
Reenvío de puertos con Firewalld
15. Para habilitar el enmascaramiento para la zona pública
Para reenviar el tráfico de un puerto al siguiente o una dirección, primero active o habilite el enmascaramiento para la zona preferida invocando el --add-masquerade
opción.
$ sudo firewall-cmd --zone=public --add-masquerade
dieciséis. Reenvío de tráfico de un puerto a otro en el mismo servidor
Configurar Firewalld de tal manera que el tráfico entrante que llega a un puerto determinado se redirija a otro puerto en el mismo servidor.
Para reenviar el tráfico que llega al puerto 80 al puerto 6000 en la zona pública, escriba:
$ sudo firewall-cmd --zone=public--add-forward-port=port=80:proto=tcp:toport=6000
17. Reenviar tráfico a un puerto diferente en otro servidor
Alternativamente, el tráfico que pasa de un puerto se puede redirigir a un puerto diferente ubicado en un servidor diferente.
Para pasar el tráfico a través del puerto 80 se redirige al puerto 8080 en otro servidor cuya dirección IP es 192.168.10.10, escriba:
$ sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.10.10
Establecer reglas para administrar el tráfico entrante
Para permitir el tráfico entrante del uso de una fuente específica --add-source
opción.
Para permitir todo el tráfico entrante de 192.168.10.0/24 en la zona de confianza, escriba:
$ sudo firewall-cmd --zone=trusted --add-source=192.168.10.0/24 --permanent
Crea una nueva zona
Puede crear sus propias zonas y agregar un conjunto de reglas. En la mayoría de los casos, las zonas predefinidas son suficientes. Creemos una nueva zona para un servidor web y permitamos servicios / interfaz específicos.
Cree una nueva zona denominada zona web:
$ sudo firewall-cmd --permanent --new-zone=webzone
Verifique enumerando las zonas permanentes, escriba:
$ sudo firewall-cmd --permanent --get-zones
Producción:
block dmz drop external home internal public trusted webzone work
Para ser efectivo en la configuración activa, escriba:
$ sudo firewall-cmd --reload
Para abrir el servicio ssh, http, https y asignar la interfaz en la zona web, ejecute los siguientes comandos:
$ sudo firewall-cmd --zone=webzone --add-service=ssh
$ sudo firewall-cmd --zone=webzone --add-service=http
$ sudo firewall-cmd --zone=webzone --add-service=https
$ sudo firewall-cmd --zone=webzone --add-interface=eth0
Para mostrar la configuración de webzone, escriba:
$ sudo firewall-cmd --zone=webzone --list-all
Producción:
webzone
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Reglas ricas
La regla rica ayuda a establecer reglas de firewall más complejas.
Por ejemplo, para habilitar el acceso para la dirección IP de la dirección de origen y el puerto específico, escriba:
$ sudo firewall-cmd --add-rich-rule="rule family="ipv4" source address="23.92.31.51/32" port port=21 protocol="tcp" accept"
Resumen
En este tutorial aprendimos cómo configurar Firewalld en Linux y sus conceptos básicos.
Si tiene algún comentario o sugerencia, comente a continuación.