La seguridad es una de las acciones que siempre debe estar presente no solo en las organizaciones sino también a nivel personal cuando trabajamos con algún sistema operativo, y es que, aunque existen diversas herramientas para aumentar la seguridad y la privacidad durante el uso de un sistema, el propio sistema operativo incluye una función extra como lo es el firewall.
La función esencial de un firewall es crear y administrar reglas de entrada y de salida con el fin de proteger todo el proceso de conexión a la red. Así, se impide que paquetes sospechosos o no fiables entren a nuestro equipo y causen algún tipo de daño como la inserción de malware o el secuestro de información.
Cuando trabajamos con sistemas Linux, uno de los más seguros, disponemos de utilidades de código abierto que nos ayudan a que este proceso de protección sea mucho mas completo y una de estas utilidades es Firewalld. Solvetic explicará que es Firewalld y como podemos instalarlo y usarlo en dos de las distribuciones mas usadas actualmente como lo son CentOS y Ubuntu.
Firewalld nos ofrece una interfaz para servicios o aplicaciones con el fin de agregar las reglas de firewall directamente facilitando así las tareas de control. Una de las principales ventajas de usar Firewalld es que todos los cambios a realizar, se pueden hacer en tiempo real sobre el entorno de ejecución sin que sea obligatorio tener que reiniciar el servicio o Daemon como sucede con muchas utilidades.
Firewalld integra a interfaz D-Bus la cual es apta para gestionar los servicios, las aplicaciones y administración de la configuración del firewall, esta interfaz puede ser integrada con las herramientas de configuración como firewall firewall-cmd, firewall-config y firewall-applet.
- Compatibilidad con IPv4, IPv6, puente y ipset.
- Compatibilidad con IPv4 y IPv6 NAT.
- Zonas de cortafuegos o firewall.
- API completa de D-Bus.
- Servicio simple, puerto, protocolo, puerto de origen, enmascaramiento, reenvío de puertos, filtro icmp, regla enriquecida, interfaz y control de dirección de origen en las zonas usadas.
- Interfaz directa para gestión.
- Función de bloqueo la cual crea una lista blanca de aplicaciones que pueden modificar el firewall.
- Carga automática de módulos del kernel de Linux.
- Integración con Puppet.
- Reglas de firewall temporizadas en zonas.
- Registro simple de paquetes denegados.
- Herramienta de configuración gráfica utilizando gtk3.
- Applet utilizando Qt4.
- RHEL 7, CentOS 7
- Fedora 18 y superior
- NetworkManager
- libvirt
- docker
- fail2ban
Es importante que antes de entrar en detalle sobre como instalar y usar Firewalld conozcamos un poco más sobre él, Firewalld está compuesto por tres capas que son:
- Capa principal (core layer) la cual se encarga del manejo de la configuración y los servicios como iptables, ip6tables, ebtables, ipset y el cargador de módulos.
- Interfaz D-Bus: el cual es el medio principal para cambiar y crear la configuración del firewall.
- Backends los cuales permiten interactuar con netfilter (el módulo del kernel nativo usado para firewall) y se cuentan algunos como iptables, ip6tables, ebtables, ipset, nft, linnftables, etc.
La interfaz D-Bus de firewalld es la forma más vital para crear y editar la configuración del firewall. Esta interfaz es usada por todas las herramientas en línea integradas en firewalld como firewall-cmd, firewall-config y firewall-applet, la línea firewall-offline-cmd no está hablando directamente con firewalld, sino que edita y crea los archivos de configuración de firewalld directamente a través del núcleo de firewalld con los controladores de IO.
El archivo de configuración global de firewalld está ubicado en la ruta /etc/firewalld/firewalld.conf y las funciones del firewall están configuradas en formato XML.
Firewalld hace uso de zonas las cuales son las que definen el nivel de confianza que tendrá la conexión de red a usar, la interfaz o enlace de dirección de origen y una misma zona puede usarse para muchas conexiones de red, interfaces y fuentes.
Las zonas disponibles en Firewalld son:
Para configurar o agregar zonas, podemos usar alguna de las siguientes interfaces de configuración de firewalld disponibles:
- Herramienta de configuración gráfica firewall-config.
- Herramienta de línea de comandos firewall-cmd.
- Interfaz programática D-BUS.
- Crear, copiar o editar un archivo de zona en alguno de los directorios de configuración como: /etc/firewalld/zones para archivos de configuración personalizados y creados por el usuario o /usr/lib/firewalld/zones para las configuraciones predeterminadas y de reserva.
1. Cómo instalar y administrar Firewalld en Linux
En caso de usar CentOS 7, el paquete firewalld esta preinstalado y se puede verificar con el siguiente comando:
rpm -qa firewalldEn el caso de Ubuntu debemos instalarlo con el siguiente comando:
sudo apt install firewalld
Ingresamos la letra S para confirmar la descarga e instalación de Firewalld.
Firewalld es un servicio regular de systemd el cual puede ser administrado a través del comando systemctl de la siguiente forma:
sudo systemctl start firewalld(permite iniciar el servicio) sudo systemctl enable firewalld(habilita el servicio durante el arranque del sistema) sudo systemctl status firewalld(permite ver el estado del servicio)
Después de iniciar el servicio firewalld, podremos verificar si el daemon se está ejecutando o no en Linux, para ello debemos usar la herramienta firewall-cmd, ejecutamos lo siguiente:
sudo firewall-cmd –state
2. Cómo gestionar zonas en Firewalld CentOS y Ubuntu
Para obtener una lista de todas las zonas y servicios de firewall disponibles, debemos ejecutar los siguientes comandos:
Para ver las zonas:
sudo firewall-cmd --get-zones
Para ver los servicios ejecutaremos:
sudo firewall-cmd --get-services
La zona predeterminada es la zona implementada para cada característica de firewalld que no está vinculada a otra zona, es posible obtener el conjunto de zonas predeterminado para conexiones de red e interfaces ejecutando lo siguiente:
sudo firewall-cmd --get-default-zone
Si deseamos establecer otra zona predeterminada debemos hacer uso del siguiente comando, es de anotar que si añadimos la opción --permanent se establece la configuración de forma permanente, podemos ejecutar alguna de las siguientes opciones:
sudo firewall-cmd --set-default-zone=externalo
sudo firewall-cmd --set-default-zone=external –permanent
Luego aplicamos los cambios ejecutando:
sudo firewall-cmd –reload
Si el objetivo es agregar una interfaz a una zona, por ejemplo, podemos ejecutar lo siguiente:
sudo firewall-cmd --zone=home --add-interface=enp0s3En este caso hemos añadido la interfaz enp0s3 (LAN) a la zona home.
Es de anotar que una interfaz solo se puede agregar a una sola zona, en su lugar se puede mover a otra zona, para ello usaremos el interruptor --change-interface o bien eliminar de la zona anterior con el interruptor –remove-interface y luego añadirlo a la zona nueva, por ejemplo:
sudo firewall-cmd --zone=public --add-interface=enp0s3 sudo firewall-cmd --zone=public --change-interface= enp0s3Con Firewalld es posible usar muchas zonas al mismo tiempo, si deseamos obtener una lista de todas las zonas activas con las funciones habilitadas, como interfaces, servicios, puertos, protocolos, ejecutamos lo siguiente:
sudo firewall-cmd --get-active-zones
Para obtener más información sobre las zonas, como lo que se ha habilitado o eliminado podemos usar alguno de estos comandos:
sudo firewall-cmd --zone=home --list-allO
sudo firewall-cmd --info-zone public
Otra de las opciones útiles a usar con Firewalld es --get-target, esta muestra el objetivo de una zona permanente, los objetivos pueden ser default, ACCEPT, DROP, REJECT, para comprobar el objetivo de varias zonas podemos usar alguno de los siguientes comandos:
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
3. Cómo bloquear o abrir puertos en Firewalld Linux CentOS y Ubuntu
Para abrir un puerto a través de firewalld, basta con añadirlo en la zona con la opción --add-port, en caso de no especificar explícitamente la zona, se habilitará en la zona predeterminada.
Por ejemplo, para añadir los puertos 80 y 443 los cuales permiten el tráfico web entrante a través de los protocolos HTTP y HTTPS, vamos a ejecutar lo siguiente:
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp
Ahora vamos a cargar de nuevo el firewalld y verificar las funciones habilitadas en la zona pública:
sudo firewall-cmd --reload sudo firewall-cmd --info-zone public
Si deseamos bloquear un puerto en firewalld, debemos usar la opción --remove-port, en este ejemplo así:
sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp
4. Cómo bloquear o abrir servicios en Firewalld CentOS y Ubuntu
Para el proceso de habilitación de un servicio en Firewalld debemos habilitarlo usando la opción --add-service, recordemos que, si omitimos la zona, se utilizará la zona por defecto.
Por ejemplo, para habilitar el servicio http en una zona publica ejecutamos:
sudo firewall-cmd --zone=public --permanent --add-service=http sudo firewall-cmd –reload
Con el parámetro -remove-service podemos remover el servicio de la zona asignada:
sudo firewall-cmd --zone=public --permanent --remove-service=http sudo firewall-cmd –reload
5. Cómo habilitar y deshabilitar el enmascaramiento de IP a través de Firewalld Linux
El enmascaramiento de IP, o IPMASQ / MASQ) es un mecanismo NAT el cual permite a los hosts en una red, con direcciones IP privadas establecer una comunicación con Internet a través de la dirección IP pública asignada al servidor Linux usando la puerta de enlace IPMASQ.
Con este enmascaramiento, el tráfico de los hosts invisibles aparecerá en otros equipos en Internet como si esto viniera directamente del servidor Linux.
Para verificar si el enmascaramiento está activo o no ejecutamos:
sudo firewall-cmd --zone=public --query-masqueradeLuego podemos agregar una zona así:
sudo firewall-cmd --zone=public --add-masqueradepara quitar una zona de este tipo de función, debemos ejecutar lo siguiente:
sudo firewall-cmd --zone=public --remove-masquerade
6. Cómo habilitar y deshabilitar el mensaje IMCP en Firewalld Linux
El protocolo ICMP (Internet Control Message Protocol - Protocolo de mensajes de control de Internet) es un protocolo que ha sido desarrollado con el fin de generar solicitudes de información o respuestas a esas solicitudes de información o en condiciones de error en todo el proceso de comunicación en la red.
En Firewalld es posible habilitar o deshabilitar los mensajes ICMP, pero se recomienda validar todos los tipos de ICMP compatibles, para ello ejecutamos:
sudo firewall-cmd --get-icmptypes
Podemos agregar o bloquear un ICMP de la siguiente manera:
sudo firewall-cmd --zone=home --add-icmp-block=echo-reply sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply
Podemos ver todos los tipos de ICMP agregados en una zona usando el interruptor --list-icmp-blocks:
sudo firewall-cmd --zone=home --list-icmp-blocks
7. Cómo habilitar o no el modo pánico en Firewalld Linux CentOS y Ubuntu
El modo de pánico es un modo especial integrado en Firewalld en el cual se eliminan todos los paquetes entrantes y salientes, y las conexiones activas expirarán una vez que este sea activado, podemos habilitar este modo en situaciones de emergencia donde exista una amenaza para el sistema y así evitaremos cualquier conexión.
Para consultar el modo de pánico, usaremos la opción --query-panic y podremos activarlo con la opción sudo firewall-cmd --panic-on:
Para comprender el funcionamiento de este modo, cuando esta deshabilitado podemos hacer ping a un sitio web y recibiremos todas las solicitudes enviadas, pero cuando se activa veremos un mensaje indicando un fallo temporal en la conexión:
Para deshabilitar este modo ejecutamos:
sudo firewall-cmd --panic-off
8. Cómo bloquear Firewalld en Linux CentOS y Ubuntu
En Firewalld, las aplicaciones o servicios locales están en la capacidad de alterar la configuración del firewall si estos se ejecutan con privilegios de root, podemos controlar qué aplicaciones pueden solicitar cambios en el firewall, agregándola en la lista blanca de bloqueo. Esta función se encuentra desactivada de forma predeterminada, y podemos habilitarla o inhabilitarla con el interruptor --lockdown-on o –lockdown-off:
sudo firewall-cmd --lockdown-onO
sudo firewall-cmd --lockdown-off
Un método mas seguro es habilitar o deshabilitar esta función directamente en la edición del archivo de configuración principal, puesto que en algunas ocasiones firewall-cmd no existe en la lista blanca de bloqueo, para ello accedemos al archivo de configuración:
sudo nano /etc/firewalld/firewalld.conf
Allí ubicamos la línea Lockdown=no y establecemos su estado a Lockdown=yes, guardamos los cambios usando las teclas Ctrl + O y salimos del editor usando Ctrl + X.
Firewalld es una completa solución para añadir diversas reglas y zonas a nuestras distribuciones de Linux y así añadir mejores opciones de seguridad generales en el sistema.