Las auditorías de seguridad son imprescindibles en todas las empresas para proteger los datos y evitar posibles infracciones de seguridad, pero también es una tarea que requiere mucho tiempo, ya que es necesario comprobar muchas cosas periódicamente. El resultado es que, por lo general, las empresas siguen un checklist de seguridad y configuran todo para cubrirlo, pero no cuentan con auditorías de seguridad. Puede decir:"Si todo funciona bien, déjelo como está". Bueno, en realidad, no puede confiar en que las políticas de seguridad que está configurando ahora serán útiles en el futuro y que nada cambiará para afectarlas. La solución para esto podría ser automatizar estas auditorías de seguridad o tener una forma de hacerlo periódicamente de una manera fácil de usar.
En este blog, veremos cómo realizar diferentes Auditorías de Seguridad para PostgreSQL y automatizarlas usando ClusterControl.
¿Qué necesitas para hacer una auditoría de seguridad en PostgreSQL?
Veamos algunas de las cosas más importantes para auditar por motivos de seguridad en una base de datos PostgreSQL:
-
Comunicaciones:la comunicación en todos sus sistemas debe estar encriptada y debe restringir el tráfico a lo que viene solo de fuentes conocidas para reducir el riesgo de acceso no autorizado a sus datos.
-
Acceso a la base de datos:debe restringir el acceso tanto físico como remoto a sus bases de datos. El acceso remoto se puede restringir permitiendo conexiones solo de fuentes conocidas para cada usuario, o incluso usando conexiones SSH o VPN.
-
Cuentas de usuario:Hay muchas maneras de mejorar la seguridad de sus cuentas de usuario en PostgreSQL, como eliminar usuarios inactivos , otorgando solo los privilegios necesarios, etc.
-
Instalación y configuración:Hay algunos cambios que hacer para asegurar su instalación de PostgreSQL, como instalar solo lo necesario paquetes, cambiando las credenciales y la configuración por defecto, etc.
-
Auditoría y registro:las declaraciones de registro pueden ayudarlo a detectar problemas de seguridad o evitarlos si los detecta a tiempo . Puede usar la función de registro estándar de PostgreSQL, pero también puede usar una extensión como pgAudit para tener un registro más detallado.
-
Actualizaciones:mantenga su sistema operativo y su base de datos lo más actualizados posible mediante la aplicación de parches y actualizaciones de seguridad.
-
Monitor de consultas:debe verificar el tráfico para detectar consultas anormales o ataques DoS.
-
Monitoreo:para conocer el estado de sus sistemas, necesitará contar con un buen sistema de monitoreo. Esto podría ser útil para encontrar problemas de seguridad o incluso para evitarlos.
Ahora que sabemos qué verificar, veamos una opción para automatizar estas tareas:ClusterControl.
Auditorías de seguridad para PostgreSQL con ClusterControl
Para las auditorías de seguridad de PostgreSQL, ClusterControl es una buena opción, ya que es un sistema de administración y monitoreo que lo ayuda a implementar, administrar, monitorear y escalar sus bases de datos desde una interfaz fácil de usar. Es compatible con las principales tecnologías de base de datos de código abierto y puede automatizar muchas de las tareas de la base de datos que debe realizar regularmente, como agregar y escalar nuevos nodos, ejecutar copias de seguridad y restauraciones, y más.
Veamos cómo puede cubrir los controles de seguridad mencionados anteriormente utilizando ClusterControl.
Comunicaciones
En la sección de seguridad (ClusterControl -> Seleccionar clúster -> pestaña Seguridad), puede habilitar el cifrado SSL para cifrar las conexiones entre los clientes y el servidor.

El acceso desde ClusterControl a los nodos también está protegido mediante SSH sin contraseña con un par de claves.
Acceso a la base de datos
Puede restringir el acceso a su base de datos PostgreSQL modificando el archivo de configuración pg_hba.conf desde la interfaz de usuario de ClusterControl (ClusterControl -> Seleccionar clúster -> Administrar -> Configuraciones). De esta forma, puede especificar las siguientes opciones:
-
Tipo:Las opciones más utilizadas aquí son "local" para un socket de dominio Unix y "host" para un socket TCP/IP simple o cifrado con SSL, pero hay otras opciones como "hostssl" y más.
-
Base de datos:Puede ser "todos", "mismo usuario", "igual", "replicación", una nombre de la base de datos, o una lista separada por comas de nombres de bases de datos.
-
Usuario:Puede ser "todos", un nombre de usuario, un nombre de grupo con el prefijo "+", o una lista separada por comas de los mismos.
-
Dirección:nombre de host, o una dirección IP y una máscara CIDR.
-
Método:Los más utilizados aquí son "confiar", "rechazar", "md5", "ident" y "peer", pero hay más opciones como "scram-sha-256" o "ldap".
Ejemplo:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Cuentas de usuario
Puede administrar los usuarios de su base de datos desde la interfaz de usuario de ClusterControl (ClusterControl -> Seleccionar clúster -> Administrar -> Administración de usuarios). Puede crear nuevos usuarios, o editar y eliminar los existentes, y asignarles los privilegios correspondientes.
Instalación y Configuración
Puede implementar un nuevo clúster de PostgreSQL o importar uno existente. Con su clúster de PostgreSQL agregado a ClusterControl, puede administrar la configuración actual (ClusterControl -> Seleccionar clúster -> Administrar -> Configuración), o incluso agregar nuevos nodos al clúster.
Durante la implementación, puede modificar la configuración de la base de datos, como el puerto de la base de datos o las credenciales, y luego ClusterControl instalará solo los paquetes necesarios para implementar su nuevo clúster.
Auditoría y registro
Puede verificar el registro estándar de PostgreSQL en la interfaz de usuario de ClusterControl (ClusterControl -> Seleccionar clúster -> Registros -> Registros del sistema) o incluso habilitar la extensión pgAudit desde ClusterControl y verificar el registro de auditoría en el mismo lugar .
Actualizaciones
En el caso de actualizaciones menores, puede usar ClusterControl para esta tarea. Puede acceder a la interfaz de usuario y ejecutar la actualización (ClusterControl -> Seleccionar clúster -> Administrar -> Actualizaciones), o utilizar el informe operativo de ClusterControl "Actualizaciones de paquetes" para recibir los paquetes disponibles por correo electrónico o comprobarlos en la interfaz de usuario de ClusterControl.
Supervisión de consultas
En la sección del monitor de consultas, puede encontrar las consultas principales, las consultas en ejecución, los valores atípicos de las consultas y las estadísticas de las consultas para monitorear el tráfico de su base de datos.
Monitoreo
ClusterControl le permite monitorear sus servidores en tiempo real con un conjunto predefinido de paneles para analizar algunas de las métricas más comunes.
ClusterControl le permite personalizar los gráficos disponibles en el clúster y puede habilitar el monitoreo basado en agentes para generar paneles más detallados.
También puede crear alertas, que le informan sobre eventos en su clúster, o integrarse con diferentes servicios como PagerDuty o Slack.
Informes operativos
Si no desea acceder a la interfaz de usuario de ClusterControl para comprobar el estado de sus clústeres, puede crear o programar informes operativos.
Los informes operativos le brindan información sobre el estado de su base de datos, que puede usar para auditar su entorno. Estos informes consisten en diferentes controles y abordan varias tareas diarias de DBA. La idea detrás de ClusterControl Operational Reporting es poner todos los datos más relevantes en un solo documento que pueda analizarse rápidamente para obtener una comprensión clara del estado de las bases de datos y sus procesos.
Puede programar informes como "Informe diario del sistema", "Informe de actualización del paquete", "Informe de cambio de esquema", "Copias de seguridad" y "Disponibilidad", y puede recibirlos en más de un correo electrónico dirección.
Uso de CLI de ClusterControl para automatizar auditorías de seguridad
ClusterControl CLI, también conocido como s9s, es una herramienta de línea de comandos introducida en ClusterControl versión 1.4.1 para interactuar, controlar y administrar clústeres de bases de datos mediante el sistema ClusterControl. ClusterControl CLI abre una nueva puerta para la automatización de clústeres donde puede integrarla fácilmente con herramientas de automatización de implementación existentes como Ansible, Puppet, Chef, etc. La herramienta de línea de comandos se invoca ejecutando un binario llamado s9s agregado de forma predeterminada en la instalación de ClusterControl.
Veamos algunos ejemplos de esta poderosa herramienta. Para ello, veremos cómo realizar las tareas de Auditoría de Seguridad mencionadas utilizando el CLI de ClusterControl.
Comunicaciones
Puede habilitar el cifrado SSL en su clúster con el siguiente comando:
$ s9s cluster --enable-ssl --cluster-id=ID
Donde ID es el número de identificación del clúster:puede monitorear el progreso de esta tarea (y el resto de las tareas) enumerando el proceso de trabajo.
$ s9s job --list
Acceso a la base de datos
Puede verificar la configuración de la base de datos para validar el acceso permitido:
$ s9s node --cluster-id=ID \
--nodes="IP_ADDRESS:PORT" \
--list-config
GROUP OPTION NAME VALUE
- data_directory '/var/lib/pgsql/13/data'
- hba_file '/var/lib/pgsql/13/data/pg_hba.conf'
- ident_file '/var/lib/pgsql/13/data/pg_ident.conf'
- listen_addresses '*'
- port 5432
- max_connections 100
- ssl on
- ssl_ca_file '/etc/ssl/postgresql_single/cluster_47/server_ca.crt'
- ssl_cert_file '/etc/ssl/postgresql_single/cluster_47/server.crt'
...
Donde ID es el número de identificación del clúster, IP_ADDRESS y PORT son la dirección IP y el puerto de su base de datos.
Cuentas de usuario
Puede enumerar las cuentas de usuario que están en el clúster:
$ s9s accounts --list --cluster-id=ID --long
NAME P CONN MAXC GRANTS
's9spostgresqlchk'@'%' N 0 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
'postgres'@'%' N 1 0 LOGIN,SUPERUSER,INHERIT,REPLICATION,CREATEROLE,CREATEDB
'pg_write_server_files'@'%' N 0 0 INHERIT
...
'cmon_replication'@'%' N 2 0 LOGIN,INHERIT,REPLICATION
'admindb'@'%' N 3 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
Donde ID es el número de identificación del clúster.
Instalación y Configuración
Puede crear nuevos clústeres, agregar nuevos nodos de base de datos o incluso cambiar las configuraciones existentes en su clúster:
$ s9s cluster --create \
--cluster-type=postgresql \
--nodes="IP_ADDRESS1?master;IP_ADDRESS2?slave;IP_ADDRESS3?slave;" \
--db-admin="DBUSER" \
--db-admin-passwd="DBPASSWORD" \
--cluster-name=PG1 \
--os-user=OSUSER \
--os-key-file=/home/OSUSER/.ssh/id_rsa \
--provider-version=13 \
--log
Donde IP_ADDRESS es la dirección IP de su base de datos, y debe reemplazar DBUSER, DBPASSWORD y OSUSER para las credenciales de su base de datos y el usuario del sistema operativo, respectivamente.
Auditoría y registro
Puede habilitar el registro de auditoría desde la línea de comando usando el siguiente comando:
$ s9s cluster --setup-audit-logging --cluster-id=ID
Donde ID es el número de ID del clúster:luego, puede verificar los registros con la información de registro de auditoría.
Actualizaciones
Puede crear informes para ver si necesita actualizar sus bases de datos o paquetes de sistemas operativos.
$ s9s report --cluster-id=ID --type=upgrade --create
Donde ID es el número de ID del clúster:según este informe, puede programar ventanas de mantenimiento para ejecutar las actualizaciones, y también se puede hacer desde ClusterControl.
Supervisión de consultas
Puede verificar el proceso que se ejecuta en sus nodos y filtrarlos por consulta, fuente y más.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Monitoreo
Tiene diferentes opciones para monitorear sus sistemas desde aquí. Puede comprobar el estado de todos los clústeres, comprobar uno de ellos o incluso comprobar las alarmas en tiempo real.
$ s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
1 STARTED postgresql_single system admins PostgreSQL Cluster All nodes are operational.
2 FAILURE galera system admins PXC57 Cluster failure.
3 STARTED replication system admins MariaDB104 All nodes are operational.
4 STARTED mongodb system admins MongoDB42 All nodes are operational.
Total: 4
$ s9s alarm --cluster-name="PostgreSQL Cluster" --list
ID CID SEVERITY COMPONENT TYPE HOSTNAME TITLE
263 1 CRITICAL Network HostSshFailed haproxy1 SSH failed
264 1 CRITICAL Network HostSshFailed haproxy2 SSH failed
265 1 CRITICAL Network HostSshFailed postgresql2 SSH failed
266 1 CRITICAL Network HostSshFailed postgresql3 SSH failed
...
Informes de operación
Puede crear informes operativos y consultarlos desde la línea de comandos. El mismo informe está disponible en la interfaz de usuario de ClusterControl.
$ s9s report --cluster-id=ID --type=default --create
Estos son solo algunos ejemplos básicos para ver el tipo de cosas que puede realizar con la CLI de ClusterControl. Para obtener más información sobre la herramienta, puede consultar la documentación oficial.
Conclusión
Siempre existe el riesgo de ser pirateado, pero puede cerrar la brecha de vulnerabilidad en su clúster de PostgreSQL al verificar los puntos mencionados anteriormente. Para hacer esta tarea mucho más fácil, puede utilizar la interfaz de usuario de ClusterControl o incluso automatizar las comprobaciones con la CLI de ClusterControl. También se puede integrar con herramientas externas como Ansible, Puppet y más.