Coovachilli Captive Portal

1. Coovachilli Captive Portal

Roberto Candido de Oliveira Júnior
robertoj

(usa Slackware)

Enviado em 13/07/2010 - 12:29h

Boa tarde, estou implementando uma hotspot utilizando Coovachilli, FreeRADIUS.
O FreeRADIUS esta funcionando perfeitamente, já o Coovachilli não.
Estou enfrentando problemas para configurar o Coovachilli, não encontro um material bom, os que encontro são antigos e confusos.
Se puderem me dar uma força.
Att., Roberto


  


2. Re: Coovachilli Captive Portal

Daniel de Andrade Xavier
daniel-xavier

(usa Debian)

Enviado em 07/08/2013 - 08:11h

Olá.
Bom tenho alguns problemas ainda com o Coova, mas com senhas em texto puro consegui fazer funcionar.
Caso eu posso te ajudar mande ai suas perguntas.

Aqui vou te passar um tutorial que montei a partir de várias informações coletadas, então pode ter alguma coisa fora de lugar, vamos nos falando e nos ajudando.
Espero que te ajude:

Primeiro é preciso instalar o Debian 7 em 32 bits.

Faça a instalação básica, na seleção de pacotes só coloquei como extra o servidor ssh.

Após a instalação e o reinicio do servidor entre com o usuário e senha fornecido durante a instalação e atribua uma senha ao usuário root:

Configuração de rede inicial
Logue-se como root, verifique as configurações de rede:

Edite o arquivo /etc/network/interfaces, deixando da seguinte forma ( mude os IPs da ETH0 e DNS para a faixa da sua rede a ETH1 não tem necessidade de mexer):

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface

# Interface WAN
allow-hotplug eth0
iface eth0 inet static
address 10.19.20.248
netmask 255.255.255.0
network 10.19.20.0
broadcast 10.19.20.255
gateway 10.19.20.222

# Interface LAN
auto eth1
iface eth1 inet static
address 10.19.100.5
netmask 255.255.255.0
broadcast 10.19.100.255
network 10.19.100.0


# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 10.19.20.222 8.8.8.8
dns-search coova.com.br


Inverta os cabos de rede se necessário, reinicie a rede e verifique novamente:

# reboot

Estando tudo ok, grave bem o IP da interface eth0 caso for utilizar o putty.

Atualização e pré-instalação dos pacotes
A partir desse ponto eu utilizei o putty no Windows, devido a mobilidade, você pode fazer o mesmo. Fica mais fácil copiar e colar os comandos, execute a atualização:

Edite o arquivo source.list, deixe assim:

# nano /etc/apt/sources.list

#

# deb cdrom:[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 CD Binary-1 20130504-15:20]/ wheezy main

#deb cdrom:[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 CD Binary-1 20130504-15:20]/ wheezy main

deb http://ftp.br.debian.org/debian/ wheezy main
deb-src http://ftp.br.debian.org/debian/ wheezy main

deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

# wheezy-updates, previously known as 'volatile'
deb http://ftp.br.debian.org/debian/ wheezy-updates main
deb-src http://ftp.br.debian.org/debian/ wheezy-updates main

# Repositorio para Webmim
deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib

# apt-get update
# apt-get upgrade

Baixe o pacote do logo


apt-get install linuxlogo


Faça cópia de segurança do arquivo original
cp /etc/issue /etc/issue.bak

Faça a troca pelo arquivo novo
cp /etc/issue.linuxlogo /etc/issue



E instale os pacotes:

# apt-get install mysql-server phpmyadmin freeradius freeradius-utils freeradius-mysql apache2 php-pear php-db mc bind9 liblua5.1-0 dpkg-dev debhelper libssl-dev haserl


&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
apt-get install mysql-server phpmyadmin freeradius freeradius-utils freeradius-mysql apache2 php-pear php-db phpmyadmin mc bind9 liblua5.1-0
Lendo listas de pacotes... Pronto
Construindo árvore de dependências
Lendo informação de estado... Pronto
Os pacotes extra a seguir serão instalados:
apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common bind9utils dbconfig-common fontconfig-config freeradius-common libaio1
libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libdbd-mysql-perl libdbi-perl libffi5 libfontconfig1 libfreeradius2
libgd2-xpm libglib2.0-0 libglib2.0-data libhtml-template-perl libjpeg8 libltdl7 libmcrypt4 libmysqlclient18 libnet-daemon-perl libonig2 libpcap0.8
libperl5.14 libplrpc-perl libpng12-0 libpython2.7 libqdbm14 libxpm4 mc-data mysql-client-5.5 mysql-common mysql-server-5.5 mysql-server-core-5.5 php5-cli
php5-common php5-gd php5-mcrypt php5-mysql shared-mime-info ssl-cert ttf-dejavu-core unzip
Pacotes sugeridos:
apache2-doc apache2-suexec apache2-suexec-custom bind9-doc resolvconf ufw virtual-mysql-client mysql-client postgresql-client freeradius-ldap
freeradius-postgresql freeradius-krb5 libgd-tools libipc-sharedcache-perl libmcrypt-dev mcrypt zip arj xpdf pdf-viewer dbview odt2txt gv catdvi
djvulibre-bin imagemagick python-boto python-tz libterm-readkey-perl tinyca php5-dev openssl-blacklist
Os NOVOS pacotes a seguir serão instalados:
apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common bind9 bind9utils dbconfig-common fontconfig-config freeradius freeradius-common
freeradius-mysql freeradius-utils libaio1 libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libdbd-mysql-perl libdbi-perl
libffi5 libfontconfig1 libfreeradius2 libgd2-xpm libglib2.0-0 libglib2.0-data libhtml-template-perl libjpeg8 libltdl7 liblua5.1-0 libmcrypt4
libmysqlclient18 libnet-daemon-perl libonig2 libpcap0.8 libperl5.14 libplrpc-perl libpng12-0 libpython2.7 libqdbm14 libxpm4 mc mc-data mysql-client-5.5
mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 php-db php-pear php5-cli php5-common php5-gd php5-mcrypt php5-mysql phpmyadmin
shared-mime-info ssl-cert ttf-dejavu-core unzip
0 pacotes atualizados, 61 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.
à preciso baixar 35,9 MB de arquivos.

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

Durante a instalação dos pacotes será solicitada uma senha para o servidor mysql grave bem essa senha.

Configuração do apache2
Habilite o modulo ssl no apache2

# a2enmod ssl
# a2ensite default-ssl
# /etc/init.d/apache2 restart

E vamos ao primeiro teste. No navegador de internet digite http://xxx.xxx.xxx.xxx, onde xxx.xxx.xxx.xxx é o ip o seu servidor. Deve aparecer a página inicial do apache, em seguida digite https://xxx.xxx.xxx.xx, deve aparecer a mesma página anterior ou a mensagem de erro de certificado.

Instalação do daloradius
Agora vamos instalar o daloradius, uma interface gráfica em web para auxiliar na criação de usuários:

# cd /tmp
# wget 'http://downloads.sourceforge.net/project/daloradius/daloradius/daloradius-0.9-8/daloradius-0.9-8.tar.gz'
# tar xvzf daloradius-0.9-8.tar.gz
# mv /tmp/daloradius-0.9-8 /var/www/daloradius
# chown -R www-data:www-data /var/www/daloradius
# cp -r /var/www/daloradius/contrib/chilli/portal2/* /var/www/
# rm /var/www/index.html
Próxima página >>

Configurações
Configuração do freeradius
Agora vamos configurar o freeradius:

# nano /etc/freeradius/clients.conf

Dentro da sessão "cliente localhost {", troque a senha da linha secret conforme o exemplo:

secret = testing123

Edite o arquivo /etc/freeradius/sql.conf, alterando os parâmetros:

server =
login =
password = ( aqui você coloca a senha do mysql fornecida durante a instalação do mysql)

# nano /etc/freeradius/sql.conf

# Connection info:
server = "localhost"
#port = 3306
login = "root"
password = "XXXXXXX" senha do banco

No arquivo /etc/freeradius/sites-available/default, descomente as linhas sql dentro das sessões "authorize {" e "accounting {":

# nano /etc/freeradius/sites-available/default

authorize {
sql
}

accounting {
sql
}

No arquivo /etc/freeradius/radiusd.conf descomente a linha #$INCLUDE sql.conf:

# nano /etc/freeradius/radiusd.conf

$INCLUDE sql.conf

Habilite isso na seção logs do radiusd.conf para acompanhar a autenticacao do usuarios:

auth = yes
auth_badpass = yes
auth_goodpass = yes



Criação do banco de dados
Agora vamos criar o banco de dados do radius no mysql:

# mysql -u root -p

Entre com a senha do mysql e digite os seguintes comandos:

mysql> CREATE DATABASE radius;
mysql> exit

Com o banco de dados criado vamos criar as tabelas necessárias:

OBS: dentro do arquivo deve-se trocar a palavra timestamp por varchar, antes de rodar o comando abaixo


# nano /var/www/daloradius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql


# mysql -u root -p radius < /var/www/daloradius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql

Configuração do daloradius
Modifique o arquivo /var/www/daloradius/library/daloradius.conf.php:

nano /var/www/daloradius/library/daloradius.conf.php

$configValues['DALORADIUS_VERSION'] = '0.9-8';
$configValues['FREERADIUS_VERSION'] = '1';
$configValues['CONFIG_DB_ENGINE'] = 'mysql';
$configValues['CONFIG_DB_HOST'] = '127.0.0.1';
$configValues['CONFIG_DB_USER'] = 'root';
$configValues['CONFIG_DB_PASS'] = 'senha do banco'; # Senha no MySQL
$configValues['CONFIG_DB_NAME'] = 'radius';
$configValues['CONFIG_DB_TBL_RADUSERGROUP'] = 'radusergroup';




No arquivo /var/www/signup-free/index.php troque "User-Password" por "Cleartext-Password" e troque "==" por ":=" :

# nano /var/www/signup-free/index.php

$sql = "INSERT INTO ".$configValues['CONFIG_DB_TBL_RADCHECK']." (id, Username, Attribute, op, Value) ".
" VALUES (0, '$username', 'Cleartext-Password', ':=', '$password')";


E vamos preparar o daloradius para comunicar com o chillispot:

# nano /var/www/hotspotlogin/hotspotlogin.php

Troque a senha na linha abaixo:
$uamsecret = "uamsecret";


Testando e Finalizando
Teste do freeradius
Reinicie o freeradius:

# /etc/init.d/freeradius restart

Vamos testar, no navegador vá para https://10.19.20.248/daloradius/ entre com o usuário administrator e senha radius,

vá em Management,
depois em new user,
forneça um nome de usuário
e uma senha, por exemplo: usuário dxavier e senha 123.

Em password type escolha ClearText-Password e
clique em apply, no terminal execute:

# radtest dxavier 123 localhost 0 testing123

Se aparecer:

Sending Access-Request of id 240 to 127.0.0.1 port 1812
User-Name = "dxavier"
User-Password = "123"
NAS-IP-Address = 10.19.20.248
NAS-Port = 0
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=240, length=20


Está tudo ok!


Caso contrário revise as configurações.

Instalação e configuração do coovachilli


#####################################################################################
Vamos lá:

#cd /tmp
# wget http://ap.coova.org/chilli/coova-chilli_1.2.6_i386.deb
# dpkg -i coova-chilli_1.2.6_i386.deb
OBS: caso de erros baixe o seguinte, verifique a mensagem pode estar faltando este pacote abaixo
wget http://ftp.br.debian.org/debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_i386.deb

Execute o comando abaixo:
dpkg -i libssl0.9.8_0.9.8o-4squeeze14_i386.deb
Repita o passo
# dpkg -i coova-chilli_1.2.6_i386.deb
Edite o arquivo
# nano /etc/init.d/chilli e mude a linha
START_CHILLI=0
para
START_CHILLI=1

Pronto, Coova instalado!



#####################################################################################

Pare o freeradius:

# /etc/init.d/freeradius stop


Logo após, digite:

# insserv -vf chilli

Vamos para a configuração do CoovaChilli. Primeiro copie o arquivo padrão para o de configuração:

# cp -a /etc/chilli/defaults /etc/chilli/config

Segundo, mude para ativo a inicialização do arquivo /etc/default/chilli:
START_CHILLI=1

Edite o arquivo /etc/chilli/config

Nesta versão do Coova, alterei uma configuração, pois o restante estava tudo "no padrão", apenas a variável que diz onde o Coova vai trabalhar o servidor primário de DNS:
HS_LANIF=eth1 # Verificar qual sua ETH é sua placa de LAN
HS_DNS1=10.19.20.222


Crie um arquivo com nome "firewall.coova" dentro da pasta /etc/ com o seguinte conteudo:

# nano /etc/firewall.coova

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $network
# Required-Stop: $network
# Default-Start: S
# Default-Stop: 0 1 6
# Short-Description: Provides Firewall Rules based on Iptables IPV4
### END INIT INFO
#
IFACEWAN=eth0
IFACECOOVA=eth1
NETCOOVA=10.1.0.0/24
#
## RULES STARTS -->

# Chains off CoovaChilli ...
iptables -N coova-INPUT &> /dev/null
iptables -N coova-FORWARD &> /dev/null
iptables -t mangle -N coova-FORWARD &> /dev/null
iptables -t nat -N coova-PREROUTING &> /dev/null

# Active traffic on Interfaces
echo 1 > /proc/sys/net/ipv4/ip_forward

# disabling Reverse Path Filter used to check if the
# packets are leaving the server are returns by same interface ...
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

# Load Module IpTable
modprobe iptable_nat


#####################################################
## FILTER INPUT RULES ##
#####################################################

# DEFAULT POLICY TO INPUT PACKETS AND CLEAN RULES
iptables -t filter -F INPUT
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P INPUT DROP

# SSH Accept Everything
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

# Ping - ICMP packets
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

# Established outgoing TCP connections
iptables -t filter -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Local and Loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A INPUT -s 127.0.0.0/8 -j ACCEPT

# from proto & port
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

# DHCP
iptables -t filter -A INPUT -p tcp --dport 67:68 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 67:68 -j ACCEPT

# Coova
iptables -A INPUT -j coova-INPUT

# Fecha conexao na Interface de acesso ao Hotspot
iptables -t filter -A INPUT -i ${IFACECOOVA} -j DROP
iptables -t filter -A INPUT -s ${NETCOOVA} -j coova-INPUT


#####################################################
## FILTER FORWARD RULES ##
#####################################################

# DEFAULT POLICY TO FORWARD PACKETS AND CLEAN RULES
iptables -t filter -F FORWARD
iptables -t filter -P FORWARD ACCEPT

# Established TCP connections
iptables -t filter -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Coova
iptables -A FORWARD -j coova-FORWARD

# Bloqueia pacotes vindos do Hotspot destinados as redes ADM
iptables -t filter -A FORWARD -o ${IFACECOOVA} -j DROP
iptables -t filter -A FORWARD -i ${IFACECOOVA} -j DROP
iptables -t filter -A FORWARD -s ${NETCOOVA} -p tcp --dport 53 -j ACCEPT
iptables -t filter -A FORWARD -s ${NETCOOVA} -p udp --dport 53 -j ACCEPT


#######################################################
## NAT PREROUTING RULES ##
#######################################################

# DEFAULT POLICY TO NAT PREROUTING PACKETS AND CLEAN RULES
iptables -t nat -F PREROUTING

# Nao faz nat para redes locais
LOCALNET="192.168.0.0/16 172.16.0.0/12 10.19.100.5/24"
for n in ${LOCALNET}; do
iptables -t nat -A PREROUTING -s ${n} -d 192.168.0.0/16 -j RETURN
iptables -t nat -A PREROUTING -s ${n} -d 172.16.0.0/12 -j RETURN
iptables -t nat -A PREROUTING -s ${n} -d 10.19.100.5/24 -j RETURN
done

# Nat CoovaChilli
iptables -t nat -A PREROUTING -j coova-PREROUTING


#######################################################
## NAT POSTROUTING RULES ##
#######################################################

# DEFAULT POLICY TO NAT POSTROUTING PACKETS AND CLEAN RULES
iptables -t nat -F POSTROUTING

# Nao faz nat para redes locais
LOCALNET="192.168.0.0/16 172.16.0.0/12 10.19.100.5/24"
for n in ${LOCALNET}; do
iptables -t nat -A POSTROUTING -s ${n} -d 192.168.0.0/16 -j RETURN
iptables -t nat -A POSTROUTING -s ${n} -d 172.16.0.0/12 -j RETURN
iptables -t nat -A POSTROUTING -s ${n} -d 10.19.100.5/24 -j RETURN
done

# Mascara Qualquer saida para a Internet
iptables -t nat -A POSTROUTING -o ${IFACEWAN} -j MASQUERADE


#######################################################
## MANGLE PREROUTING RULES ##
#######################################################

# MANGLE PREROUTING PACKETS AND CLEAN RULES
iptables -t mangle -F PREROUTING


#######################################################
## MANGLE FORWARD RULES ##
#######################################################

# MANGLE FORWARD PACKETS AND CLEAN RULES
iptables -t mangle -F FORWARD

# Mangle CoovaChilli
iptables -t mangle -A FORWARD -j coova-FORWARD


#######################################################
## MANGLE OUTPUT RULES ##
#######################################################

# MANGLE OUTPUT PACKETS AND CLEAN RULES
iptables -t mangle -F OUTPUT


#######################################################
## MANGLE POSTROUTING RULES ##
#######################################################

# MANGLE POSTROUTING PACKETS AND CLEAN RULES
iptables -t mangle -F POSTROUTING

exit 0


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
De permissão para ser executado

chmod +x firewall.coova

Depois coloque o caminho no final do texto dentro do arquivo bootmisc

# nano /etc/init.d/bootmisc.h

/etc/firewall.coova

OBS: este é apenas um modelo de firewall, você pode mudar suas configurações depois


*********************************************************************************************************************************************


INFORMAÇÔES DAS TABELAS:


Tabela com as senhas dentro da databese "radius":

use radius;

select * from radcheck; # senhas


*******************************************************************************************************************************************








3. Re: Coovachilli Captive Portal

Roberto Candido de Oliveira Júnior
robertoj

(usa Slackware)

Enviado em 07/08/2013 - 10:03h

Bom dia Daniel,

Obrigado pela resposta. Fico feliz em ver que alguém apareceu disposto a me ajudar.


Att,

Roberto