Limitar acceso por SSH únicamente a ciertas IP con FirewallD

De Apuntes
Saltar a: navegación, buscar

FirewallD

FirewallD es una solución de firewall que viene con los Linux que utilizan SystemD como administrador de servicios (RHEL, CentOS, Rocky Linux, entre otros). A diferencia de Iptables, FirewallD divide el tráfico que recibe la máquina por zonas, donde cada zona puede tener asociadas interfaces de red y sus reglas específicas de filtrado. De esta forma, se puede tener una zona configurada para los servicios que sean accesados mediante una IP pública y otra zona para las labores de administración o comunicación con otros servicios de forma interna.

En FirewallD las reglas de filtrado se especifican de tres formas:

  • Servicios: reglas predeterminadas para servicios conocidos, como SSH, HTTP, HTTPS, DNS, entre otros
  • Puertos: se especifican los puertos a abrir en conjunto al protocolo a utilizar, ya sea TCP o UDP
  • Rich-Rules: reglas con sintaxis similar a la utilizada en Iptables para casos en los que se requiera un filtrado más granular

Uso básico de FirewallD

Nota: Se hace la suposición que FirewallD se encuentra instalado y habilitado como firewall.

FirewallD usa el binario firewall-cmd como la herramienta de administración por línea de comandos. A continuación se listan algunas de las operaciones más comunes:

  • Listar las zonas activas
sudo firewall-cmd --get-active-zones
  • Listar la configuración de una zona específica
sudo firewall-cmd --zone=public --list-all
  • Añadir un servicio a una zona específica (En caso de no poner la bandera --permanent, el cambio es temporal)
sudo firewall-cmd --zone=public --add-service=https --permanent
  • Remover un servicio de una zona específica
sudo firewall-cmd --zone=public --remove-service=http --permanent
  • Añadir un puerto a una zona específica
sudo firewall-cmd --zone=public --add-port=9443/tcp --permanent
  • Remover un puerto de una zona específica
sudo firewall-cmd --zone=public --remove-port=9443/tcp --permanent
  • Asignar una interfaz de red a una zona específica
sudo firewall-cmd --zone=internal --change-interface=eno1 --permanent
  • Cargar los cambios realizados sin interrumpir las conexiones persistentes
sudo firewall-cmd --reload

Configuración de SSH

Nota: Se hace la suposición que se configuraron los servicios o puertos necesarios para funcionamiento del servidor previamente. Nota: Se hace la suposición que la zona internal es la utilizada para accesar por SSH al servidor.

A pesar de que FirewallD contiene de forma predeterminada un servicio para usar SSH, este servicio no permite filtrar el acceso por IP específicas, por lo que es necesario usar 'Rich-Rules'.

En caso de haber configurado previamente el servicio de SSH en FirewallD, es necesario removerlo:

sudo firewall-cmd --zone=internal --remove-service=ssh --permanent

Por cada IP que se deba conectar al servidor por SSH ejecutar el siguiente comando:

sudo firewall-cmd --zone=internal --add-rich-rule='rule family=ipv4 source address=1.2.3.4/24 service name=ssh log prefix="SSH Access" level="notice" accept' --permanent

Cargar los cambios realizados

sudo firewall-cmd --reload

Verifique la configuración realizada

sudo firewall-cmd --zone=internal --list-all