Página 6 de 7 PrimeiroPrimeiro ... 234567 ÚltimoÚltimo
+ Responder ao Tópico



  1. uso hotspot com ip fixo e radius...

    amarro o MAC x Login X IP sem problemas

    vamos lá...


    Configurar o mysql na Tabela radgroupreply para acessar o arquivo perl:
    ------------------------------------------------------------------------------
    GroupName: nome_do_grupo_dos_seus_usuários (ex: radio)
    Attribute: Exec-Program-Wait
    op: ==
    Value: /etc/raddb/lib3.pl %u %i %C %n %{request:Framed-IP-Address}

    PS.: acima temos o caminho do arquivo...é a unica coisa q tem q mudar
    --------------------------------------------------------------------------------------------



    criar o arquivo lib3.pl (ou o nome que vcs derem acima no caminho passado)
    #touch /etc/raddb/lib3.pl


    editar o arquivo criado acima
    #pico /etc/raddb/lib3.pl (o texto abaixo vai dentro desse arquivo)

    ---------------------- recorte aqui --------------------------
    #!/usr/bin/perl
    use POSIX qw(strftime);
    use Unix::Syslog qw(:macros :subs);
    use DBI;
    my $servidor = "localhost";
    my $servidor_porta = "3306";
    my $servidor_usuario = "usuario_BD";
    my $servidor_senha = "senha_BD";
    my $servidor_db = "medianeira";
    my $servidor_db_radius = "radius";
    my $tabela_login = "radcheck";
    my $tabela_cont = "contratos";
    my $tabela_multi = "contratos_users_radius";
    my $tabela_mac = "contratos_macs";
    my $tabela_mac_intruso = "contratos_macs_erros";
    my $tabela_ip_intruso = "contratos_ips_erros";
    my $codigo_erro = "1";
    my $codigo_erro_mac = "1";
    my $codigo_erro_ip = "1";

    sub erro_permitido()
    {
    openlog(Pemitidos, LOG_PID, LOG_INFO);
    syslog(LOG_INFO, "Login=$ARGV[0] MAC=$ARGV[1] IP=$ARGV[4]\n");
    closelog;
    }
    sub erro_bloqueado()
    {
    openlog(Bloqueados, LOG_PID, LOG_INFO);
    syslog(LOG_INFO, "Login=$ARGV[0] MAC PC=$ARGV[1] IP PC=$ARGV[4]\n");
    closelog;
    }
    if (($ARGV[2] eq 'Mikrotik132') || ($ARGV[2] eq 'Mikrotik145') || ($ARGV[2] eq 'Mikrotik194'))
    {
    # Conecta banco medianeira para verificar mac na tabela contratos_macs
    $dbh = DBI->connect("DBI:mysql:database=$servidor_db;host=$servidor;port=$servidor_porta", $servidor_usuario, $servidor_senha);
    $pega_mac = $dbh->prepare("SELECT mac FROM $tabela_mac WHERE UserName=\"$ARGV[0]\" LIMIT 1");
    $pega_mac->execute;
    if(@row = $pega_mac->fetchrow_array)
    {
    $pega_mac->finish;
    $dbh->disconnect;
    if ($row[0] =~ /$ARGV[1]/)
    {
    $codigo_erro_mac = "0";
    # Conecta banco medianeira para verificar ip na tabela contratos
    $dbh = DBI->connect("DBI:mysql:database=$servidor_db;host=$servidor;port=$servidor_porta", $servidor_usuario, $servidor_senha);
    $pega_ip = $dbh->prepare("SELECT c.ip,c.id FROM $tabela_cont c,$tabela_multi m WHERE ((c.login_radio=\"$ARGV[0]\") OR (c.multi_users=1 AND m.login_radius=\"$ARGV[0]\" AND m.idContrato=c.id)) LIMIT 1");
    $pega_ip->execute;
    if(@row = $pega_ip->fetchrow_array)
    {
    $pega_ip->finish;
    $dbh->disconnect;
    # Comparar ip passado com o do banco
    if ($row[0] =~ /$ARGV[4]/)
    {
    $codigo_erro_ip = "0";
    }
    else
    {
    $ip_selecionado = $row[0];
    if($ip_selecionado == "0" || $ip_selecionado == "")
    {
    # Conecta banco medianeira e insere ip na tabela de erros
    $dbh = DBI->connect("DBI:mysql:database=$servidor_db;host=$servidor;port=$servidor_porta", $servidor_usuario, $servidor_senha);
    $grava = $dbh->prepare("UPDATE $tabela_cont SET ip=\"$ARGV[4]\" WHERE id=\"$row[1]\" ");
    $grava->execute;
    $grava->finish;
    $dbh->disconnect;
    $codigo_erro_ip = "0";
    }
    else
    {
    # Conecta banco medianeira e insere ip na tabela de erros
    $dbh = DBI->connect("DBI:mysql:database=$servidor_db;host=$servidor;port=$servidor_porta", $servidor_usuario, $servidor_senha);
    $grava = $dbh->prepare("INSERT INTO $tabela_ip_intruso (UserName,ip_pc,ip_banco,data) VALUES (\"$ARGV[0]\",\"$ARGV[4]\",\"$ip_selecionado\",SYSDATE())");
    $grava->execute;
    $grava->finish;
    $dbh->disconnect;
    $codigo_erro_ip = "1";
    }
    }
    }
    }
    else
    {
    $mac_selecionado = $row[0];
    # Conecta banco medianeira e insere mac na tabela de erros
    $dbh = DBI->connect("DBI:mysql:database=$servidor_db;host=$servidor;port=$servidor_porta", $servidor_usuario, $servidor_senha);
    $grava = $dbh->prepare("INSERT INTO $tabela_mac_intruso (UserName,mac_pc,mac_banco,data) VALUES (\"$ARGV[0]\",\"$ARGV[1]\",\"$mac_selecionado\",SYSDATE())");
    $grava->execute;
    $grava->finish;
    $dbh->disconnect;
    $codigo_erro_mac = "1";
    }
    }
    else
    {
    $pega_mac->finish;
    $dbh->disconnect;
    # Conecta banco medianeira para verificar mac na tabela contratos_macs
    $dbh = DBI->connect("DBI:mysql:database=$servidor_db;host=$servidor;port=$servidor_porta", $servidor_usuario, $servidor_senha);
    $grava = $dbh->prepare("INSERT INTO $tabela_mac VALUES (\"\",\"$ARGV[0]\",\"$ARGV[1]\")");
    $grava->execute;
    $grava->finish;
    $dbh->disconnect;
    #Possibilidade se inserção ou verificação de IP
    $codigo_erro_mac = "0";
    $codigo_erro_ip = "0";
    }
    }
    if ($codigo_erro_mac != "0" || $codigo_erro_ip != "0")
    {
    $mensagem_erro = "MAC ou IP inválidos";
    erro_bloqueado();
    }
    else
    {
    erro_permitido();
    }
    if ($codigo_erro_mac == "0" && $codigo_erro_ip == "0")
    {
    $codigo_erro = "0";
    }
    exit($codigo_erro);
    --------------------- recorte aqui --------------------------

    my $tabela_login = "radcheck";
    -> padrão dos radius

    my $tabela_cont = "contratos";´
    -> contem vários campos com dados, os mais importantes são:
    -----> login_radio
    -----> ip

    my $tabela_multi = "contratos_users_radius";
    -> campos:
    ----->id
    ----->idContrato
    ----->login_radius
    ----->senha_radius

    my $tabela_mac = "contratos_macs";
    -> campos:
    ----->id
    ----->UserName
    ----->mac - formato: xx:xx:xx:xx:xx:xx

    my $tabela_mac_intruso = "contratos_macs_erros";
    -> campos:
    ----->id
    ----->UserName
    ----->mac_pc
    ----->mac_banco
    ----->data

    my $tabela_ip_intruso = "contratos_ips_erros";
    -> campos:
    ----->id
    ----->UserName
    ----->ip_pc
    ----->ip_banco
    ----->data

    Algumas observações:

    - Se o login ex: testelogin, quando for logar nao for localizado um mac, na tabela 'contratos_mac', o script cadastra automaticamente no banco o mac, pois supoe-se que o primeiro login é feito no cliente com a prescença do técnico do provedor (pelo menos aqui é assim, fica a critério de cada).
    - A verificação de login X mac X ip, só é feita após o login ter ocorrido, entao nao estamos verificando o login e senha, q está no banco radius, provável na tabela radcheck, supomos que isto já esteja sendo usado e em funcionamento.
    - Bug: Se um ip fizer login e vier pro script pra verificação, e for ele ex: 192.168.1.111, e no banco de dados estiver 192.168.1.1, é provável que deixa passar, (pois ele usa if ($row[0] =~ /$ARGV[4]/) que é como se fosse um like do mysql, mas em perl) é um erro q já estou vendo pra trocar, fica a critério de cada um mexer no script, e tmb por conta próprio o uso ou nao do script, nao me responsabilizo por nda...
    - existe tmb uma forma de amarrar via banco de dados, preferi usar script pois tenho logs de tudo, no syslog do linux e tmb no banco de dados.

    Existe uma forma de amarrar tal login pra ele sempre pegar o mesmo ip pra quem usa dhcp e controla os usuários no radius, segue:

    na tabela radcheck:

    UserName: logindocliente (ex: joaodossantos)
    Attribute: Framed-IP-Address
    op: ==
    Value: ipdocliente (ex: 192.168.50.50)

    toda vez que o cliente joaodossantos logar ele pegara esse ip cadastrado acima...

    Bom, me desculpe por tantas linhas, mas é presciso, desculpe os erros, e estamos ae pra dicas e críticas...espero ter ajudado alguém, assim como tantos me ajudaram já...

    Obrigado e passar bem...
    Última edição por Mr_Dom; 10-02-2009 às 10:19.

  2. Ufa ! quanta informação, valeu cara, mas não uso radius, será que ainda tem jeito ?



  3. Cara ja que você citou do radius...você teria algum tutorial passo a passo de como instalar e configurar?
    vlww

  4. Citação Postado originalmente por gustavinho69 Ver Post
    Cara ja que você citou do radius...você teria algum tutorial passo a passo de como instalar e configurar?
    vlww


    ta na hands ( Mikrotik + Freeradius + Mysql + Hotspot ( Casando MAC/IP/Login/Senha ) )

    se quiser usar o google tmb...ajuda bastante..hehehe

    freeradius + mikrotik - Google Search


    flws...qq coisa posta ae...t+



  5. malsss cara nao havia visto este topico...vlww






Tópicos Similares

  1. Respostas: 10
    Último Post: 18-04-2008, 17:51
  2. Respostas: 3
    Último Post: 11-02-2008, 21:48
  3. Respostas: 1
    Último Post: 02-10-2007, 20:14
  4. comandos que nao tem no slackware
    Por Dedao no fórum Servidores de Rede
    Respostas: 4
    Último Post: 17-05-2006, 18:07
  5. problema com o sch_cbq será que alguem tem os arquivos?
    Por 00Bond no fórum Servidores de Rede
    Respostas: 0
    Último Post: 15-12-2004, 17:19

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L