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: 46.913 ]

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

Controle de acesso à internet com Squid

Servidor Squid - Autenticação e níveis de privilégio

Destrinchando a compilação do Squid

PhpDansAdmin, protótipo de ferramenta web para administração do DansGuardian

Squid Plus 2007 para Debian 4

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts