Firewall/Proxy (solução completa)

Nesse artigo tento passar da melhor forma possível uma receita para configuração de um firewall/proxy com grande ênfase em segurança.

[ Hits: 161.173 ]

Por: Tiago Henrique Pires em 08/07/2006 | Blog: http://tiagonux.blogspot.com


Instalando e configurando o squid-cache



Existem vários métodos para se instalar o Squid, tanto via source ou via pacotes das distros. Como estou usando Slackware, fiz o download do pacote do www.linuxpackages.net na versão estável.

# installpkg squid-stable.tgz

Por padrão ele gerou os seus arquivos de configuração no /etc/squid. Agora vamos configurar o arquivo squid.conf. Primeiramente vou falar que estarei usando o método de autenticação NCSA. Existem muitos outros como autenticação integrada com domínios (Active Directory e Samba, LDAP), mas como não possuo um servidor na rede, terei que usar o método NCSA.

Abaixo está o arquivo squid.conf comentado:

http_port 28021
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY
cache_mem 100 MB
cache_dir ufs /cache 2100 16 256
cache_access_log /var/lib/squid/logs/access.log
cache_log /var/lib/squid/logs/cache.log
cache_store_log /var/lib/squid/logs/store.log
auth_param basic program /usr/libexec/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 25          # smtp
acl Safe_ports port 443 563     # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 110         # POP
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
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 CONNECT method CONNECT
acl rede_interna src 10.0.0.0/32                           #Rede Interna
acl adm proxy_auth "/etc/squid/adm"                        
acl user1 proxy_auth "/etc/squid/usuarios/user1"           #Usuários
acl user2 proxy_auth "/etc/squid/usuarios/user2"
acl user3 proxy_auth "/etc/squid/usuarios/user3"
acl user4 proxy_auth "/etc/squid/usuarios/user4"
acl user5 proxy_auth "/etc/squid/usuarios/user5"
acl user6 proxy_auth "/etc/squid/usuarios/user6"
acl user7 proxy_auth "/etc/squid/usuarios/user7"
acl user8 proxy_auth "/etc/squid/usuarios/user8"
acl user9 proxy_auth "/etc/squid/usuarios/user9"
acl permit_user1 url_regex -i "/etc/squid/acessos/user1" #Acessos dos usuários
acl permit_user2 url_regex -i "/etc/squid/acessos/user2"
acl permit_user3 url_regex -i "/etc/squid/acessos/user3"
acl permit_user4 url_regex -i "/etc/squid/acessos/user4"
acl permit_user5 url_regex -i "/etc/squid/acessos/user5"
acl permit_user6 url_regex -i "/etc/squid/acessos/user6"
acl permit_user7 url_regex -i "/etc/squid/acessos/user7"
acl permit_user8 url_regex -i "/etc/squid/acessos/user8"
acl permit_user9 url_regex -i "/etc/squid/acessos/user9"
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow adm rede_interna
http_access allow user1 permit_user1 rede_interna #Efetivando a acl
http_access allow user2 permit_user2 rede_interna
http_access allow user3 permit_user3 rede_interna
http_access allow user4 permit_user4 rede_interna
http_access allow user5 permit_user5 rede_interna
http_access allow user6 permit_user6 rede_interna
http_access allow user7 permit_user7 rede_interna
http_access allow user8 permit_user8 rede_interna
http_access allow user9 permit_user9 rede_interna
http_access allow user10 permit_user10 rede_interna
http_access allow user11 permit_user11 rede_interna
http_access allow user12 permit_user12 rede_interna
http_access allow user13 permit_user13 rede_interna
http_access allow user14 permit_user14 rede_interna
http_access allow user15 permit_user15 rede_interna
http_access allow user16 permit_user16 rede_interna
http_access allow user17 permit_user17 rede_interna
http_access allow user18 permit_user18 rede_interna
http_access allow user19 permit_user19 rede_interna
http_access deny all
http_reply_access allow all
icp_access allow all

Deixa eu explicar os parâmetros acima. Criei uma pasta chamada "usuarios" dentro de /etc/squid. Nesta pasta há um arquivo para cada usuário. Também criei uma pasta chamada acessos, onde há um arquivo para cada usuário.

Na pasta acessos estão os arquivos que vou editar e colocar os sites permitidos para navegação de cada usuário. Por exemplo, se tivermos vários usuários com mesma permissão de acesso aos sites, simplesmente edito um arquivo da pasta usuarios e coloco todos em único usuário e na pasta "acessos" coloco os sites permitidos para esse grupo de usuários em um arquivo. Exemplo:

# vim /etc/squid/usuarios/user1

pedro

# vim /etc/squid/acessos/user1

www.vivaolinux.com.br
www.kernel.org
www.freebsd.org

Se repararmos veremos que "pedro" tem acesso aos sites que estão no arquivo user1 dentro de acessos.

Página anterior     Próxima página

Páginas do artigo
   1. Instalando a distro Slackware 10.2
   2. Configuração de rede (interfaces de rede), autenticação com ADSL para empresas
   3. Atualização de pacotes (Iptables e OpenSSH)
   4. Analisando o cenário da empresa para a o desenvolvimento das regras do firewall e do acesso a web-sites
   5. Configurando o firewall
   6. Instalando e configurando o squid-cache
   7. Acertando uns detalhes do Squid
   8. Instalando o IDS Portsentry
   9. Configurando o Raid 1 (software)
   10. Configurações Finais
Outros artigos deste autor

Roteamento de entrada/saída com iproute e iptables

Montando um servidor X com o Linux

Shared Config com Apache a la brasileira

Leitura recomendada

Script de firewall e análise de log

Servidor Firewall-Proxy utilizando CentOS, IPtables, Squid, DHCP, DNS e outros

L7-filter (funcionando) no Slackware 10.2

Segurança com iptables

Monitorando e bloqueando P2P com IPTABLES e IPP2P

  
Comentários
[1] Comentário enviado por thelinux em 08/07/2006 - 12:02h

Parabéns. Muto bom mesmo.
Excelente artigo.

[2] Comentário enviado por kest em 10/07/2006 - 12:34h

Companheiro seu artigo é muito bom mesmo. era exatamente o que eu precisava. Meus sinceros parabens!!!

[3] Comentário enviado por venon_dark em 12/07/2006 - 09:47h

Seguinte...
Ao rodar o comando squid -z apresenta o seguinte erro:

2006/07/11 13:20:25| strtokFile: /etc/squid/adm not found
2006/07/11 13:20:25| aclParseAclLine: WARNING: empty ACL: acl adm proxy_auth "/etc/squid/adm"
2006/07/11 13:20:25| ACL name 'SSL_ports' not defined!
FATAL: Bungled squid.conf line 60: http_access deny CONNECT !SSL_ports
Squid Cache (Version 2.5.STABLE9): Terminated abnormally.

Como resolver isto???

[4] Comentário enviado por tiagonux em 12/07/2006 - 10:15h

Vc chegou a criar o arquivo adm, e se estiver já existe algum usuário dentro do arquivo?

[5] Comentário enviado por venon_dark em 12/07/2006 - 10:36h

criei o arquivo e coloquei um usuário dentro.
agora está apresentando:
2006/07/12 10:32:38| ACL name 'SSL_ports' not defined!
FATAL: Bungled squid.conf line 60: http_access deny CONNECT !SSL_ports
Squid Cache (Version 2.5.STABLE9): Terminated abnormally.

[6] Comentário enviado por venon_dark em 12/07/2006 - 11:01h

tiagonux encontrei o erro e resolvi, foi erro humano...desculpe.
agora ele apresentou o seguinte erro:
2006/07/12 10:53:23| squid.conf line 61: http_access adm rede_interna
2006/07/12 10:53:23| aclParseAccessLine: expecting 'allow' or 'deny', got 'adm'.
2006/07/12 10:53:23| ACL name '#Efetivando' not defined!
FATAL: Bungled squid.conf line 62: http_access allow user1 permit_user1 rede_interna #Efetivando a acl
Squid Cache (Version 2.5.STABLE9): Terminated abnormally.

[7] Comentário enviado por venon_dark em 12/07/2006 - 11:29h

tiagonux
acertei todos os erros e agora já estou na faze de teste.
muito bom o seu artigo.

Parabéns e valeu pela atenção

[8] Comentário enviado por chia em 21/08/2006 - 21:54h

Parabéns, excelente artigo.

Artigo muito bom mesmo e está me ajudando muito, mas estou com um pequeno problema, ao colocar no arquivo rc.local a linha /firewall/rc.firewall, e ao reiniciar meu Slackware 10.2 aparece o erro "cannot execute binary file" e não funciona o firewall, o que devo fazer, podem me ajudar ?

Parabéns, obrigado

[9] Comentário enviado por tiagonux em 22/08/2006 - 07:39h

Seguinte, dê um chmod +x /firewall/rc.firewall que resolverá seu problema.

[10] Comentário enviado por chia em 22/08/2006 - 12:16h

Valeu, muito obrigado, vou verificar,

[11] Comentário enviado por caporto em 05/09/2006 - 18:00h

Em primeiro lugar quero lhe parabenizar pelo excente artigo, ficou show mesmo.
Vc conhece alguma ferramenta tipo PHP que me permita criar uma forma gráfica de manipular estes scripts do iptables e etc.
A minha ideia é criar uma forma grafica tipo as configurações dos modens adsl atuais, vc chama por um browse de internet e configura de forma visual.

[12] Comentário enviado por lukian2000 em 17/10/2006 - 12:03h

Cara no meu proxy tá dando a mesma mensagem que o arquivo não existe, mas ele tá lá e tem informações nele, já tentei mudar o caminho e colocálo em outra pasta mas a mensagem é sempre a mesma:
squid -k reconfigure
2006/10/17 11:57:23| strtokFile: /etc/squid/usuarios/master.txt not found
2006/10/17 11:57:23| strtokFile: /etc/squid/liberados/master.txt not found
2006/10/17 11:57:23| aclParseAclLine: WARNING: empty ACL: acl master_liberado url_regex -i "/etc/squid/liberados/master.txt"

Já tô ficando chateado com isso, alguém pode me ajudar???

[13] Comentário enviado por aprendiz_ce em 29/12/2006 - 15:23h

Olá tiagonux,

Parabéns pelo seu artigo. Muito bom mesmo!

Por gentileza me tire as seguintes dúvidas:

1) Tanto o PRIMEIRO como SEGUNDO disco devem utilizar o sistema de arquivos "ReiserFS" ou somente no SEGUNDO disco?

2) Para configurar o RAID 1 (software) não posso utilizar o sistema de arquivos "EXT3"?

3) Caso ocorra PANE em um dos disco, qual a forma correta de se recuparar os DADOS contidos nos DISCOS? O procedimento adotado fale para ambos os DISCOS ou não?

4) Existe queda de performance no servidor com o uso de RAID?

Muito obrigado pela sua atenção e aguardo retorno.

[14] Comentário enviado por tiagonux em 29/12/2006 - 21:14h

Vou responder em ordem:

1) O Sistema de arquivos do PRIMEIRO DISCO no caso pode até ser outro, sendo que isto não tenho certeza, vc poderia testar p/ a gente ai e comentar a experiência depois.
2)Sim vc pode utilizar perfeitamente o EXT3.
3)Bom se ocorrer de uma pane em um disco, vamos supor que seja o PRIMEIRO, só temos que averigar se vai estar tudo ok com a MBR do SEGUNDO e jumpear(configuracão da posição do disco SLAVE,MASTER) de acordo com PRIMEIRO disco e iniciar o mesmo. Isto deve-se ser manual pois é RAID via software, se tivessemos usando o RAID via hardware, poderiamos dependendo do servidor tirar o DISCO quebrado e colocar outro com o servidor em operação. Como utilizamos o RAID via software deveremos desligar o servidor e realizar a mudança manualmente, e colocar outro disco no lugar do quebrado.
4)Não existe não, vc poderará ter queda em servidores que terá muita escrita no DISCO, pois tudo o que é escrito em um é replicado p/ o outro via software. Já com o RAID de hardware a história é diferente, pois o sistema operacional nem sabe se está sob um tipo de RAID.

ISTO se tratando de RAID 1.

[15] Comentário enviado por aprendiz_ce em 30/12/2006 - 11:09h


Beleza!

Muito obrigado pela sua pronta atenção e esclarecimentos.

Um forte abraço e feliz 2007.


[16] Comentário enviado por jova2 em 07/01/2007 - 19:54h

Excelente artigo colega, ótima fonte de pesquisa....
vlw

[17] Comentário enviado por paulownet em 30/01/2007 - 21:26h

tiagonux
gostaria de saber quais os pacotes vc recomendaria na hr da instalação do slackware??

desde já agradeço


[18] Comentário enviado por brunosalmito em 25/04/2007 - 12:05h

Colega valeu mesmo tava precisando...
Abraço!

[19] Comentário enviado por alexon em 29/06/2007 - 16:23h

Esse Script serve para o velox! Eu tbm não entendi -> ifconfig eth1 200.x.x.7. Como faço para adaptar este script para o velox!

[20] Comentário enviado por marceloespindola em 07/07/2007 - 15:27h

Pessoal estou escrevendo um artigo aqui para o viva o linux sobre scrippt de firewall, ele está completo pois levei muito tempo para desenvolve-lo e tinha objetivo de reunir as principais soluções e dúvidas sobre firewall para este artigo, mas como quero construir um bom artigo ainda está em fase de construção para o vivaolinux, entretanto estou disponibilizando no endereço

http://marcelolinux.blogspot.com/2007/07/meu-primeiro-artigo-do-vivaolinux.html

os arquivos e o artigo referente a script de firewall completo.

[21] Comentário enviado por lucascatani em 04/05/2012 - 17:15h

Boa tarde Tiago. Fiquei com umas dúvidas no seu tutorial do iptables. Sobre essas variáveis. O que colocar nelas? Não tenho ip fixo minha rede é 192.168.0.0/24

# Variáveis\
GW="200.x.x.1" o que deve ser colocado aqui? se deixar assim da BAD IP
IP_EXT="200.x.x.7" o que deve ser colocado aqui? se deixar assim da BAD IP
REDE="10.0.0.0/32"

e da erro nessa regra tb (BAD ARGUMENT 0.0.0.0/0)

# Tudo que for proveniente da rede local e for para
# internet tem seu endereço alterado
iptables -t nat -A POSTROUTING -d 0.0.0.0/0 -s $REDE -j SNAT --to $IP_EXT


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts