Administrar firewalld

Firewalld permite gestionar de forma dinámica las reglas de firewall, es decir, es posible implementar cambios en ejecución sin necesidad de reiniciar el servicio. Esta separación entre el entorno de ejecución y configuración permanente permite evaluar y testear las reglas sin hacer cambios permanentes en la configuración.

Firewalld sigue un diseño de dos capas:

  • Capa Núcleo, es responsable de gestionar la configuración y los backends tales como iptables, iptables6, ebtables, ipset, así como la carga de módulos del kernel.
  • Capa D-BUS, es la interface principal para modificar la configuración del firewall.

Esquema con el diseño de dos capas de firewalld

Configuración permanente y entorno de ejecución

  • La configuración permanente son archivos de texto plano localizados en el directorio /etc/firewalld/.
  • El entorno de ejecución es el conjunto de reglas cargadas en memoria que actualmente se están aplicando al firewall.

Cada vez que se inicia el servicio de firewalld, el demonio lee el archivo de configuración (configuración permanente) y lo carga en memoria creando el entorno de ejecución. Los cambios aplicados al entorno de ejecución no son guardados de forma automática a la configuración permanente.

Guardar la configuración del entorno de ejecución

Es posible guardar la configuración del entorno de ejecución mediante el comando firewall-cmd --runtime-to-permanent

Consultar estado del firewall

Listar zonas activas

firewall-cmd --get-active-zones

1
2
3
[root@sig-pre /]# firewall-cmd --get-active-zones
public
interfaces: eno16777984

Listar servicios disponibles

firewall-cmd --get-services

1
2
[root@sig-pre /]# firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

Obtener información sobre un servicio

firewall-cmd [-zone=zone] --info-service service

1
2
3
4
5
6
7
[root@sig-pre /]# firewall-cmd --info-service https
https
ports: 443/tcp
protocols:
source-ports:
modules:
destination:

Listar servicios permitidos

firewall-cmd [--zone=name] --list-services

1
2
[root@sig-pre /]# firewall-cmd --zone=public --list-services
dhcpv6-client http https ssh

Listar puertos permitidos

firewall-cmd [--zone=name] --list-ports

1
2
[root@sig-pre /]# firewall-cmd --zone=public --list-ports
20-21/tcp

Listar servicios y puertos permitidos

firewall-cmd [--zone=name] --list-all

1
2
3
4
5
6
7
8
9
10
[root@sig-pre /]# firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eno16777984
sources:
services: dhcpv6-client http https ssh
ports: 20-21/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Consultar si un puerto está permitido

firewall-cmd [--zone=name] --permanent --query-port=port[-port]/protocol

1
2
[root@sig-pre /]# firewall-cmd --permanent --query-port=20-21/tcp
yes

Permitir servicios y puertos

Permitir servicios

firewall-cmd [--zone=name] --add-service=service

1
2
[root@sig-pre /]# firewall-cmd --add-service https
success

No permitir servicios

firewall-cmd [--zone=name] --remove-service=service

1
2
[root@sig-pre /]# firewall-cmd --remove-service https
success

Permitir puertos

firewall-cmd [--zone=name] --add-port=portid[-portid]/protocol

1
2
[root@sig-pre /]# firewall-cmd --add-port=20-21/tcp
success

No permitir puertos

firewall-cmd [--zone=name] --remove-port=portid[-portid]/protocol

1
2
[root@sig-pre /]# firewall-cmd --remove-port=20-21/tcp
success

Redirecciones (forwards)

Añadir un reenvio de puertos

firewall-cmd [--zone=zone] --add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]

1
2
3
4
5
6
7
8
9
10
11
12
[root@sig-pre /]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.100.100
success
[root@sig-pre /]# firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eno16777984
sources:
services: dhcpv6-client http https ssh
ports: 20-21/tcp
masquerade: no
forward-ports: port=80:proto=tcp:toport=80:toaddr=192.168.100.100
icmp-blocks:
rich rules:

Nota: Para que el reenvío de puertos funcione como se espera normalmente es preciso habilitar el enmascaramiento de la IP de origen, SNAT o masquerade.

Eliminar un reenvio de puertos

firewall-cmd [--zone=zone] --remove-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]

1
2
3
4
5
6
7
8
9
10
11
12
[root@sig-pre /]# firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.100.100
success
[root@sig-pre /]# firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eno16777984
sources:
services: dhcpv6-client http https ssh
ports: 20-21/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Habilitar enmascaramiento de la IP de origen, SNAT o masquerade

firewall-cmd [--zone=zone] --add-masquerade

1
2
3
4
5
6
7
8
9
10
11
12
[root@sig-pre /]# firewall-cmd --add-masquerade
success
[root@sig-pre /]# firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eno16777984
sources:
services: dhcpv6-client http https ssh
ports: 20-21/tcp
masquerade: yes
forward-ports: port=80:proto=tcp:toport=80:toaddr=192.168.100.100
icmp-blocks:
rich rules:

Deshabilitar enmascaramiento de la IP de origen, SNAT o masquerade

firewall-cmd [--zone=zone] --remove-masquerade

1
2
3
4
5
6
7
8
9
10
11
12
[root@sig-pre /]# firewall-cmd --remove-masquerade
success
[root@sig-pre /]# firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eno16777984
sources:
services: dhcpv6-client http https ssh
ports: 20-21/tcp
masquerade: no
forward-ports: port=80:proto=tcp:toport=80:toaddr=192.168.100.100
icmp-blocks:
rich rules:

Gestionar servicios de firewalld

Crear un nuevo servicio

El proceso para crear un servicio de firewalld conlleva varias fases:

  1. --permanent --new-service=service, crear el servicio.
  2. --permanent --service=service --set-description=description, añadir una descripción.
  3. --permanent --service=service --add-protocol=protocol, permite el protocolo indicado.
  4. --permanent --service=service --add-port=portid[-portid]/protocol, permite el/los puertos indicado.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@sig-pre /]# firewall-cmd --permanent --new-service=my-custom-service
success
[root@sig-pre /]# firewall-cmd --permanent --service=my-custom-service --set-description="Esto es un ejemplo de servicio personalizado"
success
[root@sig-pre /]# firewall-cmd --permanent --service=my-custom-service --add-protocol=tcp
success
[root@sig-pre /]# firewall-cmd --permanent --service=my-custom-service --add-port=1401-1402/tcp
success
[root@sig-pre /]# systemctl restart firewalld
[root@sig-pre /]# firewall-cmd --info-service my-custom-service
my-custom-service
ports: 1401-1402/tcp
protocols: tcp
source-ports:
modules:
destination:
[root@sig-pre /]# firewall-cmd --permanent --service=my-custom-service --get-description
Esto es un ejemplo de servicio personalizado

Eliminar un servicio

1
2
3
4
5
[root@sig-pre /]# firewall-cmd --permanent --delete-service=my-custom-service
success
[root@sig-pre /]# systemctl restart firewalld
[root@sig-pre /]# firewall-cmd --info-service my-custom-service
Error: INVALID_SERVICE: my-custom-service

Más información

Entradas de interés

Contenidos
  1. 1. Configuración permanente y entorno de ejecución
    1. 1.1. Guardar la configuración del entorno de ejecución
  2. 2. Consultar estado del firewall
    1. 2.1. Listar zonas activas
    2. 2.2. Listar servicios disponibles
    3. 2.3. Obtener información sobre un servicio
    4. 2.4. Listar servicios permitidos
    5. 2.5. Listar puertos permitidos
    6. 2.6. Listar servicios y puertos permitidos
    7. 2.7. Consultar si un puerto está permitido
  3. 3. Permitir servicios y puertos
    1. 3.1. Permitir servicios
    2. 3.2. No permitir servicios
    3. 3.3. Permitir puertos
    4. 3.4. No permitir puertos
  4. 4. Redirecciones (forwards)
    1. 4.1. Añadir un reenvio de puertos
    2. 4.2. Eliminar un reenvio de puertos
    3. 4.3. Habilitar enmascaramiento de la IP de origen, SNAT o masquerade
    4. 4.4. Deshabilitar enmascaramiento de la IP de origen, SNAT o masquerade
  5. 5. Gestionar servicios de firewalld
    1. 5.1. Crear un nuevo servicio
    2. 5.2. Eliminar un servicio
  6. 6. Más información