Neste artigo, sintetizei o resultado da minha instalação do server Ubuntu rodando, entre outros serviços, o Squid com relatório de acesso e regras no IPtables. Tudo isso de forma rápida e fácil, para iniciantes. Coloquei dicas para dar uma tunada no kernel, para otimizar o resultado do servidor.
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 AMD FX-4300
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:
A Pagina que voce esta tentando acessar esta bloqueada!!!
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.
Post Original:
http://www.vivaolinux.com.br/artigo/Squid-Sarg-IPtables-Configuracao-rapida/
Por: Lucas Garcia Moreira em 13/06/2014