Procurando uma solução que fosse ao mesmo tempo simples de ser implementada e de grande eficiência comparados aos gateways mais sofisticados que empregam bancos de dados e etc, cheguei a esta solução ideal para ser usada em provedores wireless ou a cabo. Ela ainda está em desenvolvimento e dada a sua enorme simplicidade de seu conceito pode servir de base para projetos mais elaborados.
Primeiramente criamos um arquivo denominado mac_accept4.cgi, o 4 é apenas uma convenção minha par cada modificação que inseri no script. Crie-o em seu diretório cgi-bin, que em meu caso é o default /var/www/cgi-bin.
Este arquivo pertencerá ao root e deverá ter o SUID habilitado para que o apache o execute com privilégios de root.
Então altere suas permissões:
# chmod 4775 mac_accept4.cgi
Não se esqueçam de criar um link simbólico para ele no nosso DocumentRoot:
# ln -sf /var/www/cgi-bin /mnt/sda6/httpd/cgi-bin
ATENÇÃO! Após o início de nosso script CGI "#!/bin/bash" dê um LF "ou enter" e digite "echo" na linha seguinte, pois o apache não irá executá-lo se isso não for feito.
if [ $clientcheck ];then
echo "$clientcheck CONFERE<br>"
else
echo "$clientcheck NÃO CONFERE<br>"
echo "Saindo..<br>"
exit
fi
if [ $ipclient ];then
sudo /usr/sbin/iptables -D INPUT -s $REMOTE_ADDR -m mac --mac-source $macclient -j ACCEPT | sudo /usr/sbin/iptables -D FORWARD -s $REMOTE_ADDR -m mac --mac-source $macclient -j ACCEPT
echo "Autenticação Cancelada<br>"
else
sudo /usr/sbin/iptables -I INPUT -s $REMOTE_ADDR -m mac --mac-source $macclient -j ACCEPT | sudo /usr/sbin/iptables -I FORWARD -s $REMOTE_ADDR -m mac --mac-source $macclient -j ACCEPT
echo "Autenticado com sucesso!<br>"
fi
/bin/kill -9 $PPID
echo </boby>
echo </html>
Observem que o script atua como um "toggle", ou seja, ele faz a operação inversa quando é executado uma segunda vez. Isso tem a finalidade de evitar que hajam autenticações simultâneas. Se o cliente "esperto" der seu login e senha para um amigo que clone o IP e MAC do hardware do cliente, ele será autenticado, porém irá desfazer a autenticação antes estabelecida.
[1] Comentário enviado por removido em 27/07/2007 - 15:57h
Olá Amigo,
Bom, para deixar seu artigo ainda mais rico eu gostaria de dar uma opinião! No caso de um hijack bem feito (roubo de seção), quando o cliente cai e em seguida entra o hijack seu arping vai consultar ele tranqüilamente! Concorda!? Espero que sim, pois eu já fiz testes com isso e infelizmente da certo! A solução é simples, ao invés de fazer o servidor consultar quem está de pé ou não, o que dependendo do número de estações tem um tempo elevado, eu sugiro mudar para o comando at. Como já uso o servidor Radius, foi fácil, no comando AT eu agendo uma verificação pra saber se o IP tal é do fulano de tal conectado no radius, aí sim, se não for a regra dele é derrubada! Pra substituir o uso do radius, pode-se pensar em cookie, por exemplo!
[2] Comentário enviado por capitainkurn em 27/07/2007 - 17:50h
Boa! nem havia me ocorrido o at.
Quando elaborei aquele while de arping, pensei em coloca-los isoladamente rodando sob um shell filho do mac_accept4.cgi que seria chamado em background, mas esbarrei em um problema... não entendí ainda o por que de não conseguir rodar um loop em um shell filho a partir de um CGI, mas é uma coisa que estou bolando e a sua idéia do at foi grande.
Obrigado pela dica, e espero que tenha gostado do artigo.
[4] Comentário enviado por capitainkurn em 23/04/2008 - 10:03h
É mais fácil ainda, a única razão para eu atrelar o ip ao mac address é o controle de banda, pois provedores em geral possuem planos de velocidade diferentes e se não houver vínculo entre o IP e o login e senha o usuário poderia configurar um IP manualmente e usar uma velocidade maior do que a contratada.
[5] Comentário enviado por cleibson em 03/05/2009 - 22:57h
Como o cliente será diretionado para autenticação, sendo que não há nenhuma regra redirecionando sua navegação para a porta 443 obrigando-o a autenticar antes de navegar
[7] Comentário enviado por douglassironi em 28/06/2011 - 18:38h
Sobre a questão de atrelar MAC, podemos fazer isso com PHP, no momento que o cliente se cadastra e cria seu usuario e senha, podemos tranquilamente pegar o MAC dele com a função, abaixo tem um link explicando como fazer.