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!
Respostas