firewall-cmd

por | 3 julio, 2020

Muy bien continuando con la serie de posts relacionados al estudio de para dar la certificación rhcsa vamos a hablar de firewalld qué es el programa que viene a ser el administrador de las reglas de firewall de la familia red hat, asi como esta ufw para ubuntu y derivados.

Originalmente firewalld administra el subsistema de clasificación de paquetes Netfilter. Netfilter hace un tiempo se esta dejando de utilizar debido a un nuevo subsistema de clasificación de paquetes que se llama nftables el cual trae varias mejoras en cuanto a la administración de las reglas, cambios en la sintaxis y forma de ejecución.

A nivel de configuración de los comandos propios de firewall-cmd (el front-end de firewalld), independiente de este nuevo subsistema de clasificación de paquetes, no se ve afectado ya que los comandos se mantienen igual, internamente firewall-cmd se encarga de de mantener la sintaxis correcta.

Firewalld funciona administrando distintas zonas y cada zona tiene sus permisos, nosotros podemos asignar la zona ya sea por la IP origen o por la interfaz desde donde nos llega el paquete, firewalld asigna el paquete a la zona verificando primero si es que la ip origen está asociada a una zona y sino se asocia a la zona de la interfaz desde dónde llega el paquete, en caso de que por algún motivo la interfaz no este asociada a alguna zona y la IP origen tampoco corresponda a ninguna zona, firewalld lo que hace es asociar el paquete a la zona por defecto. Más adelante vamos a verlo en detalle

las zonas configuradas en firewalld son:

Nombre de la zonaDescripción
Trusted Permite todo el tráfico entrante
Home Bloquea todo el tráfico entrante a no ser que sea un paquete de respuesta (o sea que nosotros hayamos iniciado una comunicación con un servidor remoto y el servidor remoto nos está respondiendo) y permite los siguientes servicios: ssh Mdns IPP-client Samba-client y dhcpv6-Client
Work Bloquea todo el tráfico entrante a no ser que sea una respuesta permite los siguientes servicios ssh, IPP-client y dhcpv6-client
internal Tiene exactamente los mismos atributos que la zona home bloquear todo el tráfico entrante a no ser que sea una respuesta
public Al igual que las anteriores bloquea todo a no ser que sea una respuesta y sólo permite ssh y dhcpv6-client esta es la zona por defecto
externalEsta zona es interesante ya que al igual que las anteriores bloquea todo entrante excepto ssh y además todo el tráfico que pasa por esa interfaz se natea
dmz Lo mismo que la zona external pero sin nat y se permite sólo ssh como la zona extena
block No se permite ningún servicio y sólo se permite el tráfico de respuesta aquí se envía un paquete avisándole al equipo remoto que su intento de conexión fue bloqueado
DropEs lo mismo que block pero aquí no informa al extremo remoto que se bloqueó su solicitud

Una pequeña observación sobre los servicios que mencioné anteriormente voy a dejar una tabla con los servicios que protocolo el utilizan y que puerto

ServicioPuerto Protocolo
SSH22TCP
DHCPV6-Client546UDP FE80::/64
IPP-Client 631 UDP
Samba-Client137 – 138UDP
MDNS5353udp 224.0.0.251 o ff02:fb

Si queremos tener un listado completo de los servicios que está configurado en firewalld podemos utilizar

firewall-cmd --get-services 

Observación importante que tenemos que hacer antes de ver la sintaxis de firewall-cmd es que siempre cuando configuramos una regla tenemos que usar la opcion –permanent para que los cambios sean persistentes y luego hay que usar firewall-cmd –reload para que se apliquen están nuevas configuraciones, de no usar este comando la regla quedará en runtime y se perderá después de un reinicio de la máquina

Para configurar firewalld tenemos 3 opciones aunque solo veremos una, la linea de comandos

  • Mediante la edición directa de archivos de configuración en /etc/firewalld/
  • Mediante la interfaz gráfica de la consola web
  • Mediante la herramienta de línea de comandos firewall-cmd.

Voy a dejar tipo indice algunos comandos que creo serían los que más utilizariamos:

conocer/cambiar la zona por defecto actual

Como les comente anteriormente, si la IP origen de un paquete entrante o la interfaz desde donde llega no esta asociado a ninguna zona se irá a la zona por defecto, esto será en la mayoría de los casos si no tocamos mucho firewalld, y para saber cual es la zona que esta configurada por defecto bastara con ejecutar

firewall-cmd --get-default-zone

si no hemos tocado nada la zona sera «public»

Ahora, para cambiar esta zona por defecto usamos este comando

sudo firewall-cmd --set-default-zone=<nombre zona>

y con eso cambiamos la zona por defecto

conocer todas las zonas configuradas/activas

Aquí tenemos 3 comandos que nos pueden ayudar a saber que zonas están configuradas, cuales están activas, y las descripciones de cada zona las veremos en este orden que es del comando que entregue menos detalle al mas detallado

firewall-cmd --get-zones

Este comando nos presentara un listado de los nombres de todas las zonas configuradas en firewalld, en mi caso aparece una zona extra que no esta en el listado principal que se llama «libvirt», seguramente por que instale qemu

El siguiente comando nos va a mostrar un listado de todas las zonas que estén asociadas a alguna interfaz y a que interfaz esta asociada

firewall-cmd --get-active-zones

Esto nos puede ayudar a la hora de hacer thoubleshooting ya que si configuramos un servicio en la zona A pero la interfaz esta asociada a la zona B nunca se va a tener la conectividad necesaria

El tercer y ultimo comando que vamos a ver en este apartado es el que mayor cantidad de información nos entrega ya que nos dira:

  • interfaces asociadas a la zona
  • origen (IP) asociada a la zona
  • servicios permitidos en la zona
  • puertos asociados a la zona
  • si esta habilitado el nat o no
  • si existen reglas enriquecidas y cuales son
  • reenvio de puertos
sudo firewall-cmd --list-all-zones

la salida del comando puede ser larga dependiendo de cuantas zonas tengamos en el equipo, si queremos ver una zona especifica hay que añadir la opcion –zone=<nombre de la zona>

sudo firewall-cmd --list-all-zones --zone=dmz

agregar/eliminar un rango IP de origen a una zona

Como les comente firewalld discrimina por IP origen o por la interfaz, el siguiente comando nos ayudará a declarar estos orígenes

sudo firewall-cmd --add-source=<CIDR>

con ese comando se agregará el origen a la zona por defecto, si queremos declararlo en una zona distinta hay que agregar la opcion –zone=<zona> de esta forma

sudo firewall-cmd --add-source=<CIDR> --zone=<nombre de la zona>

Para eliminar un rango IP, para este y todos los comando siguientes basta con cambiar el add por remove, con la opción opcional –zone

sudo firewall-cmd --remove-source=<CIDR> --zone=<nombre de la zona>

agregar/eliminar una interfaz de una zona

Toca el segundo criterio de selección de zona de firewalld (y el mas usado) la asignación de una interfaz a una zona, para eso la interfaz no tiene que estar asociada a ninguna zona y ejecutamos el siguiente comando

sudo firewall-cmd --add-interface=<nombre inf> --zone=<zona>

al igual que en los casos anteriores, si no agregamos la opción –zone la interfaz será agregada a la zona por defecto

Para eliminar una asociación de interfaz, para este y todos los comando siguientes basta con cambiar el add por remove, con la opción –zone opcional

sudo firewall-cmd --remove-interface=<nombre inf> --zone=<zona>

Ya dejando de lado el apartado de la gestión de las zonas vamos a ver como podemos permitir conexiones entrantes a servicios o puertos no estándar

agregar/eliminar servicios a una zona especifica

lo primero será agregar servicios, tenemos un listado completo de todos los servicios que tiene pre configurado firewalld con el comando

firewall-cmd --get-services

si bien este comando solo muestra los nombres y no entra en detalles de que puertos permite o no, podemos usar la opción –info-service=<nombre del servicio> para conocer esta información (este comando no esta en el libro oficial).

Un pequeño tip que me gustaría dar en este apartado es la existencia del archivo /etc/services donde esta una lista extensa de todos (o muchos al menos) los servicios estándar, el protocolo que usan y su respectivo puerto

Para agregar un nuevo servicio a una zona tenemos el siguiente comando

 sudo firewall-cmd --add-service=<nombre del servicio> --zone=<nombre zona>

como siempre, si eliminamos la opción –zone el servicio se agregara a la zona por defecto

Para eliminar un servicio, para este y todos los comando siguientes basta con cambiar el add por remove, con la opción –zone opcional

 sudo firewall-cmd --remove-service=<nombre del servicio> --zone=<nombre zona>

agregar/eliminar puertos a una zona especifica

Ahora toca el turno para agregar puertos, aquí tenemos total libertad para elegir que puerto y que protocolo habilitar y esta información quedará tal cual cuando consultemos la zona, independiente si el socket puerto/protocolo exista dentro de los servicios ya configurados en firewalld

sudo firewall-cmd --add-port=<puerto>/<protocolo>

y como en todos los casos anteriores para eliminar un puerto, para este y todos los comando siguientes basta con cambiar el add por remove, con la opción –zone opcional

sudo firewall-cmd --remove-port=<puerto>/<protocolo>

Y esos son los comandos que aparecen en la documentación oficial para la certificación RHCSA, existen otros comandos que pueden ser útiles que dejare a continuación

Agregar la opcion de NAT a una zona especifica

sudo firewall-cmd --add-masquerade --zone=<zona>

Cambiar una serie de reglas en runtime a permanent

sudo firewall-cmd --runtime-to-permanent

Conocer los puertos y protocolos asociados a un servicio (ya había dado este comando más arriba)

sudo firewall-cmd --info-service=<nombre del servicio>

Activar el modo pánico

El modo pánico niega todos los paquetes entrantes o salientes de la zona donde se activa y esta opción solo se puede usar en runtime

sudo firewall-cmd --panic-on

Para desactivarla usamos

sudo firewall-cmd --panic-off

Con esto termino este post, dejando un link a la página de fedora donde pueden encontrar mayor información acerca de firewalld

https://fedoraproject.org/wiki/Firewalld?rd=FirewallD

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *