Búsqueda de sitios web

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


Firewalld (demonio 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.

Conceptos básicos sobre el firewall

Firewalld se compone de tres capas, que son:

  • capa central: responsable de manejar la configuración y los back-ends (enumerados a continuación).
  • Interfaz D-Bus: el medio principal para cambiar y crear la configuración del firewall.
  • backends: para interactuar con netfilter (el módulo nativo del kernel utilizado para el firewall). Incluyen iptables, ip6tables, ebtables, ipset, nft, linnftables; gerente de Redes; y módulos.

Gestiona las reglas de firewall mediante la implementación de zonas de red/firewall que definen el nivel de confianza de las conexiones o interfaces de red. Otras características de firewall admitidas incluyen servicios, configuración directa (utilizada para pasar directamente la sintaxis de iptables sin formato), IPSets y tipos ICMP.

firewalld admite dos tipos de entornos de configuración:

  • configuración de tiempo de ejecución que solo es efectiva hasta que se reinicia la máquina o se reinicia el servicio firewalld
  • Configuración permanente que se guarda y funciona de forma persistente.

La herramienta de línea de comando firewall-cmd se utiliza 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) firewall-config para interactuar con el demonio.

Además, firewalld ofrece una interfaz bien definida para que otros servicios o aplicaciones locales soliciten cambios en las reglas del firewall directamente, si se ejecutan con privilegios de root.

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

Comprensión de las funciones importantes del firewall

La característica central de firewalld son las zonas de red/firewall. Cualquier 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 según el nivel de confianza predeterminado de las zonas, desde no confiable hasta confiable: descartar, bloquear, pública, externa, dmz, trabajo, hogar, interna y confiable. Se definen en 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 en firewalld son los servicios. Un servicio se define mediante 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 utilizar la interfaz directa (o configuración) para obtener acceso directo al firewall. Pero, para aquellos que no tienen conocimientos de iptables, pueden emplear el rico lenguaje 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 usando 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 mediante el 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, usando la herramienta firewall-cmd (en caso de que no esté activa, este comando generará "no correr ").

sudo firewall-cmd --state

Si guarda algún cambio de forma permanente, puede recargar firewalld. Esto recargará las reglas del firewall y mantendrá la información del 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 utiliza para cada característica del firewall que no está explícitamente limitada a otra zona. Puede obtener la zona predeterminada configurada para conexiones e interfaces de red ejecutando.

sudo firewall-cmd --get-default-zone

Para configurar la zona predeterminada, por ejemplo, externa, use el siguiente comando. Tenga en cuenta que agregar la opción --permanent establece la configuración de forma permanente (o permite consultar 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 hogar, que se usa en áreas domésticas.

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

Solo se puede agregar una interfaz a una única 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 nuevamente a la zona pública, así:

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

Puedes utilizar 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 al punto anterior, si deseas encontrar más información sobre una zona en particular, es decir, todo lo agregado o habilitado en ella, utiliza 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 objetivo de una zona permanente. Un objetivo es uno de: predeterminado, ACEPTAR, SOLTAR, RECHAZAR. Puedes consultar 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 de 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, 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 utilizar un puerto o una combinación de puerto/protocolo, puede utilizar 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 predeterminada.

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 utilizar para desactivar 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

IP Masquerading (también conocido como IPMASQ o MASQ) es una NAT (traducción de direcciones de red).) mecanismo en redes 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 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 viniera 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 del enmascaramiento es realizar el reenvío de puertos. Suponiendo que desea realizar 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 mensajes 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, primero enumere todos los tipos de icmp admitidos.

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 utilizar la interfaz directa para pasar comandos de iptables sin formato

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

Importante: Sólo debe utilizar las opciones directas como último recurso cuando no sea posible utilizar las opciones habituales de firewall-cmd explicadas anteriormente.

A continuación se muestra un ejemplo de cómo pasar la regla iptables sin formato, usando el modificador --add-rules. Puedes 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 servicios en Linux.

Si no está familiarizado con la sintaxis de iptables, puede optar por el “lenguaje enriquecido” 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 utilizar lenguaje enriquecido en Firewalld

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

Amplía las características de la zona (servicio, puerto, bloque icmp, enmascaramiento y puerto directo) que hemos cubierto. Admite direcciones de origen y destino, registros, acciones y límites para registros y acciones.

El --add-rich-rule se utiliza para agregar reglas enriquecidas. Este ejemplo muestra cómo permitir nuevas conexiones IPv4 e IPv6 para el servicio http y registrar 1 por minuto mediante 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 característica también permite bloquear o permitir el tráfico desde una dirección IP específica. El siguiente ejemplo muestra cómo rechazar 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 pánico en Firewalld

El modo de pánico es un modo especial bajo firewalld donde todos los paquetes entrantes y salientes se descartan, y las conexiones activas caducan una vez activadas.
Puede habilitar este modo en situaciones de emergencia en las que exista una amenaza para su entorno de red.

Para consultar el modo de pánico, utilice 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 funciona usando el comando ping como se muestra. Debido a que el paquete se descarta, el nombre www.google.com no se puede resolver, de ahí el error que se muestra.

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

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

sudo firewall-cmd --panic-off

Cómo bloquear el firewall

Recuerde, mencionamos en los conceptos básicos sobre firewalld 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, especificándolas en una lista blanca de bloqueo.

Esta función está desactivada de forma predeterminada, puede habilitarla o deshabilitarla 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 editando el archivo de configuración principal, ya que es posible que el firewall-cmd no exista en la lista blanca de bloqueo cuando habilita el bloqueo.

sudo vim /etc/firewalld/firewalld.conf

Busque el parámetro Lockdown y cambie su valor de no (significa desactivado) a yes (significa activado).

Lockdown=yes

Para que esta configuración sea permanente, vuelva a cargar firewalld.

sudo firewall-cmd --reload
Resumen

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

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