Hotspot CoovaAP Radius Accounting en Linksys WRT 54GL

From Luniwiki
Jump to: navigation, search

Instalando Firmware

CoovaAP es un firmware basado en OpenWrt whiterussian 0.9+, que viene preconfigurado con las herramientas de Hotspot. Nos descargamos el firmware desde la URL http://ap.coova.org/1.0-beta.8/openwrt-wrt54g-squashfs.bin. Y la intraducimos en el router mediante boottp.

Radius

Vamos a utilizar el servidor Radius para realizar el accounting de los usuarios. Para autorizar y autentificar los usuarios se utiliza el UAM integrado en el propio router (CoovaChilli). El servidor Radius lo instalamos en un servidor gentoo. El Linksys WRT54GL no tiene bastante memoria para tener el HotSpot y el radius.

emerge -av freeradius (USE mysql)

El fichero principal de configuración es /etc/raddb/radiusd.conf. Tenemos que tener los siguientes elementos (Por lisibilidad solo he escrito solo los elementos modificados o descomentados):

listen {
   ipaddr = *
   port = 0
   type = auth
}
listen {
   ipaddr = *
   port = 0
   type = acct
}    
modules {
   $INCLUDE sql.conf
   $INCLUDE sql/mysql/counter.conf
}

Hay que crear la base de datos (damos por supuesto que hay una base de datos mysql funcionando.

mysql -p
mysql> create database radiushotspot;
mysql> create user radiushotspot identified by 'contraseña'

Los esquemas estan en la carpeta /etc/raddb/sql/mysql/

cat ippool.sql nas.sql schema.sql | mysql -p radiushotspot

Realmente solo necesitamos el archivo schema.sql que tiene las tablas radacct y radcheck. En la carpeta /etc/raddb /site-enabled/ creamos el fichero radiushotspot (Los demás enlaces no nos sirven). Y lo configuramos en las partes de accounting y autentificación de está forma:

authorize {
       preprocess
       sql
       expiration
       logintime
} 
authenticate {
}
accounting {
       detail
       radutmp
       sql
}
session {
       sql
}

Hay que configurar el fichero client.conf para permitir que el router se conecte al servidor radius.

client localhost {
       ipaddr = 127.0.0.1
       secret          = 'contrasenadesdelocalhost'
       require_message_authenticator = no
       nastype     = other     # localhost isn't usually a NAS...
}
client 192.168.1.27 {
       secret = 'contraseñadesdeelrouter'
       nastype = other
       shortname = coovaap.luniel.com
}

Hay que insertar manualmente el usuario administrativo del punto de acceso.

insert into radcheck (username,attribute,value) values ('chilispot','Password','contraseñaadministrativa');

Nos queda arrancar el servidor radius y comprobar que funciona correctamente:

/etc/init.d/radiusd start
radtest chilispot contraseñaadministrativa 127.0.0.1 0 'contrasenadesdelocalhost'
Sending Access-Request of id 127 to 127.0.0.1 port 1812
       User-Name = "chilispot"
       User-Password = "contraseñaadministrativa"
       NAS-IP-Address = 127.0.0.1
       NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=127, length=20

No olvidamos de indicarle que lo arranque automáticamente.

rc-update add radiusd default

Configuración de CoovaAP

El firmware viene todo preinstalado. Solo hay que configurarlo, en un explorador abrimos la consola Parte Network:

  • Configurar ip de la conexión WAN en mi caso 192.168.1.27 y DNS
  • Wireless sin encryptación le damos nuestro ESSID LUNIEL-FREE

Para la parte de HotSpot

  • HotSpot Type: Internal HotSpot
  • HotSpot Mode: Wireless Only
  • HotSpot LAN Access: Deny
  • Registration Mode: Self
  • Walled-Garden Domains: luniel.com

HotSpot DHCP Configurations

  • Internal IP Address: 10.1.0.1
  • DHCP Network: 10.1.0.0
  • DHCP Netmask: 255.255.255.255.0
  • DNS Server: 10.1.0.1 192.168.1.27

Radius:

  • Radius Server (1st and 2nd): radius.luniel.com
  • Radius Auth Port: 1812
  • Radius Acct Port: 1813
  • Shared Secret: contraseñadesdeelrouter
  • RADIUS Admin Username: chilispot
  • RADIUS Admin Password: contraseñaadministrativa
  • MAC Address Authentication: Enabled
  • MAC Address Re-Auth (on redirect): Enabled
  • Admin Reauth Interval: 1440 min.
  • Default Session Timeout: 10800
  • Default Idle Timeout: 600
  • Default Interim Interval: 150

Desde la página de portal podemos personalizar el portal de acceso.

Cortafuegos

El cortafuegos se configura en el fichero /etc/firewall.users. Para poder adecuarlo a mis necesidades he añadido la función

allowportudp() {
   iptables -t nat -A prerouting_wan -p udp --dport $1 -j ACCEPT
   iptables        -A input_wan      -p udp --dport $1 -j ACCEPT
}

Y al final he añadido las reglas de cortafuegos pertinentes. Por ej.

allowportudp 161
iptables -A input_rule -p tcp -d 10.1.0.1 --dport 80 -j REJECT 
iptables -A input_rule -p tcp -d 10.1.0.1 --dport 443 -j REJECT
iptables -A input_rule -p tcp -d 10.1.0.1 --dport 22 -j REJECT
iptables -A input_rule -p udp -d 10.1.0.1 --dport 161 -j REJECT
iptables -A input_rule -p tcp -d 192.168.1.27 -s 10.1.0.0/24 --dport 80 -j REJECT
iptables -A input_rule -p tcp -d 192.168.1.27 -s 10.1.0.0/24 --dport 443 -j REJECT
iptables -A input_rule -p tcp -d 192.168.1.27 -s 10.1.0.0/24 --dport 22 -j REJECT
iptables -A input_rule -p udp -d 192.168.1.27 -s 10.1.0.0/24 --dport 161 -j REJECT

Permito snmp desde la red WAN. Y no doy acceso a las consolas administrativas desde el HotSpot.

Copia de seguridad de nuestro router

Desde otro linux vamos a realizar la copia vía scp

ssh 192.168.1.27 -C 'mount -o remount,ro /dev/mtdblock/4 /jffs ; dd if=/dev/mtdblock/1 ; mount -o remount,rw /dev/mtdblock/4 /jffs' > wrt-linux.trx
ssh 192.168.1.27 -C 'dd if=/dev/mtdblock/3' > wrt-nram.bin

Control de ancho de banda

Con un punto de acceso libre es recomendable realizar control de ancho de banda utilizado. De manera a tener prioridad sobre los usuarios del HotSpot cuando requerimos Internet, y dejarlo aprovechar por el publico cuando nosotros no lo necesitamos. En nuestro caso realizamos el control de ancho de banda en nuestro cortafuegos. Y no desde el punto de acceso. Pero es recomendable establecerlo.

Referencias

--Daniel Simao 17:00 22 ene 2010 (UTC)