Instalando e configurando o Squid 3

Bem, antes de tudo vamos fazer a instalação do Squid 3. Vamos atualizar nossa lista de pacotes, utilizando um terminal, logue como usuário \"root\" ou utilize \"sudo\" antes de cada comando, sendo que neste caso seu usuário precisa ter privilégio no sudoers.

# apt-get update

Após concluída a tarefa, vamos instalar o pacote Squid 3:

# apt-get install squid3

Concluída esta tarefa, vamos a configuração do Squid.

O coração do Squid fica em /etc/squid3/squid.conf, onde vamos fazer o backup do mesmo e em seguida trabalhar suas configurações. Quando for abrir este arquivo, use seu editor de texto preferido, eu utilizo o vim, portanto substitua pelo que preferir.

Backup do squid.conf original:

# cp -v /etc/squid3/squid.conf /etc/squid3/squid.conf.BACKUP

Apagando o original:

# rm -v /etc/squid3/squid.conf

Criando nossa configuração em um novo squid.conf (use seu editor preferido):

# vim /etc/squid3/squid.conf

Abrindo este novo arquivo, copie e cole este script e altere para suas características. Retire meus comentários se desejar:

##squid.conf
http_port 3128
cache_mem 1000 MB
# Se seu servidor for dedicado, coloque neste valor a metade de sua memória RAM, do contrário use apenas 25%
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid3 45000 16 256
# Aqui é o tamanho máximo de sua cache, no meu caso é 45GB, estude sua necessidade e capacidade da partição /var

maximum_object_size 30000 KB
maximum_object_size_in_memory 40 KB

access_log /var/log/squid3/access.log squid
cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log
pid_filename /var/log/squid3/squid3.pid
# pid - mudamos para esta pasta para facilitar na identificação de problemas
mime_table /usr/share/squid3/mime.conf

cache_mgr Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.
memory_pools off

diskd_program /usr/lib/squid3/diskd
unlinkd_program /usr/lib/squid3/unlinkd

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern (cgi-bin|\\?)    
0       0%      0
refresh_pattern .               0       20%     4320
quick_abort_max 16 KB
quick_abort_pct 95
quick_abort_min 16 KB
request_header_max_size 20 KB
reply_header_max_size 20 KB
request_body_max_size 0 KB

acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl vlan24 src 192.168.30.0/24
# Representa a sua rede e respectiva máscara de sub-rede
acl lan src 172.18.28.0/24
# Assim como neste exemplo, se você tiver mais de uma rede, deve ser expressada uma por uma

acl SSL_ports port 443 563
acl Safe_ports port 80
# http
acl Safe_ports port 21
# ftp
acl Safe_ports port 443 563 1863
# 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 allow vlan24
http_access allow vlan26
http_access allow vlan28

cache_mgr webmaster
mail_program mail
cache_effective_user proxy
cache_effective_group proxy
httpd_suppress_version_string off
visible_hostname zenhulk

error_directory /usr/share/squid3/errors/Portuguese/

 

 

 

 

Criar um usuário \"proxy\" ou outro nome se preferir, sendo que altere no squid.conf:

# useradd proxy

Dê propriedade à pasta de log do Squid para o usuário que você criou, no Debian e outras distros fica em /var/log/squid3/ e no Slackware /var/log/squid3/, daí você identifica onde fica em sua distro e:

# chown proxy.proxy /var/log/squid3/
ou
# chown proxy.proxy /var/squid3/log/ (Slackware)

Se você estiver com dificuldades para encontrar esta pasta, basta criá-la com estas características e dar as permissões ao usuário criado e mudar o padrão do script squid.conf aqui postado.

# mkdir -p /var/log/squid3

E não esqueça da permissão após criar a pasta:

# chown proxy.proxy /var/log/squid3/

Se você for implementar um proxy transparente, deverá aplicar algumas configurações em seu script de firewall, assunto abordado na página seguinte.

 

 

No arquivo /etc/squid3/squid.conf, na primeira linha:

http_port 3128

Mudar para:

http_port 3128 transparent


Salve e execute o comando (este comando é muito útil para que você reconfigure o Squid sem parar o serviço):

# squid3 -k reconfigure

Agora vamos criar o arquivo /etc/init.d/firewall com seu editor de texto preferido (exceto no Slackware, que usa outro caminho para os scripts do init):

# vim /etc/init.d/firewall (Debian e outras distros)

 

 

 

#!bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
#
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Limite contra ping da morte e DoS
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 1/s -j DROP

# Liberando portas SSH a partir de qualquer interface
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Liberando portas squid, http e NTP. Estes serviços o firewall só irá
# responder se vierem da interface da rede interna. Daí você aplica de
# acordo com o cenário de sua máquina
iptables -A INPUT -p tcp --dport 3128 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 123 -i eth0 -j ACCEPT
iptables -A INPUT -p udp --dport 123 -i eth0 -j ACCEPT

# Nat Global (aqui você faz o mascaramento de forma geral para qualquer
# interface ou rede do servidor. Prefiro especificar a sub-rede, deixarei
# comentada a linha global
#iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# NAT Rede 1 e 2 (substitua as respectivas sub-redes pelas que você usa em
# sua rede e note que a \"eth1\" é minha interface diretamente conectada à internet,
# substitua-a pela sua interface adequada
iptables -t nat -A POSTROUTING -s 192.168.30.0/255.255.255.0 -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.18.28.0/255.255.255.0 -o eth1 -j MASQUERADE

# Jogando tráfego da porta 80 para o SQUID3 TRANSPARENT
iptables -t nat -A PREROUTING -s 192.168.30.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -s 172.18.28.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

# Exemplo de redirecionamento de porta, neste caso redirecionamento para
# Terminal Server e VNC (substitua as respectivas sub-redes pelas que você usa
# em sua rede e as portas respectivas do serviço que quer redirecionar.
# Note que a \"eth1\" é minha interface diretamente conectada à internet,
# substitua-a pela sua interface adequada
iptables -A FORWARD -p tcp --dport 3389 -d 182.164.2.1 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -j DNAT --to 192.168.30.32
iptables -A FORWARD -p tcp --dport 3389 -d 182.164.2.1 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 5900 -j DNAT --to 172.18.28.55

 

 

 

 

Você pode aproveitar estas dicas para deixar seu firewall um pouco mais robusto, porém se quiser apenas que resolva o proxy transparente, basta as linhas abaixo, salvo que somente elas, sem qualquer restrição, torna você vulnerável na rede mundial, daí você aplica suas regras da forma que lhe for conveniente, de acordo com sua responsabilidade.

Script de firewall que implementa somente o proxy transparente:

 

 

#!bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A PREROUTING -s 192.168.30.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

 

 

 

 

Devemos colocar as regras que criamos no script IPTABLES para ser executado sempre que o sistema inicializar, veja qual é a forma correta em sua respectiva distro.

No Debian, adicionar as seguintes linhas ao arquivo /etc/init.d/bootmisc.sh:

# vim /etc/init.d/bootmisc.sh

 

 

 

 

if [ -x /etc/init.d/firewall ]; then
    . /etc/init.d/firewall
fi

 

 

 

Então salvamos e damos permissão para que o script IPTABLES seja executado pelo sistema:

# chmod +x /etc/init.d/firewall

No Slackware, quando criamos o script do firewall IPTABLES, o salvamos no seguinte local: /etc/rc.d/rc.firewall

Então basta dar permissão de execução ao script:

# chmod +x /etc/rc.d/rc.firewall

Em outras distros e também Debian, se preferir use o arquivo /etc/rc.local, adicionando a seguinte linha:

 

 

 

 

sh -e /etc/init.d/firewall

 

 

 

Salve o arquivo e dê as permissões:

# chmod +x /etc/init.d/firewall

Dica: Para visualizar regras do IPTABLES, basta no terminal digitar:

# iptables -L
# iptables -t nat -L

Para limpar e desativar estas regras do IPTABLES basta:

# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X


Assim temos proxy transparente funcionando e regras de firewall Iptables.