Cómo configurar el firewall con FirewallD

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.

Enumere las zonas de firewalld asignadas a una interfaz

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

Archivo de servicio xml de MongoDBArchivo de servicio xml de MongoDB

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

Eliminar un servicio de la configuración de FirewalldEliminar un servicio de la configuración de Firewalld

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

Permitir un puerto en la configuración de FirewalldAbrir un puerto

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.