Para possibilitar a execução dos comandos pelo usuário "www-data", que roda o servidor Web, temos que dar permissão para o mesmo, utilizando o arquivo
sudoers.
Digite
visudo no terminal do Debian, e adicione a seguinte linha:
www-data ALL=PASSWD:/sbin/iptables, /usr/sbin/netstat-nat
Obs.: Se quiser utilizar outros comandos, é só adicionar nesta linha.
Segue o script com os comandos:
#Desenvolvido por Carlos Cesar
#Script PHP para controle de acesso das máquinas via MAC ADDRESS
<html>
<body>
<form>
<input type='button' value='Voltar' onclick="javascript: history.go(-1)" />
</form>
<?php
/* Habilitar execucao do comando iptables
* Digite o comando visudo e edite o arquivo /etc/sudoers
* Entrar com a linha no sudoers
* www-data ALL=NOPASSWD:/sbin/iptables, /usr/sbin/netstat-nat
*/
$link = mysql_connect("localhost","","");
if (!$link)
{
die('Não foi possÃvel conectar: ' . mysql_error());
}
echo 'Conexao bem sucedida<br>';
//mysql_close($link);
//print_r($_GET); //caso esteja enviando por GET ou
//print_r($_POST); //caso esteja enviando por POST
$opt = $_POST["var9"];
echo $opt;
$db_selected = mysql_select_db('mac', $link);
if (!$db_selected) {
die ('Can\'t use foo : ' . mysql_error());
}
if ($opt == 1)
{
$result = mysql_query("SELECT * FROM mac WHERE nome like 'lab03%' ");
echo "<h1>Maquinas LAB03 Bloqueadas</h1>";
while($id=mysql_fetch_array($result, MYSQL_NUM))
{
printf("<table border=5><tr><td><font color=green size=5>%s</font></td></font> <td><font
color=black size=5>%s</font></td>
</tr></h2></table>",$id[1], $id[2]);
system("sudo iptables -D FORWARD -m mac --mac-source $id[2] -j REJECT");
system("sudo iptables -I FORWARD -m mac --mac-source $id[2] -j REJECT");
}
mysql_free_result($result);
//system('sudo iptables -D FORWARD -m mac --mac-source 00:1e:90:de:75:83 -j REJECT');
//system('sudo iptables -I FORWARD -m mac --mac-source 00:1e:90:de:75:83 -j REJECT');
}
elseif($opt == 2)
{
$result = mysql_query("SELECT * FROM mac WHERE nome like 'lab03%' ");
echo "<h1>Maquinas LAB03 Liberadas</h1>";
while($id=mysql_fetch_array($result, MYSQL_NUM))
{
printf("%s %s<br>",$id[1], $id[2]);
system("sudo iptables -D FORWARD -m mac --mac-source $id[2] -j REJECT");
}
mysql_free_result($result);
//system('sudo iptables -D FORWARD -m mac --mac-source 00:1e:90:de:75:83 -j REJECT');
}
elseif($opt == 7)
{
$result = mysql_query("SELECT * FROM mac WHERE nome like 'lab04%' ");
echo "<h1>Maquinas LAB04 Bloqueadas</h1>";
while($id=mysql_fetch_array($result, MYSQL_NUM))
{
printf("%s %s<br>",$id[1], $id[2]);
system("sudo iptables -D FORWARD -m mac --mac-source $id[2] -j REJECT");
system("sudo iptables -I FORWARD -m mac --mac-source $id[2] -j REJECT");
}
mysql_free_result($result);
//system('sudo iptables -D FORWARD -m mac --mac-source 00:1e:90:de:75:83 -j REJECT');
}
elseif($opt == 8)
{
$result = mysql_query("SELECT * FROM mac WHERE nome like 'lab04%' ");
echo "<h1>Maquinas LAB04 Liberadas</h1>";
while($id=mysql_fetch_array($result, MYSQL_NUM))
{
printf("%s %s<br>",$id[1], $id[2]);
system("sudo iptables -D FORWARD -m mac --mac-source $id[2] -j REJECT");
}
mysql_free_result($result);
}
elseif($opt == 3)
{
echo '<pre>';
echo '<h3>';
echo '<font face="arial" color="black">';
system('sudo netstat-nat -n');
echo '</font>';
echo '</h3>';
echo '<pre>';
}
elseif($opt == 5)
{
echo '<pre>';
echo '<body bgcolor=CornflowerBlue>';
system('sudo /home/apache/firewall');
echo "<font color=red size=7><center><b>Firewall Restaurado</b></center></font>";
system('sudo iptables -v -L -n');
system('sudo -t nat iptables -v -L -n');
system('sudo -t mangle iptables -v -L -n');
echo '<pre>';
echo '</body>';
}
elseif($opt == 6)
{
echo '<html><body bgcolor=CornflowerBlue>';
echo '<pre>';
$ip_detectado = $_SERVER["REMOTE_ADDR"];
echo "<h2>$ip_detectado</h2>";
echo "<font color=green size=7><center><b>Status do Firewall</b></center></font>";
system('sudo iptables -v -L -n');
system('sudo iptables -t nat -v -L -n');
system('sudo iptables -t mangle -v -L -n');
echo '</pre>';
echo '</body></html>';
}
else
{
system("sudo iptables -I FORWARD -s $opt -j REJECT",$retval);
if($retval == 2)echo "\nIP INCORRETO!";
}
?>
<form>
<input type='button' value='Voltar' onclick="javascript: history.go(-1)" />
</form>
</body>
</html>
Percebam que eu criei uma regra de REJECT na chain FORWARD e uma regra de REDIRECT na chain PREROUTING da tabela NAT, possibilitando a exibição de uma mensagem de bloqueio na tela das máquinas bloqueadas.