Iptables + Proxy. Este é um tutorial completo dessas duas soluções básica para se aplicar em uma empresa. Abordarei: configuração do script de firewall, instalação e configuração do proxy Squid com autenticação por usuário, configuração do Sarg (para relatórios de sites acessados), configuração do Sarg na contrab (para geração automática de relatórios) e configuração do web server Apache.
O ambiente usado neste artigo consiste em uma VM (Virtual Machine ou Máquina Virtual), rodando Centos 5.5 64 bits com duas placas de redes. Uma para o link de Internet, e outra para a rede interna.
Testei e tenho em produção tudo que abordaremos neste artigo. Dúvidas, dicas e críticas construtivas são sempre bem-vindas.
Lista dos pacotes que utilizaremos:
Firewall: Iptables
Proxy: Squid 2.6 Stable
Relatórios de acesso a sites: Sarg 2.3.1
Web Server: Apache 2.2.3
Sistema Operacional: Centos 5.5 64 Bits
Tendo em vista que:
eth0 = Minha placa de rede INTERNA
eth1 = Minha placa de rede EXTERNA
192.168.1.0/24 = Cadeia de ips da minha rede interna
Instalação dos pacotes necessários
Primeiramente atualizaremos o sistema:
# yum update -y
Depois instalaremos os pacotes necessários que incluem bibliotecas GCC, Apache, PHP, Joe e Squid:
# yum install gcc* httpd php php-devel squid joe -y
Instalado todos os pacotes acima, chegou a hora do Sarg:
# cd /root/
# wget http://www.sfr-fresh.com/unix/privat/sarg-2.3.1.tar.gz
Depois descompactamos o Sarg e efetuamos sua instalação:
# tar -zxvf sarg-2.3.1.tar.gz
# cd sarg-2.3.1
# ./configure
# make && make install
Configuração do seu Firewall (Iptables)
O script que utilizaremos é simples, mas eficaz. Ele bloqueia TUDO e depois você tem que liberar o que é necessário para sua rede. No script teremos todos os comentários possíveis ajudando na sua interpretação:
Crie o arquivo:
# joe /etc/rc.d/rc.firewall
E nele, cole o que estiver abaixo:
#!/bin/sh ### Script criado por Lucas Possamai ###################################### ############################################################### ############################################################### ############ Define Variaveis ########################################
Fiz toda configuração de compartilhamento (regras do firewall, etc); configurei as placas e tudo certo.
As máquinas estão se vendo internamente, ou seja, se eu 'pingar' entre elas tudo certo. De fora, no meu SO principal, Ubuntu, consigo fazer acesso via SSH no centOS.
O que acontece é que quando dou o comando nslookup em um site de fora, ele, centOS, resolve beleza! Mas quando dou o ping, nada: 'detination host unreachable'. Ou seja, o centOS não está vendo a Internet, e isso não me deixa innstalar o servidor DHCP, que quero, nem qualquer programa e nem atualizar o centOS, porque preciso do acesso à Internet. No mais a Internet não chega nas máquinas da rede interna.
Meu modem é roteado, e como disse o SO principal é um Ubuntu.
[13] Comentário enviado por lpossamai em 11/07/2011 - 16:51h
Alex Resende:
Boa tarde, Alex Resende.
O erro que aparece, é devido à linha update.microsoft.com:443.
Tire o :443
aclParseAclLine: WARNING: empty ACL: acl sites_informatica url_regex -i "/etc/squid/regras/sites_liberados_informatica"
---Aqui, ele diz que o arquivo está em branco. Ponha algo no arquivo e salve.
aclParseAclLine: WARNING: empty ACL: acl sites_diretoria url_regex -i "/etc/squid/regras/sites_liberados_diretoria"
---Aqui, ele diz que o arquivo está em branco. Ponha algo no arquivo e salve.
[14] Comentário enviado por lpossamai em 11/07/2011 - 16:53h
comtudo:
Boa tarde comtudo.
Você instalou um servidor CENTOS, e em cima dele algumas máquinas virtuais.
Você utilizou o meu script de firewall, e não consegue pingar/navegar baixar nada no CENTOS?
[16] Comentário enviado por comtudo em 11/07/2011 - 22:34h
Boa noite Lucas
Sim é um servidor.
Então não cheguei a usar seu script visto que já tinha feito, mas a priori acertei o compartilhamento, as configurações das placas eth0 (IP dinâmico) e eth1 (IP estático), defini a eth1 como gateway, e tals.
É isso mesmo que acontece, não consigo pingar em nenhum site do centOS para a Internet, ou seja, para fora. Quando faço update, ou então tento instalar algum programa acontece esse erro:
Error: Cannot find a valid baseurl for repo: base
O que pode ser? Você acha que se eu usar o seu script pode solucionar?
[17] Comentário enviado por lpossamai em 11/07/2011 - 22:42h
Boa noite comtudo.
Então, como não foi usado meu script, peço que tire suas dúvidas nos canais correspondentes aqui no Viva o Linux: http://www.vivaolinux.com.br/comunidades/
[23] Comentário enviado por nogueira13 em 18/07/2011 - 18:21h
Olá Lucas, gostaria se fosse possível, você pudesse me indicar uma literatura para inciantes em redes, para eu começar a entender sobre redirecionamento de portas, como configurar duas câmaras IP dentro de minha rede interna na minha casa. Como posso atingir, de um endereço externo (nogueira13.dyndns.org, por exemplo) um endereço interno (IP mascarado) digitando http://nogueira13.dyndns.org/10.0.0.3 Sei que não é assim, mas coloquei só para exemplificar uma das minhas dúvidas. Por isto gostaria de uma literatura bem básica e ir avançando aos poucos. Sei que você poderia me indicar uma literatura em que eu possa me iniciar em redes, iptables e firewall etc.
Se puderes me ajudar ficarei muito agradecido.
Antonio Carlos
[24] Comentário enviado por lpossamai em 18/07/2011 - 22:38h
Boa noite, Antonio.
Olha.. achar algo que fala de tudo isso, num só lugar, é complicado.
Eu recomendo você ler o Guia Foca Linux ( http://www.guiafoca.org/ )
Lá, fala sobre muita coisa. Redes, iptables, conceitos básicos em linux, apache, etc...
Porém.. é muito material. Cabe à você ter paciência e ler tudo.
Caso queira saber mais sobre os assuntos, aconselho a procurar por assunto no google.
Exemplo, iptables linux o que é
[27] Comentário enviado por curtinaz em 20/07/2011 - 19:54h
Lucas,
Em primeiro lugar, parabens pelo esforço e pela presteza em estar compartilhando seu conhecimento.
Ficou excelente o artigo, segui passo a passo e esta funcionando beleza.
Estou apenas com duas perguntas,
Primeira pergunta:
- Nas estações que possuo Microsoft Outlook ao receber um email, não esta sendo possivel abrir os emails que tem conteudo web, não esta nem pedindo autenticação, simplesmente não aparece o conteudo, tens alguma dica neste caso?
Segunda pergunta:
Tens alguma sugestão de como colocar este proxy transparente mantendo a autenticação?, eu já tentei pelo natACL mas não rendeu, talvez por que eu esteja usando o Centos 64b, bom, se tiver alguma idéia agradeço
[28] Comentário enviado por djtornados em 20/07/2011 - 23:32h
Ola obrigados pela ajuda mas tenho algumas duvidas eu formatei o meu server e agora quando do o comando squid -z retorna =
bash: squid: command not found
e a outra duvida é a autenticação pois eu fiz tudo como esta no tutorial e quando vou conectar nao aprece nada para autenticar desde ja obrigado.
[29] Comentário enviado por lpossamai em 21/07/2011 - 08:45h
curtinaz, bom dia.
Obrigado pelos parabéns. Fico feliz em saber que ajudei.
Respondendo à Primeira pergunta: Você quer dizer que, quando recebe um e-mail que tenha um LINK externo, você não consegue abrir? Se é isto, sim.. o seu squid está bloqueando.
Você pode pedir para o usuário clicar no LINK, e ao mesmo tempo você fica monitorando o log do squid, com o log, tu poderá ver o porque que o SQUID está bloqueando, e efetuar a liberação. O log fica em: /var/log/squid/access.log
Respondendo à Segunda pergunta: Pelo que eu saiba, não tem como vc por proxy autenticado transparente. Se vc por transparente, ele fica sem autenticação.
[31] Comentário enviado por djtornados em 21/07/2011 - 20:17h
Ola Lucas obrigado pela atenção eu tenho instalado ate funciono antes de formatar agora com a inslação limpa começou estes erros :
Package 7:squid-2.6.STABLE21-6.el5.i386 already installed and latest version
Nothing to do
[root@studiocentos djtornados]# squid -z
bash: squid: command not found
[root@studiocentos squid]# /etc/init.d/squid start
Iniciando squid: [FALHOU]
[33] Comentário enviado por dtheny em 11/08/2011 - 09:07h
Estou com um problema, estou instalando meu Squid e tenho que usar agora os comandos ./configure e make e na hora de usar estes comandos vejam o que aparece:
para o " ./configure ": (ultimas linhas)
checking for g++... no
checking for c++... no
checking for gpp... no
checking for aCC... no
checking for CC... no
checking for cxx... no
checking for cc++... no
checking for cl.exe... no
checking for FCC... no
checking for KCC... no
checking for RCC... no
checking for xlC_r... no
checking for xlC... no
checking for C++ compiler default output file name...
configure: error C++ compiler cannot create executables
See `config.log' for more details.
configure: error: ./configure failed for lib/libTrie
[root@localhost squid]#
para o " make "
[root@localhost squid]# make
Making all in lib
make[1]: Entrando no diretório `/usr/local/squid/lib'
Making all in libTrie
make[2]: Entrando no diretório `/usr/local/squid/lib/libTrie'
make[2]: *** Sem regra para processar o alvo `all'. Pare.
make[2]: Saindo do diretório `/usr/local/squid/lib/libTrie'
make[1]: ** [all-recursive] Erro 1
make[1]: Saindo do diretório `/usr/local/squid/lib'
make: ** [all-recursive]Erro 1
[root@localhost squid]#
Atualmente estou usando os CentOs e meu Squid é o 3.0 Stable 25
Como poderei solucionar estes problemas.
Grato a todos.
[37] Comentário enviado por oliveiraalberto em 06/12/2011 - 16:12h
Boa Tarde
Otimo seu artigo cara, ajudou muito.
Mas tive erros, se alguem puder me ajudar...
######Segue erros#####
[root@serverlinux squid]# /etc/init.d/squid start
Iniciando o squid: [FALHOU]
2011/12/06 15:58:26| Processing Configuration File: /etc/squid/squid.conf (depth 0)
2011/12/06 15:58:26| WARNING: Netmasks are deprecated. Please use CIDR masks instead.
2011/12/06 15:58:26| WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges.
2011/12/06 15:58:26| WARNING: For now we will assume you meant to write /24
2011/12/06 15:58:26| ERROR: '0.0.0.0/0.0.0.0' needs to be replaced by the term 'all'.
2011/12/06 15:58:26| SECURITY NOTICE: Overriding config setting. Using 'all' instead.
2011/12/06 15:58:26| WARNING: (B) '::/0' is a subnetwork of (A) '::/0'
2011/12/06 15:58:26| WARNING: because of this '::/0' is ignored to keep splay tree searching predictable
2011/12/06 15:58:26| WARNING: You should probably remove '::/0' from the ACL named 'all'
2011/12/06 15:58:26| WARNING: Netmasks are deprecated. Please use CIDR masks instead.
2011/12/06 15:58:26| WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges.
2011/12/06 15:58:26| WARNING: For now we will assume you meant to write /32
2011/12/06 15:58:26| WARNING: (A) '127.0.0.1' is a subnetwork of (B) '::/0'
2011/12/06 15:58:26| WARNING: because of this '127.0.0.1' is ignored to keep splay tree searching predictable
2011/12/06 15:58:26| WARNING: You should probably remove '127.0.0.1' from the ACL named 'all'
2011/12/06 15:58:26| cache_cf.cc(362) parseOneConfigFile: squid.conf:20 unrecognized: ';'
2011/12/06 15:58:26| cache_cf.cc(362) parseOneConfigFile: squid.conf:21 unrecognized: ';'
2011/12/06 15:58:26| cache_cf.cc(362) parseOneConfigFile: squid.conf:22 unrecognized: ';'
2011/12/06 15:58:26| cache_cf.cc(362) parseOneConfigFile: squid.conf:23 unrecognized: ';'
2011/12/06 15:58:26| cache_cf.cc(362) parseOneConfigFile: squid.conf:24 unrecognized: ';'
2011/12/06 15:58:26| cache_cf.cc(362) parseOneConfigFile: squid.conf:25 unrecognized: ';'
2011/12/06 15:58:26| cache_cf.cc(362) parseOneConfigFile: squid.conf:27 unrecognized: ';'
2011/12/06 15:58:26| cache_cf.cc(362) parseOneConfigFile: squid.conf:28 unrecognized: ';'
2011/12/06 15:58:26| cache_cf.cc(362) parseOneConfigFile: squid.conf:29 unrecognized: ';'
2011/12/06 15:58:26| cache_cf.cc(362) parseOneConfigFile: squid.conf:30 unrecognized: ';'
FATAL: auth_param basic program /usr/lib/squid/ncsa_auth: (2) No such file or directory
Squid Cache (Version 3.1.4): Terminated abnormally.
CPU Usage: 0.015 seconds = 0.007 user + 0.008 sys
Maximum Resident Size: 22048 KB
Page faults with physical i/o: 0
[41] Comentário enviado por vinicius.m.r em 28/02/2012 - 17:47h
Lucas parabens pelo seu tutorial!
Mas estou com problema quand executo o comando squid-z aparece o segunte erro.
2012/02/28 17:46:15| WARNING: Netmasks are deprecated. Please use CIDR masks instead.
2012/02/28 17:46:15| WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges.
2012/02/28 17:46:15| WARNING: For now we will assume you meant to write /24
2012/02/28 17:46:15| WARNING: Netmasks are deprecated. Please use CIDR masks instead.
2012/02/28 17:46:15| WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges.
2012/02/28 17:46:15| WARNING: For now we will assume you meant to write /24
2012/02/28 17:46:15| WARNING: (A) '10.1.1.0/24' is a subnetwork of (B) '::/0'
2012/02/28 17:46:15| WARNING: because of this '10.1.1.0/24' is ignored to keep splay tree searching predictable
2012/02/28 17:46:15| WARNING: You should probably remove '10.1.1.0/24' from the ACL named 'all'
2012/02/28 17:46:15| Warning: empty ACL: acl usuariosMSN proxy_auth
2012/02/28 17:46:15| WARNING: '.msn.com' is a subdomain of '.msn.com'
2012/02/28 17:46:15| WARNING: because of this '.msn.com' is ignored to keep splay tree searching predictable
2012/02/28 17:46:15| WARNING: You should probably remove '.msn.com' from the ACL named 'msn_domains'
2012/02/28 17:46:15| WARNING: '.hotmail.com' is a subdomain of '.hotmail.com'
2012/02/28 17:46:15| WARNING: because of this '.hotmail.com' is ignored to keep splay tree searching predictable
2012/02/28 17:46:15| WARNING: You should probably remove '.hotmail.com' from the ACL named 'msn_domains'
2012/02/28 17:46:15| WARNING: '.microsoft.com' is a subdomain of '.microsoft.com'
2012/02/28 17:46:15| WARNING: because of this '.microsoft.com' is ignored to keep splay tree searching predictable
2012/02/28 17:46:15| WARNING: You should probably remove '.microsoft.com' from the ACL named 'msn_domains'
2012/02/28 17:46:15| cache_cf.cc(364) parseOneConfigFile: squid.conf:54 unrecognized: 'update.microsoft.com'
2012/02/28 17:46:15| aclParseAclList: ACL name 'localhost' not found.
FATAL: Bungled squid.conf line 83: http_access allow localhost
Squid Cache (Version 3.1.10): Terminated abnormally.
CPU Usage: 0.044 seconds = 0.016 user + 0.028 sys
Maximum Resident Size: 22656 KB
Page faults with physical i/o: 0