+ Responder ao Tópico



  1. #1

    Padrão Socorro!!! Script dando erro no Slackware

    Pessoal meu problema é o seguinte tenho um sistema de capitura de página inicial que desenvolvi em php e iptables, bem o funcionamento dele é bem simples ele redireciona o trafego do cliente na porta 80 pra porta 82 do servidor onde tenho rodando um virtual host no apache, quando o usuario efetua o login o script libera o IP do cliente para que o mesmo não seja mais redirecionado pra pagina de login, apos o login ele redireciona o usuario pra pagina que ele estava tentando abrir antes de ser redirecionado, bem tenho ele rodando em um servidor no caso Fedora Core 5, apache 2, e tudo blz, porem que agora estou a implementar em outro servidor porem não estou conseguindo redirecionar pra pagina que o cliente estava tentando acessar, ele me redireciona sempre pra pagina de login, porem se eu definir uma pagina diferete o redirecionamento funciona, estou usando o Slackware 10.

  2. #2

    Padrão

    Dá pra postar o script pros usuários darem uma analisada? Ficaria mais fácil pra te ajudar...

  3. #3

    Padrão

    Segue abaixo o script

    <?php require_once('Connections/Conexao.php'); ?>
    <?php require_once('config.php'); ?>
    <?php
    $colname_RSUsuario = "1";
    if (isset($_POST['login'])) {
    $colname_RSUsuario = (get_magic_quotes_gpc()) ? $_POST['login'] : addslashes($_POST['login']);
    }
    mysql_select_db($database_Conexao, $Conexao);
    $query_RSUsuario = sprintf("SELECT login, senha FROM usuarios WHERE login = '%s'", $colname_RSUsuario);
    $RSUsuario = mysql_query($query_RSUsuario, $Conexao) or die(mysql_error());
    $row_RSUsuario = mysql_fetch_assoc($RSUsuario);
    $totalRows_RSUsuario = mysql_num_rows($RSUsuario);

    $colname_RSMaclist = "1";
    if (isset($_POST['login'])) {
    $colname_RSMaclist = (get_magic_quotes_gpc()) ? $_POST['login'] : addslashes($_POST['login']);
    }
    mysql_select_db($database_Conexao, $Conexao);
    $query_RSMaclist = sprintf("SELECT situacao, mac, ip, login FROM maclist WHERE login = '%s'", $colname_RSMaclist);
    $RSMaclist = mysql_query($query_RSMaclist, $Conexao) or die(mysql_error());
    $row_RSMaclist = mysql_fetch_assoc($RSMaclist);
    $totalRows_RSMaclist = mysql_num_rows($RSMaclist);
    ?>
    <?php

    // Pega os dados do Formulario de Login
    $login = $_POST['login'];
    $senha = $_POST['senha'];
    $site = $_POST['site'];

    // Pega o IP do Cliente
    $ip = $_SERVER['REMOTE_ADDR'];

    // Pega o MAC do cliente
    $mac = $row_RSMaclist['mac'];

    // Pega o Mac Address da tabela ARP do servidor
    $macarp = trim(shell_exec("/usr/bin/sudo /sbin/arp -n | grep $ip | awk '{print $3}'"));

    // Data e hora
    $data = date("d.m.y");
    $hora = date("H:i:s");

    //Gera log
    $logfile = "/var/log/weblogin/weblogin.log";
    $abrir = fopen($logfile, "a");

    ?>

    <?php

    // Verfica se o Login existe
    if ( $row_RSUsuario['login'] == $login )
    {

    // Verifica a Senha
    if ( $row_RSUsuario['senha'] == $senha )
    {

    // Verfica se o Cliente esta bloqueado
    if ( $row_RSMaclist['situacao'] == a )
    {

    // Verifica o IP
    if ( $row_RSMaclist['ip'] == $ip )
    {

    // Remove as regras de redirecionamento pra Pagina de Login
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -D PREROUTING -p tcp -s $ip --dport 80 -j PRE-$ip");
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -D PRE-$ip -p tcp -s $ip --dport 80 -j REDIRECT --to-port 82");
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -X PRE-$ip");

    // Regras pra travar MAC x IP
    //shell_exec('/usr/bin/sudo /sbin/iptables -P FORWARD DROP');
    shell_exec("/usr/bin/sudo /sbin/iptables -A FORWARD -d 0/0 -s $ip -m mac --mac-source $mac -j ACCEPT");
    shell_exec("/usr/bin/sudo /sbin/iptables -A FORWARD -s 0/0 -d $ip -mstate --state ESTABLISHED,RELATED -j ACCEPT");
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -A POSTROUTING -s $ip -d 0/0 -j SNAT --to $servidor");
    // Regras Conectividade Social
    shell_exec("/usr/bin/sudo /sbin/iptables -A INPUT -p tcp -s $ip -m mac --mac-source $mac -d 200.201.173.0/24 --dport 80 -j ACCEPT");
    shell_exec("/usr/bin/sudo /sbin/iptables -A INPUT -p tcp -s $ip -m mac --mac-source $mac -d 200.201.174.0/24 --dport 80 -j ACCEPT");
    shell_exec("/usr/bin/sudo /sbin/iptables -A INPUT -p tcp -s $ip -m mac --mac-source $mac -d 200.201.166.0/24 --dport 80 -j ACCEPT");
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -A PREROUTING -p tcp -s $ip -m mac --mac-source $mac -d 200.201.173.0/24 --dport 80 -j ACCEPT");
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -A PREROUTING -p tcp -s $ip -m mac --mac-source $mac -d 200.201.174.0/24 --dport 80 -j ACCEPT");
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -A PREROUTING -p tcp -s $ip -m mac --mac-source $mac -d 200.201.166.0/24 --dport 80 -j ACCEPT");

    // Redireciona o trafego da porta 80 pra porta do proxy Squid
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -A PREROUTING -s $ip -m mac --mac-source $mac -p tcp --dport 80 -j REDIRECT --to-port $squid");

    $error_log = "CONEXAO EFETUADA COM SUCESSO - $data - $hora - Usuario: $login IP: $ip MAC: $mac \r\n";
    fwrite($abrir, $error_log);
    fclose($abrir);

    // Redireciona o Cliente pro site
    // header("Location:http://$site");
    // Redireciona o Cliente pro site do provedor
    header("Location:http://$siteprovedor");

    }
    else {
    $error_log = "ERRO - IP INCORRETO - $data - $hora - Usuario: $login IP: $ip MAC: $mac \r\n";
    fwrite($abrir, $error_log);
    fclose($abrir);
    header("Location:index.php?url=$site&erro=config");
    }

    }
    else {
    $error_log = "ERRO - USUARIO BLOQUEADO - $data - $hora - Usuario: $login Status: $status IP: $ip MAC: $mac \r\n";
    fwrite($abrir, $error_log);
    fclose($abrir);
    header("Location:ndex.php?url=$site&erro=block");
    }

    }
    else {
    $error_log = "ERRO - SENHA INCORRETA - $data - $hora - Usuario: $login Senha: $senha IP: $ip MAC: $mac \r\n";
    fwrite($abrir, $error_log);
    fclose($abrir);
    header("Location:index.php?url=$site&erro=senha");
    }

    }
    else {
    $error_log = "ERRO - USUARIO INCORRETO - $data - $hora - Usuario: $login IP: $ip MAC: $macarp \r\n ";
    fwrite($abrir, $error_log);
    fclose($abrir);
    header("Location:index.php?url=$site&erro=login");
    }

    ?>
    <?php
    mysql_free_result($RSUsuario);
    mysql_free_result($RSMaclist);
    ?>

    Arquivo de configuração

    <?php

    // IP do Servidor DNAT
    $servidor = '200.200.200.2';

    // Porta Proxy Squid
    $squid = '3128';

    // Definir a pagina inicial do cliente
    $siteprovedor = 'www.meuprovedor.com.br';

    // Telefone do Provedor
    $telefone = '(17) 6060-7070';

    // Titulo da Pagina de Login
    $titulo = 'Autenticação.';

    ?>

    A configuração do virtual host

    #### Configurar o APACHE PRA RODA NA PORTA 82
    Listen 82

    #### Virtual hosts

    <VirtualHost *:82>

    DocumentRoot "/var/www/login/"

    <Directory "/var/www/login/">
    allow from all
    Options +Indexes
    </Directory>

    CheckSpelling On
    Options +FollowSymLinks
    RewriteEngine on

    # 192\.168\.100\.1 alterar pelo IP da interface do servidor conectado a rede dos clientes
    RewriteCond %{HTTP_HOST} !^192\.168\.100\.1 [NC]

    RewriteCond %{HTTP_HOST} !^$

    # 192.168.100.1 alterar pelo IP da interface do servidor conectado a rede dos clientes
    RewriteRule ^(.*)$ "http://192.168.100.1:82/index.php?&url=%{HTTP_HOST}" [L]

    </VirtualHost>

    Agradeço a ajuda de todos
    Última edição por cleciorodrigo; 02-03-2007 às 00:28.

  4. #4

    Padrão

    Pessoal esqueci de mencionar no slackware eu faço o login blz, soh que ele nao redireciona se eu fecha o navegador e abrir outra janela como o script ja executou as regras de iptables funciona normal, porem no Fedora ele redireciona certo, porem não consegui achar o pq do erro por exemplo se eu definir pra abrir uma pagina diferente da que ele pega o cliente tentando abrir antes de redirecionar funciona, a impressão que tenho é que pelo fato de na url ter http://192.168.100.1:82/index.php?ur...meusite.com.br ele nao consegui redirecionar pro mesmo site da url eh que como se o navegador acha-se qe o site esta aberto sei lah se isso mesmo

  5. #5

    Padrão

    Deu certo ja era configuração do apache a opção keepAlive estava ativada por isso nao dava certo