Configuración de Firewalld – El cortafuegos de Linux

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

¿Qué es Firewalld?

Firewalld es el cortafuegos de Linux que se viene utilizando desde RedHat 7. Hasta RedHat 6 se estaba utilizando iptables.

Para poder utilizar Firewalld debemos tener instalado el paquete RPM correspondiente y el servicio arrancado.

[[email protected] ~]# rpm -qa |grep -i firewalld
firewalld-filesystem-0.8.2-7.el8_4.noarch
firewalld-0.8.2-7.el8_4.noarch
[[email protected] ~]# 

[[email protected] ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2021-08-07 11:37:34 CEST; 7min ago
     Docs: man:firewalld(1)
 Main PID: 1136 (firewalld)
    Tasks: 2 (limit: 14088)
   Memory: 7.0M
   CGroup: /system.slice/firewalld.service
           └─1136 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid

Aug 07 11:37:32 server1 systemd[1]: Starting firewalld - dynamic firewall daemon...
Aug 07 11:37:34 server1 systemd[1]: Started firewalld - dynamic firewall daemon.
Aug 07 11:37:34 server1 firewalld[1136]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
[root[email protected] ~]# 

¿Qué es un firewall?

Para quien todavía no sepa lo que es un firewall, es un elemento de comunicaciones que se encarga de permitir o denegar cierto tráfico desde o hasta un origen o destino. Por ejemplo, se puede abrir una regla de firewall para permitir el tráfico desde cualquier usuario de Internet hasta la IP y puerto que utiliza el servidor WEB.

Zonas de Firewalld

Firewalld utiliza diferentes zonas de red para configurar diferentes reglas de firewalls en cada una de ellas:

Lenovo IdeaPad 5 - Ordenador Portátil 15.6" FullHD (AMD Ryzen 5 5500U, 16GB RAM, 512GB...
  • Pantalla de 15.6" FullHD (1920x1080) 300nits
  • Procesador AMD Ryzen 5 5500U (6C/12T, 2.1 GHz/4.04GHz, 8 MB)
  • Memoria RAM de 16GB
[[email protected] ~]# firewall-cmd --get-zones 
block dmz drop external home internal libvirt nm-shared public trusted work
[[email protected] ~]# 

El uso de cada una de estas zonas es el siguiente:

  • drop: Se corta el tráfico de cualquier conexión entrante. Sólo son posibles las conexiones hacia el destino.
  • block: Cualquier conexión de red entrante se rechaza con un mensaje icmp-host-prohibited para IPv4 e icmp6-adm-prohibited para IPv6. Solo son posibles las conexiones de red iniciadas dentro de este sistema.
  • public: Solamente se aceptan las conexiones entrantes configuradas.
  • external: Para uso en redes externas con el enmascaramiento habilitado, como los routers. Solamente se aceptan las conexiones entrantes configuradas.
  • dmz (o zona desmilitarizada): Se refiere a las conexiones que vienen desde Internet. Solamente se acepta el tráfico entrante configurado en el firewall. Por ejemplo, hacia el puerto del servidor WEB.
  • work: Se utiliza para la red del trabajo. Solamente se aceptan las conexiones entrantes configuradas.
  • home: Se utiliza para la red de casa. Solamente se aceptan las conexiones entrantes configuradas.
  • internal: Se utiliza para la configuración de las redes internas. Solamente se aceptan las conexiones entrantes configuradas.
  • trusted: Todas las conexiones son aceptadas.

Configurar la zona del firewall con la que queremos trabajar

Cada servidor va a utilizar una zona del firewall con la que va a trabajar en función de su rango de red. Para configurar la zona del firewall que nos interesa, utilizaremos firewall-cmd de la siguiente manera:

[[email protected] ~]# firewall-cmd --set-default-zone=public 
success
[[email protected] ~]# firewall-cmd --get-active-zones
libvirt
  interfaces: virbr0
public
  interfaces: ens33 ens37
[[email protected] ~]# 

El comando firewall-cmd es muy amplio y podemos consultar todas sus opciones en el man del comando. Se pueden hacer configuraciones específicas a nivel de tarjeta de red por ejemplo.

Sin embargo, esta guía es orientativa para saber cómo funciona el firewall de Linux.

Permitir o denegar el tráfico de servicios de Linux en Firewalld

En Firewalld podemos permitir el tráfico a nivel de servicio o especificando una IP, un puerto y el protocolo de comunicaciones. A continuación vamos a ver el primer método:

[[email protected] ~]# firewall-cmd --add-service=ssh --permanent 
Warning: ALREADY_ENABLED: ssh
success
[[email protected] ~]#

[[email protected] ~]# firewall-cmd --reload 
success

[[email protected] ~]#

[[email protected] ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens37
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
[[email protected] ~]# 

Es muy importante incluir la directiva –permanent para que la regla se mantenga después de reiniciar el firewall. También podemos observar que una vez que hemos configuado la regla, tenemos que recargarlas para que se apliquen (–reload).

Si quisiéramos eliminar una regla de FW a nivel de servicio, lo haríamos de la siguiente manera:

[[email protected] ~]# firewall-cmd --remove-service=ssh --permanent 
success
[[email protected] ~]# firewall-cmd --reload 
success
[[email protected] ~]# 

Permitir o denegar servicios por IP, puerto y protocolo de red en Firewalld

Igual que antes hemos habilitado el tráfico a través de un servicio de Linux, también lo podemos hacer a través de su IP, puerto y protocolo de red. Lo haremos de la siguiente manera:

[[email protected] ~]# firewall-cmd --add-port=12345/tcp --permanent
success
[[email protected] ~]# firewall-cmd --reload
success
[[email protected] ~]# firewall-cmd --list-all --zone=public 
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens37
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 12345/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
[[email protected] ~]# 

Para eliminar un puerto sería:

[[email protected] ~]# firewall-cmd --remove-port=12345/tcp --permanent
success
[[email protected] ~]# firewall-cmd --reload 
success
[[email protected] ~]# firewall-cmd --list-all --zone=public 
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens37
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
[[email protected] ~]# 

Administrar las reglas de firewalls con Cockpit

Hace tiempo ya os hablé de Cockpit para administrar ciertos aspectos de Linux desde una interfaz WEB. Pues bien, firewalld es uno de esos componentes que podemos administrar desde Cockpit.

Administrar firewalld desde Cockpit
Configurar reglas de firewall con cockpit

Te puede interesar

¿Te ha gustado? Compártelo

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email
About Author

Contenido Relacionado

Artículos Recientes

Deja un comentario