ÍNDICE

Firewall para uma Rede interna
Firewall com DMZ
Explicações sobre Firewall
Entendimento do Firewal
Firewall Simples para uma rede interna
Repasses da rede interna
Backups

sábado, 3 de abril de 2010

Proxy - Instalação e Configuração

Inicialmente vamos instalar o pacote do proxy.

[root@fw ~]# yum install squid

Libere no SELinux para que o squid possa realizar conexões via rede.

[root@fw ~]# setsebool -P squid_connect_any 1

Vamos iniciar o nosso proxy para ver se ele vai iniciar corretamente.

[root@fw ~]# /etc/init.d/squid start

Para ver se o proxy iniciou e está esperando requisições na porta padrão usamos o comando

[root@fw ~]# netstat -lntu

Devemos procurar pela linha

tcp    0    0    0.0.0.0:3128    0.0.0.0:*    OUÇA

Para garantir que ele irá iniciar durante a inicialização da máquina digite:

[root@fw ~]# chkconfig squid on

Agora vamos fazer algumas alterações no proxy, para isto edite o arquivo de configuração.

[root@fw ~]# vim /etc/squid/squid.conf

Requisições 

Altere a linha

http_port 3128

para

http_port 192.168.0.1:3128

Isto fará o squid esperar requisições somente no ip 192.168.0.1, que é a interface de nossa rede interna.

Mensagens de Erro

Troque as mensagens de erros para português, para isto procure por

error_directory /usr/share/squid/errors/English

e troque por

error_directory /usr/share/squid/errors/Portuguese

Memória Cache

Outra variável a ser alterada é a quantidade de memória a ser usada pelo squid, vamos usar 16MB, para isto troque

cache_mem 8 MB

por

cache_mem 16 MB

Altere conforme sua necessidade

Diretório de Armazenamento do Cache

O diretório onde o squid armazena o cache é definido pela variável cache_dir e por padrão fica em /var/spoo/squid, sendo o padrão um espaço de 100MB. Este diretório contém 16 diretórios e 256 subdiretórios cada um. Caso deseje armazenar mais objetos então aumente de 100MB para, por exemplo, 5000MB.

Arquivos de Log

Os arquivos de log ficam em /var/log/squid, sendo o arquivo principal o access.log onde são registrados todos acessos realizados no squid. É comum monitorar o uso do squid com o comando abaixo.

[root@fw ~]# tail -f /var/log/squid/access.log

Os campos que são visualizados no log são:

  • Campo  1: Timestamp - data de acesso em segundos desde 01/01/1970
  • Campo  2: Elapsed - tempo gasto para a requisição em milisegundos.
  • Campo  3: Client - IP do cliente que está fazendo a requisição.
  • Campo  4: Action/Code - Tipo de requisição e Código de retorno do HTTP
  • Campo  5: Size - Total de dados em bytes enviados ao cliente
  • Campo  6: Method - Método de requisição HTTP (GET, POST, etc)
  • Campo  7: URI - URI requisitada
  • Campo  8: Ident - identificação do usuário.
  • Campo  9: Hierarchy - descrição de como  ee onde o objeto foi adquirido.
  • Campo 10: From - servidor de onde o objeto foi adquirido.
  • Campo 11: Content - Tipo de conteúdo do objeto.

Uma visão detalhada pode ser visualizada em

http://wiki.squid-cache.org/SquidFaq/SquidLogs#access.log_native_format_in_detail

Se quiser visualizar somente o ip e a url acessada pode usar o comando a seguir

[root@fw ~]# tail -f /var/log/squid/access.log | awk '{print $3, $7}'

Firewall

Agora entre no script do firewall e libere o acesso da rede interna ao nosso servidor.

[root@fw ~]# vim /root/bin/firewall.sh

Abaixo da linha

iptables –A INPUT –p tcp --dport 22 -m state --state NEW -j ACCEPT

inclua

iptables –A INPUT –p tcp --dport 3128 -i $INT_IF -m state --state NEW –j ACCEPT

Como  colocamos o proxy para fazer o controle de acesso à Internet vamos bloquear o acesso direto pelo firewall e liberar as somente as portas de email, para isto troque a linha

iptables –A FORWARD -i $INT_IF -o $EXT_IF -m state --state NEW –j ACCEPT

para

iptables –A FORWARD -i $INT_IF -o $EXT_IF -p tcp -m multiport --dports 25,110 -m state --state NEW –j ACCEPT

Recarregue o firewall

[root@fw ~]# firewall.sh

Esta regra irá liberar as requisições entrarem pela interface de rede interna.

Criação de Acesso para a Rede Interna

Vamos criar uma regra para acesso da rede interna, para isto edite o arquivo de configuração do proxy.

[root@fw ~]#vim /etc/squid/squid.conf

Procure pela linha

http_access allow localhost
http_access deny all

e coloque as linhas acima delas as linhas abaixo.

acl redeInterna src 192.168.0.0/24
http_access allow redeInterna

Isto irá liberar acesso para os os IPs nossa rede interna.

Recarregue o proxy.

[root@fw ~]# squid -k reconfigure

Para testar o acesso da rede interna inicie uma máquina virtual que seja cliente de nosso servidor, coloque as configurações de proxy no navegador da internet e tente fazer um acesso. Para monitorar os acessos lembre de usar o comando abaixo.

[root@fw ~]# tail -f /var/log/squid/access.log

Teste de bloqueio

Para testar um bloqueio vamos criar uma regra que irá somente deixar acessar o domínio .google.com.br.
Para isto edite o arquivo do proxy

[root@fw ~]# vim /etc/squid/squid.conf

e altere as definições feitas anteriormente colocando a acl do google onde definimos a acl redeInterna.

acl redeInterna src 192.168.0.0/24
acl soGoogleBR dstdomain .google.com.br

http_access allow redeInterna soGoogleBR

Após editado e salvo o arquivo recarregue o squid com o comando abaixo.

[root@fw ~]# squid -k reconfigure

Iniciei uma máquina virtual cliente e tente acessar o site www.google.com.br, depois tente acessar o site www.microsoft.com.br
No primeiro caso o acesso foi liberado e apareceu no log como:

1270001157.829 1122 192.168.0.10 TCP_MISS/200 6189 GET http://www.google.com.br/ - DIRECT/64.233.163.104 text/html

No segundo caso o acesso foi negado e apareceu no log como:

1270001263.951 3 192.168.0.10 TCP_DENIED/403 1442 GET http://www.microsoft.com.br/ - NONE/- text/html

Desta maneira podemos ver que o site do google foi liberado e os demais estão bloqueados.

Agora vamos criar um arquivo que conterá diversos domínios que serão liberados.
Para isto crie o diretório /etc/squid/regras

[root@fw ~]# mkdir /etc/squid/regras

Troque as permissões de dono e grupo para que o squid possa ler.

[root@fw ~]# chown squid:squid /etc/squid/regras

Crie o arquivo com os domínios liberados

[root@fw ~]# vim /etc/squid/regras/dominiosLiberados.txt

Coloque neste arquivo os seguintes domínios:

.google.com.br
.terra.com.br
.trrsf.com.br
.microsoft.com
.microsoft.com.br

Saia e salve.

Edite o arquivo do squid.

[root@fw ~]# vim /etc/squid/squid.conf

Altere os valores do exemplo anterior para o exemplo abaixo

acl redeInterna src 192.168.0.0/24
acl dominiosLiberados dstdomain "/etc/squid/regras/dominiosLiberados.txt"

http_access allow redeInterna dominiosLiberados

Saia, salve e recarregue o proxy

[root@fw ~]# squid -k reconfigure

Na máquina cliente tente acessar estes quatro domínios que foram colocados no arquivo e outros mais.
Veja o arquivo de log enquanto acessa os sites.

[root@fw ~]# tail -f /var/log/squid/access.log

Para criarmos bloqueios baseados em palavras que estejam na URI pode usar o exemplo abaixo.

acl redeInterna src 192.168.0.0/24
acl dominiosLiberados dstdomain "/etc/squid/regras/dominiosLiberados.txt"
acl palavrasBloqueadas url_regex -i "/etc/squid/regras/palavrasBloqueadas.txt"

http_access deny redeInterna palavrasBloqueadas
http_access allow redeInterna dominiosLiberados

Neste caso a análise é realizada na ordem que são criadas, ou seja, primeiro avalia palavrasBloqueadas e depois dominios Liberados.
Coloque a palavra terra no arquivo /etc/squid/regras/palavrasBloqueadas.txt e tente acessar o site www.terra.com.br que está em dominiosLiberados.

Mais informações sobre o squid pode ser adquirida em http://www.squid-cache.org/ e http://www.visolve.com/squid/.

Postem seus comentários caso tenha algum problema para implementação, para correção do documento.

4 comentários:

  1. Ao tentar iniciar o proxy pela primeira vez ocorreu uma falha e o seguinte log de erro:

    [root@FW-Fox etc]# service squid start [FALHOU]
    Starting squid: /etc/init.d/squid: line 53:2716 Aborted $SQUID $SQUID_OPTS >>/var/log/squid/squid.out 2>&1

    Log:
    FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'

    consegui solucionar modificando a opção "visible_hostname" dentro de squid.conf da seguinte forma:

    visible_hostname HOSTNAME_DA_MAQUINA

    Não tenho certeza se este passo é necessário para a configuração do proxy ou se a falha ocorreu devido a alguma mudança que eu tenha realizado no hostname da minha VM.
    Fica a dica para o caso de alguém passar pelo mesmo problema.

    Juliano Soares Araujo

    ResponderExcluir
  2. Este erro de falha não é causado pela falta de configuração do visible_hostname.
    Teria que analisar os logs.

    ResponderExcluir
  3. instalei um disco r´gido novo para armazenar cache do squid e os log do firewall e do squid, coloquei o endereço da pastas nas configurações do squid
    /media/DADOS/squid/cache, troquei o grupo da pastas e o dono para squid mas quando vou carregar o squid aparece tal informação:

    Nov 6 14:51:24 Genesis squid[3308]: Failed to make swap directory /media/DADOS/squid/: (13) Permission denied
    Nov 6 14:51:24 Genesis squid[3309]: cache_dir /media/DADOS/squid/: (13) Permission denied


    o que mais devo fazer para que o squid rode o cache em outro disco

    ResponderExcluir
  4. Para facilitar desabilite o selinux como realizado no material sobre servidor web.

    [root@web1 ~]# setenforce Permissive

    Altere para que o selinux entre no modo permissivo na inicialização do servidor

    [root@web1 ~]# vim /etc/sysconfig/selinux

    Troque a variável

    SELINUX=enforcing

    por

    SELINUX=permissive

    ResponderExcluir