Firewall-cmd

De La Wiki de KiVi

El firewall es esencial para controlar el flujo de tráfico de red que entra y sale del servidor Linux. En este artículo, mostrará, agregará y eliminará reglas de firewalld.

Nuestro mundo nunca ha estado más conectado que ahora. Cada persona, empresa, gobierno, etc. utiliza la web para comunicarse, intercambiar moneda y datos y, en general, realizar los movimientos de la vida y las operaciones diarias. Sin embargo, estas conexiones no son intrínsecamente seguras y, debido a esto, debemos implementar medidas defensivas para mantener nuestra ubicación, información y dinero protegidos. En el pasado, cuando alguien quería asegurar sus posesiones, erigía puertas y vallas para mantener a distancia a los intrusos. Hoy en día, logramos estos mismos objetivos con el uso de firewalls. La mayoría de los sistemas Linux utilizaban la utilidad iptables; sin embargo, había una nueva tecnología en el horizonte.

Con la introducción de Red Hat Enterprise Linux 7.0 (RHEL) en 2011, iptables fue reemplazado cuando nació firewalld. En esencia, firewalld es un firewall basado en zonas. Los firewalls basados en zonas son sistemas de seguridad de red que monitorean el tráfico y toman acciones basadas en un conjunto de reglas definidas que se aplican a los paquetes entrantes/salientes.

Las zonas

Las zonas son configuraciones independientes que se pueden aplicar sobre el servidor con diversas normas ya aplicadas, para listarlas ejecutaremos:

sudo firewall-cmd --get-zones

Con un resultado similar:

FedoraServer FedoraWorkstation block dmz drop external home internal libvirt libvirt-routed nm-shared public trusted work

En la que vemos diferentes zonas ya creadas y cada una de ellas con una finalidad y normas, por ejemplo, ¿qué normas tiene la zona «FedoraServer«?

Ejecutamos:

sudo firewall-cmd --zone=FedoraServer --list-all

Con el resultado similar:

FedoraServer

target: default

ingress-priority: 0

egress-priority: 0

icmp-block-inversion: no

interfaces:

sources:

services: cockpit dhcpv6-client ssh

ports:

protocols:

forward: yes

masquerade: no

forward-ports:

source-ports:

icmp-blocks:

rich rules:

Este resultado es de una instalación limpia en el que permite el acceso al programa «cockpit«, permite el tráfico via «SSH» y ser cliente DHCP.

Un resultado más práctico en un servidor configurado:

FedoraServer (active)

target: default

icmp-block-inversion: no

interfaces: eno1

sources:

services: cockpit dhcpv6-client http https imap mountd nfs nfs3 pop3 rpc-bind samba samba-client samba-dc smtp ssh

ports: 10443/tcp 1080/tcp 6379/tcp 11211/tcp 9980/tcp

protocols:

forward: yes

masquerade: no

forward-ports:

source-ports:

icmp-blocks:

rich rules:

Aquí ya vemos servicios activos ( samba, nfs, ssh, http…. ), así como puertos específicos (10443, 9980…).

Y, ¿cual es la zona por defecto? Para eso le preguntamos con:

sudo firewall-cmd --get-default-zone

por ejemplo, en el caso actual respondería la zona:

FedoraServer

Para cambiar la zona por defecto:

sudo firewall-cmd --set-default-zone=public

En la que especificamos el conjunto «public«

Añadir puertos a una zona

Para añadir puertos de forma permanente podemos hacerlo especificando el puerto:

sudo firewall-cmd --zone=FedoraServer --add-port=8080/tcp --permanent

  • --zone=FedoraServer: Esto especifica que deseas añadir el puerto a la zona FedoraServer.
  • --add-port=8080/tcp: Indica que deseas abrir el puerto 8080 y especifica el protocolo TCP. Puedes ajustar el número de puerto y el protocolo según tus necesidades.
  • --permanent: Hace que la regla sea persistente a través de reinicios.

Si prefieres añadir un servicio en lugar de un puerto a la zona FedoraServer, puedes hacerlo de la siguiente manera. Por ejemplo, para permitir el servicio SSH:

sudo firewall-cmd --zone=FedoraServer --add-service=ssh --permanent

  • --zone=FedoraServer: Esto especifica que deseas añadir el servicio a la zona FedoraServer.
  • --add-service=ssh: Indica que deseas permitir el servicio SSH en la zona.

Por cierto, para saber todos los servicios disponibles, ejecutemos:

sudo firewall-cmd --list-services

Y la lista puede cambiar según los servicios instalados en el equipo.

Y por último aplicamos las normas:

sudo firewall-cmd --reload

Y como elimino puertos o servicios?

Para eliminarlo podemos ejecutar:

sudo firewall-cmd --remove-port=8888/tcp

O para eliminar el servicio, por ejemplo «plex»

sudo firewall-cmd --remove-service=plex

O de una zona específica:

sudo firewall-cmd --zone=NOMBRE_DE_LA_ZONA --remove-port=PUERTO/tcp

Y por último solo falta recargarlo:

sudo firewall-cmd --reload

NOTA FINAL

Es importante recalcar que en esta entrada se explica lo mínimo para conocer su funcionamiento y que se recomienda explorar con calma el manual del comando:

man firewall-cmd

Enlace oficial:

https://www.redhat.com/sysadmin/beginners-guide-firewalld