Como configurar o cliente para o proxy transparente do squid?

9

Detalhes do servidor

Squid Transparent Proxy Version: 3.3.8
OS: Ubuntu Server 14.04
Server IP: 192.168.1.3

Arquivo de configuração do Squid

(excluindo comentários usando grep)

root@ubuntu:~# grep -v '^$\|^\s*\#' /etc/squid3/squid.conf
acl SSL_ports port 443
acl Safe_ports port 80      # http
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
acl mylocalnetwork src 192.168.1.0/24
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access allow mylocalnetwork
http_access deny manager
http_access allow localhost
http_access deny all
http_port 3128 transparent
cache_mem 8 MB
maximum_object_size_in_memory 32 KB
memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA
cache_dir aufs /opt/squid/cache 10000 14 256
maximum_object_size 128000 KB
cache_swap_low 95
cache_swap_high 99
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern -i \.(gif|png|jp?g|ico|bmp|tiff?)$ 10080 95% 43200
refresh_pattern -i \.(rpm|cab|deb|exe|msi|msu|zip|tar|xz|bz|bz2|lzma|gz|tgz|rar|bin|7z|doc?|xls?|ppt?|pdf|nth|psd|sis)$ 10080 90% 43200
refresh_pattern -i \.(avi|iso|wav|mid|mp?|mpeg|mov|3gp|wm?|swf|flv|x-flv|axd)$ 43200 95% 432000
refresh_pattern -i \.(html|htm|css|js)$ 1440 75% 40320
refresh_pattern -i \.index.(html|htm)$ 0 75% 10080
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 1440 90% 10080
quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 100
store_avg_object_size 13 KB
visible_hostname localhost

Lulas

-------------------------------------------------------------
-----------------------------------------------------------
----------------------------------------------------------
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| Loaded Icons.
2014/07/03 22:11:57| HTCP Disabled.
2014/07/03 22:11:57| Pinger socket opened on FD 13
2014/07/03 22:11:57| Squid plugin modules loaded: 0
2014/07/03 22:11:57| Adaptation support is off.
2014/07/03 22:11:57| Accepting NAT intercepted HTTP Socket connections at local=0.0.0.0:3128 remote=[::] FD 11 flags=41
2014/07/03 22:11:57| Done reading /opt/squid/cache swaplog (2 entries)
2014/07/03 22:11:57| Finished rebuilding storage from disk.
2014/07/03 22:11:57|         2 Entries scanned
2014/07/03 22:11:57|         0 Invalid entries.
2014/07/03 22:11:57|         0 With invalid flags.
2014/07/03 22:11:57|         2 Objects loaded.
2014/07/03 22:11:57|         0 Objects expired.
2014/07/03 22:11:57|         0 Objects cancelled.
2014/07/03 22:11:57|         0 Duplicate URLs purged.
2014/07/03 22:11:57|         0 Swapfile clashes avoided.
2014/07/03 22:11:57|   Took 0.08 seconds ( 24.94 objects/sec).
2014/07/03 22:11:57| Beginning Validation Procedure
2014/07/03 22:11:57|   Completed Validation Procedure
2014/07/03 22:11:57|   Validated 2 Entries
2014/07/03 22:11:57|   store_swap_size = 12.00 KB
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| pinger: Initialising ICMP pinger ...
2014/07/03 22:11:57| pinger: ICMP socket opened.
2014/07/03 22:11:57| pinger: ICMPv6 socket opened
2014/07/03 22:11:57| Pinger exiting.
2014/07/03 22:11:58| storeLateRelease: released 0 objects

Regras de iptables

(usando a interface única "eth0" por enquanto)

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.3:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Configuração do Cliente

O problema é que não consegui acessar a Internet nas máquinas dos meus clientes com o IP do Squid como Gateway e DNS primário, conforme mostrado abaixo.

Em um cliente Ubuntu

auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.3

dns-nameservers 192.168.1.3

Em um cliente Windows

insira a descrição da imagem aqui

Quando altero o DNS no cliente Ubuntu para dns-nameservers 192.168.1.1o cliente Windows para o mesmo ip do roteador, em 192.168.1.1vez do squid ip (192.168.1.3), posso acessar a internet em ambos. Pode não ser o caminho a ser feito, pois a página pode ser renderizada diretamente do roteador e do servidor squid usando cache (é claro que eu pude ver os logs sendo gerados em /var/log/squid3/cache.log). Também notei que meu roteador piscava para as páginas que já foram acessadas; isso pode significar que ele envia a solicitação pela Internet em vez de buscar no cache do squid.

Ainda não estou comprometida. Se eu ainda conseguir acessar as páginas visitadas nas máquinas clientes a partir do cache com a Internet desligada, ficarei satisfeito.

Qual é o procedimento para configurar clientes para o Squid Transparent Proxy ?, alguém me orienta por favor?

Atualização 1

root@ubuntu:~# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:192.168.1.3:3128
    0     0 REDIRECT   tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 3128

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      eth0    192.168.1.0/24       0.0.0.0/0

Atualização 2

Está trabalhando na edição anterior Ubuntu 10.04(lucid)com a versão squid Squid Cache: Version 2.7.STABLE7, e abaixo está o arquivo de configuração do squid funcionado e eu poderia acessar a internet nas máquinas clientes quando o gateway e o DNS do cliente estiverem configurados para o ip do lucid:

root@lucid:~# grep -v '^$\|^\s*\#' /etc/squid/squid.conf
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
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 mynet src 192.168.1.0/24    # RFC1918 possible internal network
acl SSL_ports port 443      # https
acl SSL_ports port 563      # snews
acl SSL_ports port 873      # rsync
acl Safe_ports port 80      # http
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 Safe_ports port 631     # cups
acl Safe_ports port 873     # rsync
acl Safe_ports port 901     # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow mynet
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
cache_mem 8 MB
maximum_object_size_in_memory 32 KB
cache_dir ufs /var/spool/squid 2000 16 256
access_log /var/log/squid/access.log squid
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern (Release|Package(.gz)*)$    0   20% 2880
refresh_pattern .       0   20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
hosts_file /etc/hosts
offline_mode on
coredump_dir /var/spool/squid

Não sei por que não está funcionando Ubuntu 14.04com a versão do Squid Squid Cache: Version 3.3.8. Definitivamente, estou perdendo algumas configurações na nova versão do squid ou no novo destrro !.

user53864
fonte
1
Posso estar afirmando o óbvio, mas não é o ponto principal de uma configuração de proxy transparente que você NÃO configura os clientes?
HBruijn
Não, apenas mencionei as configurações do servidor para melhor depurar o problema !.
user53864
Não estou entendendo como configurar clientes squid. Não consegui acessar a Internet no cliente quando utilizo o ip do squid (192.168.1.3) como gateway e servidor DNS primário. Eu acho que essa é a maneira correta de configurar clientes!
precisa saber é o seguinte
Sem avisos ou mensagens de erro squid3 -k parse, tudo está limpo.
user53864
qual é a saída desse comando: "iptables -t nat -L -n -v"?
TBI Infotech

Respostas:

11

Não tenho certeza, mas dê uma olhada nesta lista de verificação:

Edite o arquivo squid.conf e altere a seguinte linha para ativar o modo proxy transparente:

http_port 3128

to

http_port 3128 intercept

serviço squid reiniciar service squid recarregar

Adicione uma entrada à tabela NAT do iptables para o tráfego de entrada de encaminhamento de porta na interface interna (lado da LAN) ao servidor Squid na porta 3128 (assumindo que eth0 é a interface interna com o endereço IP 192.168.1.3

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to (cont.) 192.168.1.3:3128

Agora você pode examinar suas tabelas de ip, tabela de filtro padrão e tabela nat, usando os seguintes comandos

iptables -L -t filter

iptables -L -t nat

Agora você pode adicionar (anexar) à tabela de filtros iptable com os seguintes comandos, para aceitar a entrada na porta 3128 para o Squid

iptables -t filter -A INPUT -p tcp --dport 3128 -j ACEITAR

Experimente também este

Você precisa de uma porta de 'interceptação' e uma 'proxy de encaminhamento' na configuração, mesmo que não use o proxy de encaminhamento:

http_port 3129

interceptação http_port 3128

Nota : A opção "transparente" foi descontinuada pela opção "interceptar" desde 2010.

TBI Infotech
fonte
Eu já mudei para interceptcomo sugerido por HBruijn. As regras nat de ipptables já estão em vigor e o INPUT para o servidor proxy não está bloqueado para nenhuma porta / fonte; todos os pacotes recebidos são permitidos por enquanto.
user53864
você pode verificar a porta 3129 em vez de 3128 como http_port 3129 interceptar?
TBI Infotech
@ user53864 verifique a resposta atualizada
TBI Infotech
Eu tentei !, sem sorte, o resultado é o mesmo. Eu tentei com a porta 3129 no squid e também substitui as regras do iptables pela nova porta. Ainda não consegui acessar a internet nas máquinas dos meus clientes.
user53864
Depois de adicionar ambos no squid.conf, o que é o relatório de log do squid. http_port 3129 http_port 3128 interceptar
TBI Infotech
1

De acordo com o Squid WiKi, você tem a configuração errada na opção http_port , com Squid 3.1+ e DNAT, deve estar em interceptvez de transparent.

http_port 3128 intercept

Embora a saída do seu log do Squid pareça indicar que soquetes interceptados estão ativos.

Uma segunda coisa é que o servidor Linux precisa permitir o encaminhamento de TCP-IP com sysctl net.ipv4.ip_forward=1

HBruijn
fonte
Alterei as configurações para intercept, o resultado é o mesmo que não consegui acessar a internet em clientes com 192.168.1.3gateway e DNS primário. Sim, o encaminhamento de TCP-IP está ativado no sysctl.conf.
user53864
Na verdade, qual é a maneira correta de configurar o squid client? O DNS deve ser o IP do Squid (192.168.1.3) ou o IP geral do roteador (192.168.1.1)?
precisa saber é o seguinte
A configuração normal é que o roteador / gateway padrão que um cliente recebe em sua solicitação DHCP possui uma regra de redirecionamento, que intercepta o tráfego de saída para a porta TCP 80 e redireciona esses pacotes para o proxy transparente. Lá eles serão processados ​​e os resultados retornados ao cliente. O DNS usado não importa.
21714 HBruijn
Portanto, ele deve funcionar apenas com a configuração de gateway nos clientes; ainda não sei por que não consegui acessar a Internet nos clientes.
user53864
Eu atualizei minha postagem!
precisa saber é o seguinte
1

Erro: No forward-proxy ports configure(in /var/log/squid3/cache.log)

Leia o Wiki .

Na minha experiência, o proxy transparente precisa da porta NAT squid.conf(ambos)

 http_port 3128
 http_port 8080 intercept
sebix
fonte
0

Depois de adicionar "interceptar" à opção http_port, ainda tenho problemas em combinação com o modo de redirecionamento do iptables, se os clientes estiverem configurados para usar um proxy:

"ERRO: Nenhuma porta de proxy direto configurada." e "AVISO: loop de encaminhamento detectado para:"

Depois de passar pelas declarações acima, eu uso isso, como o melhor resultado agora:

a) use uma entrada de porta dupla no squid.conf assim:

http_port 8080
http_port 3128 intercept

Isso apresentará a porta 8080 como porta de encaminhamento comum para configuração do lado do cliente e fornece uma segunda porta para a qual encaminhar o tráfego redirecionado.

b) use uma regra do iptables como esta:

iptables -A PREROUTING -t NAT -i $LAN_IF -p tcp --dport 80 -j REDIRECT --to-port 3128

Assim, você terá uma porta proxy clássica (8080) para configurar em seus clientes e uma porta de imposição para tráfego não criptografado.

Por que você deveria querer fazer isso? Bem, se você não gosta de ter tráfego HTTPS ignorando o proxy (a necessidade de configurar clientes comuns de qualquer maneira) e se deseja oferecer suporte, mas não deseja (ou não pode) configurar dispositivos ou programas menos inteligentes.

BlueStar88
fonte
No Raspbian (e provavelmente outros), o comando iptables fornece o erro "iptables v1.4.21: não é possível inicializar a tabela iptables` NAT ': a tabela não existe (você precisa insmod?) Talvez o iptables ou seu kernel precise ser atualizado . " Alterar "-t NAT" para "-t nat" resolve isso.
glennr
-1

No Ubuntu 14.04 Squid Transparent Proxy Versão: 3.3.8, você deve remover o transparente da configuração http_port 3128, quero dizer, basta deixar

http_port 3128

não

http_port 3128 transparent

por algum motivo não está funcionando agora.

Geyson Rodriguez
fonte
-2

com:

http_port 3128
http_port 8080 intercept

funciona

(Erro: nenhuma porta de proxy direto é configurada em /var/log/squid3/cache.log)

mpman077
fonte