Acessando de qualquer lugar uma API que exige um IP fixo

dilbert_13012007_integracao

Começamos esta semana o nosso primeiro projeto com o Mule ESB, uma ferramenta excepcional sobre a qual falaremos muitas vezes em breve. No projeto em questão, precisamos nos integrar com uma API que só libera acesso para IPs previamente configurados.

Problema

Conectar a uma API SOAP que bloqueia o acesso a partir de IPs que não estejam previamente configurados. A maioria dos links empresariais de internet já não tem IP fixo e nenhum residencial tem. Processo de desenvolvimento ficaria muito mais complicado e demorado.

Solução escolhida

Configurar um servidor de proxy em uma instância em Cloud para encaminhar todas as requisições à API de um mesmo IP fixo. Na teoria seria moleza, mas a API não analisa somente o IP do cliente, mas também alguns cabeçalhos HTTP como o X-Forwarded-For e outros metadados das requisições. Isto trouxe algumas dores de cabeça até completarmos finalmente o diagnóstico e conseguirmos resolver. A solução final consistiu em ter o proxy atuando como um proxy anônimo, sem deixar evidências de que estava sendo usado um proxy.

Como fazer

– Instalar Squid em uma instância com IP fixo. No nosso caso com Amazon Linux:

sudo yum install squid
sudo chkconfig squid on
sudo /etc/init.d/squid start

– Liberar acesso ao Squid a partir de qualquer lugar. Adicionar as seguintes linhas no arquivos /etc/squid/squid.conf

acl geral src 0.0.0.0/0
http_access allow geral

– Configurá-lo para não gravar headers que identifique que ele está sendo usado. Adicionar as seguintes linhas no arquivo /etc/squid/squid.conf:

#Hide header and squid info
request_header_access Allow allow all
request_header_access Authorization allow all
request_header_access WWW-Authenticate allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all
request_header_access Content-Type allow all
request_header_access Date allow all
request_header_access Expires allow all
request_header_access Host allow all
request_header_access If-Modified-Since allow all
request_header_access Last-Modified allow all
request_header_access Location allow all
request_header_access Pragma allow all
request_header_access Accept allow all
request_header_access Accept-Charset allow all
request_header_access Accept-Encoding allow all
request_header_access Accept-Language allow all
request_header_access Content-Language allow all
request_header_access Mime-Version allow all
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
request_header_access Proxy-Connection allow all
request_header_access All deny all

– Configurar sua aplicação cliente para usar o novo proxy. Se for uma aplicação que rode via console, você pode fazer de acordo com o IP do Squid:

export http_proxy=http://x.x.x.x:3128/

Se for o SoapUI você pode ir em File -> Preferences e configurar, conforme abaixo.
soapui_proxy_preferences

Se for uma aplicação Java qualquer, você pode configurar através de parâmetros da JVM, como:

-Dhttp.proxyHost=x.x.x.x 
-Dhttp.proxyPort=3128
-Dhttps.proxyHost=x.x.x.x
-Dhttps.proxyPort=3128

Pronto, já pode acessar a API de qualquer lugar e testá-la com qualquer ferramenta desejada! Enjoy! 🙂

Gostou do conteúdo? Tem alguma dúvida? Entre em contato com nossos Especialistas Mandic Cloud, ficamos felizes em ajudá-lo.