¡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.
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:
- Uso del servidor web HTTPS
- Cifrado TLS\SSL en el cliente Web Gateway
- 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
:
- C: Código del país
- ST: Estado
- L: Ubicación
- O: Organización
- OU: Unidad de la organización
- 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:
- Configuración SSL
%SuperServer
- Habilitar la configuración de seguridad SSLSuperServer
-
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.
Página de administración del Web Gateway
Abre https://localhost/csp/bin/Systems/Module.cxw y prueba la conexión con el servidor.
Portal de administración
Abre https://localhost/csp/sys/utilhome.csp
¡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:
- Los certificados ya no se generan sobre la marcha, sino en un proceso separado.
- 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".
- El repositorio puede utilizarse como plantilla.
Consulta el archivo README.md del repositorio para ejecutar un entorno como este: