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:
apt update && apt install squid -y

Classicamente, o arquivo de configuração do servidor está localizado no caminho /etc/squid/squid.conf:
nano /etc/squid/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:
acl mynet src 192.168.1.0.0/24
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:
systemctl restart squid && systemctl status squid && curl -x 'http://ip-proxy:port-proxy' 'target'

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:
sudo apt update && sudo apt install apache2-utils sudo htpasswd -c /etc/squid/passwd

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:
acl mynet src 192.168.1.0/24
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:
sudo systemctl restart squid
Vamos tentar conectar sem uma conta e, em seguida, com uma:
curl -x 'http://ip-adders:port' 'target-url' && curl -x 'http://username:passwd@ip-adders:port' 'target-url'

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:
sudo squid -v | grep '*-ssl*'

Se você não tiver esse recurso, conclua a instalação do software:
sudo apt install squid-openssl
E prossiga para a criação do certificado usando a utilidade:
/usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB
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:
http_port 3128 ssl-bump cert=/var/lib/squid/ssl_db/myCA.pem key=/var/lib/squid/ssl_db/myCA.key
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.