Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
por Ruslan Yakushev
Os modelos de regra são usados para fornecer uma maneira simples de criar uma ou mais regras de reescrita para um determinado cenário. O Módulo 2 de Reescrita de URL inclui vários modelos de regra para alguns cenários de uso comuns. Além disso, a interface do usuário do Módulo de Regravação de URL oferece uma estrutura para inserir modelos de regra personalizados. Este passo a passo orientará você sobre como usar o modelo de regra "Proxy Reverso" incluído no módulo de reescrita de URL. Para saber mais sobre como configurar o proxy reverso com o Módulo de Regravação de URL do IIS e o Roteamento de Solicitação de Aplicativo do IIS, consulte Proxy Reverso com Regravação de URL v2 e Roteamento de Solicitação de Aplicativo.
Pré-requisitos
Este passo a passo requer os seguintes pré-requisitos:
- IIS 7 ou superior com o serviço de função do ASP.NET habilitado;
- Módulo de regravação de URL 2.0 instalado;
- Roteamento de Solicitações de Aplicativos do IIS instalado.
Criando o site de exemplo
Para simplificar, o cenário de proxy reverso com o qual você trabalhará neste passo a passo será implementado em um único servidor, com o IIS "Site Padrão" agindo como um site de proxy reverso e aplicativo de conteúdo hospedado em sites separados do IIS no mesmo servidor.
Para criar o site de exemplo de conteúdo:
Crie uma pasta chamada "contentsite" na seguinte pasta:
%SystemDrive%\inetpub\ folder.Crie um site do IIS chamado "contentsite" que aponte para a pasta correspondente em
%SystemDrive%\inetpub\. Utilize a porta 8081 para o site.
Você pode usar os seguintes comandos para criar os sites:%windir%\System32\inetsrv\appcmd.exe add site /name:"contentsite" /bindings:http/*:8081: /physicalPath:"%SystemDrive%\inetpub\contentsiteCrie um arquivo chamado default.aspx na seguinte pasta:
%SystemDrive%\inetpub\contentsiteCopie a seguinte marcação ASP.NET, cole-a no arquivo e salve o arquivo como default.aspx:
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Reverse Proxy Test Application</title> </head> <body> <h1>Reverse Proxy Test Page</h1> <p>Requested URL path is <%= Request.ServerVariables["SCRIPT_NAME"] %></p> <p><a href="http://<%= Request.ServerVariables["HTTP_HOST"] + Request.ServerVariables["SCRIPT_NAME"] %>">Here</a> is the link to this page.</p> </body> </html>Para garantir que o site esteja funcionando corretamente, abra uma navegação na Web e solicite as seguintes URLs:
http://localhost:8081/default.aspx
Gerar regras de entrada e saída usando o modelo de proxy reverso
O template de regra "Reverse Proxy" pode ser usado para gerar uma regra de reescrita de solicitações HTTP de entrada, que é utilizada para encaminhar essas solicitações para outro servidor. Opcionalmente, o modelo também pode criar uma regra de reescrita de saída que pode corrigir os nomes de host nas URLs de links dentro de respostas HTML. No caso de exemplo descrito neste passo a passo, o nome do host do servidor proxy é localhost e o nome do host do servidor de conteúdo é localhost:8081. O aplicativo Web no servidor de conteúdo gera um link na resposta HTML que usa um nome de host interno, por exemplo. http://localhost:8081/default.aspx A regra de saída corrige esse link para usar o nome do host do proxy, por exemplo. http://localhost/default.aspx.
Para criar as regras usando o modelo de regra, siga estas etapas:
- No Gerenciador do IIS, selecione o "Site Padrão" no painel de navegação à esquerda.
- Abra o modo de exibição de recurso regravação de URL.
- No modo de exibição do recurso Reescrita de URL, selecione a ação "Adicionar Regra(s)..." e então escolha o modelo "Proxy Reverso".
- Na caixa de diálogo "Adicionar Regras de Proxy Reverso", insira o seguinte:
Nome do servidor ou endereço IP em que as solicitações HTTP serão encaminhadas: localhost:8081
Marque a caixa de seleção "Reescrever os nomes de domínio dos links em respostas HTTP" e insira:
De: localhost:8081
Para: localhost
- Clique em OK. As regras de entrada e de saída serão criadas:
Testando o Proxy Reverso
Para testar se as regras de reescrita geradas pelo modelo de regra funcionam corretamente, abra um navegador da Web e faça uma solicitação para http://localhost/default.aspx. O "Site Padrão" do IIS receberá essa solicitação e a roteará de http://localhost:8081/default.aspx acordo com a regra de reescrita de entrada. Quando a resposta HTTP é retornada do site contentsite, a regra de reescrita de saída modifica o URL do link no HTML para reescrever o nome do host de localhost:8081 para localhost:
Usando o Proxy Reverso do ARR para Servlets Tomcat
Para adicionar defesa em profundidade ao hospedar os Servlets Tomcat por trás de um proxy reverso IIS + ARR, use regras de reescrita de URL para atenuar ataques de travessia de diretório. Esses ataques geralmente exploram discrepâncias na forma como o Tomcat lida com parâmetros de caminho em segmentos de URL, por exemplo, "/..; a=b/" conforme descrito nas considerações de segurança do Apache Tomcat.
Por que isso importa
O Tomcat interpreta parâmetros de caminho baseados em ponto-e-vírgula de forma diferente do IIS, o que pode levar a um comportamento de passagem inesperado. Bloquear ou normalizar esses padrões antes que o módulo ARR os manipule ajuda a evitar a exploração.
Se sua meta for simplesmente bloquear solicitações que contêm tentativas de passagem (como "/..; a=b/"), use sintaxe de expressão curinga ou regular.
Exemplo de regra curinga
<rule name="BlockDotDotWildcard" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*/..;*/*" />
<action type="CustomResponse" statusCode="404" statusReason="Not Found" statusDescription="" />
</rule>
Exemplo de regra RegEx
<rule name="BlockDotDotRegEx" stopProcessing="true">
<match url="\/\.\.;.*\/" />
<action type="CustomResponse" statusCode="404" statusReason="Not Found" statusDescription="" />
</rule>
Observações importantes
- Teste minuciosamente em seu ambiente de ponta a ponta. Você pode precisar de regras adicionais para padrões codificados ou codificados duas vezes (por exemplo, %252F..%253Bfoo%252F).
- A ordem de regra é importante: verifique se as regras de bloqueio são executadas antes das regras relacionadas ao proxy do ARR.
- Compensação de desempenho: a RegEx oferece flexibilidade, mas incorre em uma sobrecarga maior.
Cenário avançado: renormalização de URL
Se você quiser remover parâmetros de caminho e normalizar novamente a URL para que todas as regras de regravação de URL se apliquem à URL normalizada, você precisará de uma viagem de ida e volta de redirecionamento. Por exemplo: Entrada:
/abc/..;boo/xyz/ Redirecionado para: /abc/../xyz/ → normalizado para /xyz/ → reavaliado por regras de reescrita.
Regra de exemplo
<rule name="RenormalizeURL_SSL" stopProcessing="true">
<match url="^([^;]*)(;[^/]*)(/.*)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTPS}" pattern="ON" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}{R:3}" redirectType="Found" />
</rule>
<rule name="RenormalizeURL" stopProcessing="true">
<match url="^([^;]*)(;[^/]*)(/.*)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTPS}" pattern="OFF" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/{R:1}{R:3}" redirectType="Found" />
</rule>
Quando RegEx fica muito complexo
Para casos altamente complexos, considere escrever um Provedor de Reescrita de URL personalizado.
Resumo
Neste passo a passo, você aprendeu a usar o modelo de regra "Proxy Reverso" para gerar regras de reescrita que implementam uma configuração simples de proxy reverso no IIS. Use esse modelo de regra como ponto de partida para gerar as regras base. Você pode ajustar ou modificar essas regras mais tarde para atender aos requisitos específicos de roteamento e reescrita para seu aplicativo Web.