Aprendiendo a usar firewalld

Antonio J. Galisteo

En esta ocasión te quiero mostrar cómo usar firewalld. Firewalld es un firewall dinámico avanzado que se introdujo desde CentOS 7 y debes tener en cuenta que es recomendable deshabilitar iptables cuando se esté usando para que las reglas de uno y otro no entren en conflicto. En CentOS por defecto ya está deshabilitado.

Firewall Dinámico

Firewalld es un servicio más del sistema así que lo podemos arracar, parar o ver su estatus con systemctl, por ejemplo:

systemctl status firewalld

Esta herramienta nos va a facilitar la gestión del firewall en comparación con iptables, es un poco más fácil o intuitivo de usar. Hay una utilidad gráfica que se llama firewall-config pero en esta ocasión nosotros vamos a ver la firewall-cmd que es la utilidad de terminal. Veamos entonces cómo usar firewalld.

Zonas del Firewall

Cuando estamos trabajando con firewalld tenemos lo que se denominan zonas:

  • trusted. En la que todo se acepta
  • home. Solo permite ssh, samba, dns y dhcp
  • internal. Igual que home
  • work. Permite solo ssh y dhcp
  • public. Es la zona por defecto. Se rechaza todo excepto ssh.
  • external. Solo acepta ssh
  • dmz. Solo se acepta ssh
  • block. Rechaza todo.
  • drop. Rechaza todo pero no lo notifica.

Podemos obtener información sobre las zonas con:

firewall-cmd --get-zones

Si las opciones que tenemos predeterminadas con encajan con lo que necesitas puedes agregar una zona personalizada a tu firewall con:

firewall-cmd --new-zone=nombre_zona --permanet

Con esto crearemos una zona y le diremos que sea permanente. Ahora debemos reiniciar el servicio para que cargue la nueva zona con:

systemctl restart firewalld

Si haces de nuevo un:

firewall-cmd --get-zones

Puedes ver que ya tenemos nuestra nueva zona. Si quieres ver cual es la zona por defecto lo puedes consultar con:

firewall-cmd --get-default-zone

Esto lo podemos cambiar editando el firecho de configuración de firealld:

sudo nano /etc/firealld/firewalld.conf

Debes buscar una directiva que se llama DefaultZone y setearla con la zona que deseas, en mi caso la dejare por defecto:

DefaultZone=public

No todas las zonas están activas, solo lo estarán aquellas que estén asociadas a algun dispositivo. Podemos ver las zonas activar con:

firewall-cmd --get-active-zones

Es importante conocer los servicio que podemos utilizar dentro de las zonas, servicio como dhcp, http, https y demás. Esto lo veremos con:

firewall-cmd --get-services

Estos servicios están definidos en archivos de configuración xml en el directorio:

ls -lF /urs/lib/firewalld/services

Puedes ver uno, por ejemplo el de ssh con:

cat /urs/lib/firewalld/services/ssh.xml

Las reglas de Firewalld

Vamos ahora a ver cómo obtener información de las reglas. Podemos ver las reglas de la zona por defecto con:

firewall-cmd --list-all

Esto nos mostrará la reglas de la zona por defecto. Si queremos ver las reglas de una zona en concreto solo debemos especificarla de la siguiente forma:

firewall-cmd --list-all --zone=work

Si quieres ver todas las reglas de todas las zonas lo puedes hacer con:

firewall-cmd --list-all-zones

Vamos a comenzar ahora a gregar reglas. En primer lugar podemos agregar o permitir una red interna a la dmz, un rango de IP’s al que se le permitan las reglas de la zona dmz. Esto lo podemos hacer con:

firewall-cmd --add-source=192.168.0.0/24 --zone=dmz

Con esto le decimos que todo lo que venga de ese rango de IP’s lo trate con las reglas de la zona dmz. Si no indicas la zona le asignará la zona por defecto, en este caso public.

Esta regla se va a aplicar inmediatamente, pero en caso de reiniciar el servicio se perderá. Para que no suceda esto debemos agregar la opción permanent de la siguiente forma:

firewall-cmd --add-source=192.168.0.0/24 --zone=dmz --permanent

En esta caso la regla no se aplica inmediatamente, sino que debemos reiniciar el servicio para que se aplique, pero con la salvedad de que será permanente, no se eliminará al reiniciar el servicio.

Podemos eliminar ese rango de IP’s con la opción remove de la siguiente forma:

firewall-cmd --remove-source=192.168.0.0/24 --zone=dmz --permanent

De nuevo debemos reinicar el servicio:

systemctl restart firewalld

Vamos ahora a gregar una interfaz a una zona, esto es para que todas las conexiones que entre por dicha interfaz se traten con la política de la zona que queramos. Esto lo podemos hacer con:

firewall-cmd --add-interface=enp0s1 --zone=dmz

Igual que en el caso anterior, si no usas –permanent al reiniciar el servicio desaparecerá esta configuración.

Del mismo modo podemos eliminarla con remove:

firewall-cmd --remove-interface=enp0s1 --zone=dmz

Tal vez lo más común es agregar y eliminar servicios y puertos. Para permitir un servicio lo haremos de la siguiente forma:

firewall-cmd --add-service=smtp --zone=dmz --permanent

Recuerda si no indicas que sea permanente se eliminar en el próximo reinicio del sistema.

Esta misma accióin podemos hacerla en lugar de agrengando el servicio, agregando el puerto. Para permitir un puerto en firewalld lo haremos de la siguiente forma:

firewall-cmd --add-port=25/tcp --zone=dmz -- permanent

Ten cuenta que tienes que añadir el puerto y el tipo tcp o udp.

Para que cargue esta nueva configuración podemos reiniciar el servicio o utilizar la opción reload del servicio de modo que no tenemos que reiniciarlo:

firewall-cmd --reload

Vamos ahora a eliminar el servicio con:

firewall-cmd --remove-service=smtp --zone=dmz --permanent

Y eliminar el puerto lo haríamos con:

firewall-cmd --remove-port=25/tcp --zone=dmz -- permanent

Reglas ricas o avanzadas

Con firewalld podemos utilizar reglas avanzadas con la opción add-rich-rule. La estructura básica sería:

firewall-cmd --add-rich-rule='regla'

Ahora veremos un par de ejemplo para ver la estructura o formato que debe tener la regla. Como siempre puedes obtener más ayuda con man:

man firewalld.richlanguage

Al final de la ayuda de man tienes varios ejemplos que te pueden servir de ayuda.

Vamos a ver un ejemplo donde vamos a aceptar todo el tráfico de una ip:

firewall-cmd --add-rich-rule='rule family="ipv4' source address="192.168.1.150" accept'

De este modo le decimos que todo lo que venga por IPv4 a la IP 192.168.1.150 sea aceptado.

Veamos ahora un ejemplo de redirección:

firewall-cmd --add-rich-rule='rule family IPv4 source address="192.168.1.120" forward-port to-addr="192.168.1.150" to-port="25" protocol="tcp" port="25"'

Con esto lo que estamos haciendo es redirigir todo lo que llegue por la IP 192.168.1.120 al puerto 25 al mismo puerto de la ip 192.168.1.150.

Por último, vamos a ignorar todo el tráfico que llegue por una determinada IP:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.4" drop'

Ya sabes cómo usar firewalld. Puedes aprender más en nuestra sección de servidores.

Espero que te haya sido de utilidad!

Publicado el 23-12-2020

Donar

Si te ha sido de ayuda y quieres hacer una donación te lo agradeceremos :)

Compartelo!


Deja un comentario

Comentanos

*

Ir arriba de la pagina