Servidor Proxy - Parte I

Descrição: Neste artigo serão abordados os principais aspectos para a implantação de um servidor proxy com os serviços de DHCP, Proxy Transparente, Sarg, Samba, exemplos de scripts para automatização de atualização remota, cron e repositórios locais para clientes GNU/Linux.

[ Hits: 34.999 ]

Por: Renato Cesar Ribeiro Bonfim Jr em 29/07/2015


Configuração do Squid



O Squid é o principal responsável pelo serviço de webproxy com a possibilidade de proxy autenticado ou transparente, entre outras funcionalidades temos a possibilidade de cache, controle de banda, definição de acesso por horário e controle de acesso. Neste roteiro será abordado a criação de um proxy transparente, além da possibilidade da compilação para permitir que o Squid realize a escuta do protocolo HTTPS (porta 443) e a criação e cache de certificados dinâmicos.

Para a implantação do proxy transparente há um exemplo de configurações mínimas, o arquivo alvo da edição está localizado na pasta /etc/squid3 com o nome squid.conf:

# nano /etc/squid3/squid.conf

# Este arquivo provê as configurações básicas do Squid
#
# Inicio do arquivo
# Configuracoes basicas
http_port 3128 transparent
visible_hostname onix.arm

# Configurações do servidor
error_directory /usr/share/squid3/errors/pt-br
acl all src

acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563 873
acl Safe_ports port 80 # http
acl Safe_ports port 21 # FTP
acl Safe_ports port 443 563 873 # https,News
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

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl redelocal src 172.16.0.0/16

# Definição de Cache

cache_mem 64 MB
cache_dir ufs /var/spool/squid3 820 16 256
maximum_object_size_in_memory 52 KB
maximum_object_size 512 KB
minimum_object_size 10 KB
cache_swap_low 85
cache_swap_high 95
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

# Definições de logs

access_log /var/log/squid3/access.log
cache_access_log /var/log/squid3/access.log
cache_log /var/log/squid3/cache.log
cache_swap_log /var/log/squid3/swap.log
logformat squid3 %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
cache_mgr onix.arm@onix.com # Email da página de erro do Squid

# Considerações finais

http_access allow localhost
http_access allow redelocal
http_access deny all

Reinicie o serviço do Squid:

# systemctl restart squid3

Verifique o status do serviços.

# systemctl status -l squid3
● squid3.service - LSB: Squid HTTP Proxy version 3.x
   Loaded: loaded (/etc/init.d/squid3)
   Active: active (running) since Seg 2015-07-13 23:44:12 BRT; 4s ago
  Process: 1531 ExecStop=/etc/init.d/squid3 stop (code=exited, status=0/SUCCESS)
  Process: 1554 ExecStart=/etc/init.d/squid3 start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/squid3.service
           ├─1590 /usr/sbin/squid3 -YC -f /etc/squid3/squid.conf
           ├─1592 (squid-1) -YC -f /etc/squid3/squid.conf
           ├─1593 (unlinkd)
           └─1594 (pinger)

Jul 13 23:44:12 onix squid3[1554]: 2015/07/13 23:44:12 kid1| Making directories in /var/spool/squid3/06
Jul 13 23:44:12 onix squid3[1554]: 2015/07/13 23:44:12 kid1| Making directories in /var/spool/squid3/07
Jul 13 23:44:12 onix squid3[1554]: 2015/07/13 23:44:12 kid1| Making directories in /var/spool/squid3/08
Jul 13 23:44:12 onix squid3[1554]: 2015/07/13 23:44:12 kid1| Making directories in /var/spool/squid3/09
Jul 13 23:44:12 onix squid3[1554]: 2015/07/13 23:44:12 kid1| Making directories in /var/spool/squid3/0A
Jul 13 23:44:12 onix squid3[1554]: 2015/07/13 23:44:12 kid1| Making directories in /var/spool/squid3/0B
Jul 13 23:44:12 onix squid3[1554]: 2015/07/13 23:44:12 kid1| Making directories in /var/spool/squid3/0C
Jul 13 23:44:12 onix squid3[1554]: 2015/07/13 23:44:12 kid1| Making directories in /var/spool/squid3/0D
Jul 13 23:44:12 onix squid3[1554]: 2015/07/13 23:44:12 kid1| Making directories in /var/spool/squid3/0E
Jul 13 23:44:12 onix squid3[1554]: 2015/07/13 23:44:12 kid1| Making directories in /var/spool/squid3/0F


Com este arquivo base nenhum acesso será negado e a partir dele podemos definir as diretivas através das ACLs.

Access Control List

Com a configuração do Squid funcional é possível definir acessos e seus controles através das ACLs (Access Control List). Antes de tratar das ACLs é necessário o entendimento de algumas regras:

1. Por definição quando a requisição é realizada o Squid analisa o conteúdo do squid.conf do topo para o fim, procurando uma diretiva que se encaixe com o padrão da requisição até o final do arquivo.

2. É interessante definir como última diretiva uma regra para bloquear todas as requisições de acesso no caso do pacote não combinar com nenhuma diretiva anterior. Uma analogia que pode ser realiza é a de que o Squid possui políticas de acesso similares a um firewall.

3. Evite regras desnecessárias ou redundantes.

A sintaxe básica para definição da ACL é:

acl [nome_da_ACL] [Classe da ACL]

Para cada ACL criada é necessário definir se acesso será permitido, allow, ou negado, deny.

Classes de acesso:
  • SRC - classe baseada na origem da requisição, ou seja, baseia-se no endereço IP do cliente.
  • DST - classe baseada no destino da requisição, ou seja, baseia-se no endereço IP do servidor requisitado.
  • SRCDOMAIN - classe de acesso que baseia-se no domínio DNS do cliente.
  • DSTDOMAIN - classe de acesso que baseia-se no domínio DNS do servidor de destino da requisição.
  • TIME - classe de acesso que define o acesso por dia da semana e horário da requisição.
  • URL_REGEX - classe onde é possível utilizar expressões regulares para liberação ou bloqueio das requisições.
  • PROXY_AUTH - classe que utiliza o login do usuário para definir a liberação ou bloqueio da requisição.

Página anterior     Próxima página

Páginas do artigo
   1. Considerações iniciais
   2. Atualização do S.O. / Configurações do servidor DHCP e firewall
   3. Configuração do Squid
   4. A possibilidade de compilação para escuta da porta 443 (HTTPS)
   5. Ajustes para Sarg gerar os relatórios de acesso / Conclusão
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Configuração de serviço do Nagios para monitorar o APT do Ubuntu

Instalação do OCS Inventory (última versão, 2.9.2 - 2022) no Debian 11

Conexão do Vindula com o Active Directory Server 2008 R2

Packet Tracer 7 no Debian 10

Montagem de um cluster com o MOSIX

  
Comentários
[1] Comentário enviado por wagnerfs em 29/07/2015 - 21:41h

Muito bom mesmo. Parabéns por compartilhar o conhecimento e fico no aguardo do próximo artigo.
_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782

[2] Comentário enviado por rbonfim em 29/07/2015 - 21:57h

Obrigado Wagner, contribuições e correções são bem vindas!

__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"

[3] Comentário enviado por l0g1in em 01/08/2015 - 09:35h


Parabéns pelo artigo muito bom mesmo. Gostaria de saber se no quesito segurança o que implica esse certificado gerado pelo Squid quanto ao Certificado dos bancos por exemplo, já o Squid vai pegar todo trafego e passar pelo seu certificado.

Obrigado.

[4] Comentário enviado por rbonfim em 03/08/2015 - 09:53h

astsilva,

Muito obrigado pela leitura do artigo. A cerca do certificado, o Squid com estas configurações funciona com o MITM (Man in the middle) recebendo os dados HTTPS, lendo o certificado e comparando com as diretivas de acesso, como você mesmo já citou. As informações arquivadas pelo Squid relacionados aos sites HTTPS referem-se somente aos dados dos certificados, grande parte das informações pessoais não são arquivadas pelo Squid, acredito que a segurança não será comprometida e que para manter a segurança de acesso as diretivas do Firewall devem ser aplicadas principalmente par evitar acessos externos. Na dúvida leia: http://www.squid-cache.org/Doc/config/ssl_bump/
__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"

[5] Comentário enviado por tiago1 em 03/08/2015 - 15:53h

Cara, muito legal mesmo! Mas tenho uma dúvida: proxy, tipo o Squid, funciona em outras modalidades de acesso a internet, além de ADSL, com modens, como tu disse no artigo? Ou funciona em internet a rádio? Moro numa região onde a maioria das pessoas usa internet a rádio e poucos usam ADSL e estou pensando em mudar a minha pra rádio também.

Um abraço e parabéns!

[6] Comentário enviado por chaplinux em 03/08/2015 - 16:12h


[5] Comentário enviado por tiago1 em 03/08/2015 - 15:53h

Cara, muito legal mesmo! Mas tenho uma dúvida: proxy, tipo o Squid, funciona em outras modalidades de acesso a internet, além de ADSL, com modens, como tu disse no artigo? Ou funciona em internet a rádio? Moro numa região onde a maioria das pessoas usa internet a rádio e poucos usam ADSL e estou pensando em mudar a minha pra rádio também.

Um abraço e parabéns!



Primeiramente Parabens pelo artigo! salvando aqui nos favoritos.!

Respondento o nosso amigo Thiago ai de cima! amigo... o squid server pra qualquer tipo de internet... independe se vem de radio ou ADSL ou qualquer q seja. desde que vc conecte os cabos e defina as rotas! ta valendo.




[7] Comentário enviado por tiago1 em 03/08/2015 - 20:47h


[6] Comentário enviado por chaplinux em 03/08/2015 - 16:12h


[5] Comentário enviado por tiago1 em 03/08/2015 - 15:53h

Cara, muito legal mesmo! Mas tenho uma dúvida: proxy, tipo o Squid, funciona em outras modalidades de acesso a internet, além de ADSL, com modens, como tu disse no artigo? Ou funciona em internet a rádio? Moro numa região onde a maioria das pessoas usa internet a rádio e poucos usam ADSL e estou pensando em mudar a minha pra rádio também.

Um abraço e parabéns!


Primeiramente Parabens pelo artigo! salvando aqui nos favoritos.!

Respondento o nosso amigo Thiago ai de cima! amigo... o squid server pra qualquer tipo de internet... independe se vem de radio ou ADSL ou qualquer q seja. desde que vc conecte os cabos e defina as rotas! ta valendo.





Obrigado pelo retorno! Abraços!

[8] Comentário enviado por rbonfim em 04/08/2015 - 14:31h

Pessoal! Muito obrigado pelos comentários, qualquer contribuição à melhoria do artigo são bem vindas demais!
__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"

[9] Comentário enviado por tonyhts em 04/08/2015 - 18:59h

Favoritadáááço !!
parabens ! Belo artigo
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---

[10] Comentário enviado por removido em 04/08/2015 - 19:09h

Mais um bom artigo sobre proxy, favoritado.

--------------------------------------------
povo@brasil ~$ sudo su -
root@brasil ~# find / -iname corrupção -exec rm -rfv {} \;

[11] Comentário enviado por yurifc4 em 19/08/2015 - 09:52h

Muito bom o artigo... tenho uma dúvida no servidor DHCP, é possível eu atribuir um IP para um determinado MAC ADDRESS?? E como ficaria a configuração? Se alguém puder me ajudar... valeu.

[12] Comentário enviado por rbonfim em 19/08/2015 - 10:14h

É possível sim Yuri, no arquivo dhpd.conf faça o seguinte:
host nome_do_computador {
hardware ethernet AA:BB:CC:DD:EE:FF; # Endereço MAC da interface de rede
fixed-address 111.222.333.444; # Endereço IP fixo
}

__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"

[13] Comentário enviado por yurifc4 em 20/08/2015 - 17:01h

O cara escreve o artigo e ainda ajuda a gurizada... Valeu rbonfim, deu certo :D

[14] Comentário enviado por chaplinux em 20/08/2015 - 21:31h

Renato, nao daria para implementar na compilação do Squid os parametro p/ cache full?,
para uma possivel controle de banda. ? saberia como ficaria essa implementacao?

[15] Comentário enviado por rbonfim em 21/08/2015 - 09:06h

Yuri,
Valeu Man, mas fazer parte do VOL é isso, contribuir e ajudar!

Chaplinux
Tem sim jovem! Para o cachefull tem que compilar com a opção:
--enable-delay-pools

Configura e corre pro abraço!
__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"

[16] Comentário enviado por lukan em 21/08/2015 - 11:54h

Olá!
Seria possível você disponibilizar como ficou o seu squid.cof após o acréscimo do bloqueio do HTTPS?

O bloqueio do HTTPS só é possível através do squid transparente?

Obrigado por seu tutorial...

[17] Comentário enviado por rbonfim em 21/08/2015 - 12:20h

Lukan, O bloqueio de HTTPS por ser tanto transparente como autenticado! Vou pedir a moderação para adicionar o um exemplo do squid.conf!

__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"

[18] Comentário enviado por chaplinux em 21/08/2015 - 14:38h


E Eu? pq ninguem me responde? sobre o cache full no squid. ??

[19] Comentário enviado por lukan em 21/08/2015 - 20:36h


[17] Comentário enviado por rbonfim em 21/08/2015 - 12:20h

Lukan, O bloqueio de HTTPS por ser tanto transparente como autenticado! Vou pedir a moderação para adicionar o um exemplo do squid.conf!

__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"


Obrigado pela atenção...

[20] Comentário enviado por rbonfim em 24/08/2015 - 10:07h

Chaplinunx

Respondi na mesma junto com a pergunta do Yuri man!!
Mas veja ai:
"Tem sim jovem! Para o cachefull tem que compilar com a opção:
--enable-delay-pools"


__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"

[21] Comentário enviado por yurifc4 em 26/08/2015 - 14:16h

Sobre o DHCP novamente, existe alguma maneira de ver as máquinas e os ips que o servidor atribuiu? Dei uma pesquisada antes e tudo que encontrei foi o comando dhclient... no --help não diz muita coisa. Se alguém souber como ver essas informações?! Valeu.

[22] Comentário enviado por rbonfim em 27/08/2015 - 10:43h

Yuri, ja tentou o comando man dhclient.
Ajuda muito!

Mas vou pesquisar aqui te mando uma resposta! Abraços!
__#$
root@human:/#apt-get install -y brain
"Conhecimento é livre"

[23] Comentário enviado por yurifc4 em 03/09/2015 - 17:11h

Uma outra coisa... pq será que o isc-dhcp-server não inicia com o sistema? Aqui o meu "servidor" eu preciso desligá-lo e se no outro dia eu esqueço de startar o serviço, fica todo mundo sem conexão... já tentei o "# update-rc.d isc-dhcp-server defaults" mas ele me retorna: "using dependency based boot sequencing". Alguém tem ideia disso? Uso o Debian Wheezy. Abraço!

[24] Comentário enviado por wagnerdebian em 19/04/2016 - 09:57h

Bom dia, estou com um problema no meu, ele bloqueia HTTP e HTTPS.

Erro no navegador = ERR_CONNECTION_REFUSED

Minha config squid.conf

##################################

http_port 3128 intercept
https_port 3127 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/ssl_cert/onix.pem
acl broken_sites dstdomain .example.com
ssl_bump none localhost
ssl_bump none broken_sites
ssl_bump server-first all
sslcrtd_program /lib/squid3/ssl_crtd -s /var/lib/ssl_db -M 4MB
sslcrtd_children 5
visible_hostname Wagner Gonçalves

error_directory /usr/share/squid3/errors/pt-br

cache_mgr wagnergoncalves@costadosol.tv.br

cache_mem 64 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid3 2048 16 256
cache_access_log /var/log/squid3/access.log

refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl rede_local src 172.0.0.0/16
acl sites_bloqueados url_regex -i "/etc/squid3/sites_bloqueados"
acl liberados src "/etc/squid3/ips_liberados"
acl formato_arquivo url_regex -i "/etc/squid3/formato_arquivo"

http_access allow liberados
http_access deny sites_bloqueados
http_access deny formato_arquivo
http_access allow rede_local
http_access allow localhost

http_access deny all

#####################################


Regras de firewall que tenho no momento

#!/bin/bash
### BEGIN INIT INFO
# Propriedade: Script Firewall
# Requisição para start: $remote_fs $syslog
# Requisição para stop: $remote_fs $syslog
# Start padrão: 2 3 4 5
# Stop padrão:
# Descrição do arquivo: Script Firewall baseado em Iptables
### END INIT INFO

# Limpar módulos
iptables -Fd /etc
iptables -t nat -F
iptables -t mangle -F

# Proxy
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 3127

# Carrega os modulos
modprobe iptables
modprobe iptable_nat

# Masquerading IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

#Proteção contra pacotes danificados
iptables -A FORWARD -m unclean -j DROP

# abre portas
iptables -A INPUT -p tcp --destination-port 1080 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 1021 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT


################################

Observação, neste momento o servidor realiza NAT da seguinte forma:

eth0 = Internet
eth1 = rede interna

Saberiam me informar o que pode está ocorrendo?

Desde já agradeço.

[25] Comentário enviado por detneto em 30/05/2017 - 17:24h

Pessoal, estou recebendo este erro...
Sou iniciante, alguém poderia me ajudar?

sc-dhcp-server.service - ISC DHCP IPv4 server
Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor
Active: failed (Result: exit-code) since Ter 2017-05-30 15:05:08 ACT; 2min 22
Docs: man:dhcpd(8)
Process: 1189 ExecStart=/bin/sh -ec CONFIG_FILE=/etc/dhcp/dhcpd.conf;
Main PID: 1189 (code=exited, status=1/FAILURE)

Mai 30 15:05:08 servidor-radio sh[1189]: Configuration file errors encountered -
Mai 30 15:05:08 servidor-radio sh[1189]: If you think you have received this mes
Mai 30 15:05:08 servidor-radio sh[1189]: than a configuration issue please read
Mai 30 15:05:08 servidor-radio sh[1189]: bugs on either our web page at www.isc.
Mai 30 15:05:08 servidor-radio sh[1189]: before submitting a bug. These pages e
Mai 30 15:05:08 servidor-radio sh[1189]: process and the information we find hel
Mai 30 15:05:08 servidor-radio sh[1189]: exiting.
Mai 30 15:05:08 servidor-radio systemd[1]: isc-dhcp-server.service: Main process
Mai 30 15:05:08 servidor-radio systemd[1]: isc-dhcp-server.service: Unit entered
Mai 30 15:05:08 servidor-radio systemd[1]: isc-dhcp-server.service: Failed with
...skipping...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts