¿Qué es Firewalld?
Firewalld es una solución de administración de firewall para muchas distribuciones de Linux, incluidas Ubuntu, Debian, CentOS, RHEL y Fedora. Actúa como una interfaz para el sistema de filtrado de iptables proporcionado por el kernel de Linux. Es independiente del protocolo, lo que significa que es compatible con IPv4, IPv6, puentes ethernet y conjuntos de IP.
Concepto básico de cortafuegos
FirewallD usa zonas y servicios en lugar de cadenas y reglas de iptables. Las zonas son un conjunto de reglas que especifican qué tráfico debe permitirse según el nivel de confianza que tenga en una red a la que estén conectadas sus computadoras. Las interfaces de red asignaron una zona para dictar un comportamiento que debería permitir el cortafuegos.
El firewalld se administra mediante la herramienta de línea de comandos firewall-cmd. Proporciona una interfaz para administrar el tiempo de ejecución y la configuración permanente.
Zonas cortafuegos
Hay 9 zonas predefinidas en el Firewalld según el nivel de confianza en orden ascendente.
Una breve explicación de cada zona se explica a continuación:
- Soltar: Esta zona tiene el nivel más bajo de confianza y se usa para descartar todo el tráfico entrante sin enviar ningún reconocimiento al remitente.
- Bloquear: Esta zona es muy similar a la zona de entrega, el tráfico entrante se rechaza y el remitente recibe un mensaje.
- Público: Permite el tráfico de ciertas redes públicas.
- Externo: Esta zona se utiliza cuando su sistema actúa como puerta de enlace o enrutador.
- Interna: El conjunto de reglas que se aplican a las computadoras en su red interna privada.
- DMZ: Esta zona es un parche aislado de computadoras en su red interna que no puede acceder a otros recursos internos.
- Trabajo: Esta zona se utiliza para máquinas de trabajo. El nivel de confianza es alto.
- Inicio: La mayoría de las computadoras en esta zona confían entre sí. El nivel de confianza es más alto que el trabajo.
- De confianza: Esta zona tiene el nivel de confianza más alto. Todos los equipos de la red son de confianza.
Paso 1:Instalación del cortafuegos
De forma predeterminada, Firewalld está preinstalado en la mayoría de los sistemas operativos. Pero parte de la instalación mínima del sistema operativo no está incluida. Si no está instalado, puede instalarlo con el siguiente comando:
sudo yum install firewalld # CentOS/RHEL 8/7/6 sudo dnf install firewalld # Fedora and CentOS/RHEL 8 sudo apt install firewalld # Ubuntu and Debian
Después de instalar firewalld, deberá iniciarlo y habilitarlo para que se inicie después de reiniciar el sistema.
sudo systemctl start firewalld sudo systemctl enable firewalld
Ejecute el siguiente comando para verificar el estado de firewalld
systemctl status firewalld [OR] firewall-cmd --state
Paso 2:trabajar con zonas y servicios
De forma predeterminada, public es la zona predeterminada en firewalld y todas las interfaces de red están configuradas con la zona pública. Puede enumerar la zona predeterminada con el siguiente comando:
firewall-cmd --get-default-zone
Salida:
public
A continuación, ejecute el siguiente comando para obtener una lista de zonas activas:
firewall-cmd --get-active-zones
Deberías obtener el siguiente resultado:
public interfaces: eth0 eth1
Para obtener una lista de todas las zonas disponibles, ejecute el siguiente comando:
firewall-cmd --get-zones
Deberías obtener el siguiente resultado:
block dmz drop external home internal public trusted work
Puede enumerar todos los servicios asociados con una zona pública con el siguiente comando:
firewall-cmd --list-all
Deberías obtener el siguiente resultado:
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:
Para cambiar la zona predeterminada de pública a trabajo, ejecute el siguiente comando:
firewall-cmd --set-default-zone=work
Ahora puede verificar su zona predeterminada con el siguiente comando:
firewall-cmd --get-default-zone
Salida:
work
Puede obtener una lista de todos los servicios disponibles en su sistema con el siguiente comando:
firewall-cmd --get-services
Deberías obtener el siguiente resultado:
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
Paso 3:permitir y denegar servicios en Firewalld
Puede permitir y denegar el tráfico entrante según los servicios predefinidos en firewalld.
Por ejemplo, para permitir todo el tráfico entrante para el servicio http en la zona pública, ejecute el siguiente comando:
firewall-cmd --zone=public --add-service=http
Salida:
success
Para permitir el tráfico entrante para el servicio ftp en la zona pública, ejecute el siguiente comando:
firewall-cmd --zone=public --add-service=ftp
Salida:
success
El comando anterior agregará el servicio http y ftp temporalmente y no es persistente en los reinicios. Deberá usar el --permanent
opción para hacerlos permanentes como se muestra a continuación:
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=ftp
A continuación, ejecute el siguiente comando para implementar los cambios:
firewall-cmd --reload
Ahora puede obtener una lista de servicios agregados con el siguiente comando:
firewall-cmd --permanent --zone=public --list-services
Debería ver el siguiente resultado:
cockpit dhcpv6-client ftp http ssh
También puede consultar la información detallada sobre la zona pública con el siguiente comando:
firewall-cmd --info-zone public
Salida:
public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: cockpit dhcpv6-client ftp http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Si desea eliminar/denegar los servicios anteriores del cortafuegos, use --remove-service
opción:
firewall-cmd --permanent --zone=public --remove-service=http firewall-cmd --permanent --zone=public --remove-service=ftp
A continuación, ejecute el siguiente comando para aplicar los cambios:
firewall-cmd --reload
Paso 4:permitir y denegar puertos en Firewalld
También puede permitir y denegar el tráfico entrante según el puerto en firewalld.
Por ejemplo, permita todo el tráfico entrante en los puertos 8080 y 443, ejecute el siguiente comando:
firewall-cmd --permanent --zone=public --add-port=443/tcp firewall-cmd --permanent --zone=public --add-port=8080/tcp
A continuación, ejecute el siguiente comando para aplicar los cambios:
firewall-cmd --reload
Luego, verifique los puertos agregados con el siguiente comando:
firewall-cmd --permanent --zone=public --list-ports
Salida:
443/tcp 8080/tcp
De manera similar, elimine/niegue los puertos anteriores del firewalld, use la opción –remove-port:
firewall-cmd --permanent --zone=public --remove-port=443/tcp firewall-cmd --permanent --zone=public --remove-port=8080/tcp
A continuación, ejecute el siguiente comando para aplicar los cambios:
firewall-cmd --reload
Paso 5:Reenvío de puertos con Firewalld
El reenvío de puertos es el proceso que redirige la solicitud de la combinación de IP/puerto y la redirige a una IP y/o puerto diferente. Esta técnica permite que las máquinas remotas se conecten a un servicio específico dentro de una red privada.
Antes de configurar el reenvío de puertos, debe activar el enmascaramiento en la zona deseada. Puedes activarlo usando el --add-masquerade
opción:
firewall-cmd --zone=public --add-masquerade
A continuación, para reenviar el tráfico del puerto 80 al puerto 8080 en el mismo servidor, ejecute el siguiente comando:
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
Si desea reenviar el tráfico desde el puerto local 80 al puerto 8080 en un servidor remoto con la dirección IP 192.168.1.200, ejecute el siguiente comando:
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.200
A continuación, ejecute el siguiente comando para aplicar los cambios:
firewall-cmd --reload
Si desea eliminar las reglas anteriores, reemplace –add con –remove como se muestra a continuación:
firewall-cmd --permanent --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.200 firewall-cmd --permanent --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080
Conclusión
En la guía anterior, aprendió el concepto básico de Firewalld y cómo implementarlo en el sistema operativo Linux. Espero que ahora pueda limitar el tráfico entrante innecesario con firewalld.