Hotspot CoovaAP Radius Accounting en Linksys WRT 54GL
Contents
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)