jump to navigation

HotSpot con chillispot y Freeradius 2 noviembre, 2009

Posted by Fredy Ruiz Ondre in Wi-Fi.
6 comments

Un hotspot es una zona de cobertura de Wi-Fi, es decir esta ubicado en un punto normalmente un lugar publico donde irradia la señal y  la gente puede salir a internet conectandose inalambricamente a la central de manera gratuita o previo pago.

En esta ocasion vamos a configurar un hotspot usando chillispot instalandolo sobre CentOS 5, la autenticasion sera a traves del un servidor Radius, nosotros usaremos freeradius, todo esto vamos a instalarlo en un mismo servidor.

red_wifi_1

Instalaremos las herramientas necesarias

# yum install freeradius openssl php httpd mod_ssl

Descargamos el paquete chillispot

# wget http://www.chillispot.info/download/chillispot-1.1.0.i386.rpm
# rpm -Uvh chillispot-1.1.0.i386.rpm

Una ves que instalemos lo necesario vamos a configurarlo, empezamos a configurar el chillispot editando el archivo chilli.conf

[root@ns ~]# vim /etc/chilli.conf


net 172.16.0.0/24
dns1 200.48.225.130
domain http://www.dominio.com
radiuslisten 127.0.0.1
radiusserver1 127.0.0.1
radiusauthport 1812
radiussecret contraseña1
radiusnasid nas01
dhcpif eth1
uamserver https://172.16.0.1/cgi-bin/hotspotlogin.cgi
uamhomepage https://172.16.0.1/spot
uamsecret contraseña2
uamallowed 172.16.0.1

Siguiendo con la configuracion del chilli

# cp /usr/share/doc/chillispot-1.1.0/hotspotlogin.cgi /var/www/cgi-bin/
# chown apache.apache /var/www/cgi-bin/hotspotlogin.cgi
# chmod 700 /var/www/cgi-bin/hotspotlogin.cgi

Ahora instalamos el soporte TUN/TAP necesario para el funcionamiento de chilli. Esta interface virtual creada tun0 se comunicará con la interface eth1 para autenticar los usuarios, para ello editamos  el archivo modprobe.conf agregando lo siguiente:

# vim /etc/modprobe.conf

alias char-major-10-200 tun

# modprobe tun

En la documentacion del chilli /usr/share/doc/chillispot-1.1.0/ hay un script para el firewall, bueno yo lo modifique ya que yo uso un proxy con Squid, quedando de la siguiente manera:

#!/bin/sh
IPT=»/sbin/iptables»
EXTIF=»eth0″ # Interfaz externa
INTIF=»eth1″ # Interfaz interna

$IPT -F
$IPT -F -t nat
$IPT -F -t mangle

$IPT -P INPUT DROP
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT

$IPT -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

$IPT -A INPUT -i $EXTIF -p tcp -m tcp –dport 22 –syn -j ACCEPT
$IPT -A INPUT -i $EXTIF -j REJECT

$IPT -A INPUT -i $INTIF -j DROP

$IPT -A INPUT -p tcp -m tcp –dport 80 –syn -j ACCEPT
$IPT -A INPUT -p tcp -m tcp –dport 443 –syn -j ACCEPT
$IPT -A INPUT -p tcp -m tcp –dport 3128 –syn -j ACCEPT
$IPT -A INPUT -p tcp -m tcp –dport 22 –syn -j ACCEPT
$IPT -A INPUT -p tcp -m tcp –dport 3990 –syn -j ACCEPT

# Redireccionar al squid
$IPT -t nat -A PREROUTING -i tun0 -p tcp –dport 80 -j REDIRECT –to-port 3128

$IPT -A INPUT -p icmp –icmp-type echo-request -j ACCEPT
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A FORWARD -i $INTIF -j DROP
$IPT -A FORWARD -o $INTIF -j DROP

$IPT -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

Obviamente esre script es algo basico, pero este post no trata de iptables asi que lo dejamos tal cual, ahora activamos el forwarding

# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

Hecho esto nos dedicamos al servidor radius, para ello nos ubicamos en el directorio raddb

# cd /etc/raddb/
# vim clients.conf

client 127.0.0.1 {
secret          = contraseña1
shortname       = localhost
nastype     = other
}

Editamos las cuentas de usuarios

# vim users

fruiz   Auth-Type := Local, User-Password == «clave»

Antes de iniciar los servicios debemos tener en cuenta la dirección IP de la interfaz eth1 el cual  debe ser 0.0.0.0 pero debe estar activa

# ifconfig eth1 0.0.0.0 up

# /etc/init.d/chilli start
# /etc/init.d/radiusd start
# /etc/init.d/httpd start

red_wifi_2

En la consola podemos ejecutar lo siguiente para ver si la autenticacion al servidor radius esta bien configurada

# radtest fruiz clave localhost 1645 contraseña1

Sending Access-Request of id 65 to 127.0.0.1 port 1812
User-Name = «fruiz»
User-Password = «clave»
NAS-IP-Address = 255.255.255.255
NAS-Port = 1645
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=65, length=71
Service-Type = Framed-User
Framed-Protocol = PPP
Framed-IP-Address = 172.16.0.170
Framed-IP-Netmask = 255.255.252.0
Framed-Routing = Broadcast-Listen
Filter-Id = «std.ppp»
Framed-MTU = 1500
Framed-Compression = Van-Jacobson-TCP-IP

Ahora como ultimo paso, nos ubicamos en el directorio /var/www/html y editamos una pagina que sera la de bienvenida, y ahi ubicamos un link que apunte al chilli para poder realizar la autenticacion

# cd /var/www/html/
# mkdir spot/
# cd spot/
# vim index.html

Aqui editamos nuestra pagina de bienvenida en donde debe haber un link que apunte a http://172.16.0.1:3990/prelogin, pondre parte de mi humilde html donde enlaza para la autenticacion

<a href=»http://172.16.0.1:3990/prelogin»>Click aqui para acceder</a>

Luego de realizar nuestra pagina de bienvenida, guardamos los cambios y empezamos a probar, para esto desde una maquina cliente accedemos a la red, el chilli nos debería asignar un IP de manera automática y cuando abramos un navegador nos debe mostrar nuestra pagina de bienvenida, en dicha pagina le demos clic en «Click aqui para acceder» deberá mostrarnos la siguiente ventana para poder autenticarnos.

chillispot