Por: Elton Guedes Rios
Não possuo conhecimento técnico o suficiente pra ficar aqui dando explicações, por isso vou me limitar a demonstrar um exemplo (que é na verdade a minha própria rede doméstica) e daí cada um pode “viajar” e criar suas próprias configurações, adaptando à suas redes e aprimorando ainda mais. Lembrem-se que tudo que aqui está descrito pode corresponder a maneira mais arcaica de se fazer determinada tarefa, visto que estou aprendendo.
Possuo quatro máquinas (além do CL/BFW), a saber:
a. A minha (principal) 192.xxx.yyy.10
b. Matheus (filho) 192.xxx.yyy.11
c. Anna Paula (filha) 192.xxx.yyy.12
d. Wellington (filho) 192.xxx.yyy.13
O que desejo??
1. Quero que a navegação para minha máquina fique sempre liberada, sem qualquer restrição;
2. Que nas máquinas dos meus filhos a conexão à internet fique liberada nos seguintes horários:
a. Segunda a Quinta, das 13:30 às 23:00h
b. Das 13:30h de sexta até 22:30h de domingo
3. Que o MSN só esteja liberado nas máquinas dos filhos nos seguintes horários:
a. Segunda a Sexta, das 13:30 às 18:00h e das 21:00 às 22:30h
b. Sábado e Domingo, das 09:00 às 12:00h e das 15:00 às 20:00h
1. Poder, excepcionalmente bloquear ou liberar apenas uma máquina.
As ACL permitem especificar endereços de origem ou destino, domínios, horários, usuários, portas ou métodos de conexão ao Proxy, que servirão de base para permitir ou negar o acesso baseando-se em conjuntos dessas ACL's. Isto permite uma grande flexibilidade na configuração do SQUID: podemos, por exemplo, especificar quais endereços podem ser acessados, quais não podem ser acessados, que certo endereço somente pode ser acessado em determinado horário, que um usuário somente pode acessar a partir de uma maquina especifica, que um protocolo pode ou não ser utilizado, ou qualquer combinação dessas permissões/restrições.
O Squid já vem com algumas ACL's pré-determinadas no squid.conf, porém você deverá criar outras ACLs que correspondam a suas necessidades. Aqui vou falar apenas das ACLs adicionais, considerando que as básicas já tenham sido feitas.
É necessário primeiro criar as ACLs para depois criar as REGRAS.
Eu utilizo o PUTTY para criar ou editar arquivos.
No SQUID.CONF vou criar as ACLs necessárias:
1) Primeiro vou criar uma para determinar a minha rede:
acl rede_interna src 192.xxx.yyy.0/24
| | | |
| | | `--> Domínio da ACL
| | |
| | `----------> Tipo de ACL
| |
| `---------------------> Nome da ACL
|
`-----------------------------> Comando de criação de ACL
2) Agora vou dividir a minha rede em duas partes (administrador e filhos):
- Código: Selecionar todos
acl administrador src 192.xxx.yyy.10
- Código: Selecionar todos
acl filhos src 192.xxx.yyy.11 192.xxx.yyy.12 192.xxx.yyy.13
A ACL “administrador” tem o IP da minha máquina, enquanto a ACL “filhos” tem os IPs das outras três máquinas.
3) Hora de censurar:
- Código: Selecionar todos
acl bloqueia_sites url_regex -i "/usr/local/squid/etc/sites/bloqueados"
Tenho que criar, na pasta "/usr/local/squid/etc/sites/", um arquivo que será denominado “bloqueados”, no qual cadastrarei os sites que quero proibir.
OBS: url_regex é um outro tipo de ACL.
4) É chegada a hora do controle de horários:
- Código: Selecionar todos
acl seg_qui time MTWH 13:30-23:00
- Código: Selecionar todos
acl sexta time F 13:30-24:00
- Código: Selecionar todos
acl sabado time A 00:00-24:00
- Código: Selecionar todos
acl domingo time S 00:00-23:40
É bom explicar que time é também mais um tipo diferente de ACL, usado para especificar dias da semana e horários. Os dias da semana são definidos através de letras que os representam, e os horários através de intervalos na forma hora:minuto_inicio-hora:minuto_final.
Os dias da semana são especificados assim: S - Sunday (Domingo), M - Monday (Segunda-Feira), T - Tuesday (Terça-Feira), W - Wednesday (Quarta-Feira), H - Thursday (Quinta-Feira), F - Friday (Sexta-Feira) e A - Saturday (Sábado);
A primeira ACL ( “seg_qui” ) determina a faixa, de segunda a quinta (MTWH), nos horários de 13:30 às 23:00h.
As demais são para completar aquelas premissas que defini lá em cima (em “O que desejo??”) .
5) Criei mais sete ACLs que ficam, a princípio, comentadas:
- Código: Selecionar todos
# Bloqueia Matheus, Anna Paula e Wellington
- Código: Selecionar todos
# acl rede_interna src 192.xxx.yyy.10
- Código: Selecionar todos
# Bloqueia Matheus / Libera Anna Paula e Wellington
- Código: Selecionar todos
# acl rede_interna src 192.xxx.yyy.10 192.xxx.yyy.12 192.xxx.yyy.13
- Código: Selecionar todos
# Bloqueia Anna Paula / Libera Matheus e Wellington
- Código: Selecionar todos
# acl rede_interna src 192.xxx.yyy.10 192.xxx.yyy.11 192.xxx.yyy.13
- Código: Selecionar todos
# Bloqueia Wellington / Libera Matheus e Anna Paula
- Código: Selecionar todos
# acl rede_interna src 192.xxx.yyy.10 192.xxx.yyy.11 192.xxx.yyy.12
- Código: Selecionar todos
# Libera Matheus / Bloqueia Anna Paula e Wellington
- Código: Selecionar todos
# acl rede_interna src 192.xxx.yyy.10 192.xxx.yyy.11
- Código: Selecionar todos
# Libera Anna Paula / Bloqueia Matheus e Wellington
- Código: Selecionar todos
# acl rede_interna src 192.xxx.yyy.10 192.xxx.yyy.12
- Código: Selecionar todos
# Libera Wellington / Bloqueia Matheus e Anna Paula
- Código: Selecionar todos
# acl rede_interna src 192.xxx.yyy.10 192.xxx.yyy.13
Nestas ACLs eu crio um grupo “rede_interna” excluindo apenas uma máquina diferente para cada caso (sempre mantendo a minha). Isso eu usarei mais tarde quando quiser forçar a liberação ou bloqueio de uma máquina específica.
Vale ressaltar que os comentários “libera” ou “bloqueia” nas linhas acima são apenas para facilitar o entendimento, afinal o que vai realmente liberar ou bloquear é a diretiva que vamos estabelecer daqui a pouco.
6) Agora chegou o momento de que usar estas ACLs para efetivamente bloquear ou liberar acesso, e a diretiva que faz isso e o http_access:
Isso não pode ser feito em qualquer lugar, o squid é rigoroso com a ordem dos parâmetros. A ordem entre as diretivas ACL não é importante, pois elas por padrão são do tipo "OU", ou seja: uma conexão pertencerá a uma ACL se qualquer um dos parâmetros coincidir.
Para as diretivas http_access a coisa funciona diferente, o Squid lê as diretivas de CIMA para BAIXO, parando a comparação na primeira que coincidir. Além disso, as diretivas http_access são do tipo "E": para que a diretiva entre em ação, a conexão tem de estar coincidindo com TODAS as ACL's especificadas.
As regras são interpretadas da seguinte forma:
- Código: Selecionar todos
http_access allow ACL1 E ACL2 E ACL3
- Código: Selecionar todos
http_access allow ACL4 E ACL5 E ACL1
OBS: O uso de “E” e “OU” é apenas ilustrativo: não vá inseri-los no arquivo de configuração.
Por esta razão é que neste momento é muito importante a seqüência correta das instruções. Como já disse, não importa a ordem das ACLs, mas temos que colocar as diretivas http_access no local certo pois caso contrário vai dar tudo errado.
7) Criando as diretivas http_acces:
Imaginemos agora que o squid recebe uma solicitação pra acessar um determinado endereço na internet.
Então primeiramente vou criar uma diretiva que verifica se o site que se está querendo visitar faz parte dos “bloqueados”.
http_access deny bloqueia_sites
| | |
| | `-------------> ACL(s) a que se aplica a regra
| |
| `--------------------> allow/deny (permite/nega)
|
`------------------------------> Comando de permissão.
Se for site “proibido” torna esta regra VERDADEIRA e a navegação é bloqueada (isso vale inclusive para a minha máquina) e pronto. Caso contrário vamos prá regra seguinte (lembra do “E” e do “OU” mencionados acima?):
8) Não é site proibido, então vamos ver quem está acessando:
- Código: Selecionar todos
http_access allow administrador
Veja que esta regra libera acesso à ACL administrador (que só contem o IP da minha máquina). Se for minha máquina o acesso é liberado, mas se não for teremos que partir para outras verificações, assim vamos pra próxima regra.
9) Não é a minha máquina então vamos ver quem é:
- Código: Selecionar todos
http_access allow filhos seg_qui
Caso a máquina solicitante seja uma das definidas na ACL “filhos” E se estiver dentro do dia/horário estabelecidos na ACL “seg_qui” o acesso é liberado. Basta que uma dessas condições não seja atendida prá tornar essa regra FALSA e aí passamos para a seguinte.
10) Vou repetir esta verificação anterior para cada ACL referente a horário:
- Código: Selecionar todos
http_access allow filhos sexta
- Código: Selecionar todos
http_access allow filhos sabado
- Código: Selecionar todos
http_access allow filhos domingo
Mesma interpretação da anterior.
11) Bom, neste momento todas as restrições as quais estão sujeitas as máquinas da minha rede já foram verificadas, e se nenhuma delas foi VERDADEIRA, significa que posso liberar o acesso a elas, certo?
- Código: Selecionar todos
http_access allow rede_interna
Esta regra libera acesso a todas as máquinas da minha rede (determinadas na ACL “rede_interna”). Mas se por acaso a solicitação de acesso tiver se originado em alguma máquina que não faça parte da minha rede o que vai acontecer? Esta regra se tornará FALSA e ocorrerá o bloqueio.
12) Agora chega, né? Me dou por satisfeito e não quero verificar mais nada. O que não atendeu nenhuma destas regras eu quero descartar e “ponto final”.
- Código: Selecionar todos
http_access deny all
A ACL “all” é uma das básicas e já deve estar setada da seguinte forma:
- Código: Selecionar todos
acl all src 0.0.0.0/0.0.0.0
Já estou com o SQUID preparado pra parte da função de controle. Digo parte porque tem coisas que, se ele faz, eu ainda não sei como, por isso vou me utilizar de outros recursos pra completar a tarefa.
Lá em “O que desejo??” (bem no início do texto), coloquei quatro itens. Os dois primeiros já foram resolvidos com as configurações acima, realizadas no squid. Agora vou tentar resolver os outros dois.
13) Bloquear o MSN em determinados horários para determinadas máquinas.
Tenho pesquisado e percebido que bloquear o MSN é tarefa árdua pois o “bichinho” tá sempre encontrando um jeito de “escorregar”, mas me utilizei de todos os comandos que encontrei e que têm esta finalidade .
Ainda no squid é possível criar algumas ACLS e suas respectivas diretivas http_access para efetuar este bloqueio. Consegui isto na internet mas não cheguei a testar pois logo fui testar o POLIPO. Pode-se combina-las com as ACls de horários.
- Código: Selecionar todos
acl msn dstdomain loginnet.passport.com
- Código: Selecionar todos
http_access deny msn
- Código: Selecionar todos
acl msnmessenger url_regex -i gateway.dll
- Código: Selecionar todos
acl MSN req_mime_type -i ^application/x-msn-messenger$
- Código: Selecionar todos
http_access deny msnmessenger
- Código: Selecionar todos
http_access deny MSN
- Código: Selecionar todos
Bloqueando WebMensseger
- Código: Selecionar todos
acl webmsn dstdomain webmessenger.msn.com
- Código: Selecionar todos
http_access deny webmsn
14) Agora vou fazer isso usando IPTABLES e o CRON.
Já ouvi dizer que é possível estabelecer os horários também com IPTABLES mas sinceramente não sei como fazê-lo.
Primeiro tenho que criar diferentes opções de firewall, uma para cada caso pretendido. Estando na linha de comando do coyote (dentro do putty) vou criar duas versões de firewall (preservando a original):
- Código: Selecionar todos
cd /etc/coyote
- Código: Selecionar todos
cp firewall.local firewall_original.local
- Código: Selecionar todos
cp firewall.local firewall_sem_MSN.local
- Código: Selecionar todos
cp firewall.local firewall_com_MSN.local
Agora vou editar o firewall_sem_MSN.local:
- Código: Selecionar todos
edit firewall_sem_MSN.local
Vou então inserir as linhas abaixo e depois salvar:
# Bloqueia todos os micros
- Código: Selecionar todos
iptables -t mangle -A POSTROUTING -s 0/0 -m layer7 --l7proto msnmessenger -j DROP
# Bloqueando
- Código: Selecionar todos
iptables -A FORWARD -s 192.168.0.0/32 -p tcp --dport 1863 -j REJECT
- Código: Selecionar todos
iptables -A FORWARD -s 192.168.0.0/32 -d loginnet.passport.com -j REJECT
# bloqueando msn messenger
- Código: Selecionar todos
iptables -A FORWARD -p tcp -d messenger.hotmail.com --dport 80 -j DROP
- Código: Selecionar todos
iptables -A FORWARD -p tcp --dport 1863 -j DROP
- Código: Selecionar todos
iptables -A FORWARD -s 0/0 -d 65.54.195.253 -j DROP
- Código: Selecionar todos
iptables -A FORWARD -s 0/0 -d 65.54.213.62 -j DROP
- Código: Selecionar todos
iptables -A FORWARD -s 0/0 -d 65.54.213.30 -j DROP
- Código: Selecionar todos
iptables -A FORWARD -s 0/0 -d 207.46.104.20 -j DROP
- Código: Selecionar todos
iptables -A FORWARD -s 0/0 -d 65.54.195.254 -j DROP
- Código: Selecionar todos
iptables -A FORWARD -s 0/0 -p tcp --dport 1863 -j REJECT
- Código: Selecionar todos
iptables -A FORWARD -s 0/0 -d loginnet.passport.com -j REJECT
- Código: Selecionar todos
iptables -A FORWARD -s 0/0 -d webmessenger.msn.com -j REJECT
- Código: Selecionar todos
iptables -A FORWARD -s 0/0 -d e-messenger.net -j REJECT
#liberando msn para a minha máquina
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -p tcp -d messenger.hotmail.com --dport 80 -j ACCEPT
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -p tcp --dport 1863 -j ACCEPT
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -d loginnet.passport.com -j ACCEPT
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -d 65.54.195.253 -j ACCEPT
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -d 65.54.213.62 -j ACCEPT
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -d 65.54.213.30 -j ACCEPT
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -d 207.46.104.20 -j ACCEPT
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -d 65.54.195.254 -j ACCEPT
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -d loginnet.passport.com -j ACCEPT
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -d webmessenger.msn.com -j ACCEPT
- Código: Selecionar todos
iptables -A FORWARD -s 192.xxx.yyy.10 -d e-messenger.net -j ACCEPT
Agora tenho duas versões de firewall que vou usar para comutar de uma situação para a outra (com ou sem MSN). Vou fazer a comutação via CRON.
15) Como programar o CRON? Explicarei primeiro a sintaxe deste agendador de tarefas:
* * * * * comando
| | | | | |
| | | | | `--> comando a ser executado
| | | | `--------> Semana (0-6 – domingo a sábado)
| | | `----------> Mês (01-12)
| | `-------------> Dia (01–31)
| `---------------> Hora (00-23)
`-----------------> Minuto (00-59)
Vou editar o arquivo /var/spool/cron/crontabs/root e criar as seguintes linhas:
- Código: Selecionar todos
30 13 * * 1,2,3,4,5 cp etc/coyote/firewall_com_MSN.local etc/coyote/firewall.local
- Código: Selecionar todos
31 13 * * 1,2,3,4,5 /etc/rc.d/rc.firewall
Elas fazem com que em todos os dias de segunda a sexta, às 18:00h, seja copiado o “firewall_com_MSN.local” por cima do “firewall.local” e em seguida (18:01h) recarregado o firewall. Assim o MSN fica liberado.
- Código: Selecionar todos
00 18 * * 1,2,3,4,5 cp etc/coyote/firewall_sem_MSN.local etc/coyote/firewall.local
- Código: Selecionar todos
01 18 * * 1,2,3,4,5 /etc/rc.d/rc.firewall
Agora inverto tudo de novo, retornando o bloqueio ao MSN que supostamente (sim, a menos que ele dê “aquela escorregada”) deverá estar bloqueado.
- Código: Selecionar todos
00 21 * * 1,2,3,4,5 cp etc/coyote/firewall_com_MSN.local etc/coyote/firewall.local
- Código: Selecionar todos
01 21 * * 1,2,3,4,5 /etc/rc.d/rc.firewall
- Código: Selecionar todos
30 22 * * 1,2,3,4,5 cp etc/coyote/firewall_sem_MSN.local etc/coyote/firewall.local
- Código: Selecionar todos
31 22 * * 1,2,3,4,5 /etc/rc.d/rc.firewall
Aqui é feito a mesma coisa que acima mas para a faixa entre 21:00 e 22:30h.
Ainda está faltando sábado e domingo, certo? Então vou criar mais estas linhas:
[/code]00 09 * * 0,6 cp etc/coyote/firewall_com_MSN.local etc/coyote/firewall.local[/code]
- Código: Selecionar todos
01 09 * * 0,6 /etc/rc.d/rc.firewall
- Código: Selecionar todos
00 12 * * 0,6 cp etc/coyote/firewall_sem_MSN.local etc/coyote/firewall.local
- Código: Selecionar todos
01 12 * * 0,6 /etc/rc.d/rc.firewall
- Código: Selecionar todos
00 15 * * 0,6 cp etc/coyote/firewall_com_MSN.local etc/coyote/firewall.local
- Código: Selecionar todos
01 15 * * 0,6 /etc/rc.d/rc.firewall
- Código: Selecionar todos
00 20 * * 0,6 cp etc/coyote/firewall_sem_MSN.local etc/coyote/firewall.local
- Código: Selecionar todos
01 20 * * 0,6 /etc/rc.d/rc.firewall
16) Lembra lá em cima, aquelas ACLs comentadas no squid.conf (item 5)??? Pois é, vamos entende-las agora:
a. Assim como fiz com o firewall.local também tenho que fazer com o squid.conf, ou seja: criar múltiplos squid.conf atendendo várias situações.
b. Vou criar as seguintes opções:
“squid_original.conf”
“squid_fechado.conf” (só deixa a minha máquina navegar)
“squid_libera_Matheus.conf”
“squid_libera_Anna.conf”
“squid_libera_Wellington.conf”
“squid_bloqueia_Matheus.conf”
“squid_bloqueia_Anna.conf”
“squid_bloqueia_Wellington.conf”
c. Depois vou editar um por um, inserir uma linha comentada lá no início deles, com a descrição correspondente (exemplo: # Bloqueia Matheus / Libera Anna Paula e Wellington), vou descomentar somente a ACL correspondente (está fácil pois antes de cada uma delas eu coloquei a descrição do que elas fazem) e salvar. Concluído isso eu tenho todas as situações previstas já configuradas, só faltando criar uma forma de executar estas opções.
OBS: Sei que isso pode ser feito também via IPTABLES, mas como descobri primeiro como fazê-lo através do squid então assim eu fiz. Sabe como é... tenho que ir aprendendo e assimilando uma coisa de cada vez... hehehe
17) Agora está quase tudo pronto. Vou ainda criar mais algumas linhas, desta vez no /usr/sbin/menu , onde vou criar as opções de forçar liberação ou bloqueio de uma máquina específica, através da comutação entre as diferentes configurações do squid.
Na verdade eu tenho um menu preparado (fig. 1) para minhas necessidades, mas para o caso em questão basta acrescentar algumas linhas.
Figura 1
No meu caso, na opção 11 eu chamo um novo menu (fig.2) onde tenho as diferentes situações (conforme squid.conf). Esta figura não está atualizada pois como pode ser observado não mostra a máquina do Wellington), mas não tem problema, é só pra dar uma idéia.
Figura 2
No meu WebAdmin (Fig.3) também fiz alguns incrementos visando facilitar minha vida de “bisbilhoteiro”, afinal, como diz minha assinatura no fórum: O Coyote não é meu router: é meu hobby.
Figura 3
Mas, já que chegamos até aqui, vamos concluir a fatura, correto? Então vamos imaginar que eu fosse fazer a alteração em cima do arquivo /usr/sbin/menu original. Então vou acrescentar as liinhas abaixo.
OBS: Como são muitas linhas sugiro editar o arquivo via WebAdmin (Arquivos de Configuração/Editar Qualquer Arquivo ”/usr/sbin/menu “), pois aí dá pra copiar e colar.
Localize a linha a seguir:
- Código: Selecionar todos
echo " 5) Edit firewall configuration 6) Edit port forward configuration"
Logo abaixo dela acrescente:
- Código: Selecionar todos
echo " 7) Menu de acesso"
Procure agora a linha:
- Código: Selecionar todos
6 ) edit /etc/coyote/portforwards
Abaixo dela acrescente:
# ------------------------- CONTROLE DE ACESSO ----------------------------
# Menu que permite forçar condição de navegação independente do que estiver
# sendo chamado pelo CRON ou pelo squid.conf base
11 )
cd /
clear
echo " +--------------------------------------------+"
echo " | CONTROLE DE ACESSO |"
echo " +--------------------------------------------+"
echo " | [ 1 ] Libera MSN |"
echo " | [ 2 ] Bloqueia MSN |"
echo " | [ 3 ] Bloqueia Navegação+MSN Geral |"
echo " | [ 4 ] Libera Navegação para Matheus |"
echo " | [ 5 ] Libera Navegação para Anna |"
echo " | [ 6 ] Libera Navegação para Wellington |"
echo " | [ 7 ] Bloqueia Navegação para Matheus |"
echo " | [ 8 ] Bloqueia Navegação para Anna |"
echo " | [ 9 ] Bloqueia Navegação para Wellington |"
echo " +--------------------------------------------+"
echo " | [R] Retornar |"
echo " +--------------------------------------------+"
echo -n " Escolha uma opção:"
read JUNK
if [ "$JUNK" = "1" ] ; then
# Liberar MSN
cp /etc/coyote/firewall_com_MSN.local /etc/coyote/firewall.local
/etc/rc.d/rc.firewall
else
if [ "$JUNK" = "2" ] ; then
# Bloquear MSN
cp /etc/coyote/firewall_sem_MSN.local /etc/coyote/firewall.local
/etc/rc.d/rc.firewall
else
if [ "$JUNK" = "3" ] ; then
# Bloquear Navegação Geral
cp /etc/coyote/firewall_sem_MSN.local /etc/coyote/firewall.local
cp /usr/local/squid/etc/squid_fechado.conf /usr/local/squid/etc/squid.conf
squid -k reconfigure
/etc/rc.d/rc.firewall
else
if [ "$JUNK" = "4" ] ; then
# Liberar navegação para Matheus
cp /usr/local/squid/etc/squid_libera_Matheus.conf /usr/local/squid/etc/squid.conf
squid -k reconfigure
else
if [ "$JUNK" = "5" ] ; then
# Liberar navegação para Anna
cp /usr/local/squid/etc/squid_libera_Anna.conf /usr/local/squid/etc/squid.conf
squid -k reconfigure
else
if [ "$JUNK" = "6" ] ; then
# Liberar navegação para Welington
cp /usr/local/squid/etc/squid_libera_Wellington.conf /usr/local/squid/etc/squid.conf
squid -k reconfigure
else
if [ "$JUNK" = "7" ] ; then
# Bloquear navegação para Matheus
cp /usr/local/squid/etc/squid_bloqueia_Matheus.conf /usr/local/squid/etc/squid.conf
squid -k reconfigure
else
if [ "$JUNK" = "8" ] ; then
# Bloquear navegação para Anna
cp /usr/local/squid/etc/squid_bloqueia_Anna.conf /usr/local/squid/etc/squid.conf
squid -k reconfigure
else
if [ "$JUNK" = "9" ] ; then
# Bloquear navegação para Weelington
cp /usr/local/squid/etc/squid_bloqueia_Wellington.conf /usr/local/squid/etc/squid.conf
squid -k reconfigure
else
if [ "$JUNK" = "10" ] ; then
# Restabelece a condição normal
cp /usr/local/squid/etc/squid_original.conf /usr/local/squid/etc/squid.conf
squid -k reconfigure
else
if [ "$JUNK" = "R" -o "$JUNK" = "r" ] ; then
cd /
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
;;
Pronto, agora posso arbitrar uma condição para a navegação by-passando as chamadas do cron ou horários do squid, e ainda retornar, quando quiser, à configuração padrão. Um detalhe: as chamadas do cron continuam ativas e podem (se coincidir) alterar esta “forçada” de configuração.
Pronto pra rodar?? Calma!!! Vamos garantir agora que todas estas alterações não se percam: vamos programar um backup pra elas. E aqui descrevo uma super-dica passada pelo mestre Cláudio, através da qual você cria seu próprio pacote, que pode por exemplo (e é nosso caso aqui), conter suas configurações personalizadas.
18) Criando meu pacote.
a. Vou até a pasta /var/lib/lrpkg e crio um arquivo chamado “minhas_configuracoes.list” (touch /usr/lib/lrpkg/meu_menu.list)
b. Edito este arquivo colocando o seguinte nele:
- Código: Selecionar todos
/usr/sbin/menu
- Código: Selecionar todos
/var/lib/lrpkg/meu_menu.list
- Código: Selecionar todos
/etc/coyote/firewall_sem_MSN.local
- Código: Selecionar todos
/etc/coyote/firewall_com_MSN.local
- Código: Selecionar todos
/etc/coyote/firewall_original.local
- Código: Selecionar todos
/usr/local/squid/etc/squid_original.conf
- Código: Selecionar todos
/usr/local/squid/etc/squid_fechado.conf
- Código: Selecionar todos
/usr/local/squid/etc/squid_libera_Matheus.conf
- Código: Selecionar todos
/usr/local/squid/etc/squid_libera_Anna.conf
- Código: Selecionar todos
/usr/local/squid/etc/squid_libera_Wellington.conf
- Código: Selecionar todos
/usr/local/squid/etc/squid_bloqueia_Matheus.conf
- Código: Selecionar todos
/usr/local/squid/etc/squid_bloqueia_Anna.conf
- Código: Selecionar todos
/usr/local/squid/etc/squid_bloqueia_Wellington.conf
- Código: Selecionar todos
/var/spool/cron/crontabs/root
c. Rodo o programa de backup passando o nome do pacote como parâmetro:
backup meu_menu
Pronto, o coyote vai criar um novo pacote chamado minhas_configuracoes.tgz. Ele procura pelo arquivo .list e coloca no tgz tudo o que estiver listado lá.
Isso (passar o nome do pacote como parâmetro) só precisa ser feita uma vez para que o novo pacote seja criado. No próximo boot o coyote vai detectar a presença do .tgz no disco, carregá-lo e incluí-lo na lista de pacotes a serem backupeados. A partir daí seu novo add-on vai passar a fazer parte do backup normal do coyote, isso significa que você poderá alterar o /usr/sbin/menu a vontade que o pacote dele vai ser sempre reconstruído todas as vezes que você rodar o backup do coyote.
Esse método é legal porque quando você fizer algum upgrade você poderá copiar este pacote para o novo coyote e manter suas configurações.
Não se preocupe com o fato que o arquivo estará dentro do root.tgz também, como o root é sempre o primeiro pacote a ser carregado quando o coyote carregar o seu ele vai sobreescrever o arquivo original.
Obs: Este processo serve para qualquer coisa que normalmente não é "backupeada" ou que você queira criar um pacote separado para ela pensando em distribuí-la. Tudo que você precisa é de um arquivo .list contendo a relação do que entra no .tgz
PRONTO!!! Espero ter ajudado e que a partir deste exemplo você possa criar muitas outras alternativas para atender suas necessidades.
OBS: Quando sair a autenticação para o squid (ou para o POLIPO) as opções vão ficar ainda mais “quentes”. E é bom lembrar também que em breve o Mazzei vai estar disponibilizando o POLIPO com ACLs.