Artigo
· Set. 20, 2022 9min de leitura

Apache Web Gateway com Docker

Apache Web Gateway com Docker

Olá, comunidade.

Neste artigo, vamos configurar programaticamente um Apache Web Gateway com Docker usando:

  • Protocolo HTTPS.
  • TLS\SSL para proteger a comunicação entre o Web Gateway e a instância IRIS.

imagem

Usaremos duas imagens: uma para o Web Gateway e a segunda para a instância IRIS.

Todos os arquivos necessários estão disponíveis neste repositório do GitHub.

Vamos começar com um git clone:

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

Prepare seu sistema

Para evitar problemas com permissões, seu sistema precisa de um usuário e um grupo:

  • www-data
  • irisowner

É necessário compartilhar arquivos de certificados com os contêineres. Se não estiverem no seu sistema, basta executar:

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

Gere certificados

Nesta amostra, usaremos três certificados:

  1. Uso do servidor Web HTTPS.
  2. Criptografia TLS\SSL no cliente do Web Gateway.
  3. Criptografia TLS\SSL na instância IRIS.

Um script pronto para uso está disponível para gerá-los.

No entanto, você deve personalizar o sujeito do certificado. Basta editar o arquivo gen-certificates.sh.

Esta é a estrutura do argumento subj do OpenSSL:

  1. C: Código do país
  2. ST: Estado
  3. L: Local
  4. O: Organização
  5. OU: Unidade de organização
  6. CN: Nome comum (basicamente, o nome do domínio ou do host)

Fique à vontade para mudar esses valores.

# sudo é necessário devido a chown, chgrp, chmod ...
sudo ./gen-certificates.sh

Se estiver tudo certo, você verá dois novos diretórios ./certificates/ e ~/webgateway-apache-certificates/ com certificados:

Arquivo Contêiner Descrição
./certificates/CA_Server.cer webgateway,iris Certificado do servidor da autoridade
./certificates/iris_server.cer iris Certificado para a instância IRIS (usado para a criptografia de comunicação do espelho e webgateway)
./certificates/iris_server.key iris Chave privada relacionada
~/webgateway-apache-certificates/apache_webgateway.cer webgateway Certificado para o servidor da Web Apache
~/webgateway-apache-certificates/apache_webgateway.key webgateway Chave privada relacionada
./certificates/webgateway_client.cer webgateway Certificado para criptografar a comunicação entre o webgateway e IRIS
./certificates/webgateway_client.key webgateway Chave privada relacionada

Considere que, se houver certificados autoassinados, os navegadores da Web mostrarão alertas de segurança. Obviamente, se você tiver um certificado entregue por uma autoridade certificada, você pode usá-lo em vez de um autoassinado (especialmente para o certificado do servidor Apache).

Arquivos de configuração do Web Gateway

Observe os arquivos de configuração.

CSP.INI

Você pode ver um arquivo CSP.INI no diretório webgateway-config-files.
Ele será empurrado para dentro da imagem, mas o conteúdo pode ser modificado no ambiente de execução. Considere o arquivo como um modelo.

Na amostra, os seguintes parâmetros serão substituídos na inicialização do contêiner:

  • Ip_Address
  • TCP_Port
  • System_Manager

Consulte startUpScript.sh para ver mais detalhes. Basicamente, a substituição é realizada com a linha de comando sed.

Além disso, esse arquivo contém a configuração SSL\TLS para proteger a comunicação com a instância 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

Essas linhas são importantes. Precisamos garantir que os arquivos dos certificados estarão disponíveis para o contêiner.
Faremos isso mais tarde no arquivo docker-compose com um volume.

000-default.conf

Esse é um arquivo de configuração do Apache. Ele permite o uso do protocolo HTTPS e redireciona chamadas HTTP para HTTPS.
Os arquivos de certificado e chave privada são configurados neste arquivo:

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

Instância IRIS

Para nossa instância IRIS, configuramos somente o requisito mínimo para permitir a comunicação SSL\TLS com o Web Gateway. Isso envolve:

  1. Configuração SSL %SuperServer.
  2. Permitir a configuração de segurança SSLSuperServer.
  3. Restringir a lista de IPs que podem usar o serviço Web Gateway.

    Para facilitar a configuração, config-api é usado com um arquivo de configuração JSON simples.

{
   "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"
       }
   }
}

Nenhuma ação é necessária. A configuração será carregada automaticamente durante a inicialização do contêiner.

Imagem 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"]

Por padrão, o ponto de entrada é /startWebGateway, mas precisamos realizar algumas operações antes de iniciar o webserver. Lembre-se de que nosso arquivo CSP.ini é um modelo, e precisamos mudar alguns parâmetros (IP, porta, gerente de sistemas) na inicialização. startUpScript.sh realizará essas mudanças e executará o script de ponto de entrada inicial /startWebGateway.

Inicializando os contêineres

arquivo docker-compose

Antes de iniciar os contêineres, o arquivo docker-compose.yml precisa ser modificado:

  • **SYSTEM_MANAGER** precisa ser definido com o IP autorizado para ter acesso ao Gerenciamento do Web Gateway https://localhost/csp/bin/Systems/Module.cxw Basicamente, é seu endereço IP (pode ser uma lista separada por vírgulas).

  • **IRIS_WEBAPPS** precisa ser definido com a lista dos seus aplicativos CSP. A lista é separada por espaços, por exemplo: IRIS_WEBAPPS=/csp/sys /swagger-ui. Por padrão, apenas /csp/sys é exposto.

  • As portas 80 e 443 são mapeadas. Adapte a outras portas se elas já estão em uso no seu 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:
     # mude a porta local já em uso no seu sistema.
     - "80:80"
     - "443:443"
   environment:
     - IRIS_HOST=172.16.238.20
     - IRIS_PORT=1972
     # Troque pela lista de endereços IP permitidos para abrir o gerente de sistema de CSP
     # https://localhost/csp/bin/Systems/Module.cxw 
     # veja o arquivo .env para definir a variável de ambiente.
     - "SYSTEM_MANAGER=${LOCAL_IP}"
     # a lista de web apps
     # /csp permite que o webgateway redirecione todas as solicitações que começam com /csp à instância iris
     # Você pode especificar uma lista separada por um espaço : "IRIS_WEBAPPS=/csp /api /isc /swagger-ui"
     - "IRIS_WEBAPPS=/csp/sys"
   volumes:
     # Monte os arquivos dos certificados.
     - ./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
     # Monte os arquivos dos certificados.
     - ./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
   # Carregue o arquivo de configuração IRIS ./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"

Compile e comece:


docker-compose up -d --build

Os contêineres tls-ssl-iris e tls-ssl-webgateway devem ser inicializados.

Teste o acesso a Web

Página padrão do Apache

Abra a página http://localhost. Você será automaticamente redirecionado para https://localhost.
Os navegadores mostram alertas de segurança. Esse é o comportamento padrão com um certificado autoassinado, aceite o risco e continue.

imagem

Página de gerenciamento do Web Gateway

Abra https://localhost/csp/bin/Systems/Module.cxw e teste a conexão com o servidor. imagem

Portal de gerenciamento

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

imagem

Ótimo! A amostra do Web Gateway está funcionando!

Espelho IRIS com Web Gateway

No artigo anterior, criamos um ambiente de espelho, mas faltava o Web Gateway. Agora, podemos aprimorar isso.
Um novo repositório iris-miroring-with-webgateway está disponível, incluindo o Web Gateway e mais algumas melhorias:

  1. Os certificados não são mais gerados na hora, mas em um processo separado.
  2. Os endereços IP são substituídos pelas variáveis de ambiente nos arquivos de configuração docker-compose e JSON. As variáveis são definidas no arquivo '.env'.
  3. O repositório pode ser usado como modelo.

Veja o arquivo README.md do repositório para a execução em um ambiente como este:

imagem

Discussão (0)2
Entre ou crie uma conta para continuar