Implementação de um proxy/cache para ganho de conexão
Aqui descreverei o processo de implementação de um proxy/cache como solução para melhor desempenho de navegação pela internet. Para tal foram usados os recursos oferecidos pela dobradinha Squid + IPTables. O serviço foi testado em ambiente de produção e o resultado muito satisfatório.
Parte 3: Instalação e configuração do Squid
Para instalar o Squid no Debian, basta executar o seguinte comando:
# apt-get install Squid
Será criado o diretório /etc/squid, que é onde ficam suas configurações.
O arquivo de configuração do Squid é o /etc/squid/squid.conf, edite-o com um editor de texto. No meu caso usei o mcedit.
Iremos editar os seguintes opções:
# apt-get install Squid
Será criado o diretório /etc/squid, que é onde ficam suas configurações.
O arquivo de configuração do Squid é o /etc/squid/squid.conf, edite-o com um editor de texto. No meu caso usei o mcedit.
Iremos editar os seguintes opções:
- http_port - Essa linha irá determinar a porta onde o serviço será utilizado, o default é 3128;
- cache_mem - Essa linha serve para você determinar quanto em MB você quer que o Squid armazene em cache dos sites que foram acessados;
- cache_dir - Nesta configuração, depende do que você fez lá em cima e onde o cache vai ser guardado.
# Conf do squid para a rede 192.168.1.0/24
# Porta padrão
http_port 3128
visible_hostname gateway.suaempre.com.br
# Memória utilizada para objetos em trânsito - Não mexer
cache_mem 64 MB
maximum_object_size_in_memory 10 MB
maximum_object_size 10 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
# Onde será armazenado o cache do squid
# O valor 1000 indica a quantidade em Mb que o cache do squid irá utilizar. Como podem ver, criamos 7 partições de cache com 2Gb cada uma. Você adapta pro tamanho do seu HD.
cache_dir ufs /cache/squid1 3000 16 256
cache_dir ufs /cache/squid2 3000 16 256
cache_dir ufs /cache/squid3 3000 16 256
cache_dir ufs /cache/squid4 3000 16 256
cache_dir ufs /cache/squid5 3000 16 256
cache_dir ufs /cache/squid6 3000 16 256
cache_dir ufs /cache/squid7 3000 16 256
cache_access_log /var/log/squid/access.log
error_directory /usr/share/squid/errors/Portuguese
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
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 SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
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 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
# Aqui você irá definir o IP da sua rede interna
acl redelocal src 192.168.1.0/24
http_access allow redelocal
http_access allow localhost
http_access deny all
# Proxy Transparente
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
# Porta padrão
http_port 3128
visible_hostname gateway.suaempre.com.br
# Memória utilizada para objetos em trânsito - Não mexer
cache_mem 64 MB
maximum_object_size_in_memory 10 MB
maximum_object_size 10 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
# Onde será armazenado o cache do squid
# O valor 1000 indica a quantidade em Mb que o cache do squid irá utilizar. Como podem ver, criamos 7 partições de cache com 2Gb cada uma. Você adapta pro tamanho do seu HD.
cache_dir ufs /cache/squid1 3000 16 256
cache_dir ufs /cache/squid2 3000 16 256
cache_dir ufs /cache/squid3 3000 16 256
cache_dir ufs /cache/squid4 3000 16 256
cache_dir ufs /cache/squid5 3000 16 256
cache_dir ufs /cache/squid6 3000 16 256
cache_dir ufs /cache/squid7 3000 16 256
cache_access_log /var/log/squid/access.log
error_directory /usr/share/squid/errors/Portuguese
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
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 SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
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 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
# Aqui você irá definir o IP da sua rede interna
acl redelocal src 192.168.1.0/24
http_access allow redelocal
http_access allow localhost
http_access deny all
# Proxy Transparente
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
Configuração do gateway
É necessário configurar o gateway para que todas as conexões na porta 80 vindas da rede 192.168.1.0/24 sejam encaminhadas para a porta 3132 do Squid. Usaremos o IPtables para isso.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p udp --dport 80 -j REDIRECT --to-port 3128
iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p udp --dport 80 -j REDIRECT --to-port 3128
Levaremos em conta que o gateway já esta configurado para fazer o roteamento entre as duas redes, a 192.168.1.0 da eth0 para a do modem na eth1.