Linux: Instalação de um proxy transparente com Squid
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.
Último vídeo
Novidades via inbox
Fique por dentro no meu Boletim digital toda semana um conteúdo novo