Adicionando um cabeçalho de solicitação HTTP com o Squid

5

Eu quero permitir que meus usuários façam login nos aplicativos do Google somente no meu domínio. Encontrei uma solução adicionando o cabeçalho HTTP X-GoogApps-Allowed-Domains , conforme descrito em esta ajuda do Google página .

Eu uso o Squid, mas não consigo descobrir como configurar o Squid para fazer isso. Como posso adicionar este cabeçalho de solicitação usando o Squid?

    
por boblin 07.03.2012 / 10:09

7 respostas

4

Você pode com o novo Squid 3.3 que suporta o comando "request_header_add". Eu usei o CentOS para fazer isso.

Meu Squid.conf é:

acl CONNECT method CONNECT
visible_hostname MySERVER.local
acl local src 192.168.0.0/24
http_access allow local
ssl_bump client-first all
always_direct allow all
http_port 3128 ssl_bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/usr/local/squid/etc/cert.pem
request_header_add X-GoogApps-Allowed-Domains "mycompany.com" all
cache_dir ufs /usr/local/squid/var/cache 8192 32 256

Para certificados SSL, você precisa gerar com o openSSL:

openssl req -new -newkey rsa:1024 -days 36500 -nodes -x509 -keyout /usr/local/squid/etc/cert.pem -out /usr/local/squid/etc/cert.pem 

E para os usuários não podem visualizar erros nos navegadores, instale isso como uma raiz confiável em cada computador ou adicione ao seu Active Directory (o google pode ajudar nisso).

openssl x509 -in /usr/local/squid/etc/cert.pem -outform DER -out /usr/local/squid/etc/cert.der
    
por 09.04.2013 / 04:50
3

De acordo com a FAQ do Squid :

Squid.conf ACLs

Header modification via Squid ACLs is limited to deleting a header or replacing a matching header with a constant string.

Em outras palavras, você não poderá adicionar cabeçalhos de solicitação arbitrários simplesmente usando as ACLs do Squid. As ACLs do Squid limitam a exclusão de cabeçalhos existentes ou a substituição de cabeçalhos existentes, mas não permitem a adição de novos cabeçalhos. A única maneira de adicionar novos cabeçalhos é fazendo uso de um servidor ICAP junto com o Squid. Para mais informações, consulte a seção ICAP na FAQ do Squid.

    
por 31.05.2012 / 13:19
1
por 18.10.2012 / 06:22
0

Aparentemente, pode ser feito com o ICAP

Servidor: link

O cliente está no squid3: link

Config de cima: (squid.conf)

icap_enable on
icap_service service_req reqmod_precache 1 icap://127.0.0.1:1344/request
icap_service service_resp respmod_precache 0 icap://127.0.0.1:1344/response
icap_class class_req service_req
icap_class class_resp service_resp
icap_access class_req allow all
icap_access class_resp allow all

Em seguida, configure o servidor para determinar se deseja modificar o cabeçalho ou não com base no domínio de destino:

????+

Lucro? Não consigo descobrir como escrever as regras que fariam isso ... talvez você tivesse mais sorte.

    
por 30.10.2012 / 04:56
0

Assim, você pode fazer isso com uma combinação de um proxy da Web e um servidor ICAP. Estou mais familiarizado com o Squid Proxy & GreasySpoon para o ICAP. Eu estou usando o Squid v3.2.1 & GreasySpoon 1.0.8.

  • Squid: link
  • GreasySpoon: extinta! :( A idéia será a mesma em outros servidores ICAP apenas com impls diferentes. Ela costumava ser hospedada no sourceforge, então talvez o Wayback Machine vai ter isso. Não tenho certeza.

Configuração do Squid

De qualquer forma, configure o Squid para atuar como um cache padrão. Aqui está uma configuração de amostra. Para mais detalhes sobre a configuração adequada do squid, confira os documentos extensos que estão por aí. A seção que você gosta para essa pergunta é a # ICAP Configurations na parte inferior.

cache_effective_user squid
cache_effective_group squid

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80      # http
acl Safe_ports port 81      # http - public
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 70      # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access deny blocksites
http_access allow localnet
http_access allow localhost

http_access deny all

http_port 3128 transparent

# Leave coredumps in the first cache dir
core dump_dir /var/cache/squid

# ICAP Configurations
icap_enable on
icap_preview_enable on
icap_service service_req reqmod_precache bypass=0 icap://127.0.0.1:1344/reqmod
adaptation_access service_req allow all
icap_service service_resp respmod_precache bypass=0 icap://127.0.0.1:1344/respmod
adaptation_access service_resp allow all

Note que o servidor ICAP que eu usei estava no mesmo host que o proxy squid, então usei 127.0.0.1. Se seu proxy & ICAP estão em hosts diferentes, então certifique-se de trocar o loopback pelo nome do servidor ou IP do outro servidor.

Configuração ICAP

Essa é a parte fácil.

Novamente, estou usando o agora extinto servidor ICAP "Greasy Spoon". Eu achei muito simples e fiz o que eu queria com um mínimo de dor de cabeça. Além disso, enquanto outras opções estão disponíveis, eu uso os recursos do plug-in Java.

Para o caso do GreasySpoon, acabei de criar um pequeno script Java (não javascript, embora isso seja possível com muitos servidores ICAP) que direciona a solicitação HTTP e adiciona o cabeçalho necessário (observe que os comentários principais fornecem metadados para o Servidor GS. Provavelmente não é necessário para outros):

//------------------------------------------------------------------- 
// ==ServerScript==
// @name            Add_Header
// @status on
// @description     
// @include        .*
// @exclude        
// @order           0
// ==/ServerScript==
// --------------------------------------------------------------------

public void main(HttpMessage httpMessage){
    // Add the "my-header" header with a value of "test.server.com"
    httpMessage.addHeader("my-header", "test.server.com");
}

Isso adiciona o elemento de cabeçalho do cabeçalho do meu cabeçalho a todas as solicitações.

    
por 27.02.2013 / 17:03
0

Usar o Squid para adicionar um cabeçalho personalizado é muito difícil. Tentei, mas falhei, mas encontrei outra solução para bloquear a conta do consumidor usando o seguinte método:

  1. Faça o download do Burp Suit (um proxy autônomo que pode adicionar cabeçalhos personalizados).
  2. Leia este artigo que escrevi: link

Em uma organização pequena, acho que o proxy Burp é melhor e é isso que estamos usando atualmente.

    
por 09.09.2013 / 12:08
-1

Você provavelmente precisará de um filtro web comercial completo para um trabalho como este - a menos que você queira aprofundar seu material ICAP como @Richard Keller parece estar sugerindo. Eu trabalho para Smoothwall que produz um filtro que faz o trabalho - se é realmente tudo o que você precisa (ou seja, nenhum outro filtro) me nomeie com os vendedores e podemos licenciar de forma adequada. No interesse da justiça, há produtos concorrentes que também têm esse recurso - o youtube também o utiliza.

    
por 02.06.2012 / 21:35