CentOS 8 Server – Configuración de Firewall
Un cortafuego (Firewall) es usado para proteger estaciones de trabajo de tráfico no deseado.
FirewallD
Es el servicio por defecto responsable por la seguridad de firewall en CentOS 8. Este servicio viene activado por defecto, permitiendo apenas que algunos servicios reciban tráfico de entrada. Este firewall dinámico esta basado en host con una interfaz D-Bus que permite alterar las reglas de firewall sin reiniciar el servicio de firewall.
Firewall-cmd
Actúa como una interfaz para las nftables. En CentOS 8, nftables reemplaza a iptables.
En una instalación mínima y limpia, si ejecutamos el siguiente comando:
[root@localhost ~]# systemctl status firewalld
Vemos que el firewall ya viene habilitado por defecto.
Para activar o desactivar el firewall de pueden digitar los siguientes comandos respectivamente:
[root@localhost ~]# systemctl start firewalld [root@localhost ~]# systemctl enable firewalld
Para saber que servicios vienen por defecto, ejecutamos el comando firewall-cmd como sigue:
[root@localhost ~]# firewall-cmd --list-all
Vemos que tres servicios vienen habilitados: cockpit (Administrador de servicios via web), dhcpv6-cliente y ssh.
Con el comando anterior también encontramos la zona que está activa, en este caso la zona activa se llama public. Vamos a tratar por separado el concepto de zonas y servicios.
1. Zonas
Las zonas de Firewalld son un conjuntos de reglas predefinidas. Podemos ver las zonas por defecto habilitadas a traves de este comando:
[root@localhost ~]# firewall-cmd --get-default-zone
Las zonas activas se pueden visualizar por este comando:
[root@localhost ~]# firewall-cmd --get-active-zones
Por defecto esta zona es “public” y según el comando anterior, esta se aplica sobre la tarjeta de red (enp0s3).
Para ver todas las zonas, digite el siguiente comando:
[root@localhost ~]# firewall-cmd --list-all-zones
Como resultado serán exibidos 9 zonas: block, dmz, drop, external, home, internal, public, trusted, work.
Estas configuraciones de zonas se encuentran en la siguiente dirección «/usr/lib/firewalld/zones/».
[root@localhost ~]# ls -l /usr/lib/firewalld/zones/
Por ejemplo podemos visualizar la zona public con el comando cat.
Comando para listar una zona especifica, por ejemplo ‘external»:
[root@localhost ~]# firewall-cmd --list-service --zone=external ssh
Si queremos cambiar de zona, por ejemplo de “public” hacia “external”:
[root@localhost ~]# firewall-cmd --set-default-zone=external success
Si queremos cambiar la zona para una interface (Por ejemplo si tenemos la interface enp0s4 y queremos que la interface sea «external’)
[root@localhost ~]# firewall-cmd --change-interface=enp0s4 --zone=external success
Para verificar:
[root@localhost ~]# firewall-cmd --list-all --zone=external external (active) target: default icmp-block-inversion: no interfaces: enp0s4 sources: services: ssh ports: protocols: masquerade: yes forward-ports: source-ports: icmp-blocks: rich rules:
Este comando no torna permanente esta acción. Para hacerla permanente usar el comando nmcli
[root@localhost ~]# nmcli connection modify ens8 connection.zone external external interfaces: enp0s4 public interfaces: enp0s3
2. Servicios
Un servicio es una lista de puertas, protocolos, puertas de origen, destino y módulos auxiliares de firewall. Por ejemplo: ssh (puerta 22), http (80), mysql (3306), protocolo ICMP entre otros. Para listar los servicios definidos por defecto:
Para listar los servicios en la zona actual (public):
[root@localhost ~]# firewall-cmd --list-services cockpit dhcpv6-client ssh
Una lista soportada por firewalld, se puede obtener con el siguiente comando:
[root@localhost ~]# firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns 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 proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client 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
Para poder adicionar más servicios, se puede crear un archivo xml en la siguiente dirección: /usr/lib/firewalld/services
[root@localhost ~]# ls /usr/lib/firewalld/services
Para adicionar o remover servicios de la zona actual:
[root@localhost ~]# firewall-cmd --add-service=http success [root@localhost ~]# firewall-cmd --list-service cockpit dhcpv6-client http ssh [root@localhost ~]# firewall-cmd --remove-service=http success [root@localhost ~]# firewall-cmd --list-service cockpit dhcpv6-client ssh
Si reiniciamos la máquina, el servicio que adicionamos desaparece. Por tanto para que quede permanente solo necesitamos adicionar a nuestro comando la palabra “–permanent” y lo siguiente es hacer un reload del servicio.
[root@localhost ~]# firewall-cmd --add-service=http --permanent success [root@localhost ~]# firewall-cmd --reload success [root@localhost ~]# firewall-cmd --list-service cockpit dhcpv6-client http ssh
3. Puertas
Si queremos adicionar o remover una puerta (por ejemplo TCP 465), lo podemos hacer de la siguiente manera:
[root@localhost ~]# firewall-cmd --add-port=465/tcp success [root@localhost ~]# firewall-cmd --list-port 465/tcp [root@localhost ~]# firewall-cmd --remove-port=465/tcp success [root@localhost ~]# firewall-cmd --list-port
Si queremos hacerla permanente:
[root@localhost ~]# firewall-cmd --add-port=465/tcp --permanent success [root@localhost ~]# firewall-cmd --reload success [root@localhost ~]# firewall-cmd --list-port 465/tcp
4. Bloquear IPs
Para bloquear un ip, puede ejecutar el siguiente comando
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.88" reject' success [root@localhost ~]# systemctl restart firewalld
Para remover esta regla
[root@localhost ~]# firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.88" reject' success [root@localhost ~]# systemctl restart firewalld
Espero haber ayudado!
1 respuesta
[…] CentOS 8 – Configuración de Firewall […]