Una guía para principiantes de Firewalld en Linux

Nuestro mundo nunca ha estado tan conectado como lo está hoy. Toda persona, empresa, gobierno, etc. utiliza la web para comunicarse, intercambiar moneda y datos y, en general, rastrear los movimientos de la vida y las operaciones diarias. Sin embargo, estas conexiones no son intrínsecamente seguras y, por este motivo, debemos implementar medidas defensivas para proteger nuestra ubicación, información y dinero. En los viejos tiempos, cuando alguien quería asegurar sus posesiones, colocaban barreras y vallas para mantener a raya a los intrusos. Hoy logramos estos mismos objetivos con el uso de firewalls. La mayoría de los sistemas Linux usaban el iptables utilidad, sin embargo, la nueva tecnología estaba en el horizonte.

Con la introducción de Red Hat Enterprise Linux 7.0 (RHEL) en 2011, iptables se reemplazó como firewalld nació. En su corazón, firewalld es un cortafuegos basado en zonas. Los cortafuegos basados ​​en zonas son sistemas de seguridad de red que supervisan el tráfico y toman medidas en función de un conjunto definido de reglas que se aplican a los paquetes entrantes y salientes.

Índice

Todo sobre las zonas

Firewalld proporciona diferentes niveles de seguridad para diferentes áreas de inicio de sesión. Una zona está asociada con al menos una interfaz de red (eth0, por ejemplo). Vemos las zonas preconfiguradas usando el siguiente comando:

[[email protected] ~]$ firewall-cmd --get-zones
block dmz drop external home internal libvirt public trusted work

Como puede ver, las áreas listadas por defecto son:

  • bloquear
  • dmz
  • caer
  • externo
  • residencia
  • interno
  • biblioteca
  • Público
  • de confianza
  • trabajo

NOTA: Estoy usando una máquina virtual RHEL 8.2 para esta demostración.

Como regla general, la regla predeterminada de un firewall es denegar todo y solo permitir excepciones específicas para los servicios necesarios.

Muchas veces es útil ver qué servicios están asociados con un área determinada. Para mostrar esta información, utilice el siguiente comando:

firewall-cmd --list-all

Tenga en cuenta que si no especifica una zona, se consulta la zona predeterminada. Aquí, la zona por defecto es la public zonificado.

[[email protected] ~]$ firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources: 
  services: cockpit dhcpv6-client mountd nfs rpc-bind ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Si desea especificar un área, simplemente agregue --zone=zonename

Por ejemplo, para ver el external zona, utilice lo siguiente:

[[email protected] ~]$ firewall-cmd --zone=external --list-all
external
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Si por alguna razón desea cambiar la zona predeterminada, puede hacerlo fácilmente usando el siguiente comando:

firewall-cmd --set-default=zonename

Permitir y denegar por servicio

Ahora bien, la ventaja de los cortafuegos es que protegen nuestras redes. Lo malo es que no existe un cortafuegos de "talla única" que se adapte a todas las situaciones. Por este motivo, los cortafuegos se personalizan para adaptarse a las necesidades exactas de la situación en la que se utilizan. Por ejemplo, si necesito permitir transferencias FTP (Protocolo de transferencia de archivos) en el external zone para poder mover un archivo al puerto 21, podría usar algo como esto:

firewall-cmd --zone=external --add-service=ftp

Aquí está el ejemplo real de mi VM:

[[email protected] ~]$ sudo firewall-cmd --zone=external --add-service=ftp
[sudo] password for tcarrigan: 
success

Vemos que el demonio ha regresado, por lo que deberíamos tener el servicio FTP permitido en el external zonificado. Para comprobarlo, tenemos que comprobar el external lista de servicios de la zona:

[[email protected] ~]$ firewall-cmd --zone=external --list-services
ftp ssh

Pero, ¿qué sucede cuando recargamos la configuración del firewall?

[[email protected] ~]$ sudo firewall-cmd --reload
success

[[email protected] ~]$ firewall-cmd --zone=external --list-all
external
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

El nuevo Permitir la regla no sobrevive reiniciando el firewalld configuración. Para asegurarnos de que nuestra nueva regla persista, debemos agregar el --permanent opción. El nuevo comando es:

# firewall-cmd --permanent --zone=external --add-service=ftp

Una vez que usas el permanent comando, debe volver a cargar la configuración para que los cambios surtan efecto.

Para eliminar un servicio, hacemos un pequeño cambio de sintaxis. Aquí quitaré el servicio FTP de la external zona permanente:

[[email protected] ~]$ sudo firewall-cmd --permanent --zone=external --remove-service=ftp
Warning: NOT_ENABLED: ftp
success

Vemos que el sistema me avisa que el FTP ha sido deshabilitado y que la operación fue exitosa.

Permitir y denegar por puerto

Ahora, ¿qué sucede cuando necesita permitir el tráfico en un puerto no estándar? Imagine que tiene un servicio de respaldo que necesita ejecutarse en un puerto UDP dedicado. ¿Cómo agregaría esta excepción a su zona? La sintaxis es muy fácil de usar y solo es ligeramente diferente de la que usamos para los servicios. Para agregar un puerto a la configuración de su zona, use lo siguiente:

[[email protected] ~]$ sudo firewall-cmd --permanent --zone=external --add-port=60001/udp
success

Comprobamos los puertos permitidos con el siguiente comando:

[[email protected] ~]$ sudo firewall-cmd --zone=external --list-ports
60001/udp

Y para eliminar la regla de puerto, lo adivinó... simplemente alterne --add-port=x en --remove-port=x

[[email protected] ~]$ sudo firewall-cmd --permanent --zone=external --remove-port=60001/udp
success

¿Y después?

Si después de leer este artículo se pregunta qué hacer con la información, le recomiendo que inicie su máquina virtual favorita (RHEL, Fedora, CentOS, etc.) y comience a experimentar con los comandos anteriores. La mejor manera de aprender es adquirir experiencia práctica. Si encontró este contenido interesante, esté atento a Habilitar Sysadmin para la Parte 2, donde se sumergirá en la creación de zonas personalizadas y la creación de reglas más avanzadas.

Artículos de interés

Subir