Você está na página 1de 8

PgAviso Inteligente

Boa noite pessoal,


Vou compartilhar o minha pgina de aviso "pgaviso"
bem simples de configurar, j esta tudo pronto, no precisa de boto para remover o
cliente da lista de aviso nem ssh, api etc... "no desmerecendo os colegas que assim
fizeram"
pois peguei um pouco de tudo que foi apresentado aqui e fiz o meu, uma pgina de
aviso funcional para mim e acredito que para muita gente vai ser tambm.
vou explicar como funciona:
primeiramente utilizando o mtodo do amigo Wallace de Lima, 35% dos crditos so
para ele.
"enviar o pgaviso por rdius"
o sistema tem uma rotina de script mikrotik que verifica se o cliente esta na lista de
pgaviso e adiciona as regras de redirecionamento para cada cliente uma regra "no se
preocupe se voc tem muitos cliente na lista de pgaviso e seu firewall ficar cheio de
regras" as regras so "dinamicas" o script se encarrega de criar e remover
automaticamente.
O sistema usa o squid "no para fazer cache" para capturar a url que o cliente
solicitou, mostra o aviso e depois devolve a url original que o cliente solicitou.
no precisa fazer alterao no html da pgina j esta padro com um aviso simples
"no agressivo"
A pgina de aviso:
no momento que o cliente esta navegando em qualquer site http abre um pop up
jquery no estilo modal com uma mensagem de voz, o texto de aviso, um boto com
link para a central do assinante e um boto para fechar a pgina.
se o cliente clicar em fechar ele sera redirecionado para sua url original, se o cliente
esperar em 55 segundos a pgina redireciona automaticamente para sua url original.
Funciona com pppoe e hotspot.
mos a obra!
1 Passo (peguei do poste original)
Devemos copiar o script 'pgaviso.sh' anexado ao post para o diretrio
'/usr/local/mkauth/scripts/'
Feito isso incluiremos no crontab a chamada para o script.
(a frequencia deve ser escolhida por vc, eu uso aqui a cada 6 horas)
"Vou pular esse passo, quem j tem o pgaviso por rdius pode ir para o segundo
passo, que no tem t AQUI."
2 passo
instale o squid no mk-auth.
# apt-get install squid
3 passo
depois de instalar edite o squid.conf, copie e cole no bloco de texto edite as
informaes necessrias, depois copie e cole no terminal do linux.
#####
cat > /etc/squid/squid.conf -EOF
# Configurao Squid
# DIRETORIO ONDE TEM O AVISO NAO ALTERE
error_directory /var/www/pgaviso

# PORTA DO SQUID
http_port 3128 transparent
# Altera se preferir
# DIAS PARA BLOQUEIO
cache_mgr 15
# Digite aqui o maximo de dias para bloqueio aparecer no aviso
# TEL. CONTATO PROVEDOR
visible_hostname 22.3344-5566
# Digite o telefone neste modelo DDD.PPPP-YYYY
# IP DO MK-AUTH OU DOMINIO
err_html_text www.seudominio.com.br
# Digite seu dominio ou o ip do mk-auth sem o http://
# O RESTO NAO PRECISA MEXER
# Cache
cache_mem 100 MB
maximum_object_size_in_memory 32 KB
#maximum_object_size 100 MB
#minimum_object_size 0 KB
#cache_swap_low 90
#cache_swap_high 95
# Logs de acesso
access_log /var/log/squid/access.log squid
# ACL PADRAO
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 SSL_ports port 443 563 873
#acl Safe_ports port 80 # http
#acl purge method PURGE
#acl CONNECT method CONNECT
# Permisses e bloqueios padro
#http_access allow manager localhost
#http_access deny manager
#http_access allow purge localhost
#http_access deny purge
#http_access deny !Safe_ports
#http_access deny CONNECT !SSL_ports
# NAO FAZER CACHE
no_cache deny all
# NEGAR TUDO REDIRECIONAR PARA O AVISO
deny_info ERR_ACCESS_DENIED all
# BLOQUEIO EXTERNO
http_access deny all
EOF
#####
no reinicie o squid ainda, vamos copiar a os arquivos da pagina de aviso para o mk-
auth
4passo
descompacte o pasta arquivos.zip e com o winscp copie a pasta pgaviso para o
diretorio var/www

5 passo
reinicie o squid com o comando
# /etc/init.d/squid restart
6 passo
teste a pagina assim digite no navegador o ip do mk-auth mais a porta do squid
ex: http://172.31.255.2:3128 se fez tudo certo j vai aparecer sua pgina de aviso.
7 passo
copie estas regras para o terminal do seu mikrotik.
Ateno! essas regras so padro no altere.
# aqui para no ter problemas com o youtube http ex: se o cliente estiver assistindo
um video no ser interrompido na hora do aviso, ele s vera o aviso se atualizar a
pagina e etc...
/ip firewall layer7-protocol
add name=youtube regexp="^.+(youtube.com).*\$"
/ip firewall filter
add action=add-src-to-address-list address-list=avisado address-list-timeout=20s
chain=forward \
comment="FORA DO AVISO" disabled=no dst-port=80 layer7-protocol=youtube \
protocol=tcp src-address-list=pgaviso
/ip firewall filter move [find comment="FORA DO AVISO"] 0
# aqui o intervalo que vai rodar o script PGAVISO no mikrotikesta setado em 1 minuto
para testes altere para o tempo que preferir interressante no passar de 10
minutos (no o intervalo do aviso!) so para atualizar as regras do firewall, o
intervalo do aviso definido no proprio script PGAVISO.

/system scheduler
add disabled=no interval=1m name=PGAVISO on-event="/system script run PGAVISO"
\
policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api \
start-time=startup
8 passo
crie um script em seu mikrotik com o nome 'PGAVISO' e copie e cole esse contedo,
edite as seguintes variveis em negrito. a varivel INTERVALO o intervalo que o
cliente vai ver o aviso est setado 2 minutos para testes , depois altere para o tempo
que preferir.
#===============================
#
# SCRIPT PGAVISO
#
#===============================
#==== VARIAVEIS
#===============================
#== IP MK-AUTH
:global MKAUTH "172.31.255.2";
#== PORTA SQUID
:global PORTA "3128";
#== INTERVALO DE AVISO EX: "1d" = 1dia, "1h" = 1hora, "1m" = 1minuto, "1s" =
1segundo
:global INTERVALO "2m";
#
#== LIST (nao altere)
:global AVISO "avisado";
:global PGAVISO "pgaviso";
#
#================================
#==== REMOVER AS REGRAS ANTIGAS DE AVISO
:foreach A in=[/ip firewall nat find where comment="$PGAVISO"] do={ /ip firewall nat
remove $A };
:foreach B in=[/ip firewall filter find where comment="$PGAVISO"] do={ /ip firewall
filter remove $B };
#
#===============================
#
#==== PGAVISO PPPOE
#
#===============================
#
#
:foreach ID in=[/ppp active find] do={ \
:foreach LOGIN in=[/ppp active get $ID name] do={ \
:foreach IP in=[/ppp active get $ID address] do={ \
:foreach IPLISTA in=[/ip firewall address-list find where address="$IP"] do={ \
:foreach LISTA in=[/ip firewall address-list find where list="$PGAVISO"] do={ \
#
#==== CONDICAO PARA ENTRAR NO AVISO
#
:if ($IPLISTA = "$LISTA") do={ \
#
#==== ADCIONAR NOVAS REGRAS DE AVISO
#
:delay 1s;
/ip firewall nat add action=dst-nat chain=dstnat comment="$PGAVISO" disabled=no
dst-address="!$MKAUTH" src-address=$IP \
src-address-list=!avisado protocol=tcp dst-port=80 to-addresses=$MKAUTH to-
ports=$PORTA;
#
/ip firewall filter add action=add-src-to-address-list address-list=$AVISO address-
list-timeout="$INTERVALO" chain=forward \
comment="$PGAVISO" disabled=no dst-address="$MKAUTH" src-address=$IP dst-
port=90 protocol=tcp;
#
:log info "========================================";
:log warning " adicionando regras de pgaviso para <pppoe-$LOGIN> ";
:log info "========================================";
:delay 1s;
#
};
};
};
};
};
};
#==== FIM PGAVISO PPPOE ================
#
#===============================
#
#==== PGAVISO HOTSPOT
#
#===============================
#
:foreach IA in=[/ip hotspot active find] do={ \
:foreach LOGIN in=[/ip hotspot active get $IA user] do={ \
:foreach IP in=[/ip hotspot active get $IA address] do={ \
:foreach IPLISTA in=[/ip firewall address-list find where address="$IP"] do={ \
:foreach LISTA in=[/ip firewall address-list find where list="$PGAVISO"] do={ \
#
#==== CONDICAO PARA ENTRAR NO AVISO
#
:if ($IPLISTA = "$LISTA") do={ \
#
#==== ADCIONAR NOVAS REGRAS DE AVISO
#
:delay 1s;
/ip firewall nat add action=dst-nat chain=dstnat comment="$PGAVISO" disabled=no
dst-address="!$MKAUTH" src-address=$IP \
src-address-list=!avisado protocol=tcp dst-port=80 to-addresses=$MKAUTH to-
ports=$PORTA;
#
/ip firewall filter add action=add-src-to-address-list address-list=$AVISO address-
list-timeout="$INTERVALO" chain=forward \
comment="$PGAVISO" disabled=no dst-address="$MKAUTH" src-address=$IP \
dst-port=90 protocol=tcp;
#
:delay 1s;
:log info "========================================";
:log warning " adicionando regras de pgaviso para <hotspot-$LOGIN> ";
:log info "========================================";
#
};
};
};
};
};
};
#==== FIM PGAVISO HOTSPOT ================
9 passo
Explicando um pouco!
no diretrio pgaviso tem uma pasta chamada logo.jpg delete e coloque sua logomarca
com a mesma extenso .jpg,
o arquivo ERR_ACCESS_DENIED o arquivo da pagina de aviso, s altere se souber o
que est fazendo!
o arquivo index.php um redirecionamento para seu site.
no precisa abrir portas no apache,
no tem problemas com ip fixo ou no,
ex: uso esse sistema de aviso com meu servidor mk-auth hospedado fora da minha
rede!
o pop up jquery no bloqueado por navegadores foi testado em vrios inclusive
em dispositivo movel,
no se preocupe com o cliente ficar preso no aviso, se seguir todos os passos vai rodar
certinho!
----------->importante<-----------
o script mikrotik cria a regra de dstnat para o cliente que esta na list pgaviso,
direciona para o squid, que por sua vez nega todo acesso mostrando a pagina de erro
"pgaviso"
a pgina de aviso tem um "loop" ou seja assim que abre o modal tem uma tag html
<iframe width='0' height='0' marginheight='0' marginwidth='0' frameborder='0'
scrolling='no' src='http://%L:90' style="display:none"/></iframe>
que chama a porta 90, %L uma tag do squid que pega o ip do mk-auth, o mikrotik
detecta o acesso a porta 90 do mk-auth e libera a navegao marcando o cliente como
avisado,
ainda na pgina da aviso o cliente tem a opo de fechar, ir para a central do assinante
ou aguardar,
o boto fechar tem uma tag do squid que captura a url original
se o cliente aguardar a tag do html da pgina
<meta http-equiv="refresh" content="53; url=http://%L:90/?&url=%u">
tambem redireciona o cliente para url original depois de 53 segundos.
o script PGAVISO mikrotik roda para pppoe e hotspot se preferir um ou outro recorte
onde inicia, ou deixe assim mesmo no tem problemas se for s pppoe ou s hotspot.
-----------><-----------
ah! e quem quiser ajudar e melhorar, fique a vontade o cdigo html, java script e css
esta todo aberto!!!!

Bom por hoje s!
testem e postem os resultados!
Fiquem Com Deus!