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

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


A possibilidade de compilação para escuta da porta 443 (HTTPS)



Uma das grandes desvantagens com o proxy transparente é a escuta do protocolo HTTPS, em proxys autenticados o bloqueio/acesso à páginas acontece de acordo com as diretivas ligadas ao login do usuário, bloqueando ou permitindo acesso em sua requisição. A partir deste ponto será apresentada uma solução para a escuta do protocolo 443 redirecionado à porta 3127 do Squid.

Para compilação serão utilizados os binários da instalação corrente do Squid 3. A partir daqui utilizaremos a versão 3.5:

# wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.6.tar.gz

Descompacte o arquivo:

# tar xvfz squid-3.5.6.tar.gz

Acesse a pasta recém criada /usr/src/squid-3.5.6, resolva das dependências e instale os pacotes adicionais:

# apt-get build-dep squid3 && apt-get install libssl-dev build-essential

Execute o ./configure com as seguintes opções:

# ./configure --prefix=/usr --includedir=${prefix}/include --mandir=${prefix}/share/man --infodir=${prefix}/share/info --sysconfdir=/etc --localstatedir=/var --libexecdir=${prefix}/lib/squid3 --srcdir=. --datadir=/usr/share/squid3 --sysconfdir=/etc/squid3 --mandir=/usr/share/man --enable-icap-client --enable-ssl --enable-ssl-crtd --enable-follow-x-forwarded-for --enable-linux-netfilter --with-openssl --with-swapdir=/var/spool/squid3 --with-logdir=/var/log/squid3 --with-pidfile=/var/run/squid3.pid --with-filedescriptors=65536 --with-large-files --with-default-user=proxy

Aguarde o final do processo, interrompa a execução do Squid e execute:

# systemctl stop squid3
# make all && make install

Atualize as configurações no arquivo squid.conf adicionando as seguintes linhas:

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

Realize as cópias dos binários:

# mv /usr/sbin/squid3 /usr/sbin/squid3_old && mv /usr/sbin/squid /usr/sbin/squid3

Utilize o OpenSSL para gerar os certificados que devem ser importados para os clientes. A criação do certificado deve apontar para o caminho descrito no squid.conf:

# mkdir ssl_cert
# cd ssl_cert/
# openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout onix.pem -out onix.pem

Crie o arquivo que será importado para os clientes:

# openssl x509 -in onix.pem -outform DER -out onix.der

Atualize as diretivas do firewall:

#!/bin/bash
### BEGIN INIT INFO
# Provides: Script Firewall
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Decription: Script Firewall based on Iptables
### END INIT INFO

# Clean modules
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

# Masquerading IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Forward
echo 1 > /proc/sys/net/ipv4/ip_forward

Utilize o ssl_crtd para criar o diretório onde serão arquivados o cache de certificados dinâmicos:

# /lib/squid3/ssl_crtd -c -s /var/lib/ssl_db -M 4MB

Mude o grupo e o usuário do diretório para que o Squid possa realizar o cache:

# chown -R proxy:proxy /var/lib/ssl_db

Reinicie o Squid:

# 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-20 15:39:45 BRT; 3s ago
  Process: 9493 ExecStop=/etc/init.d/squid3 stop (code=exited, status=0/SUCCESS)
  Process: 9552 ExecStart=/etc/init.d/squid3 start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/squid3.service
           ├─1452 /usr/sbin/squid3 -YC -f /etc/squid3/squid.conf
           ├─1454 (squid-1) -YC -f /etc/squid3/squid.conf
           ├─1456 (logfile-daemon) /var/log/squid3/access.log
           └─1469 (pinger)

Jul 20 15:39:45 onix squid3[9552]: Starting Squid HTTP Proxy 3.x: squid3Creating Squid HTTP Proxy 3.x cache structure ... (warning).
Jul 20 15:39:45 onix squid3[9552]: 2015/07/20 15:39:45| Squid is already running! Process ID 1454
Jul 20 15:39:45 onix squid3[9552]: .


Importe o certificado onix.der para o cliente e verifique o acesso à páginas HTTPS através do log em /var/log/squid3/access.log:

# tail /var/log/squid3/access.log
1437524554.277    180 172.16.222.41 TCP_MISS/200 642 GET https://www.google.com.br/url? - ORIGINAL_DST/74.125.196.94 text/html
1437524554.277    180 172.16.222.41 TCP_MISS/200 642 GET https://www.google.com.br/url? - ORIGINAL_DST/74.125.196.94 text/html
1437524560.693    731 172.16.222.41 TAG_NONE/200 0 CONNECT 157.56.172.28:443 - ORIGINAL_DST/157.56.172.28 -
1437524560.693    731 172.16.222.41 TAG_NONE/200 0 CONNECT 157.56.172.28:443 - ORIGINAL_DST/157.56.172.28 -
1437524570.129   9412 172.16.222.41 TCP_MISS/302 1999 GET https://www.live.com/ - ORIGINAL_DST/157.56.172.28 text/html
1437524570.129   9412 172.16.222.41 TCP_MISS/302 1999 GET https://www.live.com/ - ORIGINAL_DST/157.56.172.28 text/html
1437524580.790    911 172.16.222.41 TAG_NONE/200 0 CONNECT 131.253.61.66:443 - ORIGINAL_DST/131.253.61.66 -
1437524580.790    911 172.16.222.41 TAG_NONE/200 0 CONNECT 131.253.61.66:443 - ORIGINAL_DST/131.253.61.66 -
1437524590.058   9250 172.16.222.41 TCP_MISS/200 9920 GET https://login.live.com/login.srf? - ORIGINAL_DST/131.253.61.66 text/html
1437524590.058   9250 172.16.222.41 TCP_MISS/200 9920 GET https://login.live.com/login.srf? - ORIGINAL_DST/131.253.61.66 text/html


Após a compilação aplique as configurações necessárias ao squid.conf.

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

Análise de Desempenho: Web API - Recursos técnicos

Envio de e-mail criptografado pelo Zabbix usando Postfix

Tutorial de instalação e configuração do CACIC 3.1.15

O fim está próximo

Monitorando Rede com Zabbix no Debian 7

  
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