Página de Aviso Inteligente!

Bom dia pessoal,

Vou compartilhar o minha página  de aviso "pgaviso"

É bem simples de configurar, já esta tudo pronto, não precisa de botão para remover o cliente da lista de aviso nem ssh, api etc... "não desmerecendo os colegas que assim fizeram"

pois peguei um pouco de tudo que foi apresentado aqui e fiz o meu, uma página de aviso funcional para mim e acredito que para muita gente vai ser também.

vou explicar como funciona:

primeiramente utilizando o método do amigo Wallace de Lima, 35% dos créditos são para ele.

"enviar o pgaviso por rádius"

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 "não se preocupe se você tem muitos cliente na lista de pgaviso e seu firewall ficar cheio de regras" as regras são "dinamicas" o script se encarrega de criar e remover automaticamente.

O sistema usa o squid "não é para fazer cache" é para capturar a url que o cliente solicitou, mostra o aviso e depois devolve a url original que o cliente solicitou.

não precisa fazer alteração no html da página já esta padrão com um aviso simples "não agressivo" 

A página 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 botão com link para a central do assinante e um botão para fechar a página.

se o cliente clicar em fechar ele sera redirecionado para sua url original, se o cliente esperar em 55 segundos a página redireciona automaticamente para sua url original.

 Funciona com pppoe e hotspot.

mãos a obra!

1º Passo (peguei do poste original)

Devemos copiar o script 'pgaviso.sh' anexado ao post para o diretório '/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, que já tem o pgaviso por rádius pode ir para o segundo passo, que não 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 informações necessárias, depois copie e cole no terminal do linux.

#####

cat > /etc/squid/squid.conf -EOF
# Configuração 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

# Permissões e bloqueios padrão
#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

#####

não reinicie o squid ainda, vamos copiar a os arquivos da pagina de aviso para o mk-auth

4ºpasso

 descompacte o arquivo tutorial-pgaviso e com o winscp copie 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 página de aviso.

7º passo

copie estas regras  para o terminal do seu mikrotik.

Atenção! essas regras são padrão não altere.

# aqui é para não ter problemas com o youtube http ex: se o cliente estiver assistindo um video não 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 não passar de 10 minutos (não é 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 conteúdo, edite as seguintes variáveis em negrito. a variável 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 diretório pgaviso tem uma pasta chamada logo.jpg delete e coloque sua logomarca com a mesma extensão .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.

não precisa abrir portas no apache,

não tem problemas com ip fixo ou não,

ex: uso esse sistema de aviso com meu servidor mk-auth hospedado fora da minha rede!

o pop up jquery não é bloqueado por navegadores foi testado em vários inclusive em dispositivo movel,

não 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 página 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 navegação marcando o cliente como avisado,

ainda na página da aviso o cliente tem a opção de fechar, ir para a central do assinante ou aguardar,

o botão fechar tem uma tag do squid que captura a url original

se o cliente aguardar a tag do html da página 

<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 não tem problemas se for só pppoe ou só hotspot.

-----------><-----------

ah! e quem quiser ajudar e melhorar, fique a vontade o código html, java script e css esta todo aberto!!!!

Bom por hoje é só!

testem e postem os resultados!

Fiquem Com Deus!

tutorial-pgaviso.zip

Para adicionar comentários, você deve ser membro de MK-AUTH.

Join MK-AUTH

Votos 0
Enviar-me um email quando as pessoas responderem –