Linux: Instalação de um proxy transparente com Squid

Last Updated: 26/04/2016By

Para configurar Squid e iptables eu vou mostrar abaixo um passo a passo bem simples de fazer.

Este proxy é transparente a fim de facilitar a navegação do usuário sem que ele precise se autenticar no navegador.

Minha configuração:
– System: HP dual Xeon CPU system with 8 GB RAM (good for squid).Sistema: sistema de CPU dual Xeon HP com 8 GB de RAM (bom para squid).
– ii) Eth0: IP:192.168.1.1Eth0: IP: 192.168.1.1
– iii) Eth1: IP: 192.168.2.1 (192.168.2.0/24 network (around 150 windows XP systems))Eth1: IP: 192.168.2.1 (192.168.2.0/24 rede (cerca de 150 sistemas Windows XP))
– iv) OS: Red Hat Enterprise Linux 4.0 (Following instruction should work with Debian and all other Linux distros)Sistema: Red Hat Enterprise Linux 4.0 ou acima (sequência de instruções deve trabalhar com Debian e todas as outras distribuições Linux)

Configuração do servidor

  • Step #1 : Squid configuration so that it will act as a transparent proxy Etapa # 1: configuração do Squid para que ele vai agir como um proxy transparente
  • Step #2 : Iptables configuration Etapa # 2: Configuração Iptables
    • a) Configure system as router a) Sistema Configure como router
    • b) Forward all http requests to 3128 (DNAT) b) Encaminhar todas as solicitações HTTP para 3128 (DNAT)
  • Step #3: Run scripts and start squid service Etapa # 3: Execute scripts e iniciar o serviço squid

Para instalação em sistemas baseados em RED HAT por exemplo Centos use o YUM

Yum install squid

Para instalação em sistema baseados em Debian use o apt-get ou aptitude

Apt-get ou aptitude install squid

Bom depois de instalado o Squid vamos para os arquivos de configuração do squid.

Tanto nos sistemas baseados em Redhat e no Debian os arquivos ficam em /etc

Va em

# Vi /etc/squid/squid.conf

É esperto ou nube como chamam por ai, então faça o backup antes

cp squid.conf para squid.conf.datadobackup

Beleza? Agora que sabe fazer backup dos arquivos de conf. Vamos no squid.conf

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
acl lan src 192.168.1.1 192.168.2.0/24
http_access allow localhost
http_access allow lan
  • httpd_accel_host virtual: Squid como acelerador httpd
  • httpd_accel_port 80: 80 é a porta que você deseja atuar como um proxy
  • httpd_accel_with_proxy em: ato Squid tanto como um acelerador httpd local e como um proxy.
  • httpd_accel_uses_host_header em: Header está ligado, que é o nome do host da URL.
  • acl lan src 192.168.1.1 192.168.2.0/24: lista de controle de acesso, só permitem que computadores da rede local para usar squid
  • http_access allow localhost: acesso Squid para LAN e localhost ACL única
  • http_access allow lan: – mesmo que acima –

Aqui está a lista completa de squid.conf para sua referência (grep irá remover todos os comentários e sed irá remover todas as linhas vazias, graças a David Klein para a dica rápida):

# Grep -v “^ #” /etc/squid/squid.conf | sed -e ‘/ ^ $ / d’

OR, experimentar sed (graças a Kotnik para pequeno truque sed)

O resto da configuração:

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
hosts_file /etc/hosts
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl purge method PURGE
acl CONNECT method CONNECT
cache_mem 1024 MB
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
acl lan src 192.168.1.1 192.168.2.0/24
http_access allow localhost
http_access allow lan
http_access deny all
http_reply_access allow all
icp_access allow all
visible_hostname myclient.hostname.com
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
coredump_dir /var/spool/squid

Configuração de iptables

Em seguida, eu tinha adicionado seguindo regras para encaminhar todas as solicitações HTTP (que vêm para a porta 80) para a porta do servidor Squid 3128:

iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j DNAT –to 192.168.1.1:3128

iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 3128

Um script maneiro montado em sh para rodar no iptables bem simples

#!/bin/sh
# squid server IP
SQUID_SERVER=”192.168.1.1″
# Interface connected to Internet
INTERNET=”eth0″
# Interface connected to LAN
LAN_IN=”eth1″
# Squid port
SQUID_PORT=”3128″
# DO NOT MODIFY BELOW
# Clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Load IPTABLES modules for NAT and IP conntrack support
modprobe ip_conntrack
modprobe ip_conntrack_ftp
# For win xp ftp client
#modprobe ip_nat_ftp
echo 1 > /proc/sys/net/ipv4/ip_forward
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# Unlimited access to loop back
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow UDP, DNS and Passive FTP
iptables -A INPUT -i $INTERNET -m state –state ESTABLISHED,RELATED -j ACCEPT
# set this system as a router for Rest of LAN
iptables –table nat –append POSTROUTING –out-interface $INTERNET -j MASQUERADE
iptables –append FORWARD –in-interface $LAN_IN -j ACCEPT
# unlimited access to LAN
iptables -A INPUT -i $LAN_IN -j ACCEPT
iptables -A OUTPUT -o $LAN_IN -j ACCEPT
# DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
iptables -t nat -A PREROUTING -i $LAN_IN -p tcp –dport 80 -j DNAT –to $SQUID_SERVER:$SQUID_PORT
# if it is same system
iptables -t nat -A PREROUTING -i $INTERNET -p tcp –dport 80 -j REDIRECT –to-port $SQUID_PORT
# DROP everything and Log it
iptables -A INPUT -j LOG

Salve shell script. Executar o script para que o sistema irá funcionar como um roteador e encaminhar as portas:

# chmod +x /etc/fw.proxy
# /etc/fw.proxy
# service iptables save
# chkconfig iptables on

Start ou restart squid:

# /etc/init.d/squid restart
# chkconfig squid on

Desktop / configuração do computador cliente

Apontar todos os clientes de desktop para o seu endereço IP eth1 (192.168.2.1) como Router / Gateway (uso DHCP para distribuir esta informação). Você não tem de configurar-se navegadores individuais para trabalhar com proxies.

Como posso testar o meu proxy Squid está funcionando corretamente?

Veja /var/log/squid/access.log arquivo de log de acesso:

/var/log/squid/access.log # tail -f

O comando acima irá acompanhar todos os pedidos de entrada e log para var log / squid / arquivo / / access_log. Agora, se alguém acessar um site através do navegador, vai registrar informações.

Agora ficou facil, leia atentamente e estude o arquivo, o log é um cara para você analisar seus própruos erros e vai apontar as correções.

Eu espero que tenha ajudado.

Novidades via inbox

Fique por dentro no meu Boletim digital toda semana um conteúdo novo

Leave A Comment