Captive portal.

1. Captive portal.

Joabes Carlos de Carvalho
joabes

(usa Slackware)

Enviado em 01/11/2007 - 12:38h

Caros, boa tarde, estou com um problema com um sistema de capitve portal, ele usa, php, mysql, iptables e apache:

index.php é onde o usuário informa user e senha, quando o user da um ok ele executa a auth.php que é responsavel por checar os dados no banco de dados, estando tudo ok ele remove as regras de redirecionamento deixando o usuário livre para navegar, só que isso não está ocorrendo, o primeiro autentica blz, a segunda máquina quando vai autenticar ele não executa a página auth.php, você informa o user e senha, da ok e nada, mais no logo ele mostra que executou as regras, mais a máquina não navega, não consigo localizar o erro, se alguém puder ajudar eu agradeço:


Estrutura do banco:

CREATE TABLE `maclist` (
`Id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`Id`)
);
ALTER TABLE `maclist`
CHANGE COLUMN `Id` `id` int(11) NOT NULL auto_increment;
ALTER TABLE `maclist`
ADD COLUMN `login` varchar(30) CHARACTER SET 'utf8' NULL;
ALTER TABLE `maclist`
ADD COLUMN `ip` varchar(80) CHARACTER SET 'utf8' NULL;
ALTER TABLE `maclist`
ADD COLUMN `mac` text CHARACTER SET 'utf8' NULL;
ALTER TABLE `maclist`
ADD COLUMN `situacao` varchar(30) CHARACTER SET 'utf8' NULL;

CREATE TABLE `usuarios` (
`id` int(11) NOT NULL auto_increment,
`login` varchar(30) NULL,
`senha` varchar(15) NULL,
PRIMARY KEY (`id`)
);


Arquivo index.php

<?php require_once('config.php'); ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>AUTENTICAÇÃO - <?php echo $titulo; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Language" content="pt-br" />
<meta http-equiv="Cache-Control" content="no-cache, no-store" />
<meta http-equiv="Pragma" content="no-cache, no-store" />
<meta http-equiv="expires" content="Mon, 06 Jan 1990 00:00:01 GMT" />
<style type="text/css">
<!--
body,td,th {
font-family: Verdana, Arial, Helvetica, sans-serif;
}
body {
background-color: #FFFFFF;
margin: 0px;
}
a {
color: #333333;
}
a:link {
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #333333;
}
a:hover {
text-decoration: underline;
color: #000000;
}
a:active {
text-decoration: none;
color: #333333;
}
.form_login {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
border: 1px solid #024EBF;
height: 18px;
width: 180px;
}
.form_btn {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
}
.login-destaque {
font-size: 12px;
font-weight: bold;
color: #FFFFFF;
}
.login {
font-size: 10px;
font-weight: bold;
color: #FFFFFF;
}
.menu {
font-size: 10px;
color:#333333;
}
.erro {
font-size: 10px;
color: #FF0000;
}
.destaque {
font-size: 10px;
color: #0000CC;
}
-->
</style>

<script language="javascript" type="text/javascript">
function authlogin()
{
var login = document.autenticar.login.value
var senha = document.autenticar.senha.value
if(login=="")
{
alert("E necessario o preenchimento dos seguintes campos:\n- Usuario\n- Senha.");
document.autenticar.login.focus();
return false
}
if(senha=="")
{
alert("E necessario o preenchimento dos seguintes campos:\n- Usuario\n- Senha.");
document.autenticar.senha.focus();
return false
}
}
</script>

</head>

<body>
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="20">
<tr>
<td align="center" valign="middle">
<p class="erro">
<?php

# Pega a mensagem de erro enviada pela url
$ERRO = $_GET['erro'];

# Exibi a mensagem de erro
if ( $ERRO == login )
{ echo 'Usuário inexistente ou incorreto, por favor verifique se a tecla Caps Lock de seu teclado esta pressionada.';
}
if ( $ERRO == senha )
{ echo 'Senha incorreta, por favor verifique se a tecla Caps Lock de seu teclado esta pressionada.';
}
if ( $ERRO == config )
{ echo "As configurações de acesso de seu computador não conferem com as cadastradas em nosso sistema, por favor entre em contato conosco clicando no link abaixo Atendimento On-line, ou pelo telefone $telefone.";
}
if ( $ERRO == block )
{ echo "<b>SISTEMA BLOQUEADO</b> <br> Mensalidades em aberto, por favor entre em contato conosco clicando no link abaixo Atendimento On-line, ou pelo telefone $telefone.";
}

?>
<?php

// Pega a mensagem de erro enviada pela url
$FIM = $_GET['logout'];

// Exibi a mensagem de fim de conexao
if ( $FIM == sim )
{ echo 'Conexão finalizada com sucesso.';
}

?>
</p>
<table width="290" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="3"><img src="imagens/login_top.jpg" width="291" height="20"></td>
</tr>
<tr>
<td width="6"><img src="imagens/login_le.jpg" width="6" height="128"></td>
<td align="center" valign="top" background="imagens/login_bg.jpg">
<form action="auth.php" method="post" name="autenticar" id="autenticar">
<table width="270" border="0" cellspacing="2" cellpadding="0">
<tr>
<td height="30" colspan="2" align="center" valign="top" class="login-destaque">Acessar a internet, login: </td>
</tr>
<tr>
<td width="75" height="20" align="right" class="login">Usuário: </td>
<td width="225" align="left"><input name="login" type="text" class="form_login" id="login" size="30" maxlength="30" /></td>
</tr>
<tr>
<td height="20" align="right" class="login">Senha: </td>
<td align="left"><input name="senha" type="password" class="form_login" id="senha" size="30" maxlength="30" /></td>
</tr>
<tr>
<td>
<input name="site" type="hidden" id="site" value="<? echo $_REQUEST['url'] ?>" /></td>
<td height="25" align="left"><input name="Submit" type="submit" class="form_btn" value="Conectar" onClick="return authlogin()" /></td>
</tr>
</table>
</form>
</td>
<td width="6"><img src="imagens/login_ld.jpg" width="6" height="128"></td>
</tr>
<tr>
<td height="10" colspan="3"><img src="imagens/login_base.jpg" width="291" height="10"></td>
</tr>
</table>
<p class="erro">LEMBRE-SE: sua senha é de uso pessoal. Tudo o que
for feito com o uso dela é de sua inteira responsabilidade.</p>
</td>
</tr>
</table>
</body>
</html>

Arquivo auth.php

<?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);

// 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");

// 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 definido como página inicial
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");
}

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


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts