MAS EU CRIEI OUTRA FORMA DE FAZER A AUTENTICAÇÃO DOS CLIENTES:
Criei um arquivo "iptablesCli.sh" com o seguinte conteudo em php
---------------------------------------------------------------------------------------------------------
#!/usr/bin/php -q
<?
{
$iptables0 = shell_exec("iptables -F inform");
$iptables1 = shell_exec("iptables -N inform");
$iptables2 = shell_exec("iptables -A INPUT -j inform");
$iptables3 = shell_exec("iptables -A FORWARD -j inform");
$link = mysqli_connect("localhost", "root", "123456") or die ("Não foi possível conectar1");
mysqli_select_db($link,"dados") or die("Não foi possível selecionar o banco de dados2");
$select = "SELECT * FROM clientes order by codigo";
if ($select != "") {
$Query = mysqli_query($link, $select) or die (mysql_error($link));
$i = 0;
while ($row = mysqli_fetch_array($Query)) {
$i++;
echo $i.' - '.$row['nome']."\n";
$iptables2 = shell_exec('iptables -A inform -d '.$row['ip'].' -j REJECT ');
echo "$iptables2"."<br>";
}
}
}
?>
-------------------------------------------------------------------------------------------------------------------
Coloca em ordem de codigo todos os cliente de uma tabela "cliente" q tem os campos "nome","ip","mac" etc...
Criei a 'chain' inform
quando esse programa é rodado todos os cliente são bloqueados.
para autenticar um cliente eu crei um index.php
---------------------------------------------------------------------------------------------------
<?
if($_POST)
{
$login = $_POST['EditNome'];
$senha = $_POST['EditSenha'];
$link = mysqli_connect("localhost", "root", "dtggas") or die ("Não foi possível conectar1");
mysqli_select_db($link,"dados") or die("Não foi possível selecionar o banco de dados2");
$select = "SELECT * FROM clientes WHERE login='$login' AND senha='$senha' order by codigo";
if ($select != "") {
$Query = mysqli_query($link, $select) or die (mysql_error($link));
$i = 0;
while ($row = mysqli_fetch_array($Query)) {
$i++;
$iptables2 = shell_exec("sudo iptables -R inform ".$row['codigo']." -d ".$row['ip']." -j ACCEPT");
echo "$iptables2";
echo "sudo iptables -R inform ".$row['codigo']." -d ".$row['ip']." -j ACCEPT";
$Cliente = fopen("/var/www/portal/log.log","a");
fwrite($Cliente,$row['codigo']." - ".$row['nome']." - ".$row['ip']." - ".$row['mac']."\n");
fclose($Cliente);
echo"
<form class='style1' action='index.php' name='login' method='post' style='width:300px; height:400px; z-index:4'><br>
<input style='width:100px; height:20px;' class='style1' type='text' name='EdtCod' id='EdtCod'>
<input style='width:100px; height:20px;' class='style1' type='text' name='Edtnome' id='Edtnome'>
<input style='width:100px; height:20px;' class='style1' type='text' name='EdtIP' id='EdtIP'>
<input style='width:100px; height:20px;' class='style1' type='text' name='EdtMac' id='EdtMac'>
<script type='text/javascript'>
document.login.EdtCod.value = '".$row['codigo']."';
document.login.Edtnome.value = '".$row['nome']."';
document.login.EdtIP.value = '".$row['ip']."';
document.login.EdtMac.value = '".$row['mac']."';
</script>
";
}
}
}
?>
------------------------------------------------------------------------------------------
A pagina autentica pois pega a range da chain
com -R eu substituo uma regra de acordom com a posição em uma chain pelo codigo do cliente q foi colocado em ordem.
o problema é q o cliente tem q ter o codigo em ordem sem 1,2,3,4,5,6,....
para que o cliente não seja bloqueado pelo comando do iptables: "iptables -A inform -d IP -j REJECT"
eu coloquei uma acl no squid q dá permissão para acessar a intranet ou o ip 192.168.1.1
"acl intranet dst 192.168.1.1"
"http_access allow inrtanet"
mas mesmo assim ainda tem um problema pois se o cliente fizer as confirações de proxy essa regras passam batido.
mas ficou beleza.
pra completar eu criei um sistema em delphi que pega a pagina de autenticação utilizando o componete indy
e autentica, sem precisa que o apache capture a pagina de login e senha.
O programa tem, é configurado com para rodar com Serial do HD, Mac, IP e nome da maquina, nome do cliente etc...
fica mais dificil, pro cara hackear, pois os cara tem que clonar Mac, IP, Serial do HD, Nome da maquina e ainda ter a senha e o login do cliente.
O programa fica sendo como um discador. quando o programa é encerrado ele bloquea novamente o cliente.
Se quiserem trocar ideias fica meu email:
[email protected]
blz.