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

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.

[ Hits: 50.284 ]

Por: Lucas Garcia Moreira em 13/06/2014


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.

    Próxima página

Páginas do artigo
   1. Iniciando / Roteamento / Kernel
   2. Configurando o Squid
   3. Apache 2 / Sarg com página de bloqueio personalizada
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Squid autenticado no Active Directory com Winbind

Filtro de conteúdo autenticado com níveis de privilégio

Montando o Squid

FLogSQD - Filtro de log do proxy Squid

Grace - Usando a função "Regression"

  
Comentários
[1] Comentário enviado por andrew_ em 13/06/2014 - 11:38h

Bom dia Amigo excelente tutorial, eu segui os passos deu tudo certo mais... mais quando redireciono o trafego para a porta 3128 não consigo navegar, volta um erro de proxy com se o squid não estivesse funcionando corretamente eu coloquei o proxy diretamente nas configurações do navegador e mesmo assim tenho o erro.

Unable to connect

Firefox can't establish a connection to the server at maravalharossa.com.

The site could be temporarily unavailable or too busy. Try again in a few moments.
If you are unable to load any pages, check your computer's network connection.
If your computer or network is protected by a firewall or proxy, make sure that Firefox is permitted to access the Web.

[2] Comentário enviado por lucasmoreira em 13/06/2014 - 18:07h


[1] Comentário enviado por andrew_ em 13/06/2014 - 11:38h:

Bom dia Amigo excelente tutorial, eu segui os passos deu tudo certo mais... mais quando redireciono o trafego para a porta 3128 não consigo navegar, volta um erro de proxy com se o squid não estivesse funcionando corretamente eu coloquei o proxy diretamente nas configurações do navegador e mesmo assim tenho o erro.

Unable to connect

Firefox can't establish a connection to the server at maravalharossa.com.

The site could be temporarily unavailable or too busy. Try again in a few moments.
If you are unable to load any pages, check your computer's network connection.
If your computer or network is protected by a firewall or proxy, make sure that Firefox is permitted to access the Web.



Ola amigo o roteamento esta ativado?? dentro do ip_forward


[3] Comentário enviado por thyagobrasileiro em 13/06/2014 - 20:42h

não entendi a parte que você instala o Bind9 e apenas configura o resolv.conf...

[4] Comentário enviado por xjc em 13/06/2014 - 21:35h

gostei dos macetes . abraços

[5] Comentário enviado por px em 13/06/2014 - 22:55h

Tem muitos outros "melhoramentos" para se fazer no sysctl, aqui eu uso Arch como maquina de testes e como máquina do dia a dia, e tenho algumas opções interesantes pra compartilhar, ai meu sysctl.conf:




# Configuration file for runtime kernel parameters.
# See sysctl.conf(5) for more information.

# Have the CD-ROM close when you use it, and open when you are done.
dev.cdrom.autoclose = 1
dev.cdrom.autoeject = 1

#-- Opções de rede

# Tcp_max_syn_backlog (é o comprimento da fila de SYN)
net.ipv4.tcp_max_syn_backlog = 2048

# Protection from the SYN flood attack (1 ativa os syncookies 0 desativa)
net.ipv4.tcp_syncookies = 1

# Tentativas de pacotes SYN
net.ipv4.tcp_syn_retries = 2

# Tentativas de pacotes SYN/ACK
net.ipv4.tcp_synack_retries = 2

# Tempo para o tcp_fin_timeout (encerar conexões)
net.ipv4.tcp_fin_timeout = 15

# Padrão é "net.ipv4.tcp_keepalive_time = 7200" (tempo antes de mandar um pacote de "você esta vivo?", ou seja, antes de tentar "fechar" a conexão)
net.ipv4.tcp_keepalive_time = 1800

# Padrão é "net.ipv4.tcp_keepalive_probe = 9" (número de pacotes ACK enviados para a outra ponta da rede para tentar manter a conexão)
net.ipv4.tcp_keepalive_probes = 3

# Padrão é "net.ipv4.tcp_keepalive_intvl = 75" (tempo antes de fechar conexões inativas [em segundos])
net.ipv4.tcp_keepalive_intvl = 15

# Increase the tcp-time-wait buckets pool size (Número de sockets)
net.ipv4.tcp_max_tw_buckets = 180000

# See evil packets in your logs (ver pacotes mal formados nos logs do iptables)
net.ipv4.conf.all.log_martians = 0

# Redirecionamentos ##squid // Para aceitar coloque 1 e para negar 0
net.ipv4.conf.all.accept_redirects = 0

# IP source routing ##squid // Para aceitar coloque 1 e para negar 0
net.ipv4.conf.all.accept_source_route = 1
net.ipv4.conf.lo.accept_source_route = 1
net.ipv4.conf.enp1s10.accept_source_route = 1
net.ipv4.conf.default.accept_source_route = 1

# If active, ignores ICMP with broadcast destination (Não responde a pings destinados a broadcast)
net.ipv4.icmp_echo_ignore_broadcasts = 1

# If active, ignores all ICMP requests (Não responde a pings, se ativo)
net.ipv4.icmp_echo_ignore_all = 1

# If active, accepts ICMP redirect orders (Não aceita redirecionamento de ICMP, se ativo)
net.ipv4.conf.all.accept_redirects = 1

# Packet forwarding (Abilita ou desabilita o FOWRWARDING[redirecionamento] por padrão)
net.ipv4.ip_forward = 1

# Enable source validation by reversed path, as specified in RFC1812 (habilita a verificação de rota reversa, para evitar ataques com spoof de ips)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.enp1s10.rp_filter = 1

# Tweak the port range used for outgoing connections. (basicamente limita uma range de "portas altas" para aceitar e mantar conexões, tando entrada como saída)
net.ipv4.ip_local_port_range = 50000 60000


#-- SYSTEM

# Tweak those values to alter disk syncing and swap behavior.
vm.vfs_cache_pressure = 50
vm.swappiness = 1
#vm.laptop_mode = 0

# Tweak how the flow of kernel messages is throttled.
#kernel.printk_ratelimit_burst = 10
#kernel.printk_ratelimit = 5

# Reboot 600 seconds after kernel panic or oops.
#kernel.panic_on_oops = 1
#kernel.panic = 600


[6] Comentário enviado por wagnerfs em 15/06/2014 - 09:14h

Muito bom o artigo. Parabéns!!

[7] Comentário enviado por lucasmoreira em 16/06/2014 - 11:15h


[5] Comentário enviado por px em 13/06/2014 - 22:55h:

Tem muitos outros "melhoramentos" para se fazer no sysctl, aqui eu uso Arch como maquina de testes e como máquina do dia a dia, e tenho algumas opções interesantes pra compartilhar, ai meu sysctl.conf:




# Configuration file for runtime kernel parameters.
# See sysctl.conf(5) for more information.

# Have the CD-ROM close when you use it, and open when you are done.
dev.cdrom.autoclose = 1
dev.cdrom.autoeject = 1

#-- Opções de rede

# Tcp_max_syn_backlog (é o comprimento da fila de SYN)
net.ipv4.tcp_max_syn_backlog = 2048

# Protection from the SYN flood attack (1 ativa os syncookies 0 desativa)
net.ipv4.tcp_syncookies = 1

# Tentativas de pacotes SYN
net.ipv4.tcp_syn_retries = 2

# Tentativas de pacotes SYN/ACK
net.ipv4.tcp_synack_retries = 2

# Tempo para o tcp_fin_timeout (encerar conexões)
net.ipv4.tcp_fin_timeout = 15

# Padrão é "net.ipv4.tcp_keepalive_time = 7200" (tempo antes de mandar um pacote de "você esta vivo?", ou seja, antes de tentar "fechar" a conexão)
net.ipv4.tcp_keepalive_time = 1800

# Padrão é "net.ipv4.tcp_keepalive_probe = 9" (número de pacotes ACK enviados para a outra ponta da rede para tentar manter a conexão)
net.ipv4.tcp_keepalive_probes = 3

# Padrão é "net.ipv4.tcp_keepalive_intvl = 75" (tempo antes de fechar conexões inativas [em segundos])
net.ipv4.tcp_keepalive_intvl = 15

# Increase the tcp-time-wait buckets pool size (Número de sockets)
net.ipv4.tcp_max_tw_buckets = 180000

# See evil packets in your logs (ver pacotes mal formados nos logs do iptables)
net.ipv4.conf.all.log_martians = 0

# Redirecionamentos ##squid // Para aceitar coloque 1 e para negar 0
net.ipv4.conf.all.accept_redirects = 0

# IP source routing ##squid // Para aceitar coloque 1 e para negar 0
net.ipv4.conf.all.accept_source_route = 1
net.ipv4.conf.lo.accept_source_route = 1
net.ipv4.conf.enp1s10.accept_source_route = 1
net.ipv4.conf.default.accept_source_route = 1

# If active, ignores ICMP with broadcast destination (Não responde a pings destinados a broadcast)
net.ipv4.icmp_echo_ignore_broadcasts = 1

# If active, ignores all ICMP requests (Não responde a pings, se ativo)
net.ipv4.icmp_echo_ignore_all = 1

# If active, accepts ICMP redirect orders (Não aceita redirecionamento de ICMP, se ativo)
net.ipv4.conf.all.accept_redirects = 1

# Packet forwarding (Abilita ou desabilita o FOWRWARDING[redirecionamento] por padrão)
net.ipv4.ip_forward = 1

# Enable source validation by reversed path, as specified in RFC1812 (habilita a verificação de rota reversa, para evitar ataques com spoof de ips)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.enp1s10.rp_filter = 1

# Tweak the port range used for outgoing connections. (basicamente limita uma range de "portas altas" para aceitar e mantar conexões, tando entrada como saída)
net.ipv4.ip_local_port_range = 50000 60000


#-- SYSTEM

# Tweak those values to alter disk syncing and swap behavior.
vm.vfs_cache_pressure = 50
vm.swappiness = 1
#vm.laptop_mode = 0

# Tweak how the flow of kernel messages is throttled.
#kernel.printk_ratelimit_burst = 10
#kernel.printk_ratelimit = 5

# Reboot 600 seconds after kernel panic or oops.
#kernel.panic_on_oops = 1
#kernel.panic = 600



Muito obrigado, sempre é bom receber melhoramentos, isso que buscamos nesta comunidade... abraços...

[8] Comentário enviado por lucasmoreira em 16/06/2014 - 11:17h


[3] Comentário enviado por thyagobrasileiro em 13/06/2014 - 20:42h:

não entendi a parte que você instala o Bind9 e apenas configura o resolv.conf...


Pois o Bind9 dispensa configuração de .conf para funcionar, ele ja vem pronto, somente colocar no resolv.conf o IP para ele entender que ele mesmo é seu DNS, pois este arquivo manda na resolução de nome, se voce colocar nada ali dentro, nao adianta ele ser um server de DNS, nao vai funcionar.


[9] Comentário enviado por Roselio_Jantara em 19/06/2014 - 14:19h

Exelente "tápa" que você deu nas configuraçoes do Squid+Sarg+IPtables.Ficou muito bom! Parabéns!

[10] Comentário enviado por thyagobrasileiro em 21/06/2014 - 23:39h


[7] Comentário enviado por lucasmoreira em 16/06/2014 - 11:15h:


[5] Comentário enviado por px em 13/06/2014 - 22:55h:

Tem muitos outros "melhoramentos" para se fazer no sysctl, aqui eu uso Arch como maquina de testes e como máquina do dia a dia, e tenho algumas opções interesantes pra compartilhar, ai meu sysctl.conf:




# Configuration file for runtime kernel parameters.
# See sysctl.conf(5) for more information.

# Have the CD-ROM close when you use it, and open when you are done.
dev.cdrom.autoclose = 1
dev.cdrom.autoeject = 1

#-- Opções de rede

# Tcp_max_syn_backlog (é o comprimento da fila de SYN)
net.ipv4.tcp_max_syn_backlog = 2048

# Protection from the SYN flood attack (1 ativa os syncookies 0 desativa)
net.ipv4.tcp_syncookies = 1

# Tentativas de pacotes SYN
net.ipv4.tcp_syn_retries = 2

# Tentativas de pacotes SYN/ACK
net.ipv4.tcp_synack_retries = 2

# Tempo para o tcp_fin_timeout (encerar conexões)
net.ipv4.tcp_fin_timeout = 15

# Padrão é "net.ipv4.tcp_keepalive_time = 7200" (tempo antes de mandar um pacote de "você esta vivo?", ou seja, antes de tentar "fechar" a conexão)
net.ipv4.tcp_keepalive_time = 1800

# Padrão é "net.ipv4.tcp_keepalive_probe = 9" (número de pacotes ACK enviados para a outra ponta da rede para tentar manter a conexão)
net.ipv4.tcp_keepalive_probes = 3

# Padrão é "net.ipv4.tcp_keepalive_intvl = 75" (tempo antes de fechar conexões inativas [em segundos])
net.ipv4.tcp_keepalive_intvl = 15

# Increase the tcp-time-wait buckets pool size (Número de sockets)
net.ipv4.tcp_max_tw_buckets = 180000

# See evil packets in your logs (ver pacotes mal formados nos logs do iptables)
net.ipv4.conf.all.log_martians = 0

# Redirecionamentos ##squid // Para aceitar coloque 1 e para negar 0
net.ipv4.conf.all.accept_redirects = 0

# IP source routing ##squid // Para aceitar coloque 1 e para negar 0
net.ipv4.conf.all.accept_source_route = 1
net.ipv4.conf.lo.accept_source_route = 1
net.ipv4.conf.enp1s10.accept_source_route = 1
net.ipv4.conf.default.accept_source_route = 1

# If active, ignores ICMP with broadcast destination (Não responde a pings destinados a broadcast)
net.ipv4.icmp_echo_ignore_broadcasts = 1

# If active, ignores all ICMP requests (Não responde a pings, se ativo)
net.ipv4.icmp_echo_ignore_all = 1

# If active, accepts ICMP redirect orders (Não aceita redirecionamento de ICMP, se ativo)
net.ipv4.conf.all.accept_redirects = 1

# Packet forwarding (Abilita ou desabilita o FOWRWARDING[redirecionamento] por padrão)
net.ipv4.ip_forward = 1

# Enable source validation by reversed path, as specified in RFC1812 (habilita a verificação de rota reversa, para evitar ataques com spoof de ips)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.enp1s10.rp_filter = 1

# Tweak the port range used for outgoing connections. (basicamente limita uma range de "portas altas" para aceitar e mantar conexões, tando entrada como saída)
net.ipv4.ip_local_port_range = 50000 60000


#-- SYSTEM

# Tweak those values to alter disk syncing and swap behavior.
vm.vfs_cache_pressure = 50
vm.swappiness = 1
#vm.laptop_mode = 0

# Tweak how the flow of kernel messages is throttled.
#kernel.printk_ratelimit_burst = 10
#kernel.printk_ratelimit = 5

# Reboot 600 seconds after kernel panic or oops.
#kernel.panic_on_oops = 1
#kernel.panic = 600



Muito obrigado, sempre é bom receber melhoramentos, isso que buscamos nesta comunidade... abraços...


Entendi, Vlw

[11] Comentário enviado por moshe_ em 02/04/2015 - 08:52h

Bom dia, sou meio novo nessa area de Linux, e estou estudando sobre squid para implantar em minha empresa a pedido do chefe.
gostei muito do artigo, mas ainda tenho uma duvida, como fazemos a autenticação de usuários nesse processo?

desde já agradeço a ajuda!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts