Servidor proxy gratuito para empresas com autenticação de domínio



pfSense + Squid com filtragem https + tecnologia Logon único (SSO) com filtragem de grupo do Active Directory

Breve histórico


Na empresa, havia a necessidade de implementar um servidor proxy com a capacidade de filtrar o acesso a sites (incluindo https) por grupos do AD, para que os usuários não inserissem senhas adicionais e que pudessem ser administrados a partir da interface da web. Não é uma aplicação ruim, é?

A resposta correta seria comprar soluções como Kerio Control ou UserGate, mas como sempre, não há dinheiro, mas há uma necessidade.

Então, o bom e velho Squid vem em nosso socorro, mas, novamente - onde obter a interface da web? SAMS2? Moralmente obsoleta. Aqui o pfSense vem em socorro.

Descrição


Este artigo descreve como configurar o servidor proxy Squid.
O Kerberos será usado para autorizar usuários.
O SquidGuard será usado para filtrar por grupos de domínio.

Para o monitoramento, serão utilizados os sistemas de monitoramento interno Lightsquid, sqstat e pfSense.
Ele também resolverá um problema comum associado à introdução da tecnologia de logon único (SSO), ou seja, aplicativos que tentam ficar online na conta do computador \ na conta do sistema.

Preparando para instalar o Squid


As bases serão tomadas no pfSense, Instruções de Instalação.

Dentro do qual organizamos a autenticação para o próprio firewall usando contas de domínio. Instrução

Muito importante!

Antes de iniciar a instalação do Squid, você precisa configurar o servidor DNS no pfsense, criar um registro A e PTR em nosso servidor DNS e configurar o NTP para que o horário não seja diferente do horário no controlador de domínio.

E na sua rede, você pode fornecer à interface pfSense WAN acesso à Internet, e os usuários na rede local podem se conectar à interface LAN, inclusive através das portas 7445 e 3128 (no meu caso, 8080).

Tudo está pronto? A conexão LDAP com o domínio para autorização no pfSense está instalada e a hora está sincronizada? Bem. É hora de iniciar o processo principal.

Instalação e Predefinição


Instale o Squid, SquidGuard e LightSquid no gerenciador de pacotes pfSense na seção "System / Package Manager".

Após uma instalação bem-sucedida, vá para "Serviços / servidor Proxy Squid /" e, primeiro, na guia Cache local, configure o cache, defino tudo como 0, porque Não vejo muito sentido em sites de cache, e os navegadores se saem bem com isso. Após as configurações, clique no botão "Salvar" na parte inferior da tela e isso nos dará a oportunidade de fazer configurações básicas de proxy.

As principais configurações são as seguintes:

imagem

A porta padrão é 3128, mas eu prefiro usar 8080.

Os parâmetros selecionados na guia Interface do proxy determinam quais interfaces o servidor proxy escutará. Como esse firewall é projetado de forma a parecer com a Internet com uma interface WAN, mesmo que a LAN e a WAN possam estar na mesma sub-rede local, recomendo usar a LAN para o proxy.

O Lupbek é necessário para o sqstat funcionar.

Abaixo, você encontrará as configurações do proxy Transparente (transparente) e do Filtro SSL, mas não precisamos delas, nosso proxy não será transparente e, para a filtragem de https, não trataremos da substituição de certificados (temos fluxo de documentos, clientes bancários etc.), mas basta olhar para o aperto de mão.

Nesse estágio, precisamos ir ao nosso controlador de domínio, criar uma conta para autenticação (você pode usar o que está configurado para autenticação no próprio pfSense). Esse é um fator muito importante - se você pretende usar a criptografia AES128 ou AES256 - marque a caixa apropriada nas configurações da conta.

Se o seu domínio for uma floresta muito complexa com um grande número de diretórios ou o domínio .local, é POSSÍVEL, mas não exatamente, você precisará usar uma senha simples para esta conta, um bug conhecido, mas talvez não funcione com uma senha complexa, é necessário verifique um caso específico.

imagem

Depois disso, criamos o arquivo de chave do Kerberos, no controlador de domínio, abrimos uma linha de comando com direitos de administrador e inserimos:

# ktpass -princ HTTP/pfsense.domain.local@DOMAIN.LOCAL -mapuser pfsense -pass 3EYldza1sR -crypto {DES-CBC-CRC|DES-CBC-MD5|RC4-HMAC-NT|AES256-SHA1|AES128-SHA1|All} -ptype KRB5_NT_PRINCIPAL -out C:\keytabs\PROXY.keytab

Onde especificamos nosso FQDN pfSense, siga o caso, digite nossa conta de domínio e sua senha no parâmetro mapuser e selecione o método de criptografia em criptografia, usei o rc4 para trabalhar e, no campo -out, selecionamos para onde enviaremos nosso arquivo-chave pronto.
Após criar com êxito o arquivo-chave, nós o enviaremos ao nosso pfSense, usei Far para isso, mas você também pode fazer isso com os comandos e a massa de vidraceiro, ou através da interface da web do pfSense na seção Diagnostics \ Command Line.

Agora podemos editar \ create /etc/krb5.conf em

imagem

que /etc/krb5.keytab é o arquivo de chave que criamos.

Certifique-se de verificar a operação do kerberos com o kinit; se não funcionar, não há sentido em ler.

Configurar autenticação Squid e lista de acesso sem autenticação


Tendo configurado com sucesso o kerberos, vamos prendê-lo ao nosso Squid.

Para fazer isso, vá para Services \ Squid Proxy Server e nas configurações principais desça até o final, onde encontraremos o botão "Configurações avançadas".

No campo Opções personalizadas (antes da autenticação), insira:

#
auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth -s GSS_C_NO_NAME -k /usr/local/etc/squid/squid.keytab -t none
auth_param negotiate children 1000
auth_param negotiate keep_alive on
# 
acl auth proxy_auth REQUIRED
acl nonauth dstdomain "/etc/squid/nonauth.txt" 
# 
http_access allow nonauth 
http_access deny !auth
http_access allow auth

onde auth_param negocia programa / usr / local / libexec / squid / negociate_kerberos_auth - seleciona o auxiliar de autenticação Kerberos que precisamos.

A opção -s com o valor GSS_C_NO_NAME - define o uso de qualquer conta do arquivo de chaves.

A opção -k com o valor /usr/local/etc/squid/squid.keytab - define o uso desse arquivo keytab. No meu caso, esse é o mesmo arquivo keytab que criamos, que copiei no diretório / usr / local / etc / squid / e o renomeei porque não queria ser amigo desse diretório, aparentemente não havia direitos suficientes.

A opção -t com o valor -t none- Desativa solicitações cíclicas ao controlador de domínio, o que reduz bastante a carga, se você tiver mais de 50 usuários.
Durante o teste, você também pode adicionar a opção -d, ou seja, diagnósticos, mais logs serão exibidos.
auth_param negociate children 1000 - especifica quantos processos de autorização simultâneos podem ser executados
auth_param a negociação keep_alive ativada - não interrompe a conexão durante a pesquisa da cadeia de autorização -
acl o auth proxy_auth REQUIRED é - cria e requer uma lista de controle de acesso que inclui usuários autenticados
acl nonauth dstdomain " /etc/squid/nonauth.txt "- Informamos o squid sobre a lista de acesso nonauth que contém os domínios de destino, aos quais todos sempre terão acesso permitido. Criamos o próprio arquivo e, dentro dele, inserimos os domínios no formato

.whatsapp.com
.whatsapp.net

O Whatsapp não é em vão usado como exemplo - é muito exigente quanto aos proxies de autenticação e não funcionará se não for permitido antes da autenticação.
http_access allow nonauth - permita acesso a esta lista a todos os
http_access negar! auth - desativar o acesso de usuários não autorizados a outros sites
http_access permitir auth - permitir o acesso de usuários autorizados.
Tudo, o próprio squid está configurado para você, agora é hora de começar a filtrar por grupos.

Configurar SquidGuard


Vá para Services \ SquidGuard Proxy Filter.

Nas Opções LDAP, inserimos os detalhes de nossa conta usada para autenticação Kerberos, mas no seguinte formato:

CN=pfsense,OU=service-accounts,DC=domain,DC=local

Se houver espaços e / ou caracteres não latinos, toda essa entrada deverá ser colocada entre aspas simples ou duplas:

'CN=sg,OU=service-accounts,DC=domain,DC=local'
"CN=sg,OU=service-accounts,DC=domain,DC=local"

Em seguida, certifique-se de colocar as seguintes marcas de seleção:

imagem

Para cortar DOMAIN \ pfsense desnecessário DOMÍNIO.LOCAL ao qual todo o sistema é muito sensível.

Agora vamos ao Grupo Acl e vinculamos nossos grupos de acesso ao domínio, uso nomes simples no espírito de grupo_0, grupo_1, etc. até 3, onde 3 é acesso apenas à lista branca e 0 é tudo.

Os grupos são anexados da seguinte forma:

ldapusersearch ldap://dc.domain.local:3268/DC=DOMAIN,DC=LOCAL?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=group_0%2cOU=squid%2cOU=service-groups%2cDC=DOMAIN%2cDC=LOCAL))

salvamos nosso grupo, vamos para Times, lá eu criei um intervalo que significa trabalhar sempre, agora vamos para categorias de destino e crio listas como você gosta, depois de criar as listas voltamos aos nossos grupos e dentro do grupo selecionamos com botões que podem onde e onde não. .

LightSquid e sqstat


Se durante o processo de instalação, selecionamos um loopback nas configurações do squid e abrimos a capacidade de acessar o 7445 no firewall, tanto na nossa rede quanto no próprio pfSense, quando acessamos o Diagnostics \ Squid Proxy Reports, podemos abrir o sqstat e o Lighsquid sem problemas, para o último Você precisará criar um nome de usuário e senha no mesmo local, e também há a oportunidade de escolher o design.

Conclusão


O pfSense é uma ferramenta muito poderosa que pode fazer muitas coisas - o proxy de tráfego e o controle de acesso de usuários à Internet são apenas uma fração de toda a funcionalidade; no entanto, em uma empresa com 500 máquinas, isso resolveu o problema e economizou na compra de um proxy.

Espero que este artigo ajude alguém a resolver um problema que é bastante relevante para empresas de médio e grande porte.

All Articles