Usando firewalld

Usando firewalld

What is firewalld?

A firewall is a way to protect machines from any unwanted traffic from outside. It enables users to control incoming network traffic on host machines by defining a set of firewall rules. These rules are used to sort the incoming traffic and either block it or allow through.

firewalld is a firewall service daemon that provides a dynamic customizable host-based firewall with a D-Bus interface. Being dynamic, it enables creating, changing, and deleting the rules without the necessity to restart the firewall daemon each time the rules are changed.

firewalld uses the concepts of zones and services, that simplify the traffic management.

Zones are predefined sets of rules. Network interfaces and sources can be assigned to a zone. The traffic allowed depends on the network your computer is connected to and the security level this network is assigned. Firewall services are predefined rules that cover all necessary settings to allow incoming traffic for a specific service and they apply within a zone.

Services use one or more ports or addresses for network communication. Firewalls filter communication based on ports. To allow network traffic for a service, its ports must be open. firewalld blocks all traffic on ports that are not explicitly set as open. Some zones, such as trusted, allow all traffic by default.

Recursos Adicionales

For more information about using firewalld and configuring zones and services, see firewalld documentation or Fedora wiki:firewalld

Comprobando el estado de firewalld

Visualizando el estado de firewalld

El servicio cortafuegos, firewalld, está instalado en el sistema de forma predeterminada. Use la interfaz CLI firewalld para comprobar que el servicio está corriendo.

Para ver el estado del servicio:

$ sudo firewall-cmd --state

Para más información sobre el estado del servicio, utilice el sub comando systemctl status:

$ sudo systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor pr
   Active: active (running) since Mon 2017-12-18 16:05:15 CET; 50min ago
     Docs: man:firewalld(1)
 Main PID: 705 (firewalld)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/firewalld.service
           └─705 /usr/bin/python3 -Es /usr/sbin/firewalld --nofork --nopid

Es más, es importante saber cómo está configurado firewalld y que reglas se aplican antes de intentar editar los ajustes. Para visualizar los ajustes del cortafuegos, vea [sec-Visualizando_Ajustes_Actuales_de_firewalld]

Visualizando los ajustes actuales de firewalld

Visualizando los servicios permitidos usando GUI

Para visualizar la lista de servicios usando la herramienta gráfica firewall-config, pulse la tecla Super para entrar en la Vista General de Actividades, teclee firewall y pulse Enter. Aparece la herramienta firewall-config. Puede visualizar ahora la lista de servicios bajo la pestaña Servicios.

Alternativamente, para iniciar la herramienta gráfica de configuración de cortafuegos usando la línea de comandos, introduzca el siguiente comando:

$ firewall-config

Se abre la ventana Configuración de Cortafuegos. Tenga en cuenta que este comando puede ser ejecutado por un usuario normal, pero ocasionalmente se le pedirá una contraseña de administrador.

Visualizando los ajustes de firewalld usando CLI

With the CLI client, it is possible to get different views of the current firewall settings. The --list-all option shows a complete overview of the firewalld settings.

firewalld uses zones to manage the traffic. If a zone is not specified by the --zone option, the command is effective in the default zone assigned to the active network interface and connection.

To list all the relevant information for the default zone:

$ firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

To specify the zone for which to display the settings, add the --zone=zone-name argument to the firewall-cmd --list-all command, for example:

~]# firewall-cmd --list-all --zone=home
home
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ssh mdns samba-client dhcpv6-client
... [output truncated]

To see the settings for particular information, such as services or ports, use a specific option. See the firewalld manual pages or get a list of the options using the command help:

$ firewall-cmd --help

Usage: firewall-cmd [OPTIONS...]

General Options
  -h, --help           Prints a short help text and exists
  -V, --version        Print the version string of firewalld
  -q, --quiet          Do not print status messages

Status Options
  --state              Return and print firewalld state
  --reload             Reload firewall and keep state information
... [output truncated]

For example, to see which services are allowed in the current zone:

$ firewall-cmd --list-services
samba-client ssh dhcpv6-client

Listing the settings for a certain subpart using the CLI tool can sometimes be difficult to interpret. For example, you allow the SSH service and firewalld opens the necessary port (22) for the service. Later, if you list the allowed services, the list shows the SSH service, but if you list open ports, it does not show any. Therefore, it is recommended to use the --list-all option to make sure you receive a complete information.

Installing firewalld

Install firewalld:
  1. Run this command on the command line:

sudo dnf install firewalld

Starting firewalld

Start firewalld, by entering the following commands:

$ sudo systemctl unmask firewalld
$ sudo systemctl start firewalld

To make firewalld start automatically at system start:

$ sudo systemctl enable firewalld

Stopping firewalld

To stop firewalld, enter the following command as root:

$ sudo systemctl stop firewalld

Prevent firewalld from starting automatically at system start, enter the following command as root:

$ sudo systemctl disable firewalld

Make sure firewalld is not started by accessing the firewalld D-Bus interface and also if other services require firewalld, enter the following command as root:

$ sudo systemctl mask firewalld

Runtime and permanent settings

Any changes made while firewalld is running will be lost when firewalld is restarted. When firewalld is restarted, the settings revert to their permanent values.

These changes are said to be made in runtime mode.

To make the changes persistent across reboots, apply them again using the --permanent option. Alternatively, to make changes persistent while firewalld is running, use the --runtime-to-permanent firewall-cmd option.

If you make changes while firewalld is running using only the --permanent option, they do not become effective until firewalld is restarted. However, restarting firewalld briefly stops the networking traffic, causing disruption to your system.

Cambiando los ajustes en tiempo de ejecución y en la configuración permanente usando CLI

Al utilizar la CLI, usted sólo puede modificar bien en el tiempo de ejecución o bien de modo permanente. Para modificar los ajustes del cortafuegos de modo permanente, use la opción --permanent con el comando firewall-cmd.

$ sudo firewall-cmd --permanent <otras opciones>

Sin esta opción, el comando modifica en modo de tiempo de ejecución. Para cambiar los ajustes en ambos modos usted puede usar dos métodos:

  • Cambiar los ajustes de tiempo de ejecución y después hacerlos permanente de la siguiente forma:

    1. Cambio de los ajustes en tiempo de ejecución:

      firewall-cmd <otras opciones>

    2. Use --runtime-to-permanent para hacer los cambios permanentes.

      firewall-cmd --runtime-to-permanent

  • Establezca los ajustes permanentes y recargue los ajustes en el modo tiempo de ejecución:

    1. Hacer los cambios en modo permanente:

      firewall-cmd --permanent <otras opciones>

    2. Recargar los ajustes:

      firewall-cmd --reload

El primer método le permite probar los ajustes antes de aplicarlos en modo permanente.

Es posible que un ajuste incorrecto puede llevar a que el usuario se bloquee a si mismo en la máquina. Para evitar esto use la opción --timeout. La utilización de esta opción significa que después de una cantidad de tiempo especificada cualquier cambio vuelve a su estado anterior. No puede usar la opción --permanent con la opción --timeout.

Por ejemplo, para añadir el servicio SSH durante 15 minutos use este comando:

$ sudo firewall-cmd --add-service=ssh --timeout 15m

El servicio SSH estará disponible hasta que se quite después de 15 minutos.

Controlling ports using firewalld

What are ports?

Ports are logical devices that enable an operating system to receive and distinguish network traffic and forward it accordingly to system services. These are usually represented by a daemon that listens on the port, that is it waits for any traffic coming to this port.

Normally, system services listen on standard ports that are reserved for them. The httpd daemon, for example, listens on port 80. However, system administrators may configure daemons to listen on different ports to enhance security.

Abriendo un puerto

A través de los puerto abiertos el sistema es accesible desde el exterior lo que representa un riesgo de seguridad. Generalmente, mantenga los puerto cerrado y sólo los abra si se requiere para ciertos servicios.

Abriendo un puerto usando la línea de comandos
  1. Obtener una lista de puertos permitidos en la zona actual:

    $ firewall-cmd --list-ports
  2. Añadir un puerto a los puertos permitidos para abrirlo para el tráfico entrante:

    $ sudo firewall-cmd --add-port=port-number/port-type
  3. Hacer persistentes los nuevos ajustes:

    $ sudo firewall-cmd --runtime-to-permanent

Los tipos de puerto son tcp, udp, sctp o dccp. El tipo debe coincidir con el tipo de red de comunicación.

Cerrando un puerto

Cuando ya no es necesario un puerto abierto, cierre ese puerto en firewalld. Es altamente recomendable cerrar todos los puertos innecesarios tan pronto como dejen de usarse puesto que dejar un puerto abierto representa un alto riesgo para la seguridad.

Cerrando un puerto usando la línea de comandos

Para cerrar un puerto, bórrelo de la lista de puertos permitidos:

  1. List all allowed ports:

    $ firewall-cmd --list-ports

    This command will only give you a list of ports that have been opened as ports. You will not be able to see any open ports that have been opened as a service. Therefore, you should consider using the --list-all option instead of --list-ports.

  2. Remove the port from the allowed ports to close it for the incoming traffic:

    $ sudo firewall-cmd --remove-port=port-number/port-type
  3. Hacer persistentes los nuevos ajustes:

    $ sudo firewall-cmd --runtime-to-permanent