Squid + Sarg + IPtables – Configuração rápida

Iniciando / Roteamento / Kernel

Iniciando

A máquina que configurei, foi um server Ubuntu 10.04 64 bits, dedicado para o seu fim, controlar o acesso na rede.

Hardware:

  • Processador Intel Core i7
  • Memoria DDR3 8 GB
  • HD 80 GB (humilde)
  • 2 placas de rede 10/100/1000

Segue o passo a passo de forma fácil e rápida. Forneci no decorrer do tutorial, todos os arquivos para ajudar.

Configure as placas eth0 e eth1. No meu caso, elas estavam desativadas.

Dê o comando, para subir as placas:

# ifconfig eth_ up

Dentro do interfaces, configure as placas a seu critério:

# nano /etc/network/interfaces

No meu caso, a eth0 10.0.0.10 e eth1 10.0.1.10, máscaras 255.0.0.0.

Dê o comando:

# /etc/network/networking restart

Para aplicar a configuração das placas.

Após isso instale o BIND 9, servidor de DNS:

# apt-get install bind9

Configure o resolv.conf para usar o DNS local, escrevendo dentro de /etc/resolv.conf:

nameserver 127.0.0.0

Vale lembrar que, quando reiniciar, este arquivo se reseta, assim como as regras do IPtables. Por isso, adicione dentro de rc.local, os comandos a executar em cada boot.

Neste caso, adicione a linha:

echo nameserver 127.0.0.0 > /etc/resolv.conf

Para gravar no boot o DNS.

Roteamento e algumas dicas de otimização do kernel

Agora, é hora de ativar o roteamento trocando o 0 por 1, no arquivo /proc/sys/net/ipv4/ip_forward.

Este arquivo também se reseta em cada boot, por isso, adicione novamente, em rc.local, a linha para gravar esta configuração no boot:

echo 1 > /proc/sys/net/ipv4/ip_forward

Instalar o DHCP, para que cada máquina que entrar na rede, assuma o IP e o gateway desejado, assim, aplicando as regras à mesma:

# apt-get install dhcp3-server

Segue o meu dhcpd.conf, eu sempre uso meus arquivos prontos e simplesmente copio e faço as devidas alterações, para mim, facilita muito e agiliza a configuração.

# nano /etc/dhcp3/dhcpd.conf

default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.0.0.0;
option broadcast-address 10.255.255.255;
option routers 10.0.0.10;
option domain-name-servers 10.0.0.10;
subnet 10.0.0.0 netmask 255.0.0.0 {
range 10.0.1.1 10.0.1.100;}

Li diversas mudanças de kernel em minha pesquisa, porém, sintetizei as que retornam melhores resultados e são fáceis de fazer, são elas:

1. Começar aumentando a quantidade de arquivos abertos, o padrão é 1024. Altera-se com:

# ulimit -n 16384

2. Confirmando a mudança com o comando ulimit -a, na linha com o (-n), caso continue 1024 refaça o comando.

3. Outra mudança boa aplicada, foi aumentar as conexões simultâneas, escrevendo ao final do arquivo /etc/sysctl.conf as seguintes linhas:

####### TUNNING PARA SQUID ######## # Reduzir o tempo de limpeza da tabela ARP
# Expandir o seu tamanho

net.ipv4.neigh.default.gc_interval = 15
net.ipv4.neigh.default.gc_thresh1 = 4096
net.ipv4.neigh.default.gc_thresh2 = 8192
net.ipv4.neigh.default.gc_thresh3 = 16384# Aumento do numero de conexoes simultaneas
# Reducao do tempo de espera entre as conexoes

net.core.somaxconn = 20480
net.core.netdev_max_backlog = 2048
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_syn_backlog = 2048
###############################

Após escrito, dar o comando sysctl -p, para ativar as mudanças.

Pronto, o tuning no kernel para otimizar o Squid está pronto.

Agora, continuamos.

Configurando o Squid

Agora, o server está pronto para receber o serviço principal, o Squid.

Sintetizei os meus estudos em um arquivo muito fácil e intuitivo, espero que agradem a todos e fique de fácil entendimento.

Instale o Squid:

# apt-get install squid

Alterar o /etc/squid/squid.conf, pelo arquivo pronto abaixo:

################################################
#####          Porta, Nome e Cache         #####
################################################
#

http_port 3128 transparent
visible_hostname APA-Proxy
#
## Criar cache na memoria de 4 GB ##

cache_mem 4096 MB
maximum_object_size_in_memory 2 MB
maximum_object_size 4 MB
minimum_object_size 10 KB
cache_swap_low 80
cache_swap_high 95
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
#
################################################
#####                 Log                  #####
################################################
#

cache_access_log /var/log/squid3/access.log
cache_store_log /var/log/squid3/store.log
cache_log /var/log/squid3/cache.log
## Criar um cache em disco de 5 GB ##
cache_dir aufs /var/spool/squid3 5120 16 256
#
################################################
#####                 ACLs                 #####
################################################
#

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 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 Safe_ports port 1025-65535 # portas altas
acl purge method PURGE
acl CONNECT method CONNECT
#Bloquear as portas não sitadas
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
#
################################################
#####          Direitos de Acessos         #####
################################################
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
#
################################################
##            CONTROLE DE BANDA               ##
################################################
#
#acl livre src 192.168.0.0/255.255.255.0
#acl extensoes url_regex -i .exe$ .mp3$ .vqf$ .tar.gz$ .gz$ .rpm$ .zip$ .rar$ .avi$ .mpeg$ .mpe$ .mpg$ .ram$ .rm$ .iso$ .raw$ .wav$ .mov$
#delay_pools 2
#
# Classe 1 – Acesso a Internet a 512k
#
# delay_class 1 2
# delay_parameters 1 -1/-1 69000/69000
#
# Classe 2 – Download a 180k
#
# delay_class 2 2
# delay_parameters 2 -1/-1 22500/22500
#delay_access 1 allow livre
#delay_access 2 allow extensoes
#
################################################
####         Liberando IP’S                         ####
################################################
#
acl liberados src “/etc/squid/liberados.conf”
#
http_access allow liberados
#
################################################
####           BLOQUEAR PALAVRAS            ####
################################################
#

acl bloquear_palavras url_regex -i “/etc/squid3/bloqueios.conf”
#
http_access deny bloquear_palavras
#
################################################
#####              Rede Local               ####
################################################

acl redelocal src 10.0.0.0/255.0.0.0
#
################################################
####           Liberando as Redes           ####
################################################

http_access allow localhost
http_access allow redelocal
#
################################################
####        Bloqueando todo o Resto         ####
################################################

http_access deny all
http_access deny bloquear_palavras
#######################################################
####            Diretorio de erro com imagem personalizada   ####
################################################

error_directory /usr/share/squid3/errors/portuguese

#######################################################

O arquivo acima, traz as configuração mais fáceis e mais utilizadas do Squid, deve-se trocar os IPs pelos seus próprios, e não esquecer de mudar o nome de host logo abaixo da porta.

Caso queira personalizar mais, pode alterar a seu gosto os caches, pois, nem todas as máquinas tem este hardware disponível, fica a seu critério.

Você deverá criar 2 arquivos de texto:

  • liberados.conf
  • bloqueios.conf

# nano “/etc/squid/liberados.conf”    # Neste coloque nos IPs que ficam fora do bloqueio, pois na minha empresa tenho as máquinas da gerência aonde excluo elas do bloqueio.

# nano “/etc/squid/bloqueios.conf”    # Neste deve-se colocar as palavras que deseja bloquear quando aparecerem na URL.

Outra linha relevante, é a ERROR_DIRECTORY, explicaremos ela, logo mais na página do Sarg.

Apache 2 / Sarg com página de bloqueio personalizada

Instale o Apache 2, que vai servir a página para visualizar o relatório de acesso do Squid:

# apt-get install apache2

Instale o Sarg, o nosso visualizador de relatório do Squid:

# apt-get install sarg

No Apache, não se configura nada, somente usamos a pasta compartilhada dele para enviar nossos arquivos do Sarg.

Configurando o Sarg com página personalizada

Entre no sarg.conf:

# nano /etc/sarg/sarg.conf

Edite a linha output_dir, da forma que fique assim:

output_dir /var/www/squid-reports

Dentro do mesmo arquivo, procure a linha que esteja escrito “RELATORIO DE ACESSO” e personalize. No meu caso: “Relatorio de acesso [nome da empresa]”.

Desta forma, o Squid está configurado.

Agora, a parte que eu acho a mais legal: criar uma página personalizada de bloqueio. Quando os usuários tentarem acessar uma página bloqueada, aparece a página de erro padrão do Squid, ensinarei a mudar-la para aparecer algo com a sua cara, pois podes criar uma página pessoal bem amigável.

Dentro do squid.conf da página anterior, a última linha era uma “ERROR_DIRECTORY”. Ela indica a pasta de erro a buscar um arquivo HTML, a ser mostrado na página de bloqueio.

Porém, se a pasta indicada na linha não existe, crie ela:

# mkdir /usr/share/squid/errors/portuguese

Dentro dessa pasta, deve conter um arquivo de nome “ERR_ACCESS_DENIED”, um arquivo de texto com o seu código HTML, vou postar o meu arquivo pronto para poderem editar:

<html><head><body></br></br>
<b><center><font size=7 color=red>A Pagina que voce esta tentando acessar esta bloqueada!!!</font>
<div align=center><img src=http://10.0.0.10/bloqueio.jpg></div></head></body></html>

Se souber HTML, faça um arquivo como quiser, esta é a parte legal desta página de bloqueio, o que você colocar aí, aparece na hora do bloqueio.

Colocando imagens, precisa usar da seguinte forma: http://ipdoservidor/nomedaimagem

No meu caso, tenho um arquivo de imagem apontado. Sempre que tiver imagens, devem ser colocados na pasta /var/www/, a pasta pública que o Apache cria. Se não estiver dentro dela, não aparece.

Finalizando com IPtables

Agora tudo pronto, serviços iniciados, página de bloqueio ativa, servidor DNS e DHCP resolvendo e distribuindo perfeitamente. Só falta mandar que as conexões sejam direcionadas à porta do Squid para começar a ativar os bloqueios, e definir a regra de NAT GLOBAL.

Inserindo a NAT GLOBAL:

# iptables -t nat -A POSTROUTING -o eth(internet) -p tcp -j MASQUERADE

Inserindo a regra de redirecionamento da 80 para a 3128:

# iptables -t nat -A PREROUTING -s (seu net id/mascara) -p tcp –dport 80 -j REDIRECT –to-port 3128

Pronto, seu proxy está ativo, rápido e fácil.

Apenas de quebra, vou deixar a linha para DROPAR o Facebook e impedir o acesso via IPtables, já que o maior objetivo dos Squids, são sempre as redes sociais:

# iptables -A POSTROUTING -s (sua rede / mascara) -m string –algo bm –string “facebook.com” -J DROP

Conclusão

Espero ter ajudado quem, assim como eu, teve muitos problemas com o Squid, pois sintetizei tudo da maneira mais fácil possível.

Com habilidade, este esquema está pronto em 30 minutos, no máximo 1 hora, se der algum imprevisto.

Rolar para cima