Introducción
Algunos despliegues de Couchbase requieren comunicaciones seguras entre nodos a través de la red, esto podría ser debido a razones como las políticas de gobierno de datos o el cumplimiento normativo. Seguridad del protocolo de Internet (IPsec) es un conjunto de protocolos para comunicaciones seguras basadas en el Protocolo de Internet (IP) mediante autenticating y encriptando cada Paquete IP de una sesión de comunicación. IPsec puede utilizarse para proteger los flujos de datos entre un par de hosts (de host a host), entre un par de pasarelas de seguridad (de red a red), o entre una pasarela de seguridad y un host (red a host). El objetivo de este artículo es proporcionar a los administradores de Couchbase una guía rápida sobre cómo configurar IPsec en los nodos de un cluster de Couchbase.
Modos IPsec
IPSec tiene dos modos: modo túnel y modo transporte. El más utilizado es el modo túnel, que suele usarse para configuraciones VPN (creación de dispositivo de red de túnel en proceso). El modo túnel no es práctico para un clúster Couchbase, ya que requeriría crear y mantener túneles entre todos los pares de nodos.
El modo de transporte es necesario para proteger la comunicación entre nodos de la misma red. Permite el uso de IPsec por paquete. Totalmente transparente para las aplicaciones.
IPSec puede proporcionar autenticación de paquetes (es decir, asegurar que los paquetes que se reciben son paquetes de nodos de confianza) y encriptación de paquetes. El modo de transporte y las entradas asociadas de la Base de Datos de Políticas de Seguridad permiten configurar el comportamiento requerido para un cluster Couchbase:
-
determinados tipos de paquetes entrantes sólo se aceptan si están encapsulados en ipsec y son válidos (se descartan en caso contrario)
-
se requiere que determinados tipos de paquetes salientes se encapsulen en ipsec
Por lo general, "tipo específico" va a ser algo así como: todos los paquetes de/a couchbase cluster segmento de red. O puede ser algo como todo: todos los paquetes hacia/desde los puertos de servicio couchbase.
Requisitos
-
Distribución Linux (para este blog se utiliza Debian). Windows soporta IPsec, esto no fue probado.
- Linux Openswan U2.6.32/K2.6.32-573.el6.x86_64 (netkey) o superior
- Couchbase 4.1 o superior
- Acceso de usuario sudo/root al sistema
Instalación y configuración de OpenSwan
Desde la línea de comandos usando sudo, se ejecutó el siguiente comando en cada nodo. Para otras distribuciones linux utilice su gestor de paquetes apropiado.
# sudo apt-get update
# sudo apt-get install openswan
El instalador puede pedir al usuario que cree un certificado x.509, no cree un certificado x.509. IPsec debe configurarse para el modo de transporte. En el entorno de demostración creado para este blog, tenemos dos nodos: 10.0.2.4 y 10.0.2.5.
Pasos
1 - En cada nodo - añadir una línea en el archivo /etc/ipsec.secrets: ipaddress_node1 ipaddress_node2: PSK "alguna_clave"

2 - Modifique el archivo /etc/ipsec.conf para utilizar archivos *.conf ubicados en el subdirectorio ipsec.d. Esto permite una fácil automatización si necesitas añadir nodos al cluster. Cada par de nodos necesita su propia entrada.

3 - Cree un archivo de configuración en el directorio /etc/ipsec.d/ con la siguiente información:
conn couchbase
tipo=transporte
authby=secreto
izquierda=
right=
pfs=sí
auto=inicio
- conn couchbase -connection: etiqueta arbitraria para su conexión. Puede ser cualquier cosa que desee
- type=transport: queremos utilizar el modo transporte para esta conexiónauthby=secret: utilizaremos una clave precompartida (PSK) para esta conexión.
- left=10.0.2.4: esta línea y la siguiente sólo denotan las direcciones IP involucradas en esta asociación IPsec. No importa qué IP es la "izquierda" y cuál es la "derecha".
- right=10.0.2.5: véase el punto anterior.
- pfs=yes: queremos activar Perfect Forward Secrecy para esta conexión. En resumen, esto mejora drásticamente la seguridad. Iauto=start: Queremos iniciar proactivamente la asociación IPsec inmediatamente. También se puede configurar como auto=start, en cuyo caso espera a que el otro extremo de la conexión inicie el tráfico.

4 - Habilite IPSec para utilizar la nueva configuración en ambos nodos: #sudo service ipsec restart
Probar la configuración
Desde una línea de comandos en un nodo, escriba el siguiente comando:
#ping

Desde el otro nodo, utilice la línea de comandos y escriba : (resultado deseado) Si no obtiene ningún mensaje, tendrá que depurar su configuración (consulte las Guías IPsec que se indican a continuación)
#sudo tcpdump esp

Nota: ESP = Encapsulating Security Payload (carga útil de seguridad encapsulada)
Configuración de Couchbase
Instala Couchbase en cada nodo, una configuración simple de dos nodos. Configurar el cluster. Toda la comunicación entre los dos nodos puede ser rastreada usando el comando tcpdump esp, el ejemplo de arriba documenta la comunicación entre dos nodos Couchbase.
Clúster de pruebas de Couchbase:

Captura de pantalla - #sudo tcpdump esp

Referencias
Visión general de IPsec – https://en.wikipedia.org/wiki/IPsec
Implementación del modo de transporte IPsec - https://andersonfam.org/2014/04/02/ipsec-transport-mode/
Uso de StrongSwan (ejemplo de 3 nodos) - https://blog.sprinternet.at/2016/03/ipsec-transport-mode-with-strongswan-on-debian-jessie/
Ejemplos de archivos de configuración utilizados para esta prueba
/etc/ipsec.conf
# /etc/ipsec.conf - Archivo de configuración IPsec de Openswan
#
# Manual: ipsec.conf.5
#
# Por favor, coloque sus propios archivos de configuración en /etc/ipsec.d/ terminando en .conf
versión 2.0 # se ajusta a la segunda versión de la especificación ipsec.conf
Configuración básica del #
configuración
# Controles de registro de depuración: "ninguno" para (casi) ninguno, "todos" para muchos.
# klipsdebug=none
# plutodebug="control parsing"
# Para Red Hat Enterprise Linux y Fedora, deje protostack=netkey
protostack=clave de red
nat_traversal=sí
virtual_private=
oe=off
# Actívalo si ves "no se ha encontrado ningún trabajador disponible".
# nhelpers=0
#Ypuedes poner tu archivo de configuración (.conf) en "/etc/ipsec.d/" y descomentar esto.
include /etc/ipsec.d/*.conf
/etc/ipsecrets
include /etc/ipsec.d/*.secrets
# utilice direcciones IP de su propio entorno
10.0.2.4 10.0.2.5: PSK "sharedkey"
/etc/ipsec.d/couchbase.conf
conn couchbase
tipo=transporte
authby=secreto
left=10.0.2.4
right=10.0.2.4
pfs=y
auto=inicio