Buscando alternativas para bloquear intentos de conexión al servicio SSH que llenaban los registros sin tener que crear reglas con iptables o nft, systemd documenta cómo controlar los recursos.
En el manual de systemd.resource-control se documenta IPAccounting=, que permite habilitar la característica.
La manera eficiente de personalizar un fichero de configuración de unidades de systemd es mediante su sistema de sobrescritura de configuración. Por ejemplo, para personalizar sshd.service se puede ejecutar:
sudo systemctl edit sshd
Y luego simplemente agregar líneas. En este caso se pretendía agregar líneas nuevas a la sección [Service], por lo que solamente hay que poner el nombre de la sección y las líneas a personalizar. El fichero a editar aparecerá con una muestra de líneas comentadas, que por el hecho de estar desactivadas se pueden borrar si se desea.
Con este ejemplo se quería bloquear el acceso desde cualquier dirección IP al servicio de SSH, excepto desde algunos prefijos de direcciones (lista blanca):
[Service] IPAccounting=yes IPAddressDeny=any IPAddressAllow=2001:db8::/32 IPAddressAllow=192.0.2.0/24 IPAddressAllow=198.51.100.0/24 IPAddressAllow=203.0.113.0/24
Esta forma de configurar permite tanta flexibilidad como permitan las unidades de systemd y los grupos de control de Linux. Sin servicios adicionales ni reglas complejas.
Genial estrategia. Lo simple es lo más efectivo en ocasiones.
Gracias Randall, aprovecho para mencionar que esta técnica requiere grupo de control versión 2 (cgroupv2), por lo que requiere una distribución relativamente reciente que lo tenga habilitado. Por ejemplo, en CentOS 8 está soportado pero deshabilitado por defecto. En esta distribución puede habilitar en la línea de arranque del kernel en la configuración de GRUB, agregando systemd.unified_cgroup_hierarchy=1
Históricamente Docker no funciona con cgroupv2, por esta razón se ha venido recomendando podman que sí lo soporta.
Saludos.
Conviene comentar que agregar listas muy grandes, por ejemplo una lista blanca, como las de ipverse.net, a partir de miles de líneas puede causar problemas de rendimiento en el procesado de las listas en versiones de systemd anteriores a la 250. En el ticket #20680 de systemd en github se puede obtener más información.