Cómo instalar, configurar y usar Firewalld en CentOS y Ubuntu


Firewalld (daemon de firewall) es una alternativa al servicio iptables , para administrar dinámicamente el firewall de un sistema con soporte para zonas de red (o firewall) y proporciona una interfaz D-Bus para administrar configuraciones. Es fácil de usar y configurar, y ahora es la herramienta de administración de firewall predeterminada en RHEL/CentOS , Fedora y varias otras distribuciones de Linux.

En este artículo, analizaremos cómo configurar el firewall del sistema con firewalld e implementar el filtrado de paquetes básico en CentOS/RHEL 7 y Ubuntu .

Los fundamentos de Firewalld

Firewalld consta de tres capas, que son las siguientes:

  • core layer: responsible for handling the configuration and the back ends (listed below).
  • D-Bus interface: the primary means of changing and creating the firewall configuration.
  • backends: for interacting with netfilter (the native kernel module used for firewalling). They include iptables, ip6tables, ebtables, ipset, nft, linnftables; networkmanager; and modules.

Administra las reglas de firewall implementando zonas de red/firewall que definen el nivel de confianza de las conexiones o interfaces de red. Otras funciones de firewall compatibles incluyen servicios, configuración directa (utilizada para pasar directamente la sintaxis de iptables), IPSets y tipos ICMP.

Firewalld admite dos tipos de entornos de configuración:

  • runtime configuration which is only effective until the machine has been rebooted or the firewalld service has been restarted
  • permanent configuration which is saved and works persistently.

La herramienta de línea de comandos firewall-cmd se usa para administrar el tiempo de ejecución y la configuración permanente. Alternativamente, puede utilizar la herramienta de configuración de la interfaz gráfica de usuario (GUI) del firewall-config para interactuar con el demonio.

Además, firewalld ofrece una interfaz bien definida para que otros servicios o aplicaciones locales puedan solicitar cambios a las reglas del firewall directamente, si se ejecutan con privilegios de raíz.

El archivo de configuración global de firewalld se encuentra en /etc/firewalld/firewalld.conf y las funciones del firewall están configuradas en formato XML.

Entender las características importantes de Firewalld

La característica central de firewalld es la red/zonas de firewall. Cada otra característica está limitada a una zona. Una zona de firewall describe el nivel de confianza para una conexión, interfaz o enlace de dirección de origen.

La configuración predeterminada viene con una serie de zonas predefinidas ordenadas de acuerdo con el nivel de confianza predeterminado de las zonas de no confiable a la opción de caída: bloqueo, público, externo, dmz, trabajo, hogar, interno y confiable. Se definen en los archivos almacenados en el directorio /usr/lib/firewalld/zones .

Puede configurar o agregar sus zonas personalizadas usando el cliente CLI o simplemente crear o copiar un archivo de zona en /etc/firewalld/zones a partir de archivos existentes y editarlo.

Otro concepto importante bajo firewalld es servicios. Un servicio se define utilizando puertos y protocolos; estas definiciones representan un servicio de red determinado, como un servidor web o un servicio de acceso remoto. Los servicios se definen en archivos almacenados en el directorio /usr/lib/firewalld/services/ o /etc/firewalld/services/.

Si conoce los conceptos básicos de iptables/ip6tables/ebtables, también puede usar la interfaz directa (o configuración) para obtener acceso directo al firewall. Pero, para aquellos que no tienen conocimientos de iptables, puede emplear un lenguaje enriquecido para crear reglas de firewall más complejas para IPv4 e IPv6.

Cómo instalar el paquete Firewalld en Linux

En CentOS 7 , el paquete firewalld viene preinstalado y puede verificarlo utilizando el siguiente comando.

$ rpm -qa firewalld

En Ubuntu 16.04 y 18.04 , puede instalarlo usando el administrador de paquetes predeterminado como se muestra.

$ sudo apt install firewalld

Cómo administrar el servicio Firewalld en Linux

Firewalld es un servicio regular de systemd que se puede administrar a través del comando systemctl.

 
$ sudo systemctl start firewalld	#start the service for the mean time
$ sudo systemctl enable firewalld	#enable the service to auto-start at boot time
$ sudo systemctl status firewalld	#view service status

Después de iniciar el servicio firewalld , también puede verificar si el demonio se está ejecutando o no, utilizando la herramienta firewall-cmd (en caso de que no esté activo, este comando mostrará "no corriendo").

$ sudo firewall-cmd --state

Si por casualidad guarda cualquier cambio de forma permanente, puede volver a cargar firewalld. Esto volverá a cargar las reglas del firewall y mantendrá la información de estado. La configuración permanente actual se convertirá en una nueva configuración de tiempo de ejecución.

$ sudo firewall-cmd --reload

Cómo trabajar con zonas de firewall en Firewalld

Para obtener una lista de todas las zonas y servicios de firewall disponibles, ejecute estos comandos.

$ sudo firewall-cmd --get-zones
$ sudo firewall-cmd --get-services

La zona predeterminada es la zona que se usa para cada característica de firewall que no está explícitamente vinculada a otra zona. Puede obtener el conjunto de zonas predeterminado para conexiones de red e interfaces ejecutando.

$ sudo firewall-cmd --get-default-zone

Para establecer la zona predeterminada, por ejemplo, en externa, use el siguiente comando. Tenga en cuenta que al agregar la opción --permanent se establece la configuración de forma permanente (o permite la consulta de información desde el entorno de configuración permanente).

$ sudo firewall-cmd --set-default-zone=external
OR
$ sudo firewall-cmd --set-default-zone=external --permanent
$ sudo firewall-cmd --reload 

A continuación, veamos cómo agregar una interfaz a una zona. Este ejemplo muestra cómo agregar su adaptador de red inalámbrica ( wlp1s0 ) a la zona de inicio, que se usa en las áreas residenciales.

$ sudo firewall-cmd --zone=home --add-interface=wlp1s0

Una interfaz solo se puede agregar a una sola zona. Para moverlo a otra zona, use el interruptor --change-interface como se muestra, o elimínelo de la zona anterior usando el interruptor –remove-interface , luego agréguelo a la nueva zona.

Suponiendo que desea conectarse a una red WI-FI pública, debe mover su interfaz inalámbrica a la zona pública, de esta manera:

$ sudo firewall-cmd --zone=public --add-interface=wlp1s0
$ sudo firewall-cmd --zone=public --change-interface=wlp1s0

Puedes usar muchas zonas al mismo tiempo. Para obtener una lista de todas las zonas activas con las funciones habilitadas, como interfaces, servicios, puertos, protocolos, ejecute:

$ sudo firewall-cmd --get-active-zones

En relación con el punto anterior, si desea obtener más información sobre una zona en particular, es decir, todo lo que se agregó o habilitó en ella, use uno de estos comandos:

$ sudo firewall-cmd --zone=home --list-all
OR
$ sudo firewall-cmd --info-zone public

Otra opción útil es --get-target , que le muestra el destino de una zona permanente. Un objetivo es uno de: predeterminado, ACEPTAR, SALTAR, RECHAZAR. Puede comprobar el objetivo de varias zonas:

$ sudo firewall-cmd --permanent --zone=public --get-target  
$ sudo firewall-cmd --permanent --zone=block --get-target  
$ sudo firewall-cmd --permanent --zone=dmz --get-target  
$ sudo firewall-cmd --permanent --zone=external --get-target
$ sudo firewall-cmd --permanent --zone=drop --get-target

Cómo abrir y bloquear puertos en Firewalld

Para abrir un puerto (o combinación puerto/protocolo) en el firewall, simplemente agréguelo en una zona con la opción --add-port Si no especifica explícitamente la zona, se habilitará en la zona predeterminada.

El siguiente ejemplo muestra cómo agregar el puerto 80 y 443 para permitir el tráfico web entrante a través de HTTP y HTTPS Protocolos, respectivamente:

$ sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp

A continuación, vuelva a cargar firewalld y verifique las funciones habilitadas en la zona pública una vez más, debería poder ver los puertos recién agregados.

$ sudo firewall-cmd --reload
$ sudo firewall-cmd --info-zone public

Bloquear o cerrar un puerto en el firewall es igualmente fácil, simplemente elimínelo de una zona con la opción --remove-port . Por ejemplo, para cerrar los puertos 80 y 443 en la zona pública.

$ sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

En lugar de usar una combinación de puerto o puerto/protocolo, puede usar el nombre del servicio al que se asigna un puerto como se explica en la siguiente sección.

Cómo abrir y bloquear servicios en Firewalld

Para abrir un servicio en el firewall, habilítelo usando la opción --add-service . Si se omite la zona, se utilizará la zona por defecto.

El siguiente comando habilitará permanentemente el servicio http en la zona pública.

$ sudo firewall-cmd --zone=public --permanent --add-service=http 
$ sudo firewall-cmd --reload 

La opción --remove-service se puede usar para deshabilitar un servicio.

$ sudo firewall-cmd --zone=public --permanent --remove-service=http 
$ sudo firewall-cmd --reload 

Cómo habilitar y deshabilitar el enmascaramiento de IP usando Firewalld

Enmascaramiento de IP (también conocido como IPMASQ o MASQ ) es un NAT ( Traducción de direcciones de red ) mecanismo en la red de Linux que permite a sus hosts en una red, con direcciones IP privadas comunicarse con Internet utilizando la dirección IP pública asignada a su servidor de Linux (puerta de enlace IPMASQ).

Es un mapeo de uno a muchos. El tráfico de sus hosts invisibles aparecerá en otras computadoras en Internet como si procediera de su servidor Linux.

Puede habilitar el enmascaramiento de IP en una zona deseada, por ejemplo, la zona pública. Pero antes de hacer eso, primero verifique si el enmascaramiento está activo o no (un "no" significa que está deshabilitado y un "sí" significa lo contrario).

$ sudo firewall-cmd --zone=public --query-masquerade
$ sudo firewall-cmd --zone=public --add-masquerade

Un caso de uso típico para el enmascaramiento es realizar el reenvío de puertos. Suponiendo que desea SSH desde una máquina remota a un host en su red interna con la IP 10.20.1.3 , en la que el demonio sshd está escuchando en el puerto 5000 .

Puede reenviar todas las conexiones al puerto 22 de su servidor Linux al puerto deseado en su host de destino emitiendo:

$ sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

Para deshabilitar el enmascaramiento en una zona, use el interruptor --remove-masquerade .

$ sudo firewall-cmd --zone=public --remove-masquerade

Cómo habilitar y deshabilitar el mensaje IMCP en Firewalld

Los mensajes ICMP ( Protocolo de mensajes de control de Internet ) son solicitudes de información o respuestas a solicitudes de información o en condiciones de error.

Puede habilitar o deshabilitar los mensajes ICMP en el firewall, pero antes de eso, enumere primero todos los tipos de icmp compatibles.

$ sudo firewall-cmd --get-icmptypes

Para agregar o eliminar un tipo de bloque que desee.

$ sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
$ sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

Puede ver todos los tipos de icmp agregados en una zona usando el interruptor --list-icmp-blocks .

$ sudo firewall-cmd --zone=home --list-icmp-blocks

Cómo usar la interfaz directa para pasar los comandos iptables sin procesar

El firewall-cmd también proporciona opciones directas ( --direct ) para que usted obtenga un acceso más directo al firewall. Esto es útil para aquellos con conocimientos básicos de iptables.

Aquí hay un ejemplo de cómo pasar la regla de iptables sin formato, usando el interruptor --add-rules . Puede eliminar fácilmente estas reglas reemplazando --add-rule con --remove-rule :

$ sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

Para obtener más información sobre iptables , consulte esta guía: Cómo configurar un Firewall de Iptables para habilitar el acceso remoto a los servicios en Linux.

Si no está familiarizado con la sintaxis de iptables, puede optar por " rich language" de firewalld para crear reglas de firewall más complejas de una manera fácil de entender, como se explica a continuación.

Cómo usar lenguaje enriquecido en Firewalld

El lenguaje enriquecido (también conocido como reglas enriquecidas ) se usa para agregar reglas de firewall más complejas para IPv4 y IPv6 Sin el conocimiento de la sintaxis de iptables.

Amplía las características de la zona (servicio, puerto, icmp-block, masquerade y forward-port) que hemos cubierto. Admite direcciones de origen y destino, registro, acciones y límites para registros y acciones.

El --add-rich-rule se usa para agregar reglas enriquecidas. Este ejemplo muestra cómo permitir las nuevas conexiones IPv4 y IPv6 para el servicio http y el registro 1 por minuto mediante la auditoría:

$ sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

Para eliminar la regla agregada, reemplace la opción --add-rich-rule con --remove-rich-rule .

$ sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

Esta función también permite bloquear o permitir el tráfico de una dirección IP específica. El siguiente ejemplo muestra cómo rechazar las conexiones desde la IP 10.20.1.20 .

$ sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Cómo habilitar y deshabilitar el modo de pánico en Firewalld

Modo de pánico es un modo especial en firewalld donde se eliminan todos los paquetes entrantes y salientes, y las conexiones activas expirarán una vez que se activen.

Para consultar el modo de pánico, use la opción --query-panic .

$ sudo firewall-cmd --query-panic

Para habilitar el modo de pánico, use la opción --panic-on . Puede probar si está funcionando usando el comando ping como se muestra. Debido a que el paquete se descarta, el nombre www.google.com no se puede resolver, por lo que se muestra el error.

$ sudo firewall-cmd --panic-on
$ ping -c 2 www.google.com

Para deshabilitar el modo de pánico, use la opción --panic-off .

$ sudo firewall-cmd --panic-off

Cómo bloquear Firewalld

Recuerde, en los conceptos básicos sobre firewalld mencionamos que las aplicaciones o servicios locales pueden alterar la configuración del firewall si se ejecutan con privilegios de root. Puede controlar qué aplicaciones pueden solicitar cambios en el firewall, especificando luego en una lista blanca de bloqueo.

Esta función está desactivada de forma predeterminada, puede habilitarla o inhabilitarla con el interruptor --lockdown-on o --lockdown de forma receptiva.

$ sudo firewall-cmd --lockdown-on
OR
$ sudo firewall-cmd --lockdown-off

Tenga en cuenta que se recomienda habilitar o deshabilitar esta función al editar el archivo de configuración principal, ya que es posible que el firewall-cmd no exista en la lista blanca de bloqueo cuando habilite el bloqueo.

$ sudo vim /etc/firewalld/firewalld.conf

Busque el parámetro Bloqueo de seguridad y cambie su valor de no (significa apagado) a (significa encendido).

Lockdown=yes

Para hacer esta configuración permanente recarga firewalld.

$ sudo firewall-cmd --reload

Firewalld es un reemplazo fácil de usar para el servicio de iptables, que usa iptables como backend. En este artículo, mostramos cómo instalar el paquete firewalld, explicamos las características importantes de firewalld y discutimos cómo configurarlos en los entornos de tiempo de ejecución y configuración permanente.

Si tiene alguna pregunta o comentario, no dude en comunicarse con nosotros a través del formulario de comentarios a continuación. Para obtener más información, puede consultar la página de manual de firewalld (man firewalld) o la documentación de firewalld en el sitio web del proyecto.

Todos los derechos reservados © Linux-Console.net • 2019-2021