One place for hosting & domains

      firewalld

      Cómo instalar un firewall con firewalld en CentOS 8


      Introducción

      firewalld es un software de administración de firewalls disponible para muchas distribuciones de Linux que funciona como front-end para los sistemas de filtrado de paquetes en kernel nftables o iptables de Linux.

      En esta guía, aprenderá a instalar un firewall de firewalld para su servidor de CentOS 8 y los aspectos básicos de la administración del firewall con la herramienta administrativa firewall-cmd.

      Requisitos previos

      Para completar este tutorial, necesitará un servidor con CentOS 8. Se asumirá que inició sesión en este servidor como usuario no root con privilegios sudo. Para configurarlo, consulte nuestra Guía de configuración inicial de servidores para CentOS 8.

      Conceptos básicos de firewalld

      Antes de comenzar a hablar sobre cómo usar realmente la utilidad firewall-cmd para gestionar la configuración de su firewall, debemos familiarizarnos con algunos conceptos que presenta la herramienta.

      Zonas

      El demonio firewalld gestiona grupos de reglas usando entidades denominadas zonas. Las zonas son conjuntos de reglas que determinan el tráfico que debe permitirse según el nivel de confianza en la red. Se asignan interfaces de red a las zonas para indicar qué comportamientos debe permitir el firewall.

      Para las computadoras que pueden cambiar de red con frecuencia (como las portátiles), este tipo de flexibilidad proporciona un buen método para cambiar sus reglas en función de su entorno.  Es posible que tenga reglas estrictas que prohíban la mayor parte del tráfico cuando opera en una red WiFi pública y restricciones más flexibles cuando se conecta a su red doméstica.  Para los servidores, estas zonas no suelen ser tan importantes porque el entorno de red rara vez, o nunca, cambia.

      Independientemente de lo dinámico que pueda ser su entorno de red, es útil familiarizarse con la idea general detrás de cada una de las zonas predefinidas de firewalld.  A continuación, presentamos las zonas predefinidas de firewalld ordenadas de la menos confiable a la más confiable:

      • drop: tiene el menor nivel de confianza. Todas las conexiones entrantes se descartan sin respuesta y solo se permiten conexiones salientes.
      • block: es similar a la anterior, pero en lugar de simplemente descartar las conexiones, las solicitudes entrantes se rechazan con un mensaje icmp-host-prohibited o icmp6-adm-prohibited.
      • public: representa redes públicas que no son de confianza. No se confía en otras computadoras, pero puede permitir ciertas conexiones entrantes según cada caso individual.
      • external: redes externas, en caso de que esté usando el firewall como puerta de enlace. Está configurada para enmascaramiento de NAT para que su red interna permanezca privada, pero sea accesible.
      • internal: el otro lado de la zona externa; se usa para la parte interna de una puerta de enlace. Las computadoras son bastante confiables y hay algunos servicios adicionales disponibles.
      • dmz: se utiliza para computadoras ubicadas en una red perimetral (equipos aislados que no tendrán acceso al resto de su red).  Solo se permiten ciertas conexiones entrantes.
      • work: se utiliza para las máquinas de trabajo. Se confía en la mayoría de las computadoras de la red. Se pueden permitir algunos servicios más.
      • home: un entorno doméstico. En general, implica que se confía en la mayoría de las otras computadoras y que se aceptarán algunos servicios más.
      • trusted: se confía en todas las máquinas de la red. Es la más abierta de las opciones disponibles y debe usarse con moderación.

      Para usar el firewall, podemos crear reglas, alterar las propiedades de nuestras zonas y luego asignar nuestras interfaces de red a las zonas que sean más apropiadas.

      Permanencia de las reglas

      En firewalld, las reglas se pueden aplicar al conjunto de reglas de tiempo de ejecución actual o se pueden establecer como permanentes. Cuando se añade o modifica una regla, por defecto, solo se modifica el firewall que se está ejecutando en ese momento. Después del siguiente reinicio, o al volver a cargar el servicio firewalld, solo se mantendrán las reglas permanentes.

      En la mayoría de las operaciones de firewall-cmd, se puede usar un indicador --permanent para indicar que los cambios se deben aplicar a la configuración permanente. Además, el firewall que esté en ejecución se puede guardar en la configuración permanente con el comando firewall-cmd --runtime-to-permanent.

      Esta separación entre la configuración en tiempo de ejecución y la permanente le permite probar reglas de forma segura en su firewall activo y, luego, volver a cargarlo para comenzar de nuevo si hay problemas.

      Instalar y habilitar firewalld

      firewalld está instalado por defecto en algunas distribuciones de Linux, entre ellas, muchas imágenes de CentOS 8. Sin embargo, es posible que deba instalar firewalld de forma manual:

      • sudo dnf install firewalld

      Después de instalar firewalld, puede habilitar el servicio y reiniciar su servidor. Tenga en cuenta que habilitar firewalld hará que el servicio se inicie en el arranque. Es recomendable que cree las reglas de su firewall y las pruebe antes de configurar este comportamiento para evitar posibles problemas.

      • sudo systemctl enable firewalld
      • sudo systemctl start firewalld

      Cuando el servidor se reinicie, se abrirá el firewall, sus interfaces de red se asignarán a las zonas que configuró (o a las zonas configuradas por defecto) y se aplicará toda regla relacionada con las zonas a las interfaces asociadas.

      Podemos verificar que el servicio esté en ejecución y que sea accesible al escribir lo siguiente:

      • sudo firewall-cmd --state

      Output

      running

      Esto indica que nuestro firewall se está ejecutando con la configuración predeterminada.

      Familiarizarse con las reglas actuales del firewall

      Antes de comenzar a realizar las modificaciones, debemos familiarizarnos con el entorno y las reglas predeterminadas que proporciona firewalld.

      Explorar las zonas predeterminadas

      Podemos ver qué zona está selecciona actualmente como predeterminada al escribir lo siguiente:

      • firewall-cmd --get-default-zone

      Output

      public

      Debido a que no dimos a firewalld ningún comando para que se desvíe de la zona predeterminada, y a que ninguna de nuestras interfaces está configurada para vincularse con otra zona, esa zona será también la única active (la que controla el tráfico de nuestras interfaces). Podemos verificarlo al escribir lo siguiente:

      • firewall-cmd --get-active-zones

      Output

      public interfaces: eth0 eth1

      Aquí, podemos ver que, en nuestro servidor de ejemplo, el firewall controla dos interfaces (eth0 y eth1). Las dos se están gestionando de acuerdo con las reglas definidas para la zona public.

      ¿Pero cómo sabemos qué reglas están relacionadas con la zona public? Podemos imprimir la configuración predeterminada de la zona al escribir lo siguiente:

      • sudo firewall-cmd --list-all

      Output

      public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      El resultado nos permite determinar que esta es una zona predeterminada y activa, y que las interfaces eth0 y eth1 están asociadas a ella (ya sabíamos todo esto de nuestras consultas anteriores). Sin embargo, también podemos observar que esta zona permite tráfico de un cliente DHCP (para la asignación de direcciones IP), SSH (para administración remota) y Cockpit (una consola web).

      Explorar zonas alternativas

      Ahora tendrá una buena idea de la configuración de la zona predeterminada y activa. También podemos obtener información sobre otras zonas.

      Para obtener una lista de las zonas disponibles, escriba lo siguiente:

      Output

      block dmz drop external home internal public trusted work

      Podemos ver la configuración específica asociada con una zona incorporando el parámetro --zone= a nuestro comando --list-all:

      • sudo firewall-cmd --zone=home --list-all

      Output

      home target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Puede ver todas las definiciones de zona usando la opción --list-all-zones. Puede ser conveniente canalizar el resultado a un paginador para visualizarlo de forma más sencilla:

      • sudo firewall-cmd --list-all-zones | less

      A continuación, aprenderemos a asignar zonas a interfaces de red.

      Seleccionar zonas para sus interfaces

      A menos que haya configurado sus interfaces de red de otro modo, cada interfaz se colocará en la zona predeterminada cuando se inicie el firewall.

      Cambiar la zona de una interfaz

      Puede mover una interfaz entre zonas durante una sesión usando el parámetro --zone= en combinación con el parámetro --change-interface=. Al igual que con todos los comandos que modifican el firewall, deberá usar sudo.

      Por ejemplo, podemos mover nuestra interfaz eth0 a la zona home escribiendo lo siguiente:

      • sudo firewall-cmd --zone=home --change-interface=eth0

      Output

      success

      Nota: Al desplazar una interfaz a una zona nueva, tenga en cuenta que probablemente modifique los servicios que funcionarán. Por ejemplo, en este caso nos desplazamos a la zona home, que tiene SSH habilitado. Esto quiere decir que nuestra conexión no debería descartarse. No todas las zonas tienen SSH habilitado de forma predeterminada, y el cambio a una de estas zonas podría causar que la conexión se descarte, lo que le impediría volver a iniciar sesión en su servidor.

      Podemos verificar si el desplazamiento se realizó de forma correcta al volver a consultar las zonas activas:

      • firewall-cmd --get-active-zones

      Output

      home interfaces: eth0 public interfaces: eth1

      Ajustar la zona predeterminada

      Si todas sus interfaces se pueden gestionar bien con una sola zona, probablemente sea más fácil designar la mejor zona como predeterminada y, luego, usarla para su configuración.

      Puede cambiar la zona predeterminada con el parámetro --set-default-zone=, que cambiará de inmediato cualquier interfaz que esté usando la zona predeterminada:

      • sudo firewall-cmd --set-default-zone=home

      Output

      success

      Establecer reglas para sus aplicaciones

      Repasemos la manera básica de definir excepciones de firewall para los servicios que desee que estén disponibles.

      Agregar un servicio a sus zonas

      El método más directo es agregar los servicios o puertos que necesita a las zonas que está utilizando.  Puede obtener una lista de las definiciones de servicio disponibles con la opción --get-services:

      • firewall-cmd --get-services

      Output

      RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

      Nota: Puede obtener más información sobre cada uno de estos servicios consultando su archivo .xml asociado en el directorio /usr/lib/firewalld/services. Por ejemplo, el servicio SSH se define de la siguiente manera:

      /usr/lib/firewalld/services/ssh.xml

      <?xml version="1.0" encoding="utf-8"?>
      <service>
        <short>SSH</short>
        <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
        <port protocol="tcp" port="22"/>
      </service>
      

      Puede habilitar un servicio para una zona usando el parámetro --add-service=. La operación actuará sobre la zona predeterminada o cualquier zona que se especifique en el parámetro --zone=. Por defecto, solo se aplica a la sesión de firewall actual. Puede ajustar la configuración permanente del firewall al incluir el indicador --permanent.

      Por ejemplo, si ejecutamos un servidor web que proporciona tráfico HTTP convencional, podemos permitir temporalmente este tráfico para las interfaces de nuestra zona public escribiendo lo siguiente:

      • sudo firewall-cmd --zone=public --add-service=http

      Puede omitir el indicador --zone= si desea modificar la zona predeterminada. Podemos verificar si la operación se realizó de forma correcta usando las operaciones --list-all o --list-services:

      • sudo firewall-cmd --zone=public --list-services

      Output

      cockpit dhcpv6-client http ssh

      Una vez que haya probado que todo funcione como se espera, probablemente desee modificar las reglas permanentes del firewall para que su servicio siga estando disponible después de un reinicio.  Podemos hacer que nuestro cambio anterior sea permanente al volver a escribirlo y agregar el indicador --permanent:

      • sudo firewall-cmd --zone=public --add-service=http --permanent

      Output

      success

      Alternativamente, puede usar el indicador --runtime-to-permanent para guardar la configuración del firewall que se está ejecutando en la configuración permanente:

      • sudo firewall-cmd --runtime-to-permanent

      Tenga cuidado con esto, ya que todos los cambios que realice en el firewall en ejecución se aplicarán de forma permanente.

      Independientemente del método que elija, puede verificar si se aplicó correctamente al agregar el indicador --permanent a la operación --list-services. Debe usar sudo para toda operación con --permanent:

      • sudo firewall-cmd --zone=public --list-services --permanent

      Output

      cockpit dhcpv6-client http ssh

      Ahora, su zona public permitirá tráfico web HTTP en el puerto 80. Si su servidor web está configurado para usar SSL/TLS, también querrá agregar el servicio https. Podemos agregarlo a la sesión actual y al conjunto de reglas permanentes escribiendo lo siguiente:

      • sudo firewall-cmd --zone=public --add-service=https
      • sudo firewall-cmd --zone=public --add-service=https --permanent

      ¿Qué sucede si no hay ningún servicio adecuado disponible?

      Los servicios que se incluyen con la instalación de firewalld representan muchas de las aplicaciones más frecuentes a las que podría querer permitir el acceso. Sin embargo, es probable que haya escenarios en los que estos servicios no se ajusten a sus requisitos.

      En ese caso, tendrá dos opciones.

      Abrir un puerto para sus zonas

      La manera más sencilla de agregar compatibilidad con una aplicación específica es abrir los puertos que utiliza en las zonas adecuadas. Para hacerlo, debe especificar el puerto o el intervalo de puertos y su protocolo asociado (TCP o UDP).

      Por ejemplo, si nuestra aplicación se ejecuta en el puerto 5000 y utiliza TCP, podríamos agregar esta información temporalmente a la zona public usando el parámetro --add-port=. Los protocolos se pueden designar como tcp o udp:

      • sudo firewall-cmd --zone=public --add-port=5000/tcp

      Output

      success

      Podemos verificar si el resultado es correcto usando la operación --list-ports:

      • sudo firewall-cmd --zone=public --list-ports

      Output

      5000/tcp

      También se puede especificar un intervalo de puertos secuenciales al separar el puerto inicial y el final del intervalo con un guión. Por ejemplo, si nuestra aplicación utiliza los puertos UDP 4990 a 4999, podríamos abrirlos en la zona public al escribir lo siguiente:

      • sudo firewall-cmd --zone=public --add-port=4990-4999/udp

      Después de probar estos cambios, probablemente deseemos agregarlos al firewall permanente. Para hacerlo, utilice sudo firewall-cmd --runtime-to-permanent o vuelva a ejecutar los comandos con el indicador --permanent:

      • sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
      • sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
      • sudo firewall-cmd --zone=public --permanent --list-ports

      Output

      success success 5000/tcp 4990-4999/udp

      Definir un servicio

      Abrir puertos para sus zonas es una solución sencilla, pero puede ser difícil llevar un registro de a cuál corresponde cada uno. Si alguna vez retira un servicio de su servidor, puede resultarle difícil recordar los puertos abiertos que siguen siendo necesarios. Para evitar que esto suceda, se puede definir un servicio nuevo.

      Los servicios son conjuntos de puertos con un nombre y una descripción asociados. El uso de servicios es más fácil de administrar que el de puertos, pero requiere cierto trabajo previo. La forma más sencilla de comenzar es copiar una secuencia de comandos existente (ubicada en /usr/lib/firewalld/services) al directorio /etc/firewalld/services donde el firewall busca definiciones no estándar.

      Por ejemplo, podríamos copiar la definición del servicio SSH para usarla en nuestra definición de servicio example de la siguiente manera: El nombre del archivo sin el sufijo .xml será el nombre del servicio en la lista de servicios del firewall:

      • sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml

      Ahora, puede ajustar la definición que se encuentra en el archivo que copió. Primero, ábralo en el editor de texto que prefiera. En este tutorial, usaremos vi:

      • sudo vi /etc/firewalld/services/example.xml

      Para comenzar, el archivo contendrá la definición de SSH que copió:

      /etc/firewalld/services/example.xml

      <?xml version="1.0" encoding="utf-8"?>
      <service>
        <short>SSH</short>
        <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
        <port protocol="tcp" port="22"/>
      </service>
      

      En realidad, esta definición está compuesta, en su mayoría, por metadatos. Es conveniente que cambie el nombre corto del servicio entre las etiquetas <short>. Es el nombre de su servicio legible por el ser humano. También debería agregar una descripción para tener más información si alguna vez necesita auditar el servicio. La única configuración que debe hacer que realmente afecta la funcionalidad del servicio probablemente sea la definición del puerto en la que identifica el número de puerto y el protocolo que desea abrir.  Se pueden especificar varias etiquetas <port/>.

      Imagine que tenemos que abrir el puerto 7777 para TCP y el 8888 para UDP en nuestro servicio example. Podemos modificar la definición existente con algo similar a lo siguiente:

      /etc/firewalld/services/example.xml

      <?xml version="1.0" encoding="utf-8"?>
      <service>
        <short>Example Service</short>
        <description>This is just an example service. It probably shouldn't be used on a real system.</description>
        <port protocol="tcp" port="7777"/>
        <port protocol="udp" port="8888"/>
      </service>
      

      Guarde y cierre el archivo.

      Vuelva a cargar el firewall para poder acceder a su nuevo servicio:

      • sudo firewall-cmd --reload

      Puede observar que, ahora, se encuentra en la lista de servicios disponibles:

      • firewall-cmd --get-services

      Output

      RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server example finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

      Ahora, puede usar este servicio en sus zonas como lo haría habitualmente.

      Crear sus propias zonas

      Si bien las zonas predefinidas probablemente sean más que suficientes para la mayoría de los usuarios, puede ser útil definir zonas propias que describan mejor su función.

      Por ejemplo, podría resultarle útil crear una zona para su servidor web que se llame publicweb. Sin embargo, podría querer tener otra zona configurada para el servicio DNS que proporciona en su red privada. Sería conveniente denominarla “privateDNS”.

      Cuando agrega una zona, la debe añadir a la configuración permanente del firewall. Luego, puede volver a cargarlo para que la configuración se aplique a su sesión en ejecución. Por ejemplo, podemos crear las dos zonas que mencionamos anteriormente al escribir lo siguiente:

      • sudo firewall-cmd --permanent --new-zone=publicweb
      • sudo firewall-cmd --permanent --new-zone=privateDNS

      Puede verificar que estén presentes en su configuración permanente al escribir lo siguiente:

      • sudo firewall-cmd --permanent --get-zones

      Output

      block dmz drop external home internal privateDNS public publicweb trusted work

      Como se indicó anteriormente, todavía no estarán disponibles en el firewall en ejecución:

      Output

      block dmz drop external home internal public trusted work

      Vuelva a cargar el firewall para aplicar estas nuevas zonas a la configuración activa en ejecución:

      • sudo firewall-cmd --reload
      • firewall-cmd --get-zones

      Output

      block dmz drop external home internal privateDNS public publicweb trusted work

      Ahora, puede comenzar a asignar los servicios y puertos apropiados a sus zonas. Es recomendable ajustar el firewall en ejecución y probar los cambios antes de guardarlos en la configuración permanente. Por ejemplo, podría querer agregar los servicios SSH, HTTP y HTTPS a la zona publicweb:

      • sudo firewall-cmd --zone=publicweb --add-service=ssh
      • sudo firewall-cmd --zone=publicweb --add-service=http
      • sudo firewall-cmd --zone=publicweb --add-service=https
      • sudo firewall-cmd --zone=publicweb --list-all

      Output

      publicweb target: default icmp-block-inversion: no interfaces: sources: services: http https ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Del mismo modo, podríamos agregar el servicio DNS a nuestra zona privateDNS:

      • sudo firewall-cmd --zone=privateDNS --add-service=dns
      • sudo firewall-cmd --zone=privateDNS --list-all

      Output

      privateDNS target: default icmp-block-inversion: no interfaces: sources: services: dns ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Luego, podríamos cambiar nuestras interfaces a estas nuevas zonas para probarlas:

      • sudo firewall-cmd --zone=publicweb --change-interface=eth0
      • sudo firewall-cmd --zone=privateDNS --change-interface=eth1

      En este punto, podrá probar su configuración. Si los valores son correctos, querrá agregar estas reglas a la configuración permanente. Podría hacerlo al volver a ejecutar todos los comandos con el indicador --permanent, pero, en este caso, usaremos el indicador --runtime-to-permanent para guardar toda nuestra configuración en tiempo de ejecución de forma permanente:

      • sudo firewall-cmd --runtime-to-permanent

      Después de aplicar estas reglas de forma permanente, vuelva a cargar el firewall para verificar que los cambios se conserven:

      • sudo firewall-cmd --reload

      Corrobore que se hayan asignado las zonas correctas:

      • firewall-cmd --get-active-zones

      Output

      privateDNS interfaces: eth1 publicweb interfaces: eth0

      Compruebe, también, que los servicios correspondientes estén disponibles en las zonas:

      • sudo firewall-cmd --zone=publicweb --list-services

      Output

      http https ssh
      • sudo firewall-cmd --zone=privateDNS --list-services

      Output

      dns

      ¡Configuró sus propias zonas de forma correcta! Si desea que una de estas zonas sea predeterminada para otras interfaces, recuerde configurar ese comportamiento con el parámetro --set-default-zone=:

      • sudo firewall-cmd --set-default-zone=publicweb

      Conclusión

      De esta manera, contará con conocimientos bastante completos sobre cómo administrar el servicio firewalld en su sistema de CentOS para usarlo a diario.

      El servicio firewalld le permite configurar reglas y conjuntos de reglas que se pueden mantener y que tienen en cuenta su entorno de red. Permite una transición sin problemas entre diferentes políticas de firewall mediante el uso de zonas y les brinda a los administradores la posibilidad de sintetizar la gestión de los puertos en definiciones de servicio más sencillas. Al adquirir conocimientos prácticos de este sistema, podrá aprovechar la flexibilidad y la potencia que ofrece esta herramienta.

      Para obtener más información sobre firewalld, consulte la documentación oficial de firewalld.



      Source link

      Comment configurer un pare-feu en utilisant firewalld sur CentOS 8


      Introduction

      firewalld est un logiciel de gestion de pare-feu disponible pour de nombreuses distributions Linux, qui fait office d interface pour les systèmes de filtrage de paquets nftables ou iptables du noyau de Linux.

      Dans ce guide, nous allons vous montrer comment mettre en place un pare-feu pour votre serveur CentOS 8, et aborder les bases de la gestion du pare-feu avec l’outil d’administration firewall-cmd.

      Conditions préalables

      Pour suivre ce tutoriel, vous aurez besoin d’un serveur qui exécute CentOS 8. Nous supposerons que vous êtes connecté à ce serveur en tant qu’utilisateur non root et sudo. Pour le configurer, consultez notre Guide de configuration initiale du serveur pour CentOS 8.

      Concepts de base dans firewalld

      Avant de commencer à parler de la façon d’utiliser réellement l’utilitaire firewall-cmd pour gérer la configuration de votre pare-feu, nous devons nous familiariser avec quelques concepts que l’outil introduit.

      Zones

      Le démon firewalld gère des groupes de règles en utilisant des entités appelées zones. Les zones sont des ensembles de règles qui dictent quel trafic doit être autorisé en fonction du niveau de confiance que vous avez dans le réseau. Les interfaces réseau sont attribuées à une zone pour dicter le comportement que le pare-feu devrait autoriser.

      Pour les ordinateurs susceptibles de passer fréquemment d’un réseau à l’autre (comme les ordinateurs portables), ce type de flexibilité constitue une bonne méthode pour modifier vos règles en fonction de votre environnement. Vous pouvez avoir mis en place des règles strictes interdisant la plupart du trafic lorsque vous opérez sur un réseau WiFi public, tout en autorisant des restrictions plus souples lorsque vous êtes connecté à votre réseau domestique. Pour un serveur, ces zones ne sont souvent pas aussi importantes car l’environnement réseau change rarement, voire jamais.

      Quelle que soit la dynamique de votre environnement réseau, il est toujours utile de se familiariser avec l’idée générale qui se cache derrière chacune des zones prédéfinies pour firewalld.  Les zones prédéfinies au sein de firewalld sont, dans l’ordre, de la moins fiable à la plus fiable :

      • drop : le niveau de confiance le plus bas. Toutes les connexions entrantes sont interrompues sans réponse et seules les connexions sortantes sont possibles.
      • block : similaire à ce qui précède, mais au lieu de simplement interrompre les connexions, les demandes entrantes sont rejetées avec un message icmp-host-prohibited ou icmp6-adm-prohibited.
      • public : représente les réseaux publics, non fiables. Vous ne faites pas confiance aux autres ordinateurs, mais vous pouvez autoriser certaines connexions entrantes au cas par cas.
      • external : les réseaux externes dans l’éventualité où vous utilisez le pare-feu comme passerelle. Il est configuré pour le masquage NAT de sorte que votre réseau interne reste privé mais accessible.
      • interne : l’autre côté de la zone externe, utilisé pour la partie interne d’une passerelle. Les ordinateurs sont assez fiables et certains services supplémentaires sont disponibles.
      • dmz : utilisé pour les ordinateurs situés dans un DMZ (ordinateurs isolés qui n’auront pas accès au reste de votre réseau). Seules certaines connexions entrantes sont autorisées.
      • work : utilisé pour les machines de travail. Fait confiance à la plupart des ordinateurs du réseau. Quelques services supplémentaires pourraient être autorisés.
      • home : un environnement domestique. Cela implique généralement que vous faites confiance à la plupart des autres ordinateurs et que quelques services supplémentaires seront acceptés.
      • trusted : fais confiance à toutes les machines du réseau. La plus ouverte des options disponibles et doit être utilisée avec parcimonie.

      Pour utiliser le pare-feu, nous pouvons créer des règles et modifier les propriétés de nos zones, puis affecter nos interfaces réseau aux zones les plus appropriées.

      Permanence de la règle

      Dans firewalld, les règles peuvent être appliquées au jeu de règles d’exécution actuel ou être rendues permanentes. Lorsqu’une règle est ajoutée ou modifiée, par défaut, seul le pare-feu en cours d’exécution est modifié. Après le prochain redémarrage – ou rechargement du service firewalld – seules les règles permanentes subsisteront.

      La plupart des opérations firewall-cmd peuvent prendre un drapeau --permanent pour indiquer que les changements doivent être appliqués à la configuration permanente. En outre, le pare-feu en cours d’exécution peut être enregistré dans la configuration permanente avec la commande firewall-cmd --runtime-to-permanent

      Cette séparation entre les configurations d’exécution et permanente signifie que vous pouvez tester en toute sécurité les règles dans votre pare-feu actif, puis les recharger pour recommencer à zéro en cas de problème.

      Installation et activation de firewalld

      firewalld est installé par défaut sur certaines distributions Linux, dont de nombreuses images de CentOS 8. Cependant, il peut vous être nécessaire d’installer firewalld vous-même :

      • sudo dnf install firewalld

      Après avoir installé firewalld, vous pouvez activer le service et redémarrer de votre serveur. Gardez à l’esprit que l’activation de firewalld entraînera le lancement du service au démarrage. Il est préférable de créer vos règles de pare-feu et de profiter de l’occasion pour les tester avant de configurer ce comportement afin d’éviter les problèmes potentiels.

      • sudo systemctl enable firewalld
      • sudo systemctl start firewalld

      Lorsque le serveur redémarre, votre pare-feu devrait s’afficher, vos interfaces réseau devraient être placées dans les zones que vous avez configurées (ou retomber dans la zone par défaut configurée), et toutes les règles associées à la ou aux zones seront appliquées aux interfaces associées.

      Nous pouvons vérifier que le service fonctionne et est accessible en tapant :

      • sudo firewall-cmd --state

      Output

      running

      Cela indique que notre pare-feu est opérationnel avec la configuration par défaut.

      Se familiariser avec les règles actuelles du pare-feu

      Avant de commencer à apporter des modifications, nous devrions nous familiariser avec l’environnement et les règles par défaut fournis par firewalld.

      Explorer les valeurs par défaut

      Nous pouvons voir quelle zone est actuellement sélectionnée comme étant la zone par défaut en tapant :

      • firewall-cmd --get-default-zone

      Output

      public

      Comme nous n’avons donné à Firewalld aucune commande pour dévier de la zone par défaut, et qu’aucune de nos interfaces n’est configurée pour se lier à une autre zone, cette zone sera également la seule zone active (la zone qui contrôle le trafic de nos interfaces).  Nous pouvons vérifier cela en tapant :

      • firewall-cmd --get-active-zones

      Output

      public interfaces: eth0 eth1

      Ici, nous pouvons voir que notre serveur d’exemple possède deux interfaces réseau contrôlées par le pare-feu (eth0 et eth1). Elles sont toutes deux gérées actuellement en fonction des règles définies pour la zone public.

      Mais comment savoir quelles sont les règles associées à la zone public ? Nous pouvons imprimer la configuration de la zone par défaut en tapant :

      • sudo firewall-cmd --list-all

      Output

      public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Nous pouvons dire à partir de la sortie que cette zone est à la fois par défaut et active, et que les interfaces eth0 et eth1 sont associées à cette zone (nous savions déjà tout cela lors de nos précédentes demandes). Cependant, nous pouvons également voir que cette zone permet le trafic d’un client DHCP (pour l’attribution d’adresses IP), SSH (pour l’administration à distance), et Cockpit (une console basée sur le web).

      Explorer les zones alternatives

      Nous avons maintenant une bonne idée de la configuration pour la zone par défaut et active. Nous pouvons également trouver des informations sur d’autres zones.

      Pour obtenir une liste des zones disponibles, tapez :

      Output

      block dmz drop external home internal public trusted work

      Nous pouvons voir la configuration spécifique associée à une zone en incluant le paramètre --zone= dans notre commande --list-all :

      • sudo firewall-cmd --zone=home --list-all

      Output

      home target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Vous pouvez produire toutes les définitions de zones en utilisant l’option --list-all-zones. Vous allez probablement acheminer la sortie dans un pager pour qu’elle soit plus facile à consulter :

      • sudo firewall-cmd --list-all-zones | less

      Ensuite, nous allons apprendre à assigner des zones aux interfaces de réseau.

      Sélection de zones pour vos interfaces

      À moins que vous n’ayez configuré vos interfaces de réseau autrement, chaque interface sera mise dans la zone par défaut lorsque le pare-feu est démarré.

      Changer la zone d’une interface

      Vous pouvez déplacer une interface entre les zones pendant une session en utilisant le paramètre --zone= en combinaison avec le paramètre --change-interface= Comme pour toutes les commandes qui modifient le pare-feu, vous devrez utiliser sudo.

      Par exemple, nous pouvons déplacer notre interface eth0 vers la zone home en tapant ceci :

      • sudo firewall-cmd --zone=home --change-interface=eth0

      Output

      success

      Remarque : chaque fois que vous déplacez une interface vers une nouvelle zone, sachez que vous modifiez probablement les services qui seront opérationnels. Par exemple, ici nous nous déplaçons vers la zone home, qui dispose de SSH.  Cela signifie que notre connexion ne doit pas être interrompue. Certaines autres zones n’ont pas SSH activé par défaut, et le passage à l’une de ces zones pourrait entraîner la perte de votre connexion, vous empêchant de vous reconnecter à votre serveur.

      Nous pouvons vérifier que cela a réussi en demandant à nouveau les zones actives :

      • firewall-cmd --get-active-zones

      Output

      home interfaces: eth0 public interfaces: eth1

      Ajuster la zone par défaut

      Si toutes vos interfaces peuvent être bien gérées par une seule zone, il est probablement plus facile de désigner la meilleure zone comme zone par défaut et de l’utiliser ensuite pour votre configuration.

      Vous pouvez modifier la zone par défaut avec le paramètre --set-default-zone= Cela changera immédiatement toute interface utilisant la zone par défaut :

      • sudo firewall-cmd --set-default-zone=home

      Output

      success

      Définir des règles pour vos applications

      Passons en revue la méthode de base pour définir les exceptions de pare-feu pour les services que vous souhaitez rendre disponibles.

      Ajouter un service à vos zones

      La méthode la plus simple consiste à ajouter les services ou les ports dont vous avez besoin aux zones que vous utilisez. Vous pouvez obtenir une liste des définitions de service disponibles avec l’option --get-services :

      • firewall-cmd --get-services

      Output

      RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

      Remarque : vous pouvez obtenir plus de détails sur chacun de ces services en consultant le fichier .xml qui leur est associé dans le répertoire /usr/lib/firewalld/services. Par exemple, le service SSH est défini comme ceci :

      /usr/lib/firewalld/services/ssh.xml

      <?xml version="1.0" encoding="utf-8"?>
      <service>
        <short>SSH</short>
        <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
        <port protocol="tcp" port="22"/>
      </service>
      

      Vous pouvez activer un service pour une zone en utilisant le paramètre --add-service= L’opération ciblera la zone par défaut ou toute zone est spécifiée par le paramètre --zone=. Par défaut, cela n’ajustera que la session de pare-feu actuelle. Vous pouvez ajuster la configuration du pare-feu permanent en incluant le drapeau --permanent.

      Par exemple, si nous exploitons un serveur web desservant un trafic HTTP classique, nous pouvons temporairement autoriser ce trafic pour les interfaces dans notre zone public en tapant :

      • sudo firewall-cmd --zone=public --add-service=http

      Vous pouvez omettre le drapeau --zone= si vous souhaitez modifier la zone par défaut. Nous pouvons vérifier que l’opération a réussi en utilisant les opérations --list-all ou --list-services :

      • sudo firewall-cmd --zone=public --list-services

      Output

      cockpit dhcpv6-client http ssh

      Une fois que vous avez vérifié que tout fonctionne comme il devrait, vous allez probablement vouloir modifier les règles de pare-feu permanent de sorte que votre service soit toujours disponible après un redémarrage. Nous pouvons rendre notre changement précédent permanent en le répétant et en ajoutant le drapeau --permanent :

      • sudo firewall-cmd --zone=public --add-service=http --permanent

      Output

      success

      Vous pouvez également utiliser le drapeau --runtime-to-permanent pour enregistrer la configuration du pare-feu en cours d’exécution dans la configuration permanente :

      • sudo firewall-cmd --runtime-to-permanent

      Faites attention à cela, car toutes les modifications apportées au pare-feu en cours d’exécution seront appliquées de manière permanente.

      Quelle que soit la méthode que vous avez choisie, vous pouvez vérifier qu’elle a réussi en ajoutant le drapeau --permanent à l’opération --list-services. Vous devez utiliser sudo pour toute opération --permanent :

      • sudo firewall-cmd --zone=public --list-services --permanent

      Output

      cockpit dhcpv6-client http ssh

      Votre zone public autorisera désormais le trafic web HTTP sur le port 80. Si votre serveur web est configuré pour utiliser SSL/TLS, vous voudrez également ajouter le service https.  Nous pouvons ajouter cela à la session en cours et au jeu de règles permanent en tapant :

      • sudo firewall-cmd --zone=public --add-service=https
      • sudo firewall-cmd --zone=public --add-service=https --permanent

      Que faire si aucun service approprié est disponible ?

      Les services qui sont inclus dans l’installation firewalld représentent un grand nombre des applications les plus courantes auxquelles vous pouvez souhaiter autoriser l’accès. Cependant, il y aura probablement de scénarios où ces services ne correspondent pas à vos exigences.

      Dans cette situation, vous disposez de deux options.

      Ouvrir un port pour vos zones

      La façon la plus simple d’ajouter un support à votre application spécifique consiste à ouvrir les ports qu’elle utilise dans la ou les zone(s) appropriée(s). Cela se fait en spécifiant le port ou la plage de ports, et le protocole associé (TCP ou UDP) pour les ports.

      Par exemple, si notre application fonctionne sur le port 5000 et utilise TCP, nous pourrions temporairement ajouter cela à la zone public en utilisant le paramètre --add-port=. Les protocoles peuvent être désignés sous forme de tcp ou udp :

      • sudo firewall-cmd --zone=public --add-port=5000/tcp

      Output

      success

      Nous pouvons vérifier que cela a réussi en utilisant l’opération --list-ports :

      • sudo firewall-cmd --zone=public --list-ports

      Output

      5000/tcp

      Il est également possible de spécifier une plage séquentielle de ports en séparant le port de début et de fin de la plage avec un tiret. Par exemple, si notre application utilise UDP ports 4990 à 4999, nous pourrions les ouvrir sur public en tapant :

      • sudo firewall-cmd --zone=public --add-port=4990-4999/udp

      Après avoir testé, nous voudrions probablement les ajouter au pare-feu permanent. Utilisez sudo firewall-cmd --runtime-to-permanent pour faire cela ou réexécutez les commandes avec le drapeau --permanent :

      • sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
      • sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
      • sudo firewall-cmd --zone=public --permanent --list-ports

      Output

      success success 5000/tcp 4990-4999/udp

      Définir un service

      L’ouverture de ports pour vos zones est une solution simple, mais il peut être difficile de savoir à quoi chacun d’entre eux sert. Si jamais vous désactivez un service sur votre serveur, vous aurez peut-être du mal à vous souvenir des ports qui ont été ouverts et qui sont encore nécessaires. Pour éviter cette situation, il est possible de définir un nouveau service.

      Les services sont des collections de ports avec un nom et une description associés. L’utilisation de services est plus facile à administrer que les ports, mais nécessite un bon travail en amont. La façon la plus simple de commencer consiste à copier un script existant (trouvé dans /usr/lib/firewalld/services) dans le répertoire /etc/firewalld/services où le pare-feu recherche des définitions non standard.

      Par exemple, nous pourrions copier la définition du service SSH pour l’utiliser dans notre exemple de définition de service comme ceci Le nom de fichier moins le suffixe .xml donnera le nom du service dans la liste des services du pare-feu :

      • sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml

      Maintenant, vous pouvez ajuster la définition trouvée dans le fichier que vous avez copié. Ouvrez-le d’abord dans votre éditeur de texte préféré. Nous utiliserons vi ici :

      • sudo vi /etc/firewalld/services/example.xml

      Pour commencer, le fichier contiendra la définition SSH que vous avez copiée :

      /etc/firewalld/services/example.xml

      <?xml version="1.0" encoding="utf-8"?>
      <service>
        <short>SSH</short>
        <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
        <port protocol="tcp" port="22"/>
      </service>
      

      La majorité de cette définition est en fait des métadonnées. Vous aurez besoin de changer le nom abrégé du service dans les balises <short>. Il s’agit d’un nom lisible par un humain pour votre service. Vous devez également ajouter une description afin de disposer de plus d’informations si jamais vous avez besoin de vérifier le service. La seule configuration que vous devez effectuer et qui affecte réellement la fonctionnalité du service sera probablement la définition du port où vous identifiez le numéro de port et le protocole que vous souhaitez ouvrir. Plusieurs balises <port/> peuvent être spécifiées.

      Pour notre exemple de service, imaginez que nous devons ouvrir le port 7777 pour TCP et 8888 pour UDP. Nous pouvons modifier la définition existante avec quelque chose de ce type :

      /etc/firewalld/services/example.xml

      <?xml version="1.0" encoding="utf-8"?>
      <service>
        <short>Example Service</short>
        <description>This is just an example service. It probably shouldn't be used on a real system.</description>
        <port protocol="tcp" port="7777"/>
        <port protocol="udp" port="8888"/>
      </service>
      

      Enregistrez et fermez le fichier.

      Rechargez votre pare-feu pour accéder à votre nouveau service :

      • sudo firewall-cmd --reload

      Vous pouvez voir qu’il se trouve maintenant parmi la liste des services disponibles :

      • firewall-cmd --get-services

      Output

      RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server example finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

      Vous pouvez maintenant utiliser ce service dans vos zones comme vous le feriez normalement.

      Création de vos propres zones

      Bien que les zones prédéfinies seront probablement plus que suffisantes pour la plupart des utilisateurs, il peut être utile de définir vos propres zones qui décrivent mieux leur fonction.

      Par exemple, vous pouvez créer une zone pour votre serveur web, appelé publicweb. Cependant, vous pouvez avoir une autre zone configurée pour le service DNS que vous fournissez sur votre réseau privé. Vous pouvez vouloir une zone appelée “privateDNS” pour cela.

      Lorsque vous ajoutez une zone, vous devez l’ajouter à la configuration du pare-feu permanent. Vous pouvez ensuite recharger pour intégrer la configuration dans votre session en cours. Par exemple, nous pourrions créer les deux zones dont nous avons parlé ci-dessus en tapant :

      • sudo firewall-cmd --permanent --new-zone=publicweb
      • sudo firewall-cmd --permanent --new-zone=privateDNS

      Vous pouvez vérifier qu’elles sont présentes dans votre configuration permanente en tapant :

      • sudo firewall-cmd --permanent --get-zones

      Output

      block dmz drop external home internal privateDNS public publicweb trusted work

      Comme indiqué précédemment, ils ne seront pas encore disponibles dans le pare-feu en exécution :

      Output

      block dmz drop external home internal public trusted work

      Rechargez le pare-feu pour amener ces nouvelles zones dans la configuration d’exécution active :

      • sudo firewall-cmd --reload
      • firewall-cmd --get-zones

      Output

      block dmz drop external home internal privateDNS public publicweb trusted work

      Maintenant, vous pouvez affecter les services et les ports appropriés à vos zones. Il est généralement bon de régler le pare-feu en cours d’exécution et d’enregistrer ces modifications dans la configuration permanente après l’avoir testé. Par exemple, pour la zone publicweb , vous pouvez vouloir ajouter les services SSH, HTTP et HTTPS :

      • sudo firewall-cmd --zone=publicweb --add-service=ssh
      • sudo firewall-cmd --zone=publicweb --add-service=http
      • sudo firewall-cmd --zone=publicweb --add-service=https
      • sudo firewall-cmd --zone=publicweb --list-all

      Output

      publicweb target: default icmp-block-inversion: no interfaces: sources: services: http https ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      De même, nous pouvons ajouter le service DNS à notre zone privateDNS :

      • sudo firewall-cmd --zone=privateDNS --add-service=dns
      • sudo firewall-cmd --zone=privateDNS --list-all

      Output

      privateDNS target: default icmp-block-inversion: no interfaces: sources: services: dns ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Nous pourrions alors changer nos interfaces pour ces nouvelles zones afin de les tester :

      • sudo firewall-cmd --zone=publicweb --change-interface=eth0
      • sudo firewall-cmd --zone=privateDNS --change-interface=eth1

      À ce stade, vous avez la possibilité de tester votre configuration. Si ces valeurs vous conviennent, vous allez vouloir ajouter ces règles à la configuration permanente. Vous pourriez le faire en exécutant à nouveau toutes les commandes avec le drapeau --permanent annexé, mais dans ce cas, nous utiliserons le drapeau --runtime-to-permanent pour sauvegarder de façon permanente l’ensemble de notre configuration d’exécution :

      • sudo firewall-cmd --runtime-to-permanent

      Après avoir appliqué ces règles de manière permanente, rechargez le pare-feu pour vérifier que les changements demeurent :

      • sudo firewall-cmd --reload

      Valider que les zones correctes ont été attribuées :

      • firewall-cmd --get-active-zones

      Output

      privateDNS interfaces: eth1 publicweb interfaces: eth0

      Et validezt le fait que les services appropriés sont disponibles pour les deux zones :

      • sudo firewall-cmd --zone=publicweb --list-services

      Output

      http https ssh
      • sudo firewall-cmd --zone=privateDNS --list-services

      Output

      dns

      Vous avez configuré vos propres zones avec succès ! Si vous voulez faire de l’une de ces zones la zone par défaut pour d’autres interfaces, n’oubliez pas de configurer ce comportement avec le paramètre --set-default-zone= :

      • sudo firewall-cmd --set-default-zone=publicweb

      Conclusion

      Vous devriez maintenant avoir une compréhension assez complète de la façon d’administrer le service firewalld sur votre système CentOS pour une utilisation quotidienne.

      Le service firewalld vous permet de configurer des règles et des ensembles de règles maintenables qui prennent en compte votre environnement réseau. Il vous permet de passer en toute transparence d’une politique de pare-feu à l’autre en utilisant des zones et donne aux administrateurs la possibilité d’abstraire la gestion des ports en des définitions de service plus conviviales. L’acquisition d’une connaissance pratique de ce système vous permettra de tirer parti de la flexibilité et de la puissance que cet outil procure.

      Pour plus d’informations sur firewalld, veuillez consulter la documentation officielle de firewalld.



      Source link

      Настройка брандмауэра с помощью firewalld в CentOS 8


      Введение

      firewalld — программное обеспечение для управления брандмауэрами, поддерживаемое многими дистрибутивами Linux. Выступает в качестве клиентского интерфейса для встроенных в ядро Linux систем фильтрации пакетов nftables и iptables.

      В этом обучающем руководстве мы покажем, как настраивать брандмауэр firewalld для сервера CentOS 8 и расскажем об основах управления брандмауэром с помощью административного инструмента firewall-cmd.

      Предварительные требования

      Для прохождения этого обучающего руководства нам потребуется сервер под управлением CentOS 8. Мы будем считать, что вы выполнили вход на этот сервер в качестве пользователя non-root user с привилегиями sudo. Чтобы выполнить настройку сервера, воспользуйтесь нашим руководством по начальной настройке сервера CentOS 8.

      Основные концепции в firewalld

      Прежде чем обсуждать фактическое использование утилиты firewall-cmd для управления конфигурацией брандмауэра, мы должны познакомиться с несколькими концепциями, которые вводит этот инструмент.

      Зоны

      Демон firewalld управляет группами правил, используя элементы, называемые зонами. Зоны представляют собой набор правил, который определяет разрешенный трафик в зависимости от уровня доверия в сети. Зоне назначаются сетевые интерфейсы, определяющие поведение, которое должен разрешать брандмауэр.

      Такая гибкость позволяет легко изменять правила в зависимости от среды, особенно в случае с компьютерами, которые часто перемещаются между сетями (например, с ноутбуками). Вы можете использовать более строгие правила, например, запретить большую часть трафика в публичных сетях WiFi и ввести менее строгие ограничения для домашней сети. Для сервера эти зоны не так важны, поскольку его сетевая среда редко изменяется, если это вообще происходит.

      Вне зависимости от того, насколько динамична ваша сетевая среда, вам будет полезно познакомиться с общей идеей, лежащей в основе заданных зон firewalld. Заданные зоны в firewalld упорядочены от наименее доверенных к наиболее доверенным:

      • drop: самый низкий уровень доверия. Все входящие соединения отбрасываются без ответа и разрешаются только исходящие соединения.
      • block: аналогично вышеописанному, но запросы входящих соединений не просто отбрасываются, а отклоняются с сообщением icmp-host-prohibited или icmp6-adm-prohibited.
      • public: публичные сети, к которым нет доверия. Вы не доверяете другим компьютерам, но можете разрешать отдельные входящие соединения на разовой основе.
      • external: внешние сети, если вы используете брандмауэр в качестве шлюза. Эта зона настроена для маскировки NAT, чтобы ваша внутренняя сеть оставалась частной, но доступной.
      • internal: другая сторона внешней зоны, используемая для внутренней части шлюза. Компьютеры в основном достойны доверия, доступны некоторые дополнительные службы.
      • dmz: используется для компьютеров в ДМЗ (изолированные компьютеры, у которых нет доступа к остальной части вашей сети). Разрешены только некоторые входящие соединения.
      • work: используется для рабочих компьютеров. Большинство компьютеров в сети являются доверенными. Могут быть разрешены некоторые дополнительные службы.
      • home: домашняя среда. Обычно подразумевается, что вы доверяете большей части других компьютеров и что будут приниматься запросы еще нескольких служб.
      • trusted: все компьютеры в сети являются доверенными. Наиболее открытый из доступных вариантов, который следует использовать с осторожностью.

      Для использования брандмауэра можно создавать правила и изменять свойства зон, а также назначать сетевые интерфейсы в наиболее подходящие зоны.

      Постоянство правил

      В firewalld правила можно применять к текущему набору правил времени исполнения или использовать как постоянные. При добавлении или изменении правила по умолчанию изменяется только работающий брандмауэр. После перезагрузки системы или службы firewalld сохраняются только постоянные правила.

      Большинство операций firewall-cmd могут принимать флаг --permanent, указывающий на необходимость применения изменений к постоянной конфигурации. Кроме того, текущую конфигурацию брандмауэра можно сохранить в постоянной конфигурации с помощью команды firewall-cmd --runtime-to-permanent.

      Такое разделение конфигурации времени исполнения и постоянной конфигурации позволяет безопасно тестировать правила на активном брандмауэре и просто перезагружать его в случае возникновения проблем.

      Установка и активация firewalld

      Брандмауэр firewalld установлен по умолчанию в некоторых дистрибутивах Linux, в том числе во многих образах CentOS 8. Однако вам может потребоваться установить firewalld самостоятельно:

      • sudo dnf install firewalld

      После установки firewalld вы можете активировать службу и перезагрузить сервер. Помните, что в случае активации службы firewalld она будет запускаться при загрузке системы. Прежде чем настраивать такое поведение, лучше создать правила брандмауэра и воспользоваться возможностью протестировать их во избежание потенциальных проблем.

      • sudo systemctl enable firewalld
      • sudo systemctl start firewalld

      После перезагрузки сервера брандмауэр запускается, сетевые интерфейсы помещаются в настроенные зоны (или возвращаются в заданные по умолчанию зоны), и все правила зон применяются к соответствующим интерфейсам.

      Чтобы проверить работу и доступность службы, можно использовать следующую команду:

      • sudo firewall-cmd --state

      Output

      running

      Это показывает, что наш брандмауэр запущен и работает с конфигурацией по умолчанию.

      Знакомство с текущими правилами брандмауэра

      Прежде чем мы начнем вносить изменения, мы познакомимся со средой и правилами firewalld, используемыми по умолчанию.

      Изучение параметров по умолчанию

      Чтобы посмотреть, какая зона выбрана по умолчанию, можно использовать следующую команду:

      • firewall-cmd --get-default-zone

      Output

      public

      Поскольку мы не отправили firewalld никаких команд для отклонения от основной зоны и никакие наши интерфейсы не настроены на привязку к другой зоне, эта зона будет единственной активной зоной (зоной, контролирующей трафик для наших интерфейсов). Это можно проверить с помощью следующей команды:

      • firewall-cmd --get-active-zones

      Output

      public interfaces: eth0 eth1

      Здесь мы видим, что на нашем сервере брандмауэр контролирует два сетевых интерфейса (eth0 и eth1). Управление обоими интерфейсами осуществляется в соответствии с правилами, заданными для зоны public.

      Как же узнать, какие правила заданы для зоны public? Конфигурацию зоны по умолчанию можно распечатать с помощью следующей команды:

      • sudo firewall-cmd --list-all

      Output

      public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Из выводимых результатов мы видим, что эта зона активна и используется по умолчанию и что с ней связаны интерфейсы eth0 и eth1 (все это мы уже знали из предыдущих запросов). Также мы видим, что эта зона разрешает трафик клиента DHCP (для назначения IP-адресов), SSH (для удаленного администрирования) и Cockpit (веб-консоль).

      Изучение альтернативных зон

      Мы получили представление о конфигурации зоны по умолчанию и активной зоны. Также мы можем получить информацию о других зонах.

      Чтобы получить список доступных зон, введите команду:

      Output

      block dmz drop external home internal public trusted work

      Чтобы посмотреть конкретную конфигурацию, относящуюся к зоне, необходимо добавить параметр --zone= к команде --list-all:

      • sudo firewall-cmd --zone=home --list-all

      Output

      home target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Вы можете вывести все определения зон, используя опцию --list-all-zones. Возможно вы захотите вывести результаты на пейджер для удобства просмотра:

      • sudo firewall-cmd --list-all-zones | less

      Далее мы узнаем о назначении зон сетевым интерфейсам.

      Выбор зон для интерфейсов

      Если вы не настроили сетевые интерфейсы иным образом, каждый интерфейс будет помещен в зону по умолчанию при запуске брандмауэра.

      Изменение зоны интерфейса

      Для перемещения интерфейса между зонами во время сеанса следует использовать параметр --zone= в сочетании с параметром --change-interface=. Как и для всех остальных команд, изменяющих брандмауэр, вам потребуется использовать sudo.

      Например, интерфейс eth0 можно переместить в зону home с помощью следующей команды:

      • sudo firewall-cmd --zone=home --change-interface=eth0

      Output

      success

      Примечание. При перемещении интерфейса в новую зону следует помнить, что это может повлиять на работоспособность служб. Например, в данном случае мы перемещаемся в зону home, в которой поддерживается SSH. Это означает, что наше соединение не должно быть отброшено. В некоторых других зонах SSH по умолчанию не поддерживается, при переходе в такую зону ваше соединение будет разорвано, и вы не сможете снова войти на сервер.

      Чтобы убедиться в успешности операции мы можем снова запросить активные зоны:

      • firewall-cmd --get-active-zones

      Output

      home interfaces: eth0 public interfaces: eth1

      Изменение зоны по умолчанию

      Если все интерфейсы могут быть хорошо обработаны в одной зоне, проще всего определить наиболее подходящую зону как зону по умолчанию, а затем использовать эту зону для конфигурации.

      Вы можете изменить зону по умолчанию с помощью параметра --set-default-zone=. При этом немедленно изменятся все интерфейсы, использующие зону по умолчанию:

      • sudo firewall-cmd --set-default-zone=home

      Output

      success

      Установка правил для приложений

      Рассмотрим базовый способ определения исключений брандмауэра для служб, которые вы хотите сделать доступными.

      Добавление службы к зонам

      Самый простой метод заключается в том, чтобы добавлять необходимые службы или порты в используемые зоны. Список доступных определений служб можно получить с помощью опции --get-services:

      • firewall-cmd --get-services

      Output

      RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

      Примечание. Вы можете получить более подробную информацию о каждой из этих служб, посмотрев соответствующий файл .xml в директории /usr/lib/firewalld/services. Например, служба SSH определяется следующим образом:

      /usr/lib/firewalld/services/ssh.xml

      <?xml version="1.0" encoding="utf-8"?>
      <service>
        <short>SSH</short>
        <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
        <port protocol="tcp" port="22"/>
      </service>
      

      Вы можете активировать службу для зоны с помощью параметра --add-service=. Данная операция будет нацелена на зону по умолчанию или на другую зону, заданную параметром --zone=. По умолчанию изменения применяются только к текущему сеансу брандмауэра. Для изменения постоянной конфигурации брандмауэра следует использовать флаг --permanent.

      Например, если у нас запущен веб-сервер, обслуживающий стандартный трафик HTTP, мы можем временно разрешить этот трафик для интерфейсов в зоне public с помощью следующей команды:

      • sudo firewall-cmd --zone=public --add-service=http

      Вы можете опустить флаг --zone=, если хотите внести изменения в зону по умолчанию. Для проверки успешного выполнения операции можно использовать команду --list-all или --list-services:

      • sudo firewall-cmd --zone=public --list-services

      Output

      cockpit dhcpv6-client http ssh

      После подтверждения надлежащей работы всех систем вы можете изменить постоянные правила брандмауэра, чтобы служба была доступна после перезагрузки системы. Чтобы сделать предыдущие изменения постоянными, нужно ввести их повторно и добавить флаг --permanent:

      • sudo firewall-cmd --zone=public --add-service=http --permanent

      Output

      success

      Также можно использовать флаг --runtime-to-permanent для сохранения текущей конфигурации брандмауэра в постоянной конфигурации:

      • sudo firewall-cmd --runtime-to-permanent

      Будьте осторожны, поскольку при этом все изменения в текущей конфигурации брандмауэра сохраняются в постоянной конфигурации.

      Если вы хотите убедиться. что изменения успешно сохранены в постоянной конфигурации, добавьте флаг --permanent к команде --list-services. Вам потребуются привилегии sudo для выполнения любых операций с флагом --permanent:

      • sudo firewall-cmd --zone=public --list-services --permanent

      Output

      cockpit dhcpv6-client http ssh

      Теперь в зоне public разрешен веб-трафик HTTP на порту 80. Если ваш веб-сервер настроен для использования SSL/TLS, вы также можете добавить службу https. Мы можем добавить ее в текущий сеанс и постоянный набор правил с помощью следующей команды:

      • sudo firewall-cmd --zone=public --add-service=https
      • sudo firewall-cmd --zone=public --add-service=https --permanent

      Что делать, если подходящая служба отсутствует?

      В базовом комплекте firewalld представлены многие распространенные приложения, к которым вы можете захотеть предоставить доступ. Однако возможны ситуации, когда эти службы не будут соответствовать вашим требованиям.

      В этой ситуации у вас будет два варианта.

      Открытие порта для зон

      Проще всего добавить поддержку определенного приложения можно посредством открытия используемых им портов в соответствующих зонах. Для этого нужно указать порт или диапазон портов, а также протокол (TCP или UDP), связанный с портами.

      Например, если наше приложение работает на порту 5000 и использует TCP, мы можем временно добавить его в зону public с помощью параметра --add-port=. Протоколы могут назначаться как tcp или udp:

      • sudo firewall-cmd --zone=public --add-port=5000/tcp

      Output

      success

      Мы можем проверить успешность назначения с помощью операции --list-ports:

      • sudo firewall-cmd --zone=public --list-ports

      Output

      5000/tcp

      Также можно указать последовательный диапазон портов, разделив начальный и конечный порты диапазона дефисом. Например, если наше приложение используйте порты UDP с 4990 по 4999, мы можем открыть их на public с помощью следующей команды:

      • sudo firewall-cmd --zone=public --add-port=4990-4999/udp

      После тестирования мы вероятно захотим добавить это правило в брандмауэр на постоянной основе. Используйте для этого sudo firewall-cmd --runtime-to-permanent или запустите команды снова с флагом --permanent:

      • sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
      • sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
      • sudo firewall-cmd --zone=public --permanent --list-ports

      Output

      success success 5000/tcp 4990-4999/udp

      Определение службы

      Открыть порты для зон довольно просто, но также может быть сложно следить за тем, для чего предназначен каждый порт. Если вы будете выводить из эксплуатации службы на своем сервере, вы можете забыть, какие из открытых портов вам еще нужны. Чтобы избежать подобной ситуации, можно определить новую службу.

      Службы представляют собой наборы портов с именем и описанием. Использование служб упрощает администрирование портов, но требует некоторой предварительной подготовки. Проще всего начать с копирования существующего скрипта (из директории /usr/lib/firewalld/services) в директорию /etc/firewalld/services, где брандмауэр ищет нестандартные определения.

      Например, мы можем скопировать определение службы SSH и использовать его для определения службы example. Имя файла без суффикса .xml определяет имя службы в списке служб брандмауэра:

      • sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml

      Теперь можно изменить определение в скопированном вами файле. Вначале откройте его в предпочитаемом текстовом редакторе. Здесь мы используем vi:

      • sudo vi /etc/firewalld/services/example.xml

      Вначале файл будет содержать только что скопированное вами определение SSH:

      /etc/firewalld/services/example.xml

      <?xml version="1.0" encoding="utf-8"?>
      <service>
        <short>SSH</short>
        <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
        <port protocol="tcp" port="22"/>
      </service>
      

      Основная часть этого определения представляет собой метаданные. Вы можете изменить короткое имя службы, заключенное в тегах <short>. Это имя службы, предназначенное для чтения людьми. Также следует добавить описание на случай, если вам потребуется дополнительная информация при проведении аудита службы. Единственное изменение конфигурации, которое вам потребуется, и которое повлияет на функциональность службы, будет заключаться в определении портов, где вы идентифицируете номер порта и протокол, который хотите открыть. Можно указать несколько тегов <port/>.

      Представьте, что для нашей службы example нам необходимо открыть порт 7777 для TCP и 8888 для UDP. Мы можем изменить существующее определение примерно так:

      /etc/firewalld/services/example.xml

      <?xml version="1.0" encoding="utf-8"?>
      <service>
        <short>Example Service</short>
        <description>This is just an example service. It probably shouldn't be used on a real system.</description>
        <port protocol="tcp" port="7777"/>
        <port protocol="udp" port="8888"/>
      </service>
      

      Сохраните и закройте файл.

      Перезагрузите брандмауэр, чтобы получить доступ к новой службе:

      • sudo firewall-cmd --reload

      Теперь вы увидите ее в списке доступных служб:

      • firewall-cmd --get-services

      Output

      RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server example finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

      Теперь вы можете использовать эту службу в зонах, как и обычно.

      Создание собственных зон

      Хотя большинству пользователей будет достаточно заданных зон, иногда может быть полезно определить собственные зоны с названиями, соответствующими их функции.

      Например, вы можете захотеть создать для своего веб-сервера зону с именем publicweb. При этом вы можете также захотеть использовать другую зону для службы DNS в вашей частной сети. Эту зону вы можете назвать privateDNS.

      При добавлении зоны вы должны добавить ее в постоянную конфигурацию брандмауэра. Затем вы можете произвести перезагрузку для активации конфигурации для текущего сеанса. Например, мы можем создать две описанные выше зоны, введя следующие команды:

      • sudo firewall-cmd --permanent --new-zone=publicweb
      • sudo firewall-cmd --permanent --new-zone=privateDNS

      Вы можете проверить их наличие в постоянной конфигурации с помощью следующей команды:

      • sudo firewall-cmd --permanent --get-zones

      Output

      block dmz drop external home internal privateDNS public publicweb trusted work

      Как указывалось ранее, пока они будут недоступны в работающем брандмауэре:

      Output

      block dmz drop external home internal public trusted work

      Перезагрузите брандмауэр, чтобы добавить эти зоны в активную конфигурацию:

      • sudo firewall-cmd --reload
      • firewall-cmd --get-zones

      Output

      block dmz drop external home internal privateDNS public publicweb trusted work

      Теперь вы можете назначать в зоны соответствующие службы и порты. Обычно лучше всего изменять активный брандмауэр и сохранять изменения в постоянной конфигурации только после тестирования. Например, для зоны publicweb вы можете захотеть добавить службы SSH, HTTP и HTTPS:

      • sudo firewall-cmd --zone=publicweb --add-service=ssh
      • sudo firewall-cmd --zone=publicweb --add-service=http
      • sudo firewall-cmd --zone=publicweb --add-service=https
      • sudo firewall-cmd --zone=publicweb --list-all

      Output

      publicweb target: default icmp-block-inversion: no interfaces: sources: services: http https ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Для зоны privateDNS можно добавить службу DNS:

      • sudo firewall-cmd --zone=privateDNS --add-service=dns
      • sudo firewall-cmd --zone=privateDNS --list-all

      Output

      privateDNS target: default icmp-block-inversion: no interfaces: sources: services: dns ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

      Затем мы можем изменить интерфейсы на новые зоны, чтобы протестировать их:

      • sudo firewall-cmd --zone=publicweb --change-interface=eth0
      • sudo firewall-cmd --zone=privateDNS --change-interface=eth1

      Сейчас вы можете протестировать свою конфигурацию. Если эти значения будут работать, эти правила можно будет добавить в постоянную конфигурацию. Для этого можно снова запустить все команды с флагом --permanent, но в этом случае мы используем флаг --runtime-to-permanent для полного сохранения активной конфигурации как постоянной:

      • sudo firewall-cmd --runtime-to-permanent

      Сохранив правила в постоянной конфигурации, перезагрузите брандмауэр, чтобы проверить сохранение изменений:

      • sudo firewall-cmd --reload

      Проверьте правильность назначения зон:

      • firewall-cmd --get-active-zones

      Output

      privateDNS interfaces: eth1 publicweb interfaces: eth0

      Убедитесь, что в обеих зонах доступны соответствующие службы:

      • sudo firewall-cmd --zone=publicweb --list-services

      Output

      http https ssh
      • sudo firewall-cmd --zone=privateDNS --list-services

      Output

      dns

      Вы успешно настроили собственные зоны! Если вы захотите задать одну из этих зон по умолчанию для других интерфейсов, используйте для настройки параметр --set-default-zone=:

      • sudo firewall-cmd --set-default-zone=publicweb

      Заключение

      Теперь вы должны неплохо понимать принципы администрирования службы firewalld в системе CentOS на каждодневной основе.

      Служба firewalld позволяет настраивать администрируемые правила и наборы правил, учитывающие условия вашей сетевой среды. Она позволяет легко переключаться между разными политиками брандмауэра посредством использования зон и дает администраторам возможность абстрагировать управление портами в более удобную систему определения служб. Умение работать с этой системой позволит вам воспользоваться преимуществами гибкости и функциональности данного инструмента.

      Дополнительную информацию о firewalld можно найти в официальной документации по firewalld.



      Source link