Postado originalmente por
Xlab
Com no principio eu observei o modo de autenticação do IG(eu acho que a maioria aqui fez isso
), ficava vibrado quado colocava uma pagina e sempre ia para a autenticação e eu achei muito legal. Bem a principio busquei soluções com o squid, ja que todos os meus usuarios passavam pelo o proxy transparente, entao imaginei que daria certo. Criei um script em perl para fazer o redirecionamento para uma pagina que eu queria. Deu certo, mas tinha um problema, queria que minha pagina principal também aparecesse uma vez por dia quanto o usuario navegasse pela a primeira vez, veio mais coisas que queria fazer, também que meus usuarios em débido recebecem uma pagina de cobranca e ate mesmo uma pagina especificando quando o meu link caisse e outra que bloqueasse tudo quanto esse estivesse com 15 dias acima do vencimento. Bem como o squid, apenas repassa a url linha por linha, ficava dificil fazer tanta implementacoes com o redirecionador do squid(pensei puxa vai da trabalho d+). Entao procurei outa maneira de fazer isso e que fosse menos complicado e mais facil de manutenção.
Me vendo nisso procurei pelo o iptables(meu velho amigo, lembro-me que passei noites inteiras para poder dominiar o iptables em todos os aspectos, acreditem consegui :lol:. Pois os materiais disponiveis em portugues não existiam e estavamos engatinhando no kernel 2.4 ) e o apache claro. Lembrei-me que podia usar o iptables para redirecionar pacotes para portas especificas(a maioria usa apenas para proxy transparentes, limitando o poder o iptables).
Dexando de conversa e historia de lado, vamos lá(vcs ja devem está consados. Vou abrangir somente um redirecionamento para pagina de cobranca e outra para o bloqueio)
Primeiro é necessario configurar o apache para portas especificas e assim usar iptables para redirecionar para elas. Vamos editar o arquivo de configuracao do apache que está em : /etc/apache/conf/httpd.conf (na maioria esta nesta pasta, pois o apache que uso é o 2.0, mas acredito que funciona perfeitamente 1.3)
Procure pelo o parametro "Listen" ele deve está assim:
Listen 80
mude para isso(isso é se o seu servidor nao estiver servindo nada, que o meu caso, se vc estiver servindo na porta 80 deixe tb a 80, mas nao acoselho é melhor vc usar uma maquina especifica pra isso):
Listen 1235 #porta para cobranca
Listen 1236 #Porta para bloqueio
Va agora para parte de host virtuais no final do arquivo, la você encontrara algo como semelhante a:
#<VirtualHost *>
# ServerAdmin
[email protected]
# ServerName nome.qualquer.com
# DocumentRoot /srv/www/default/html/
# ErrorLog logs/conectiva-error_log
# CustomLog logs/conectiva-access_log common
#</VirtualHost>
Faca o seguinte:
<VirtualHost *:1235>
ServerAdmin
[email protected]
ServerName nome.qualquer.com
DocumentRoot /srv/www/default/html/cobranca/
</VirtualHost>
<VirtualHost *:1236>
ServerAdmin
[email protected]
ServerName nome.qualquer.com
DocumentRoot /srv/www/default/html/bloqueio/
</VirtualHost>
Depois de fazer isso no apache salve. Vale apena lembrar que apenas no parametro VirtualHost e DocumentRoot foram mudadas e exlcui as linhas de logs ja que meu servidor apache esta sendo usado apenas pra isso, outra coisa nao esquecam de criar as pastas e as paginas no diretorio especificado no DocumentRoot
reinicie o apache
%service httpd stop | service httpd start
pronto se vc nao errou nada, seu apache ja esta pronto pra receber conexoes redireciona pela o iptables.
No iptables faca a seguinte regra para o bloqueio(no meu caso controlo meus clinentes por mac no iptables, vc pode colocar ips se esse for o seu caso)
iptables -t nat -I PREROUTING -i eth1 -p tcp -m mac --mac-source 00:03:04:05:06:07 -j REDIRECT --to-port 1236
Esta regra redireciona qualquer pacote da rede interna que tenha o mac acima usando usando o protocolo tcp para porta 1236. Quando isso acontece o apache recebe a requisicao e exibe a pagina de bloqueio ao inves da pagina do usuario. se o usuario digitar
under-linux.org o endereco continuarar o mesmo, mas a pagina de exibicao sera a que esta hospeda na porta redirecionada pelo o iptables.
Ja para uma pagina e cobranca diaria é preciso incluir umas detalhes a mais na regra:
iptables -t nat -I PREROUTING -i eth1 -p tcp --dport 80 -m mac --mac-source 00:03:04:05:06:07 -m limit --limit 1/d --limit-burst 2 -j REDIRECT --to-port 1235
Esta regra diz a mesma coisa da outra só que com alguns detalhes, que todo patode com destino a porta 80 sera rediricionado para porta 1235 que o apache ta ouvindo, essa regra tambem só sera executada uma vez por dia com burst 2. ou seja toda vez que o usuario pela manha cedo quando for navegar encontrara uma pagina de cobranca um unica vez, depois que ela aparecer, ele podera navegar tranquilamente por qualquer lugar.
Só que existe um problema o nosso redirecionador so funciona se o dominio for exato!!!! por exemplo se o dominho for
www.uol.com.br/jogos nosso usuarios nao receberam a pagina que nós queremos que eles vejam, ao inves disso receberam aquivo nao encontrado. Para resolver isso no arquivo de configracao do apache existe uma configuracao chamada
#ErrorDocument 404 /anaywere.html
mude para:
ErroDocument 404 /index.html
Nesse caso vc redireciona qualquer erro 404(not found) para o index corrente do apache.
Vc pode tambem implementar script em perl, php, usando banco de dados para refinar suas regras e suas paginas. Se nao faca manualmente o que vai da muito trabalho mas compensador. Nota: na configuracao do apache nao adianta colocar um ip no parametro Virtualhost tem que ser somente a porta, se nao fizer isso o redirecionamento do iptables nao ira funcionar, pois o iptables redireciona apenas para portas, se vc colocar ip no paramentro VirtualHost junto com a porta apenas uma pagina vai aparecer mesmo que sejam porta diferentes. Agora é só usar sua imaginacao e fazer e "controlar" o que vai aparecer no browser do seu usuario. Espero tê-los ajudados um abracos a todos.