Artículo
· 3 abr, 2023 Lectura de 9 min

Apache Web Gateway con Docker

¡Hola Comunidad!

En este artículo configuraremos mediante programación un Apache Web Gateway con Docker, utilizando:

  • El Protocolo HTTPS.
  • TLS\SSL para asegurar la comunicación entre el Web Gateway y la instancia de IRIS.

imagen

Utilizaremos dos imágenes: una para el Web Gateway y la segunda para la instancia de IRIS.

Todos los archivos necesarios están disponibles en este repositorio de GitHub.

Comencemos clonando el proyecto de git:

git clone https://github.com/lscalese/docker-webgateway-sample.git
cd docker-webgateway-sample

Preparación del sistema

Para evitar problemas con los permisos, el sistema necesita un usuario y un grupo:

  • www-data
  • irisowner

Es necesario para compartir archivos de certificados con los contenedores. Si no existen en tu sistema, simplemente ejecútalos:

sudo useradd --uid 51773 --user-group irisowner
sudo groupmod --gid 51773 irisowner
sudo useradd –user-group www-data

Generación de certificados

En este ejemplo, utilizaremos tres certificados:

  1. Uso del servidor web HTTPS
  2. Cifrado TLS\SSL en el cliente Web Gateway
  3. Cifrado TLS\SSL en la Instancia de IRIS

Para generarlos, está disponible un script listo para usarse.

Sin embargo, hay que personalizar el asunto del certificado; simplemente edita el archivo gen-certificates.sh.

Esta es la estructura del argumento OpenSSL subj:

  1. C: Código del país
  2. ST: Estado
  3. L: Ubicación
  4. O: Organización
  5. OU: Unidad de la organización
  6. CN: Nombre común (básicamente el nombre de dominio o el nombre del host)

Se pueden cambiar estos valores.

# sudo is needed due chown, chgrp, chmod ...
sudo ./gen-certificates.sh

Si todo está bien, deberías ver dos nuevos directorios ./certificados/ y ~/webgateway-apache-certificados/ con certificados:

Archivo Contenedor Descripción
./certificates/CA_Server.cer webgateway,iris Certificado del servidor de autoridad
./certificates/iris_server.cer iris Certificado para la instancia de IRIS (utilizado para el cifrado de la comunicación mirror y de webgateway)
./certificates/iris_server.key iris Clave privada relacionada
~/webgateway-apache-certificates/apache_webgateway.cer webgateway Certificado para el servidor web de apache
~/webgateway-apache-certificates/apache_webgateway.key webgateway Clave privada relacionada
./certificates/webgateway_client.cer webgateway Certificado para cifrar la comunicación entre webgateway e IRIS
./certificates/webgateway_client.key webgateway Clave privada relacionada


Ten en cuenta que si hay certificados autofirmados, los navegadores web mostrarán alertas de seguridad. Obviamente, si tienes un certificado emitido por una autoridad certificadora, puedes utilizarlo en vez de uno autofirmado (especialmente para el certificado del servidor de Apache).

Archivos de configuración del Web Gateway

Echa un vistazo a los archivos de la configuración.

CSP.INI

Puedes ver un archivo CSP.INI en el directorio webgateway-config-files.
Será introducido en la imagen, pero el contenido puede ser modificado durante el tiempo de ejecución.
Considera este archivo como una plantilla.

En este ejemplo, los siguientes parámetros se sobrescribirán cuando se inicie el contenedor:

  • Ip_Address
  • TCP_Port
  • System_Manager

Consulta startUpScript.sh para más información. A grandes rasgos, la sustitución se realiza con la línea de comandos sed.

Además, este archivo contiene la configuración SSL\TLS para asegurar la comunicación con la instancia de IRIS:

SSLCC_Certificate_File=/opt/webgateway/bin/webgateway_client.cer
SSLCC_Certificate_Key_File=/opt/webgateway/bin/webgateway_client.key
SSLCC_CA_Certificate_File=/opt/webgateway/bin/CA_Server.cer

Estas líneas son importantes. Debemos asegurarnos de que los archivos del certificado estarán disponibles para el contenedor.
Lo haremos más tarde en el archivo docker-compose con un volumen.

000-default.conf

Se trata de un archivo de configuración de Apache. Permite utilizar el protocolo HTTPS y redirige las llamadas HTTP a HTTPS.
Los archivos del certificado y la clave privada se configuran en este archivo:

SSLCertificateFile /etc/apache2/certificate/apache_webgateway.cer
SSLCertificateKeyFile /etc/apache2/certificate/apache_webgateway.key

Instancia de IRIS

Para nuestra instancia de IRIS, configuramos únicamente los requisitos mínimos para permitir la comunicación de SSL\TLS con el Web Gateway; esto incluye:

  1. Configuración SSL %SuperServer
  2. Habilitar la configuración de seguridad SSLSuperServer
  3. Restringir la lista de IPs que pueden utilizar el servicio del Web Gateway

    Para facilitar la configuración, se utiliza config-api con un archivo de configuración JSON sencillo.

{
   "Security.SSLConfigs": {
       "%SuperServer": {
           "CAFile": "/usr/irissys/mgr/CA_Server.cer",
           "CertificateFile": "/usr/irissys/mgr/iris_server.cer",
           "Name": "%SuperServer",
           "PrivateKeyFile": "/usr/irissys/mgr/iris_server.key",
           "Type": "1",
           "VerifyPeer": 3
       }
   },
   "Security.System": {
       "SSLSuperServer":1
   },
   "Security.Services": {
       "%Service_WebGateway": {
           "ClientSystems": "172.16.238.50;127.0.0.1;172.16.238.20"
       }
   }
}

No es necesario realizar ninguna acción. La configuración se cargará automáticamente al iniciar el contenedor.

Imagen tls-ssl-webgateway

dockerfile

ARG IMAGEWEBGTW=containers.intersystems.com/intersystems/webgateway:2021.1.0.215.0
FROM ${IMAGEWEBGTW}
ADD webgateway-config-files /webgateway-config-files
ADD buildWebGateway.sh /
ADD startUpScript.sh /
RUN chmod +x buildWebGateway.sh startUpScript.sh && /buildWebGateway.sh
ENTRYPOINT ["/startUpScript.sh"]

De forma predeterminada, el punto de entrada es /startWebGateway, pero necesitamos realizar algunas operaciones antes de iniciar el servidor web. Recuerda que nuestro archivo CSP.ini es una plantilla, y necesitamos cambiar algunos parámetros (IP, puerto, administrador del sistema) durante el arranque. startUpScript.sh realizará estos cambios y después ejecutará el script del punto de entrada inicial /startWebGateway.

Arranque de los contenedores

Archivo Docker-compose

Antes de iniciar los contenedores, se debe modificar el archivo docker-compose.yml:

  • **SYSTEM_MANAGER** debe estar configurado con la IP autorizada para tener acceso a Web Gateway Management https://localhost/csp/bin/Systems/Module.cxw Básicamente, es tu dirección IP (Puede ser una lista separada por comas).

  • **IRIS_WEBAPPS** debe configurarse con la lista de tus aplicaciones CSP. La lista está separada por espacios, por ejemplo: IRIS_WEBAPPS=/csp/sys /swagger-ui. De forma predeterminada, solo se expone /csp/sys.

  • Los puertos 80 y 443 están mapeados. Adáptalos a otros puertos si ya se utilizan en tu sistema.
version: '3.6'
services:

 webgateway:
   image: tls-ssl-webgateway
   container_name: tls-ssl-webgateway
   networks:
     app_net:
       ipv4_address: 172.16.238.50
   ports:
     # change the local port already used on your system.
     - "80:80"
     - "443:443"
   environment:
     - IRIS_HOST=172.16.238.20
     - IRIS_PORT=1972
     # Replace by the list of ip address allowed to open the CSP system manager
     # https://localhost/csp/bin/Systems/Module.cxw 
     # see .env file to set environement variable.
     - "SYSTEM_MANAGER=${LOCAL_IP}"
     # the list of web apps
     # /csp allow to the webgateway to redirect all request starting by /csp to the iris instance
     # You can specify a list separate by a space : "IRIS_WEBAPPS=/csp /api /isc /swagger-ui"
     - "IRIS_WEBAPPS=/csp/sys"
   volumes:
     # Mount certificates files.
     - ./volume-apache/webgateway_client.cer:/opt/webgateway/bin/webgateway_client.cer
     - ./volume-apache/webgateway_client.key:/opt/webgateway/bin/webgateway_client.key
     - ./volume-apache/CA_Server.cer:/opt/webgateway/bin/CA_Server.cer
     - ./volume-apache/apache_webgateway.cer:/etc/apache2/certificate/apache_webgateway.cer
     - ./volume-apache/apache_webgateway.key:/etc/apache2/certificate/apache_webgateway.key
   hostname: webgateway
   command: ["--ssl"]

 iris:
   image: intersystemsdc/iris-community:latest
   container_name: tls-ssl-iris
   networks:
     app_net:
       ipv4_address: 172.16.238.20
   volumes:
     - ./iris-config-files:/opt/config-files
     # Mount certificates files.
     - ./volume-iris/CA_Server.cer:/usr/irissys/mgr/CA_Server.cer
     - ./volume-iris/iris_server.cer:/usr/irissys/mgr/iris_server.cer
     - ./volume-iris/iris_server.key:/usr/irissys/mgr/iris_server.key
   hostname: iris
   # Load the IRIS configuration file ./iris-config-files/iris-config.json
   command: ["-a","sh /opt/config-files/configureIris.sh"]

networks:
 app_net:
   ipam:
     driver: default
     config:
       - subnet: "172.16.238.0/24"

Ejecutamos el build e iniciamos:


docker-compose up -d --build

Los contenedores tls-ssl-iris y tls-ssl-webgateway deben iniciarse.

Prueba del acceso web

Página predeterminada de Apache

Abre la página http://localhost. Serás redirigido automáticamente a https://localhost.
Los navegadores muestran alertas de seguridad. Este es el comportamiento habitual con un certificado autofirmado, acepta el riesgo y continua.

imagen

Página de administración del Web Gateway

Abre https://localhost/csp/bin/Systems/Module.cxw y prueba la conexión con el servidor. imagen

Portal de administración

Abre https://localhost/csp/sys/utilhome.csp

imagen

¡Excelente! ¡El ejemplo del Web Gateway funciona!

IRIS Mirror con Web Gateway

En el artículo anterior construimos un entorno mirror, pero faltaba el Web Gateway. Ahora podemos solucionar eso.
Un nuevo repositorio iris-miroring-with-webgateway está disponible, incluyendo el Web Gateway y algunas mejoras más:

  1. Los certificados ya no se generan sobre la marcha, sino en un proceso separado.
  2. Las direcciones IP se sustituyen por variables de entorno en docker-compose y archivos de configuración JSON. Las variables se definen en el archivo ".env".
  3. El repositorio puede utilizarse como plantilla.

Consulta el archivo README.md del repositorio para ejecutar un entorno como este:

imagen

Comentarios (0)2
Inicie sesión o regístrese para continuar