+ Responder ao Tópico



  1. #1

    Padrão CAPTIVE - Capturando pagina inicial do cliente

    Ola pessoal!
    Queria saber se alguem pode me indicar um bom tutorial de CAPTIVE usando NoCAT so que detalhe, quero continuar usando minhas regras de iptables.
    Se alguem souber algo do genero fico agradecido.

  2. #2

    Padrão

    Amigo não tive sucesso com NoCAT, tentei varias vezes sem sucesso, porem se vc tiver interesse tenho um sistema que fiz aqui pra usar em conjunto com o SGCU ( :: Vigo Tecnologia :: ), o sistema de captive portal redireciona o cliente pra pagina de autenticação, verificando no banco de dados do SGCU o login, senha, IP, MAC e status (Ativo ou Bloqueado no sistema financeiro do SGCU), apos o login ser efetuado com sucesso executa as regras de firewall iptables travando mac x ip e liberando o acesso a internet do cliente, se o cliente estiver com boletos em aberto ele não consegui autenticar, e recebe uma mensagem de aviso durante o login.

    Estou trabalhando em um sistema pra uso da comunidade com cadastro de clientes, planos de acesso e captive portal , porem ele anda meio parado ja que estou meio sem tempo, se tiver interesse em ajudar sera muito bem vindo =)

    Segue abaixo o script pra redirecionar o cliente pra pagina de autenticação

    #!/bin/bash

    ### Define as variaveis
    IPT=/sbin/iptables
    IPCLIENTE='/etc/rc.d/firewall-ips'

    #### Ativa o roteamento
    echo "1" > /proc/sys/net/ipv4/ip_forward

    #### Limpa as regras
    $IPT -F
    $IPT -X
    $IPT -Z
    $IPT -F -t nat
    $IPT -X -t nat
    $IPT -Z -t nat

    #### Define a politica padrao
    $IPT -P INPUT ACCEPT
    $IPT -P FORWARD DROP
    $IPT -P OUTPUT ACCEPT

    #### Libera o interface
    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A OUTPUT -o lo -j ACCEPT

    #### Filtros
    # Bloquear Netbios
    $IPT -A INPUT -p udp --dport 137:139 -j DROP
    $IPT -A INPUT -p tcp --dport 137:139 -j DROP
    $IPT -A INPUT -p tcp --dport 445 -j DROP

    $IPT -A FORWARD -p udp --dport 137:139 -j DROP
    $IPT -A FORWARD -p tcp --dport 137:139 -j DROP
    $IPT -A FORWARD -p tcp --dport 445 -j DROP

    #### Redireciona toda a rede
    grep "^" $IPCLIENTE | while read IP;
    do

    $IPT -t nat -N "PRE-$IP"
    $IPT -t nat -A "PRE-$IP" -p tcp -s $IP --dport 80 -j REDIRECT --to-port 82
    $IPT -t nat -A PREROUTING -p tcp -s $IP --dport 80 -j "PRE-$IP"
    #### Bloqueia as conexões de entrada destinado ao IP do cliente da porta 0 ate 1024
    $IPT -A FORWARD -s 0/0 -d $IP -p tcp --dport 0:1024 -j DROP

    done

    #### Ativa os modulos do Kernel
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ip_queue
    modprobe ip_tables
    modprobe ipt_LOG
    modprobe ipt_MARK
    modprobe ipt_MASQUERADE
    modprobe ipt_REDIRECT
    modprobe ipt_REJECT
    modprobe ipt_TCPMSS
    modprobe ipt_TOS
    modprobe ipt_limit
    modprobe ipt_mac
    modprobe ipt_mark
    modprobe ipt_multiport
    modprobe ipt_owner
    modprobe ipt_state
    modprobe ipt_tcpmss
    modprobe ipt_tos
    modprobe iptable_filter
    modprobe iptable_mangle
    modprobe iptable_nat

    Pra usar crie um arquivo neste caso com o nome de firewall-ips e coloque o endereço IP de cada cliente 1 por linha

    Agora segue as configurações do virtual host no apache, lembrando que no caso tenho o DNS em cada firewall,

    #### Configurar o APACHE PRA RODA NA PORTA 82
    Listen 82

    #### Virtual host
    <VirtualHost *:82>
    DocumentRoot "/var/www/login/"
    <Directory "/var/www/login/">
    allow from all
    Options +Indexes
    </Directory>
    CheckSpelling On
    Options +FollowSymLinks
    RewriteEngine on
    # 192\.168\.100\.1 alterar pelo IP da interface do servidor conectado a rede dos clientes
    RewriteCond %{HTTP_HOST} !^200\.200\.200\.2 [NC]
    RewriteCond %{HTTP_HOST} !^$

    # 192.168.100.1 alterar pelo IP da interface do servidor conectado a rede dos clientes
    RewriteRule ^(.*)$ "http://200.200.200.2:82/index.php?&url=%{HTTP_HOST}" [L]
    </VirtualHost>

    Pagina de autenticação index.html
    <html>
    <head>
    <title>Login</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>
    <form name="form1" method="post" action="login.php">
    <p>Bem vindo clique no bot&atilde;o Acessar para efetuar sua conex&atilde;o com a internet
    <input name="site" type="hidden" id="site" value="<? echo $_REQUEST['url'] ?>" />
    </p>
    <p>
    <input type="submit" name="Submit" value="Acessar">
    </p>
    </form>
    </body>
    </html>

    Script de autenticação login.php
    <?php

    // IP da placa de rede conectada a internet
    $servidor="200.200.200.2";
    //Site do provedor ou site pra onde o cliente sera redireciona
    $siteprovedor="www.meuprovedor.com.br";
    //Porta do Squid
    $squid="8080";

    // Pega os dados do Formulario de Login
    $site = $_POST['site'];

    // Pega o IP do Cliente
    $ip = $_SERVER['REMOTE_ADDR'];

    // Pega o Mac Address da tabela ARP do servidor
    $mac = 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");

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

    // Grava a conexão
    $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 que ele estava tentando abrir
    header("Location:http://$site");
    // Redireciona o Cliente pro site do provedor
    // header("Location:http://$siteprovedor");
    ?>

    Falow

    Espero ter ajudado
    Última edição por cleciorodrigo; 27-04-2007 às 13:54.

  3. #3

    Padrão opa, melhoro ta melhorando o trem

    veio nessas linhas de iptables o que representa esse "PRE-" ?
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -D PREROUTING -p tcp -s $ip --dport 80 -j PRE-$ip");
    Desculpa a pergunta e pq disconheco ele!
    Mas que esse seu post me abriuuu a kbeca abriu.... isso ai da pra desengatar muita coisa

  4. #4

    Smile incrivel!!!!

    Cara, esse seu sistema deve ser algo realmente inedito, porem o mais engraçado é que o mesmo é muito parecido (podem comparar os codigos) com o sistema que fiz a muito tempo atras a esta publicado em vários sites...
    http://www.abramulti.com.br/downloads/siscap.pdf

  5. #5
    Moderador Avatar de xandemartini
    Ingresso
    Nov 2005
    Localização
    Espumoso, Brazil
    Posts
    2.405
    Posts de Blog
    1

    Padrão

    Citação Postado originalmente por cleciorodrigo Ver Post

    Estou trabalhando em um sistema pra uso da comunidade com cadastro de clientes, planos de acesso e captive portal , porem ele anda meio parado ja que estou meio sem tempo, se tiver interesse em ajudar sera muito bem vindo =)

    Segue abaixo o script pra redirecionar o cliente pra pagina de autenticação

    ....

    Falow

    Espero ter ajudado
    Parabéns pela inciativa de postar, amigo! Isso tá ficando cada vez mais raro! Parabéns mais uma vez pela iniciativa...

  6. #6

    Padrão

    Vc tem razão, estes código acima é baseado no SISCAP, tanto que é o maior prazer encontra-lo neste tópico, antes o arquivo fikava neste site neh http://wwmarcus.cjb.net , bem pra quem quiser ver como esta fikando o sistema pode acessar [ SisCaPI - beta ] usuário admin e senha admin, postei apenas partes do codigo, ha e não me esqueci dos créditos basta visualizar o código fonte das paginas em php.

    Citação Postado originalmente por KALAMAT Ver Post
    Cara, esse seu sistema deve ser algo realmente inedito, porem o mais engraçado é que o mesmo é muito parecido (podem comparar os codigos) com o sistema que fiz a muito tempo atras a esta publicado em vários sites...
    http://www.abramulti.com.br/downloads/siscap.pdf

  7. #7

    Padrão

    Funciona da seguinte forma quando vc executa o script de firewall ele cria regras redirecionando o IP do cliente pra porta 82 no caso onde esta rodando o virtual host do apache, essa regra que vc esta na duvida apaga as regras de redirecionamento pra depois criar as regras de nat

    no script de firewall vc tem a regra
    iptables -t nat -A PREROUTING -p tcp -s $ip --dport 80 -j PRE-$ip

    o -A cria a regra de redirecionamento

    no script php vc tem a regra
    iptables -t nat -D PREROUTING -p tcp -s $ip --dport 80 -j PRE-$ip

    o -D apaga a regra de redirecionamento, ele tem que ser apagada pq mesmo que vc faça as regas de nat ela continuara redirecionando pra pagina de autenticação

    Citação Postado originalmente por tianguapontocom Ver Post
    veio nessas linhas de iptables o que representa esse "PRE-" ?
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -D PREROUTING -p tcp -s $ip --dport 80 -j PRE-$ip");
    Desculpa a pergunta e pq disconheco ele!
    Mas que esse seu post me abriuuu a kbeca abriu.... isso ai da pra desengatar muita coisa

  8. #8