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.
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.
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ão Acessar para efetuar sua conexã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.
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
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
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.
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