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.024 ]

Por: Lucas Garcia Moreira em 13/06/2014


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.

Página anterior    

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 3 como proxy transparente + firewall Iptables

DansGuardian: Filtrando o acesso a Web

Autenticando Squid utilizando MySQL

Implementação de um servidor Linux Squid + Iptables + DHCP

Squid transparente com cache de arquivos + Windows Update + taxa de transferência em downloads

  
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