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

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

Automatic ACL Blocking List - Sistema automático de listas de bloqueio de ACLs

Instalando natACL no Debian Etch (proxy autenticado)

Instalação do Squid 3.2.0.14 no Slackware com execução em ambiente chroot

Fazendo controle no Proxy Squid por MAC ADDRESS

SquidGuard: Bloqueando o acesso a Web

  
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