Introducción al comando Firewalld y Firewall-CMD en Linux

Introducción al comando Firewalld y Firewall-CMD en Linux

Objetivo

Aprenda los conceptos básicos detrás de Firewalld y cómo interactuar con él usando la utilidad Firewall-CMD

Requisitos

  • Permisos de raíz

Dificultad

FÁCIL

Convenciones

  • # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz
    directamente como usuario raíz o mediante el uso de sudo dominio
  • ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Introducción

Desde la versión 7 de Rhel y Centos y la versión 18 de Fedora, Firewalld es el sistema de firewall predeterminado. Uno de sus rasgos más distintivos es su modularidad: funciona en el concepto de conexión zonas. En este tutorial aprenderemos más al respecto y cómo interactuar con él usando el firewall-cmd utilidad.

Un firewall basado en zonas

Firewalld es un firewall basado en la zona: cada zona se puede configurar para aceptar o negar algunos servicios o puertos, y por lo tanto con un nivel diferente de seguridad. Las zonas se pueden asociar con una o más interfaces de red. Por lo general, el firewalld viene con un conjunto de zonas preconfiguradas: para enumerar estas zonas, y más generalmente para interactuar con el firewall, usaremos el firewall-cmd utilidad. Me estoy ejecutando en un sistema Fedora 27, verifiquemos cuáles son las zonas disponibles:

$ Firewall-CMD-Bloque de FedoraworkStation Bloque de FedoraworkStation de FedoraServer 


Como puede ver, el comando anterior devuelve una lista de todas las interfaces disponibles en mi sistema. Su nombre es bastante indicativo de su propósito, pero necesitamos saber qué servicios y puertos están disponibles a través de ellos: la regla predeterminada general es que cada servicio o puerto se niega. Cada interfaz se configura con algunas excepciones, dependiendo de los servicios que deben permitirse. Si queremos tener una lista de todos los servicios asociados con una zona, podemos ejecutar firewall-cmd con el --get-servicios opción. Si una zona no se pasa explícitamente al comando, se consultará la zona predeterminada:

# firewall-cmd --list-todo public (activo) objetivo: inversión de bloque ICMP predeterminada: no interfaces: ass5f5 fuentes: servicios: ssh mdns dhcpv6-client puertos: protocolos: mascarada: sin puerto de vana: puertos fuente: Blocks ICMP: Reglas ricas: 

El comando devolvió un resumen del estado de la zona (en este caso el predeterminado, "público"). Entre las otras cosas, puede ver claramente qué interfaces de red están asociadas con esta zona (ENS5F5 en este caso) y qué servicios están permitidos (SSH, MDNS, DHCPV6-Client) en ella. Si queremos recuperar información sobre una zona específica y no defectuosa, debemos pasar el nombre de la zona como argumento al --zona opción. Por ejemplo, para recuperar información sobre el externo Zona, correríamos:

# firewall-cmd --zone = externo --lista-todo objetivo externo: inversión de bloque ICMP predeterminada: no interfaces: fuentes: servicios: puertos ssh: protocolos: mascarada: Sí hacia adelante : reglas ricas: 


Manipulación de zonas

Como se dijo antes, cuando se usa el firewall-cmd herramienta, si no se especifica ninguna zona, se hace referencia a la predeterminada. Es posible que deseemos cambiar cuál es la zona predeterminada. Digamos, por ejemplo, queremos establecer la zona externa como el valor predeterminado:

# firewall-cmd --set-default = externo

Preathy fácil, ¿no es así??. Ahora veamos cómo podemos agregar o eliminar servicios o puertos a una zona específica. En primer lugar servicios son un conjunto preconfigurado de puertos asociados con un protocolo específico. Por ejemplo: el ssh el servicio incluirá el Puerto TCP 22, mientras que la samba El servicio comprenderá el conjunto de puertos 139 y 445 TCP y 137 y 138 UDP. Usando servicios podemos evitar tener que recordar puertos específicos cada vez. Digamos que queremos agregar el samba servicio a la zona externa, todo lo que haríamos es:

# firwall-cmd --zone = externo --add-service = samba éxito 

El cortafuegos Daemon respondió con éxito, Eso significa que la ejecución fue exitosa. Para verificarlo, verifiquemos los servicios de zona:

$ sudo firewall-cmd --zone = externo --list-sservices ssh samba 

Como puede ver, usamos el --servicios de lista Opción para el propósito. El resultado del comando significa claramente que el samba El servicio se ha agregado a la zona. Sin embargo, las modificaciones realizadas de esta manera son temporales y no sobrevivirán a un reinicio del cortafuegos demonio. Vamos a verificarlo. Primero recargamos el servicio:

 # Firewall-CMD-Reload

Luego verificamos nuevamente los servicios permitidos en el externo zona:

# firewall-cmd --zone = external --list-servicios ssh 

Como puede ver, el único servicio permitido en el externo la zona es ssh. Para hacer una modificación persistente a una zona, debemos usar el --permanente opción:

 # firewall-cmd --Permanent --zone = externo --add-service = samba

Las modificaciones permanentes necesitarán una recarga de firewall para volverse efectivas.

Si queremos realizar la operación inversa y, por lo tanto, elimine un servicio de una zona, ejecutaríamos:

 # firewall-cmd --Permanent --zone = externo--Remove-Service = samba

La sintaxis es muy intuitiva y no necesita más explicación. Pero, ¿qué pasa si queremos agregar un puerto específico en lugar de servicio?? La sintaxis cambiaría ligeramente:

 # firewall-cmd --Permanent --zone = externo --add-port = 139/tcp

Para verificar que el puerto se haya agregado a la zona:

# firewall-cmd --zone = externo --list-puertos 139/tcp 

La operación ha tenido éxito. De la misma manera, para eliminar un puerto que haríamos:

# firewall-cmd --Permanent --zone = externo--Remove-Port = 139/TCP


Creando una zona personalizada

Hasta ahora, solo vimos cómo modificar las zonas existentes. También es posible crear algunos nuevos, y es igual de fácil. Supongamos que queremos crear una zona personalizada llamada LinuxConfig:

# Firewall-CMD --Permanent--New-Zone = LinuxConfig

Se ha creado una nueva zona vacía: por defecto, no se permiten servicios ni puertos en ella. También es posible crear una zona cargando un archivo de configuración:

# Firewall-CMD --Permanent--New-Zone-From-File = File--Name = LinuxConfig

Dónde archivo ¿Es la ruta al archivo que contiene la definición de zona?. Observe que al crear o eliminar una zona la --permanente La opción es obligatoria: se planteará un error si no se proporciona.

Asociar una zona con una interfaz

Crear una zona es solo el primer paso: ahora debemos asociarla con una interfaz de red. Supongamos que queremos usar nuestra nueva zona creada, asociándola con la interfaz ENTERNET ESS5F5: aquí está el comando que nos permite realizar la tarea:

# firewall-cmd --Permanent --zone = linuxconfig --add-interface = ens5f5

Si consultamos la zona para las interfaces asignadas, deberíamos ver:

# firewall-cmd --zone = linuxconfig --list-interfaces ens5f5 

Eliminar la interfaz de la zona es tan fácil como:

# firewall-cmd--Remove-Interface = Ens5f5 --zone = LinuxConfig


Reglas ricas

En ciertas situaciones, es posible que necesitemos crear una regla más compleja, y no solo permitir algunos puertos o servicios en una zona. Por ejemplo, es posible que deseemos crear una regla para bloquear algún tipo de tráfico de una máquina específica. Eso es lo que reglas ricas son para. Básicamente, una regla consiste en dos partes: en la primera, especificamos las condiciones que deben cumplirse para la regla que se aplicará, y en el segundo la acción que se ejecutará: aceptar, gota, o rechazar.

Digamos que queremos bloquear el tráfico de la máquina con IP 192.168.0.37 En la red local: aquí está cómo componiríamos nuestra regla:

# firewall-cmd --zone = linuxconfig --add-rich-rule = "regla \ familiar =" ipv4 "\ fuente de fuente = 192.168.0.37 \ Service Name = ssh \ rechazar \ 

Para agregar una regla rica, usamos el --regla rica opción, describiendo la regla como su argumento. La regla comienza con regla palabra clave. Con familia Especificamos que la regla a la que se aplica solo se aplica IPv4 paquetes: si esta palabra clave no se proporciona, la regla se aplica tanto a IPv4 y IPv6. Luego proporcionamos la dirección fuente que los paquetes deben tener para que la regla se active con Dirección de la fuente. Con servicio Especificamos el tipo de servicio para la regla, en este caso ssh. Finalmente, proporcionamos la acción que se ejecutará si un paquete coincide con la regla, en este caso rechazar. Si ahora intentamos establecer una conexión SSH de la máquina con el 192.168.0.37 ip, recibimos:

SSH 192.168.0.35 SSH: conéctese al host 192.168.0.35 Puerto 22: la conexión rechazada 

El anterior es realmente simple, pero una regla puede volverse realmente compleja. Debe consultar la documentación de firewalld para ver toda la gama de configuraciones y opciones disponibles.

El modo de pánico

El modo de pánico es un modo que debe usarse solo en situaciones en las que hay problemas realmente serios con el entorno de red. Cuando este modo está activo, todas las conexiones existentes se descartan y se eliminan todos los paquetes entrantes y salientes. Se puede habilitar en ejecución:

# Firewall-CMD-Panic-On

Para salir del modo de pánico, el comando es:

# Firewall-CMD-Panic-Off

Incluso es posible consultar el modo de pánico Estado, en ejecución:

# Firewall-CMD-Query-Panic

Esas opciones son válidas solo en tiempo de ejecución y no se puede usar con --permanente.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cómo definir una zona de firewalld personalizada
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Descarga de Linux
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Mastering Bash Script Loops
  • Ubuntu 20.04 trucos y cosas que quizás no sepas
  • Comandos de Linux: los 20 comandos más importantes que necesitas ..
  • Archivos de configuración de Linux: los 30 principales más importantes