--- title: Configuração de proxy reverso Apache source: https://tdn.totvs.com/pages/viewpage.action?pageId=877162376 path: \Plataforma Documentação técnica\Configuração\Configuração de Ambiente\Proxy reverso\Configuração de proxy reverso Apache.md --- Fique atento! Esta página foi revisada para considerar as configurações de *server* do TOTVS Fluig **a partir** da atualização **1.6**. - [Objetivo](#ConfiguraçãodeproxyreversoApache-Objetivo) - [Pré-requisitos](#ConfiguraçãodeproxyreversoApache-Pré-requisitos) - [Módulos Apache](#ConfiguraçãodeproxyreversoApache-MódulosApache) - [Configuração do Apache (sem SSL)](#ConfiguraçãodeproxyreversoApache-ConfiguraçãodoApache(semSSL)) - [Listener HTTP](#ConfiguraçãodeproxyreversoApache-ListenerHTTP) - [Listener do RealTime](#ConfiguraçãodeproxyreversoApache-ListenerdoRealTime) - [Listener FTP](#ConfiguraçãodeproxyreversoApache-ListenerFTP) - [Configuração do Apache (SSL) + Fluig (HTTP)](#ConfiguraçãodeproxyreversoApache-ConfiguraçãodoApache(SSL)+Fluig(HTTP)) - [Configuração para acessar a plataforma via mobile/OAuth](#ConfiguraçãodeproxyreversoApache-Configuraçãoparaacessaraplataformaviamobile/OAuth) - [Configuração do Apache (SSL) + Fluig (SSL)](#ConfiguraçãodeproxyreversoApache-ConfiguraçãodoApache(SSL)+Fluig(SSL)) - [Configurar Rate Limit de requisições](#ConfiguraçãodeproxyreversoApache-ConfigurarRateLimitderequisições) - [Pré-requisitos](#ConfiguraçãodeproxyreversoApache-Pré-requisitos.1) - [Usando mod\_evasive](#ConfiguraçãodeproxyreversoApache-Usandomod_evasive) - [Configuração básica](#ConfiguraçãodeproxyreversoApache-Configuraçãobásica)- [Aplicar ao endpoint específico](#ConfiguraçãodeproxyreversoApache-Aplicaraoendpointespecífico) - [Customizando o comportamento de bloqueio](#ConfiguraçãodeproxyreversoApache-Customizandoocomportamentodebloqueio) - [Ajuste de sensibilidade (configuração restritiva)](#ConfiguraçãodeproxyreversoApache-Ajustedesensibilidade(configuraçãorestritiva)) - [Exemplo completo](#ConfiguraçãodeproxyreversoApache-Exemplocompleto) - [Ocultar informações no cabeçalho HTTP](#ConfiguraçãodeproxyreversoApache-OcultarinformaçõesnocabeçalhoHTTP) # Objetivo --- Este guia orienta a configuração do Apache como *Proxy* Reverso e a implementação de Rate Limit para assegurar a disponibilidade da plataforma contra acessos abusivos. Dicas! - Após a configuração do *proxy* reverso, não esqueça de alterar a URL de acesso ao portal nas Configurações do sistema da plataforma. [Clique aqui](http://tdn.totvs.com/x/EO4KDg) e saiba como fazer. - Obtenha mais informações sobre DMZ em [Topologia DMZ](../Topologia DMZ.md). - [Clique aqui](https://httpd.apache.org/docs/current/platform/windows.html) para ver a documentação do próprio fornecedor sobre a configuração de *proxy* reverso utilizando **Apache no Windows**. - Se não for configurado, o padrão de *timeout* do *proxy* reverso do Apache é 60 segundos. A configuração recomendada é 300 segundos – que é o *timeout* padrão do TOTVS Fluig – podendo ser ajustado para mais ou para menos de acordo com a necessidade. Importante! Salientamos que, ao utilizar um *proxy* reverso, uma prática de segurança recomendada para a plataforma é não expor o servidor de aplicação diretamente na Internet. [Clique aqui](../../../Especificações Técnicas/Boas práticas de segurança para o seu ambiente.md) e veja outras boas práticas de segurança recomendadas para o seu ambiente. # Pré-requisitos --- - Apache™ versão 2.4. O instalador e a documentação oficial do Apache™ podem ser encontrados em . - Se for utilizar SSL, também será necessário converter o certificado utilizado na configuração da plataforma para os formatos **.cer**, **.key** e **.pem**. O guia para configurar a plataforma em SSL (HTTPS) encontra-se [aqui](http://tdn.totvs.com/x/vdMgFQ). - Para a porta do realtime (7777) no Apache é necessário habilitar o módulo SSL em todos os vhosts que utilizarem o *realtime*   **SSLEngine On**e **SSLProxyEngine On**. # Módulos Apache --- Certifique-se de que os seguintes módulos estão sendo carregados pelo Apache: Nota: Na versão 2.4 do Apache no Windows, o módulo **LoadModule proxy\_fdpass\_module modules/mod\_proxy\_fdpass.so** não existe. ``` # Módulos para WebDAV LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_lock_module modules/mod_dav_lock.so # Módulos para proxy reverso LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_express_module modules/mod_proxy_express.so LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so ``` Se for utilizar SSL no lado DMZ, certifique-se ainda de que o seguinte módulo está sendo carregado pelo Apache: ``` # Módulo para HTTPS LoadModule ssl_module modules/mod_ssl.so ``` # Configuração do Apache (sem SSL) --- **01**. Acesse a pasta **/etc/httpd/conf.d.** Nota: O caminho da pasta pode variar, esse caminho do exemplo é de uma instalação Linux CentOS. ****02**. Crie um arquivo de configuração para a plataforma (chamado **fluig.conf**, por exemplo), com o seguinte conteúdo:** ``` Listen 7777 Listen 21 Header set Access-Control-Allow-Origin: "http://" Header set Access-Control-Allow-Headers: "Content-Type, X-Requested-With, accept-version" Header set Access-Control-Allow-Methods: "GET, PUT, OPTIONS, DELETE, POST" Header Set Access-Control-Request-Method: "GET, PUT, OPTIONS, DELETE, POST" ProxyRequests Off ProxyVia On AllowConnect 7777 AllowConnect 21 ``` ### Listener HTTP --- ``` ServerName ProxyPreserveHost On ProxyPass / http://:/ ProxyPassReverse / http:/// ``` ### Listener do RealTime --- ``` RequestHeader set X-Forwarded-Proto https RequestHeader set Access-Control-Allow-Origin: "https://" RequestHeader set X-Forwarded-Host :7777 ServerName SSLProxyEngine On SSLEngine On ProxyRequests Off ProxyPreserveHost On Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile  /cert.pem SSLCertificateKeyFile /privkey.pem # allow for upgrading to websockets RewriteEngine On RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /(.*) ws://:7777/$1 [P,L] RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule /(.*) http://:7777/$1 [P,L] ProxyPass "/" "http://:7777" ProxyPassReverse "/" "http://:7777/" ProxyPass "/" "ws://:7777/" ProxyPassReverse "/" "ws://:7777/" ``` ### Listener FTP --- ``` ServerName ProxyPreserveHost On ProxyPass / ftp:/// ProxyPassReverse / ftp://:21/ ``` Legenda ****: nome que aparecerá na URL do navegador, por exemplo, http://**meuservidor.com.br**. ****: endereço IP interno do servidor onde o Fluig está rodando, por exemplo, 10.10.2.35. ``` ``` # Configuração do Apache (SSL) + Fluig (HTTP) --- Se não for utilizado HTTPS na plataforma, deve possuir a seguinte configuração: ``` Header set Access-Control-Allow-Origin: "https://meuservidor.fluig.com/" Header set Access-Control-Allow-Headers: "Content-Type, X-Requested-With, accept-version" Header set Access-Control-Allow-Methods: "GET, PUT, OPTIONS, DELETE, POST" Header Set Access-Control-Request-Method: "GET, PUT, OPTIONS, DELETE, POST" RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} ServerName RequestHeader set X-Forwarded-Host :443 RequestHeader set X-Forwarded-Proto https SSLProxyEngine On SSLEngine On SSLCertificateFile .crt SSLCertificateKeyFile .key SSLCertificateChainFile .pem ProxyPreserveHost On ProxyPass / http://:/ ProxyPassReverse / https:// ServerName ProxyPreserveHost On ProxyPass / ftp:/// ProxyPassReverse / ftp://:21/ ``` Legenda <**Nome externo do servidor**>: nome que aparecerá na URL do navegador, por exemplo, http://**meuservidor.com.br**. <**diretorio-certificado**>: diretório e nome do arquivo do certificado de domínio enviado pela entidade certificadora, por exemplo: /etc/httpd/ssl/cert-dominio.crt <**diretorio-chave-privada**>: diretório e nome do arquivo da chave privada, enviada pela entidade certificadora, por exemplo: /etc/httpd/ssl/chave-privada.key <**diretorio-cadeia-certificados**>: diretório e nome do arquivo que contém a cadeia de certificados, por exemplo: /etc/httpd/ssl/cert-cadeia-certificados.pem Nota: O caminho da pasta pode variar, esse caminho do exemplo é de uma instalação Linux CentOS. **DICA**: O arquivo referente à cadeia de certificados pode ser criado concatenando os certificados de domínio, intermediários e raiz. No Linux, isto pode ser feito com o comando abaixo: ``` cat cert-dominio.crt cert-intermediario.crt cert-raiz.crt > cert-cadeia-certificados.pem ``` **OBS:** Os certificados intermediários e raiz normalmente podem ser encontrados para *download* no *site* da entidade certificadora que você escolheu. <**IP do servidor fluig**>: endereço IP interno do servidor onde o Fluig está rodando, por exemplo, 10.10.2.35. ## Configuração para acessar a plataforma via *mobile*/OAuth --- Essa configuração deve ser realizada para garantir que a requisição chega ao conector **HTTP** com o mesmo protocolo a partir do qual a requisição foi originada. **01**. Edite o arquivo **standalone.xml** localizado no diretório do servidor de aplicação **[diretório\_instalação]/appserver/standalone/configuration/**. **02**. Localize o seguinte código: **standalone.xml** ``` ``` **03**. Na tag **http-listener** inclua o atributo **proxy-address-forwarding** com valor **true**, conforme mostrado abaixo: ``` ``` **01**. Edite o arquivo **domain.xml** localizado no diretório do servidor de aplicação **[diretório\_instalação]/appserver/domain/configuration/**. **02**. Localize o seguinte código: **domain.xml** ``` ``` **03**. Na tag **http-listener** inclua o atributo **proxy-address-forwarding** com valor **true**, conforme mostrado abaixo: ``` ``` # Configuração do Apache (SSL) + Fluig (SSL) --- **01**. Acesse a pasta **/etc/httpd/conf.d**. Nota: O caminho da pasta pode variar, esse caminho do exemplo é de uma instalação Linux CentOS. **02**. Crie um arquivo de configuração para a plataforma (chamado fluig.conf, por exemplo), com o conteúdo abaixo, caso seja utilizado HTTPS também no lado do Fluig. Importante! Lembrando que, se o seu ambiente utiliza [balanceamento de carga](../Alta disponibilidade e balanceamento de carga.md), a [configuração de HTTPS](https://tdn.totvs.com/pages/viewpage.action?pageId=354472893#Configura%C3%A7%C3%A3oHTTPSdaplataforma-Configura%C3%A7%C3%A3odeHTTPSmanual) deve ser replicada manualmente para todos os servidores do Fluig. ``` Header set Access-Control-Allow-Origin: "https://" Header set Access-Control-Allow-Headers: "Content-Type, X-Requested-With, accept-version" Header set Access-Control-Allow-Methods: "GET, PUT, OPTIONS, DELETE, POST" Header Set Access-Control-Request-Method: "GET, PUT, OPTIONS, DELETE, POST" ServerName RequestHeader set X-Forwarded-Host :443 RequestHeader set X-Forwarded-Proto https SSLProxyEngine On SSLEngine On SSLCertificateFile .crt SSLCertificateKeyFile .key SSLCertificateChainFile .pem ProxyPreserveHost On ProxyPass / https://:/ ProxyPassReverse / https:/// ServerName ProxyPreserveHost On ProxyPass / ftp:/// ProxyPassReverse / ftp://:21/ ``` # Configurar Rate Limit de requisições --- ### Pré-requisitos --- É necessário ter o Apache com módulos habilitados: - mod\_evasive (proteção contra abuso — recomendado) ### Usando mod\_evasive --- **Instalação** No Ubuntu/Debian: sudo apt install libapache2-mod-evasive **Ative** sudo a2enmod evasive sudo systemctl restart apache2 ### Configuração básica --- **Edite**: /etc/apache2/mods-enabled/evasive.conf **Exemplo** ``` DOSHashTableSize 3097 DOSPageCount 5 DOSPageInterval 1 DOSSiteCount 50 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSEmailNotify admin@seusite.com ``` ## Aplicar ao endpoint específico --- O mod\_evasive não limita diretamente por URL de forma nativa, mas é possível combinar com **Location**. ESTRATÉGIA VirtualHost + Location ServerName [seu\_dominio.com](http://seu_dominio.com) SetEnvIf Request\_URI "^/api/public/social/post/publish$" rate\_limit O **mod\_evasive** vai reagir automaticamente ao excesso de requisições nesse endpoint. ## Customizando o comportamento de bloqueio --- O parâmetro `DOSBlockingPeriod` define a duração da restrição aplicada ao endereço IP identificado como abusivo. - **Configuração:** `DOSBlockingPeriod 30` - **Funcionamento:** Suspende o acesso do IP por **30 segundos**. **Reativação** Se o IP realizar uma nova requisição antes do término desse período, o contador é **reiniciado**, prolongando o bloqueio por mais 30 segundos a partir da última tentativa. ### Ajuste de sensibilidade (configuração restritiva) --- Estes parâmetros definem o limiar de tolerância para requisições repetitivas ao mesmo recurso. - **`DOSPageCount 3`**: Define o limite máximo de solicitações permitidas. - **`DOSPageInterval 1`**: Define a janela de tempo (em segundos) para a contagem acima. - **Resultado Prático**: O sistema bloqueia o IP se ele exceder **3 requisições por segundo** direcionadas ao mesmo endpoint (página ou objeto específico). Recomenda-se testar esse limite em ambientes de homologação antes de aplicar em produção. ## Exemplo completo --- Este exemplo estabelece uma política de limitação de taxa (*rate limiting*) para mitigar comportamentos automatizados abusivos, definindo limites de frequência por recurso individual e por volume global de tráfego originado de um único endereço IP. ``` DOSHashTableSize 3097 DOSPageCount 5 DOSPageInterval 1 DOSSiteCount 50 DOSSiteInterval 1 DOSBlockingPeriod 10 ServerName seu_dominio.com Require all granted ``` # Ocultar informações no cabeçalho HTTP --- Para prevenir vulnerabilidades, é importante que as informações não fiquem expostas no cabeçalho HTTP. [Clique aqui](Ocultar informações no cabeçalho HTTP.md) e saiba como ocultá-las.