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

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


Considerações iniciais



Este artigo tem como principal objetivo orientar a implantação de um servidor para oferecer os serviços de proxy transparente, armazenamento/compartilhamento de arquivos e controle de acesso, além de servir a novos usuários do GNU/Linux como referência preliminar para estudo. O S.O. escolhido para implantação será a última versão estável do Debian 8, em virtude desta escolha os seguintes pacotes farão parte desta instalação:
  • Squid 3
  • ISC DHCP Server
  • CUPS
  • Samba
  • BIND 9
  • Sarg
  • NFS
  • NTP
  • Apache 2

Para a implantação do servidor utilizaremos como checklist as seguintes etapas:
  1. Configuração das interfaces de rede.
  2. Atualização do S.O. e instalação dos pacotes.
  3. Configuração do servidor DHCP.
  4. Definição de firewall e redirecionamento.
  5. Configuração do Squid e possibilidade de compilação para escuta da porta 443 (HTTPS).
  6. Ajustes no Sarg para gerar relatórios de acesso.

Configuração das interfaces de rede

As configurações das interfaces de rede em sistemas baseados em Debian são possíveis através do arquivo interfaces localizado na pasta /etc/network. Antes da edição deste arquivo serão necessárias as seguintes informações:
  • Qual a interface recebe o sinal da internet e qual a interface que será responsável por receber as requisições da rede local. Preferencialmente opte pela interface eth0 para receber o link com a internet e demais interfaces para prover a rede local.
  • Endereço IP do modem.
  • Definição da classe de IP para a rede local.

Todos os procedimentos devem ser realizados com a conta do superusuário e através da edição de arquivos de configuração via terminal. Neste roteiro as informações recolhidas foram as seguinte:
  • Interface eth0 - link com a internet
  • Interface eth1 - link com a rede local
  • Endereço IP do modem - 192.168.0.1
  • Classe de IP da rede interna - 172.16.0.0

Inicialmente é necessário a edição do arquivo interfaces. Abaixo temos um exemplo das configurações mediante as informações recolhidas, ambas as interfaces foram setadas com endereço IP estático. Pare o serviço de rede e efetue a configuração necessária:

# systemctl stop networking
# nano /etc/network/interfaces

# Este arquivo prove as configurações de Rede
#
# Interface Loopback
auto lo
iface lo inet loopback
#
# Configuração da Interface de rede primária
auto eth0
iface eth0 inet static
address 192.168.0.2
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
#
# Configuração da Interface de rede secundária
auto eth1
iface eth1 inet static
address 172.16.0.1
network 172.16.0.0
netmask 255.255.0.0
broadcast 172.16.255.255

Encerre a edição do arquivo e inicie os serviços de rede:

# systemctl start networking

Verifique com o comando ifconfig as configurações das interfaces:

# ifconfig
eth0  Link encap:Ethernet  Endereço de HW 08:00:27:0c:c3:73
          inet end.: 192.168.0.2  Bcast:192.168.0.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fe0c:c373/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:606 errors:0 dropped:0 overruns:0 frame:0
          TX packets:380 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:582316 (568.6 KiB)  TX bytes:33198 (32.4 KiB)

eth1  Link encap:Ethernet  Endereço de HW 08:00:27:77:c1:45
          inet end.: 172.16.0.1  Bcast:172.16.255.255  Masc:255.255.0.0
          endereço inet6: fe80::a00:27ff:fe77:c145/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:648 (648.0 B)

lo       Link encap:Loopback Local
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACKRUNNING  MTU:65536  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Verifique através do comando ping se há conectividade:

# ping -c 3 www.vivaolinux.com.br
PING www.vivaolinux.com.br (162.144.34.3) 56(84) bytes of data.
64 bytes from 162-144-34-3.unifiedlayer.com (162.144.34.3): icmp_seq=1 ttl=52 time=185 ms
64 bytes from 162-144-34-3.unifiedlayer.com (162.144.34.3): icmp_seq=2 ttl=52 time=186 ms
64 bytes from 162-144-34-3.unifiedlayer.com (162.144.34.3): icmp_seq=3 ttl=52 time=187 ms

--- www.vivaolinux.com.br ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 185.369/186.339/187.087/0.800 ms


Atualize o conteúdo do arquivo /etc/hosts de forma que a interface loopback (127.0.0.1) aponte para o hostname:

# cat /etc/hosts

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     onix ip6-onix ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

    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

Crimpagem de Conectores RJ-45

Problemas encontrados na adoção do IPv6

FAN Nagios - Tela inicial do Nagios

Docker e Flannel

Envio de e-mail criptografado pelo Zabbix usando Postfix

  
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