Este serviço de infraestrutura é uma parte integrante da rede corporativa e do subsistema de segurança, permitindo implementar autorização, filtragem de conteúdo, além de atuar como um gateway para que os usuários controlem os recursos acessados.
Para o funcionamento completo e seguro da rede de informação, existem muitos serviços de infraestrutura que garantem seu desempenho. Um deles é o proxy, que é um nó intermediário. Sua tarefa é intermediar a conexão e realizar seu processamento: armazenar em cache as requisições e respostas, realizar SSL Bumping, autenticar o usuário na rede e filtrar pacotes de rede.
Neste artigo, vamos analisar um dos exemplos desse tipo de serviço e configurá-lo!
O que é um Proxy?
Proxy é um nó intermediário, cujo principal objetivo é processar o tráfego que passa por ele e repassá-lo. Em segmentos de rede corporativa, é utilizado como um ponto único de saída para os usuários, o que permite a autorização e o controle das ações. Como descrito acima, sua funcionalidade para controlar o tráfego é praticamente ilimitada:
- SSL Bumping;
- Armazenamento em cache de requisições;
- Autenticação de clientes;
- Análise de tráfego (sniffing);
- Controle de recursos acessados.
E isso é lógico, pois o tráfego do usuário literalmente se espalha pela infraestrutura de rede e, nesses momentos, é muito difícil rastreá-lo, então o ponto único registra tudo. Esquematicamente, o algoritmo de funcionamento se parece com isto:
No entanto, além do segmento corporativo, o proxy permite anonimizar o tráfego de rede ao substituir o endereço do remetente dentro do pacote. Essa funcionalidade, em relação à tecnologia existente, é usada por hackers ou por pessoas que desejam ocultar seus rastros digitais. Clássicamente, ao construir uma cadeia de proxies — também chamada de proxy-chain — é possível se esconder atrás de vários cordões de rede.
Mas como o redirecionamento do tráfego para um único ponto é tecnicamente realizado? É simples: no caso de um reverse-proxy, o DNAT é responsável por isso, redirecionando para o endereço e a porta desejados conforme as regras. Já neste contexto, o forward-proxy estabelecerá uma conexão com o servidor na porta previamente determinada e, dentro dessa conexão, o cliente transmitirá os pacotes necessários no segmento de carga útil (payload).
Configuração simplificada (sem autenticação)
Para trabalhar com o serviço, vamos instalar todos os pacotes e dependências necessários:
Classicamente, o arquivo de configuração do servidor está localizado no caminho /etc/squid/squid.conf:
Vamos configurar várias funções do servidor, começando pela mais simples e básica. Remova todo o conteúdo da configuração antiga e escreva as seguintes diretivas:
http_access allow mynet
http_access deny all
http_port 3128
cache_mem 256 MB
Onde cada uma dessas diretivas tem funcionalidades diferentes:
- acl src — uma lista nomeada de ACLs que especifica o segmento de rede;
- http_access allow — permissão para conectar a rede local ao proxy, pois por padrão a conexão é proibida. Essa permissão também permite trabalhar via http;
- http_port — porta na qual o proxy ficará escutando;
- cache_mem — aloca memória para o cache de requisições.
Após isso, salve o arquivo, reinicie o serviço e verifique sua funcionalidade:
Mas se você expor essa máquina para fora, ela provavelmente se tornará parte da infraestrutura usada para mascarar ataques DDoS ou outros, portanto a autenticação é necessária!
Configuração clássica com autenticação
Para proteger o servidor proxy, usaremos a forma clássica de autenticação HTTP, com a ajuda de um módulo pré-instalado. Primeiro, vamos criar uma conta com a qual o usuário será autenticado:
Na verdade, nesse contexto, um proxy é um serviço web que aceita conexões de entrada e, portanto, é possível usar módulos de autenticação com diferentes mecanismos e protocolos. Inclusive o PAM, que amplia o nível de possibilidades com sua base de bibliotecas:
Para que a autenticação comece a funcionar, vamos à configuração e definimos os parâmetros e políticas:
http_access allow mynet
http_port 3128
cache_mem 256 MB
auth_param basic programme /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm 'Proxy Authentication Required'
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
Vamos deixar o bloco superior inalterado, pois ele define a política do segmento de rede. Vamos analisar o bloco escrito abaixo. A diretiva auth_param define o parâmetro de autenticação, uma biblioteca para verificar o usuário com nossas credenciais na primeira linha e, na segunda, antes da verificação propriamente dita. Na terceira linha, o parâmetro acl proxy_auth significa que haverá validação antes de conectar, e http_access aplica essa regra previamente escrita.
Vamos verificar a configuração após reiniciar o serviço:
Vamos tentar conectar sem uma conta e, em seguida, com uma:
Como você pode ver, a autenticação foi bem-sucedida e o servidor web retornou uma resposta correta. Mas e se, além da autorização e controle de usuários, for necessário inspecionar o tráfego e ver o que os funcionários estão fazendo e pesquisando via SSL?
Configuração avançada com SSL-Bumping
Essa configuração permitirá implementar a substituição do certificado original por um certificado assinado próprio, que deve ser adicionado como confiável em todos os dispositivos por meio de políticas de grupo. O processo de comunicação será o seguinte:
- O cliente se conecta a um site HTTPS via Squid.
- O Squid intercepta a conexão e estabelece sua própria conexão criptografada com o cliente.
- O Squid estabelece uma conexão criptografada separada com o servidor de destino.
- O Squid descriptografa o tráfego entre cliente e servidor, podendo filtrá-lo ou registrá-lo.
- O Squid transmite os dados ao cliente assinados com seu próprio certificado.
Para começar, verifique se seu servidor proxy possui essa funcionalidade, pois as compilações podem variar e o ssl-bumping pode estar ausente em algumas:
Se você não tiver esse recurso, conclua a instalação do software:
E prossiga para a criação do certificado usando a utilidade:
chown -R squid:squid /var/lib/squid/ssl_db
Não se esqueça de configurar o arquivo de configuração para o bumping de conexão:
ssl_bump peek all
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 4MB
Após isso, salve a configuração e reinicie o serviço — o proxy deve começar a trocar os certificados. Observe que alguns sites são protegidos contra ataques MitM (Man-in-the-Middle) com uma verificação adicional no nível do certificado http na memória. Se ele não corresponder ao original, a conexão será bloqueada, o que pode causar problemas para os clientes na sua rede. Nesses casos, é possível escrever uma exceção para eles.
Se você não tiver recursos suficientes, pode executar essas ações em servidores em nuvem mais potentes. A Serverspace oferece servidores VPS isolados para uso comum e virtualizado.
Levará algum tempo para implantar a capacidade do servidor. Após isso, você poderá se conectar de qualquer forma conveniente. Este serviço de infraestrutura é uma parte integrante da rede corporativa e do subsistema de segurança, permitindo implementar autorização, filtragem de conteúdo, além de atuar como um gateway para que os usuários controlem os recursos acessados.