[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
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
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
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
.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"
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
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.
Ao tentar iniciar o proxy pela primeira vez ocorreu uma falha e o seguinte log de erro:
ResponderExcluir[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
Este erro de falha não é causado pela falta de configuração do visible_hostname.
ResponderExcluirTeria que analisar os logs.
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
ResponderExcluir/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
Para facilitar desabilite o selinux como realizado no material sobre servidor web.
ResponderExcluir[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