↓ Ir para o conteúdo principal
  1. Posts/

Perimeter Servers no IBM Sterling B2B Integrator: Por Que a Caixa na DMZ Liga para Casa, e Não o Contrário

·2155 palavras·11 minutos· loading · loading ·
Newton Rocha
Autor
Newton Rocha
Profissional sênior de TI com mais de 15 anos de experiência em administração de sistemas Linux, automação com Bash e integração corporativa usando tecnologias IBM Sterling (File Gateway, B2B Integrator, Connect:Direct). Escrevo sobre incidentes reais de produção, dicas de MFT/middleware, automação de infraestrutura e como estou aplicando IA em operações de TI.
Tabela de conteúdos
sterling-b2bi-architecture - Este artigo faz parte de uma série de artigos.
Parte 6: Esse Artigo

A conexão roda ao contrário do que você imaginaria
#

A primeira suposição da maioria das pessoas sobre uma caixa na DMZ é que a sua rede interna e confiável é quem alcança ela — o lado seguro inicia, o lado exposto escuta. Um Perimeter Server faz o oposto. O motor central do B2Bi, seguro dentro da sua rede, nunca abre uma conexão para fora, em direção à DMZ. Em vez disso, o Perimeter Server — a caixa que de fato está de frente para os parceiros e a internet — disca de volta para o motor central e mantém essa conexão aberta. O tráfego do parceiro chega primeiro na caixa da DMZ, e só então é encaminhado para dentro por um canal que o próprio lado da DMZ estabeleceu.

Mencionei esse componente na Parte 1 e prometi voltar ao assunto, porque a maioria do material introdutório o ignora completamente — o que é uma pena, já que é o motivo real pelo qual um diagrama de implantação do Sterling tem caixas fora do firewall, para começo de conversa, e é o detalhe que faz toda a história da DMZ fazer sentido depois que você entende em que direção o fio realmente corre. Lado a lado, a suposição e a realidade se parecem assim:

flowchart TB
    subgraph Assumed["O que você imaginaria"]
        direction LR
        C1["Core Engine\n(zona confiável)"]
        FW1{{"Firewall Interno"}}
        PS1["Perimeter Server\n(DMZ)"]
        C1 -- "Core abre uma nova\nconexão para dentro da DMZ" --> FW1
        FW1 -- "exige uma regra de\nliberação de entrada vinda da DMZ" --> PS1
    end

    subgraph Actual["O que de fato acontece"]
        direction LR
        PS2["Perimeter Server\n(DMZ)"]
        FW2{{"Firewall Interno"}}
        C2["Core Engine\n(zona confiável)"]
        PS2 -- "PS disca para fora\n(reverseConnect)" --> FW2
        FW2 -- "regra somente de saída —\nnenhum buraco de entrada necessário" --> C2
    end

    style FW1 fill:#4a1a1a,stroke:#c0392b
    style FW2 fill:#12331a,stroke:#27ae60

A metade de cima é a regra que o seu firewall interno precisaria se o motor central alcançasse a DMZ — uma regra de liberação de entrada que deixa um host da DMZ iniciar tráfego para dentro da zona confiável, que é precisamente o tipo de buraco que uma DMZ existe para evitar. A metade de baixo é o que um Perimeter Server realmente exige: uma regra somente de saída, e nada escutando por conexões vindas do lado da DMZ.

O que é um Perimeter Server
#

Um Perimeter Server é um processo leve e independente que fica na DMZ e termina o handshake de protocolo com o mundo externo — SFTP, FTP/FTPS, HTTP/S, AS2, Connect:Direct, OdetteFTP, SOAP — em nome do B2Bi. Ele não roda Business Processes, não toca em mailboxes, e não guarda configuração de trading partner. O trabalho inteiro dele é gerenciamento de socket: aceitar a conexão, gerenciar a sessão e a thread, e repassar o tráfego para o motor de verdade através de um canal seguro, para que o motor em si — com o database, o histórico de rastreamento de documentos, o arquivo de cada parceiro — nunca precise ficar perto de uma interface voltada ao público (Documentação IBM).

Essa é a proposta de valor inteira em uma frase: ela permite expor endpoints voltados a parceiros sem nunca colocar o motor central ao alcance da internet pública. Além da fronteira de segurança, a IBM também documenta um ângulo de performance — o gerenciamento de sessão e thread na caixa da DMZ reduz a carga que o motor central precisa carregar diretamente, o que importa mais do que parece quando você está rodando dezenas de parceiros com perfis de tráfego muito diferentes através do mesmo node.

Embutido vs. remoto: duas implantações bem diferentes escondidas atrás de um único nome
#

“Perimeter Server” se refere a duas configurações distintas, e misturá-las é uma fonte comum de confusão:

Perimeter Server embutido (local). Empacotado diretamente dentro do próprio B2Bi — sem instalação separada, sem posicionamento na DMZ. Ele existe para que adapters que esperam uma atribuição de perimeter server tenham algo para apontar em um laboratório, um ambiente de desenvolvimento, ou qualquer implantação onde você genuinamente não precisa de uma fronteira de DMZ. Ele não fornece nenhuma das separações de segurança reais que um remoto fornece.

Perimeter Server remoto (instalado). Uma instalação separada, implantada em seu próprio host, física ou logicamente dentro da DMZ, independente da própria instalação do B2Bi. Esse é o que faz o trabalho de verdade em qualquer topologia de produção — o que o tráfego de parceiro de fato atinge.

Múltiplos Perimeter Servers remotos podem rodar contra um único node de B2Bi ao mesmo tempo, o que é o que permite segmentar o tráfego deliberadamente: uma caixa de DMZ lidando com SFTP de alto volume dos seus maiores trading partners, uma separada para um parceiro cujo time de segurança insiste em infraestrutura fisicamente isolada, sem tocar na configuração do motor central para adicionar nenhum dos dois. Essa atribuição por adapter é exatamente o campo que você teria passado batido na captura de tela do SFTP Client Adapter da Parte 2 — “nome do sistema, ambiente, uma atribuição de perimeter server e limites de thread” estava fazendo bastante trabalho silencioso naquela única linha.

A mecânica do reverseConnect
#

Aqui está a parte que surpreende quem já trabalhou com reverse proxies antes e espera a direção usual de confiança: o Perimeter Server remoto é quem inicia a conexão com o motor central, não o contrário. A própria documentação de suporte da IBM para o arquivo remote_perimeter.properties que configura isso lista exatamente os parâmetros que você esperaria para esse modelo — reverseConnect, remoteAddress, remotePort, e uma port local (Suporte IBM) — e documentação da comunidade sobre o mesmo mecanismo descreve o Perimeter Server remoto estabelecendo uma conexão persistente de volta com o sistema central, comumente na porta 9999 (Pronteff).

Por que construir dessa forma, em vez de deixar o motor central alcançar a DMZ? Porque isso significa que o seu firewall interno nunca precisa de uma regra de entrada que deixe um host da DMZ iniciar tráfego para dentro das portas de escuta da sua rede confiável — a caixa da DMZ só origina a única conexão de que precisa, e tudo depois disso trafega dentro dela. Essa única decisão de design é o motivo pelo qual a topologia funciona sem abrir exatamente o tipo de buraco que uma DMZ existe para evitar.

sequenceDiagram
    participant Partner as Parceiro
    participant PS as Perimeter Server (DMZ)
    participant Core as B2Bi Core Engine (zona confiável)

    Note over PS,Core: Conexão persistente estabelecida primeiro —
PS disca para o Core, não o contrário PS->>Core: Conexão de saída (reverseConnect, tipicamente porta 9999) Core-->>PS: Conexão aceita, mantida aberta Partner->>PS: Conecta (SFTP / AS2 / HTTP) PS->>PS: Termina o handshake de protocolo PS->>Core: Encaminha a sessão pelo canal já existente Core->>Core: Repassa para Adapter → Business Process Note over Partner,Core: O firewall interno nunca precisa aceitar
uma conexão de entrada iniciada pela DMZ

Essa sequência esconde um detalhe importante: na camada de rede, na verdade existem duas conexões separadas fazendo dois trabalhos separados, não uma. Desenhado como topologia em vez de linha do tempo, fica assim:

flowchart LR
    subgraph Internet["Internet"]
        Partner["Parceiro Comercial"]
    end

    subgraph DMZ["DMZ"]
        PS["Perimeter Server"]
    end

    subgraph Trusted["Zona Confiável"]
        Core["B2Bi Core Engine"]
    end

    PS == "1 — saída, iniciada pelo PS\ncanal de controle persistente\n(reverseConnect, porta 9999)" ==> Core
    Partner -- "2 — entrada só até o PS\n(SFTP / AS2 / HTTP)" --> PS
    PS -. "3 — sessão do parceiro tunelada\npelo canal aberto no passo 1" .-> Core

O passo 1 precisa acontecer primeiro e fica de pé continuamente — é infraestrutura, não tráfego por sessão. O passo 2 é a única conexão que um parceiro faz, e ela termina no Perimeter Server; ela nunca vira uma segunda conexão independente alcançando a zona confiável. O passo 3 não é uma conexão nova — é a sessão do parceiro trafegando dentro do canal que já existe desde o passo 1. Do ponto de vista do firewall interno, exatamente uma conexão cruza a fronteira, e é a caixa da DMZ que a abriu.

(Placeholder de captura de tela: a tela “Add Perimeter Server” no console de administração — Deployment > Perimeter Servers > Add — mostrando o nome, a descrição, e o seletor de tipo local/embutido vs. remoto. Vale uma segunda captura de tela da visão de detalhe de um Perimeter Server remoto configurado, se os valores de remote_perimeter.properties estiverem visíveis ali.)

Perimeter Server vs. Sterling Secure Proxy — não é o mesmo produto
#

Esta é a outra fonte recorrente de confusão, e vale a pena ser preciso sobre ela: o Sterling Secure Proxy (SSP) é um produto IBM separado, um gateway de segurança e reverse-proxy completo para DMZ, com suas próprias capacidades de quebra de sessão, filtragem de protocolo e mapeamento de credenciais, muito além do que um Perimeter Server faz. Os dois são confundidos constantemente porque implantações de SSP também envolvem um componente “Parameter Server” instalado na frente dele, e porque os dois produtos vivem na mesma parte voltada à DMZ de um diagrama de arquitetura Sterling (Suporte IBM). Se uma vaga de emprego ou um colega diz “perimeter server” e quer dizer comportamento de proxy com quebra de sessão, inspeção completa de protocolo, ou mapeamento de credenciais entre uma identidade externa e interna, eles quase certamente estão descrevendo o SSP, não o Perimeter Server simples que este post cobre. O Perimeter Server simples é um componente muito mais estreito e muito mais simples — ele move bytes com segurança através da fronteira da DMZ; não inspeciona, transforma ou autentica nada por conta própria.

Cenários operacionais
#

“Parceiros conseguem se conectar mas os arquivos nunca aparecem.” Cheque primeiro a qual Perimeter Server o adapter que está falhando está de fato atribuído — com múltiplos Perimeter Servers remotos em um node, um parceiro caindo no errado (ou em um que está fora do ar) parece idêntico a um problema de rede do lado do parceiro, mas é uma incompatibilidade de configuração do seu lado.

CloseCode.NO_AVAILABLE_PORT em perimeter.log. Isso aparece como uma falha de bind — java.net.BindException: Cannot assign requested address — quando o Perimeter Server não consegue alocar uma porta para uma sessão nova (Suporte IBM). Na prática, isso quase sempre é exaustão de portas sob carga ou uma regra de firewall/SO local limitando a faixa de portas efêmeras no host da DMZ — cheque a faixa de portas do próprio host da DMZ e qualquer regra de firewall a nível de host antes de assumir que é um problema do lado do B2Bi. Vale lembrar que isso é genuinamente separado do mundo de mailbox e Business Process — é uma falha de camada de rede, mais baixa.

Dois arquivos de log, duas classes de falha diferentes. Problemas de conexão e sessão do perimeter ficam em perimeter.log, no próprio host do Perimeter Server. Problemas do lado do motor central na passagem de bastão — o Perimeter Services Manager registrando ou perdendo um Perimeter Server conectado — aparecem nos próprios logs do motor central. Perseguir um problema de conectividade no log errado é uma forma rápida de perder vinte minutos à toa; se um adapter de protocolo voltado a parceiro está falhando em receber conexões completamente, o perimeter.log na caixa da DMZ é a primeira parada, não o log de aplicação do motor central.

Um Perimeter Server “some” depois de um restart. Como o lado da DMZ é dono da conexão, a ordem de restart importa: se o motor central volta antes que o Perimeter Server remoto reconecte, adapters atribuídos a esse Perimeter Server vão mostrá-lo como indisponível até que o processo do lado da DMZ restabeleça a conexão de saída. Isso é comportamento esperado, não corrupção — só significa que os runbooks de restart para um ambiente B2Bi com Perimeter Servers remotos precisam considerar os dois lados voltando, não só o motor central.

Onde isso se encaixa na série
#

O Perimeter Server é a peça do diagrama de topologia da Parte 1 que recebeu uma menção de um parágrafo e nada mais até agora. É a primeira coisa que a conexão de um parceiro toca — antes do Adapter, antes do Business Process, antes de o arquivo sequer chegar a uma Mailbox. Toda peça daquele diagrama original agora genuinamente tem seu próprio post por trás dela.

Fontes e leituras complementares
#

Como no resto desta série: as definições e os parâmetros documentados são da IBM (e do Suporte IBM), o enquadramento, o diagrama e os cenários operacionais são meus.

O que vem a seguir
#

A seguir: O Map Editor — a camada de tradução sinalizada lá na Parte 1, e a origem de alguns dos bugs mais complicados que já persegui em produção.

sterling-b2bi-architecture - Este artigo faz parte de uma série de artigos.
Parte 6: Esse Artigo

Relacionados

Mailboxes e File Gateway no IBM Sterling B2B Integrator: Uma Camada, Não Dois Produtos

·2352 palavras·12 minutos· loading · loading
A confusão que sinalizei lá na Parte 1 # Mencionei isso na Parte 1 e prometi voltar ao assunto: o File Gateway não é um produto separado concorrendo com o B2Bi. É uma camada de UI e roteamento construída especificamente por cima da estrutura de mailbox e adapters do B2Bi, feita justamente para que a troca de arquivos com parceiros possa ser gerenciada sem que ninguém precise mexer diretamente em BPML. Ainda vejo gente que roda Sterling há anos falando dos dois como se fossem alternativas entre as quais você escolhe. Não são — um é a fundação, o outro é uma forma de trabalhar com essa fundação sem escrever um Business Process à mão.

Business Processes e BPML no IBM Sterling B2B Integrator: Duas Visões do Mesmo Motor

·1401 palavras·7 minutos· loading · loading
O que é um Business Process # Um Business Process é o fluxo de trabalho que encadeia adapters e services em algo que de fato realiza uma tarefa: receber um arquivo, validá-lo, mapeá-lo, criptografá-lo, entregá-lo a um adapter para envio, registrando cada etapa pelo caminho. É a coisa que a Parte 1 chamou de “a coisa mais parecida com um coração que a plataforma tem” — porque quase nada relevante acontece no Sterling B2B Integrator fora da execução de um deles.

IBM Sterling B2B Integrator: Adapters vs. Services — A Distinção Que Realmente Importa

·2533 palavras·12 minutos· loading · loading
O que é um Adapter # Um Adapter é um service cujo trabalho inteiro é alcançar o mundo fora do Sterling B2B Integrator — conectando o Business Process Engine a “sistemas e aplicações diferentes” que vivem fora do ambiente (Documentação IBM). Um adapter SFTP abre uma conexão com o servidor SFTP de um parceiro. Um adapter AS2 fala o protocolo AS2 com o gateway de um parceiro comercial. O mecanismo por baixo é o mesmo de qualquer outro service — o Business Process Engine o chama, ele executa, retorna um resultado — mas o trabalho em si acontece em outro lugar, através de uma rede, contra um sistema que você não controla.