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!