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.
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:
- Uso do servidor Web HTTPS.
- Criptografia TLS\SSL no cliente do Web Gateway.
- 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:
- C: Código do país
- ST: Estado
- L: Local
- O: Organização
- OU: Unidade de organização
- 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:
- Configuração SSL
%SuperServer
. - Permitir a configuração de segurança SSLSuperServer.
-
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.
Página de gerenciamento do Web Gateway
Abra https://localhost/csp/bin/Systems/Module.cxw e teste a conexão com o servidor.
Portal de gerenciamento
Abra https://localhost/csp/sys/utilhome.csp
Ó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:
- Os certificados não são mais gerados na hora, mas em um processo separado.
- 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'.
- 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: