El
otro día comentaba que había logrado abrir el ssh de mi fonera y que la había "capado" para que Fon no la pudiese actualizar. Hoy que he tenido más tiempo libre he estado jugueteando con el
Chillispot. Para el que no lo conozca se trata del portal cautivo que utiliza Fon para controlar el acceso a la red. Cuando nos conectados a la red wifi de la fonera y ponemos cualquier página en el navegador, automáticamente esa petición pasa por Chillispot y si no está entre las urls permitida nos redirigirá a la url que hayamos indicado para autenticar el usuario por medio de
Radius. En este caso nos redirige a la web de Fon y cuando nos conectamos con nuestro usuario y password ya podemos navegar libremente.
Conectándome con el portatil a la red pública de la fonera pude comprobar que había algunas páginas a las podía conectar sin tener que pasar por chillispot. Por ejemplo, podía leer mi correo de gmail o visitar
flickr. Editando el archivo de configuración del chillispot me encontré esto:
root@OpenWrt:/etc# cat chilli.conf
radiusserver1 radius01.fon.com
radiusserver2 radius02.fon.com
radiussecret garrafon
dhcpif eth1
uamsecret garrafon
uamallowed 209.85.129.99,209.85.129.104,209.85.129.147
uamanydns
uamallowed www.martinvarsavsky.net,www.google.com,www.flickr.com,static.flickr.com,video.google.com,216.239.51.0/24,66.249.81.0/24
uamallowed www.fon.com,www.paypal.com,www.paypalobjects.com,www.skype.com,66.249.93.0/24,72.14.207.0/24,72.14.209.0/24,84.96.67.0/24,213.91.9.0/24,80.118.99.0/24
uamallowed shop.fon.co.kr,secure.nuguya.com,inilite.inicis.com,fon-en.custhelp.com,maps.fon.com,c20.statcounter.com
uamallowed www.fon.com,acceso.fon.com,en.fon.com,es.fon.com
uamallowed www.fon.com,www.paypal.com,www.paypalobjects.com
uamserver https://login.fon.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/cp/index.php
Es una lista de urls permitidas por las que se puede navegar sin tener que estar autenticado. Revisando algunas de esas ips he visto que la mayoría son de google, flickr,... pero hay otras que no tengo ni idea. Entonces he pensado que no quería que los Aliens que se conecten a mi punto de acceso Fon puedan navegar libremente por Google, Flickr, Skype,.... Lo primero que se me ha ocurrido ha sido comentar las líneas de las webs no permitidas y reiniciar el chillispot, pero cual ha sido mi sorpresa que no ha funcionado. Revisando con más detalle el script de chillispot (
/etc/init.d/N50chillispot) he visto que cuando se arranca se descarga de Fon (en la función
radconfig) el archivo de configuración, lo almacena en
/tmp/chilli.conf y comprueba mediante un hash MD5 si el que acaba de descargar y el existente son iguales o no. En caso de que el existente haya sido modificado, lo borra y mueve el que se ha descargado a la ruta original. Así Fon tiene control total sobre las webs por las que los Aliens pueden o no navegar:
radconfig() {
/usr/sbin/chilli_radconfig \
-c /dev/null \
--radiusserver1="$RADIUSSERVER" \
--radiussecret="$RADIUSSECRET" \
--adminuser="$RADIUSADMUSR" \
--adminpasswd="$RADIUSADMPWD" \
--radiusnasid="$MAC" \
--dhcpif $wifi_ifname \
> $TMP_C
[ -n "$(cat $TMP_C)" ] && {
MD5SUM_TMP=$(md5sum $TMP_C | awk '{ print $1 }')
MD5SUM_ETC=$(md5sum $ETC_C | awk '{ print $1 }')
if [ ! "$MD5SUM_TMP" = "$MD5SUM_ETC" ]; then
rm $ETC_C
mv $TMP_C $ETC_C
circular_log $LOG_LOOP_F "RELOAD"
do_reload
else
circular_log $LOG_LOOP_F "NO RELOAD"
fi
return 0
}
circular_log $LOG_LOOP_F "NO RELOAD"
}
¿Qué podemos hacer para evitar esto?. Muy sencillo, simplemente cambiamos el signo de la comparación (la línea comentada del if es la original):
radconfig() {
/usr/sbin/chilli_radconfig \
-c /dev/null \
--radiusserver1="$RADIUSSERVER" \
--radiussecret="$RADIUSSECRET" \
--adminuser="$RADIUSADMUSR" \
--adminpasswd="$RADIUSADMPWD" \
--radiusnasid="$MAC" \
--dhcpif $wifi_ifname \
> $TMP_C
[ -n "$(cat $TMP_C)" ] && {
MD5SUM_TMP=$(md5sum $TMP_C | awk '{ print $1 }')
MD5SUM_ETC=$(md5sum $ETC_C | awk '{ print $1 }')
# if [ ! "$MD5SUM_TMP" = "$MD5SUM_ETC" ]; then
if [ "$MD5SUM_TMP" = "$MD5SUM_ETC" ]; then
rm $ETC_C
mv $TMP_C $ETC_C
circular_log $LOG_LOOP_F "RELOAD"
do_reload
else
circular_log $LOG_LOOP_F "NO RELOAD"
fi
return 0
}
circular_log $LOG_LOOP_F "NO RELOAD"
}
y ya está capado. Ahora editamos el archivo de configuración de Chillispot y comentamos las webs que no queremos que se puedan utilizar:
root@OpenWrt:/etc# cat chilli.conf
radiusserver1 radius01.fon.com
radiusserver2 radius02.fon.com
radiussecret garrafon
dhcpif eth1
uamsecret garrafon
#uamallowed 209.85.129.99,209.85.129.104,209.85.129.147
uamanydns
#uamallowed www.martinvarsavsky.net,www.google.com,www.flickr.com,static.flickr.com,video.google.com,216.239.51.0/24,66.249.81.0/24
#uamallowed www.fon.com,www.paypal.com,www.paypalobjects.com,www.skype.com,66.249.93.0/24,72.14.207.0/24,72.14.209.0/24,84.96.67.0/24,213.91.9.0/24,80.118.99.0/24
#uamallowed shop.fon.co.kr,secure.nuguya.com,inilite.inicis.com,fon-en.custhelp.com,maps.fon.com,c20.statcounter.com
uamallowed www.fon.com,acceso.fon.com,en.fon.com,es.fon.com
uamallowed www.fon.com,www.paypal.com,www.paypalobjects.com
uamserver https://login.fon.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/cp/index.php
y finalmente reiniciamos Chillispot.
Si ahora nos conectamos desde a la señal wifi de Fon y ponemos una web como
http://www.google.com, Chillispot nos reenviará automáticamente al Portal de login de Fon.
El próximo paso: Actualización de la Fonera a DD-WRT.