O IIS vê todas as conexões como conexões locais ao executar o Citrix Secure Gateway na mesma caixa

1

Temos o Citrix Secure Gateway instalado em um servidor Windows Server 2008 R2 com a página de logon do Citrix hospedada no IIS no mesmo servidor. O CSG lida com as conexões HTTP e HTTPS recebidas nas portas 80 e 443 e as retransmite para o IIS, que está escutando em uma porta diferente (usando apenas HTTP, não HTTPS). Isso significa que o IIS vê todas as conexões de entrada como conexões locais, com o endereço IP de origem sendo o endereço IP do servidor.

Isso causa alguns problemas. Isso torna impossível ver o endereço IP de origem nos logs do IIS e faz com que o IIS exiba mensagens de erro HTTP detalhadas para todos os clientes, incluindo os externos.

Podemos atenuar o segundo problema desativando as mensagens de erro detalhadas, mas a solução ideal seria o IIS ver o endereço IP de origem real em vez do próprio endereço do servidor. Isso é possível e, em caso afirmativo, como?

    
por toryan 23.04.2015 / 11:22

1 resposta

1

Supondo que você esteja executando pelo menos a Web Interface 5.x, é possível configurá-la para ver o endereço IP real do cliente que se conecta por meio de o gateway .

Localize a seguinte seção em $SITEROOT/Citrix/XenApp/app_code/PagesJava/com/citrix/wi/pageutils/Include.java :

/**
     * Returns the IP address of the client
     *
     * @return the client IP address as a string
     */
    public static String getClientAddress(WIContext wiContext) {       
    String ageClientAddress = AGEUtilities.getAGEClientIPAddress(wiContext);       
    return (ageClientAddress != null
                    ? ageClientAddress                   
: wiContext.getWebAbstraction().getUserHostAddress());
    }

Substitua esta seção inteira pelo seguinte:

/**
     * Returns the IP address of the client.
     *
     * @return the client IP address as a string
     */
    public static String getClientAddress(WIContext wiContext) {
        WebAbstraction web = wiContext.getWebAbstraction();
        String gatewayAddress = "127.0.0.1"; // change as appropriate if Gateway is on another server
        boolean comingFromGateway = web.getUserHostAddress().equals(gatewayAddress);
        String forwardedAddress = web.getRequestHeader("X-Forwarded-For");
        String ageClientAddress = AGEUtilities.getAGEClientIPAddress(wiContext);
        if (ageClientAddress != null) {
            return ageClientAddress;
        } else if (comingFromGateway && (forwardedAddress != null)) {
            return forwardedAddress;
        } else {
            return web.getUserHostAddress();
        }
    }    
    
por 23.04.2015 / 18:50