Esta es la parte 2 del articulo, porque aparentemente Blogger tiene un limite de contenido por post.
Parte 1 (ir)
1.Pre-requisitos para instalación
2.Configuración Virtualbox
3.Freeradius, autenticacion para clientes en red
4.Hostapd, Access Point con USB Wifi
5.Modificar intensidad de señal (dBm)
Parte 2
6.CoovaChilli, portal captivo y DHCP.
7.Probar portal captivo
8.Administración de usuarios
9.Autoregistro y otras personalizaciones del portal
6. Coovachilli, DHCP y portal captivo.
CoovaChilli es un controlador de acceso
de software de código abierto, basado en el popular proyecto ChilliSpot que ya
no existe, y es mantenido activamente por un colaborador original de este
ultimo.
Tiene numerosas funciones que
proporciona un portal captivo y utiliza RADIUS para el aprovisionamiento de
acceso y su contabilidad(ancho de banda, tiempo, etc).
Cabe mencionar que al iniciar crea su
propia red aislada, y sirve de servidor DHCP para la interfaz en la que se le
asigne.
-Instalar dependencias
Todos los paquetes necesarios para
compilar Coovachilli están aquí, ya que no está disponible en los repositorios.
yum install libnl3-devel libtalloc-devel
-y
yum install openssl-devel -y
yum install libtool libgcc gcc-c++
gengetopt -y
yum install patch -y
yum install iptables -y
yum install git -y
-Instalar Haserl
Haserl es un pequeño wrapper de cgi
que permite la programación de cgi al estilo "PHP", pero utiliza el
shell BASH de Linux o Lua como lenguaje de programación. Haserl es necasrio
para el mini portal que trae Coovachilli, mas que todo para validaciones desde
la web contra Radius.
Descargar haserl:
cd
~
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gz
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gz
Desempaquetarlo al directorio
/usr/src:
sudo tar zxvf haserl-0.9.35.tar.gz -C /usr/src/
cd /usr/src/haserl-0.9.35/
cd /usr/src/haserl-0.9.35/
Compilar e instalar:
./configure --prefix=/usr --libdir=/usr/lib64
make
sudo make install
sudo make install
Deberia terminar sin ningun
problema,y aparecer algo así.
-Instalar CoovaChilli
Hay que descargar la ultima versión,
desde donde tienen alojado el código, luego se compila. Aquí es donde se necesitan las dependencias que
instalamos anteriormente.
cd /usr/src
sudo git clone https://github.com/coova/coova-chilli.git
cd
/usr/src/coova-chilli
sh
bootstrap
./configure
--prefix=/usr --libdir=/usr/lib64 --localstatedir=/var --sysconfdir=/etc
--enable-miniportal --with-openssl --enable-libjson --enable-useragent
--enable-sessionstate --enable-sessionid --enable-chilliredir
--enable-binstatusfile --enable-statusfile --disable-static --enable-shared
--enable-largelimits --enable-proxyvsa --enable-chilliproxy
--enable-chilliradsec --with-poll
make
sudo make install
-Configurar
CoovaChilli
Todos los archivos a configurar están
en /etc/chilli, y son los siguiente:
Hay que crear el archivo de config
global, copiando la plantilla que venia con la instalación
sudo
cp -v /etc/chilli/defaults /etc/chilli/config
sudo vim /etc/chilli/config
sudo vim /etc/chilli/config
Cambiar parametros que vayan de
acuerdo a nuestro ambiente:
# Inferfaz WAN que sale a internet (usualmente es la eth0 o
la cableada)
HS_WANIF=eth0
HS_WANIF=eth0
# El dispositivo que va o tiene el AP (la red de suscripción)
HS_LANIF=wlan0
HS_LANIF=wlan0
# Los siguientes valores son definidos por nosotros
# La red del HotSpot (obviamente, el mismo server debe estar
allí)
HS_NETWORK=10.1.0.0
HS_NETWORK=10.1.0.0
# Mascara de subred (255.255.255.0 es para 254 hosts, si van
a modificar saber de subnetteo.
HS_NETMASK=255.255.255.0
HS_NETMASK=255.255.255.0
# IP de servidor HotSpot
HS_UAMLISTEN=10.1.0.1
HS_UAMLISTEN=10.1.0.1
# El secret password que pusimos en el paso de Radius ( valor secret en /etc/raddb/clients.conf )
HS_RADSECRET=probando123
HS_RADSECRET=probando123
HS_UAMSECRET=probando123
# Aqui poner el usuario que desean sea administrador de
coova si lo van a administrar después.
HS_ADMUSR=coova_admin_usuario
HS_ADMPWD=coova_admin_password
HS_ADMPWD=coova_admin_password
Agregar el script ipup.sh que sirve
para hacer unas reglas con iptables, que permite hacer de router para la red
que estamos creando con CoovaChilli.
sudo vim /etc/chilli/ipup.sh
#!/bin/sh
#
# Agrega una regla de NAT que pasa todo el trafico por la interface que mira la WAN, o el ISP, o el internet.
#
# Agrega una regla de NAT que pasa todo el trafico por la interface que mira la WAN, o el ISP, o el internet.
/usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#NOTA: colocar el dispositivo WAN correcto, como les dije arriba comúnmente
será eth0 pero puede ser diferente según tu ambiente o configuración, el mio era el ensps03.
Se guarda y se vuelve ejecutable y se ejcuta para ya dejar el cambio:
sudo
chmod 755 /etc/chilli/ipup.sh
/etc/chilli/ipup.sh
-Generar archivo de configuración:
/etc/rc.d/init.d/chilli
7. Probar el portal captivo
Esto tomando en cuenta que ya se
puede acceder a internet desde la máquina virtual.
NOTA** Se debe iniciar primero hostapd y freeradius en el mismo orden que se miro en la parte 1/2 , lo resumo aquí:
sudo systemctl start mariadb
sudo nmcli radio wifi off
sudo rfkill unblock wifi
sudo systemctl start hostapd
sudo systemctl start radiusd
Se recomienda crear script para iniciar el servicio.
Luego se inicia
CoovaChilli y se prueba desde un dispositivo
/usr/sbin/chilli
Para bajar el servicio:
pkill
-f chilli
NOTA**
Algunos dispositivos, incluyendo moviles antiguos
o computadoras No haran el redireccionamiento automatico, por lo que tendran
que indicarle al usuario que intente navegar a algun dominio “.com” pero no
debe haber estado guardado en memoria, ya que para que pueda cargar el login del
portal captivo CoovaChilli, y por ende navegar, debe hacer una “intercepcion”
del trafico que no funciona con HTTPS , solo HTTP (sin ssl) , ya posterior al
login todo funciona normal.
Ejemplo:
www.algo.com (sin https)
El portal captivo aparecerá y pedira credenciales, y podrá navegar
El portal captivo aparecerá y pedira credenciales, y podrá navegar
https://www.algo.com
El portal captivo NO aparecera, y nunca podra navegar.
El portal captivo NO aparecera, y nunca podra navegar.
8. Administración de usuarios.
Para agregar usuarios pueden crear
este pequeño Script:
sudo
vim /etc/usuariosportal.sh
Y agregar el siguiente contenido:
#!/bin/bash
read -p "Ingrese nombre de
usuario: " user
read -p "Ingrese contraseña:
" pass
read -p "Se agregará el - $user
- con la contraseña - $pass -, está bien? (s/n) " sn
case $sn in
[sS]*)
echo "INSERT INTO radius.radcheck
(UserName, Attribute, Value, Op) VALUES ('$user', 'Cleartext-Password',
'$pass', ':=');" | mysql -u usuario_db
-p password_db radius
;;
*)
echo "No se aplicará el
cambio, adiós"
esac
Guardarlo y hacerlo
ejecutable:
chmod 755 /etc/usuariosportal.sh
Y probarlo:
/etc/usuariosportal.sh
9. Autoregistro y otras personalizaciones del portal
Para hacer auto registro es decir,
que se logeen con sus nombres y correo, u otros parametros que nosotros
deseemos, incluyendo la MAC address del dispositivo, se pueden realizar ciertos
cambios al código de la aplicación, recordar que es Open Source <3.
Primero, se debe hacer respaldo de
los archivos que se utilizarán.
De la ruta copiarlos a un lugar
seguro:
cd /etc/chilli/www
mkdir backup
cp -v coova.html login.tmpl
login.chi login_success.tmpl terms.tmpl header.tmpl footer.tmpl config-local.sh
login_form.tmpl backup/
-Modificar
login_form.tmpl
Este es la plantilal dónde se
ingresan las credenciales, aqui se debe poner como hidden los campos dónde se
van las credenciales para el Radius server, y ponerlas en duro. En amarillo lo que se comenta
y modifica, en verde lo que se agrega.
vim
/etc/chilli/www/login_form.tmpl
Y editar:
<tr>
<!-- <td>Usuario</td>
<td><INPUT NAME="username" VALUE="usuario_radius"
TYPE="hidden"></td>
</tr>
<tr>
<td>Nombre</td>
<td><INPUT NAME="usernombre"
VALUE="$FORM_usernombre" TYPE="text" required
style="text-transform:uppercase"></td>
</tr>
<tr>
<td>Email</td>
<td><INPUT NAME="usermail"
VALUE="$FORM_usermail" TYPE="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$"
required style="text-transform:lowercase" title="Ingrese email
valido."></td>
</tr>
<tr>
<td><INPUT NAME="password" VALUE="contraseña_radius"
TYPE="hidden"></td>
</tr>
-Modificar
config-local.sh
Este
es el Script dónde entra en juego
Haserl. Es dónde se hacen las validaciones contra la base de datos y se
recuperan muchas variables. Es el más importante de todos. En amarillo lo que se comenta
y modifica, en verde lo que se agrega.
vim /etc/chilli/www/config-local.sh
Y editar:
dologin()
{
echo "insert into radcheck (username, attribute, op,
value) values ('$FORM_usermail', '$(date)', ':=', 'self-reg',
upper('$FORM_usernombre');" | mysql -u db_usuario -p db_password radius
url=$(chi_login_url
"$FORM_username" "$FORM_password"
"$FORM_userurl")
FORM_username="${FORM_username:-$FORM_UserName}"
FORM_username="${FORM_username:-$FORM_Username}"
FORM_password="${FORM_password:-$FORM_Password}"
FORM_usermail="${FORM_usermail:-$FORM_UserMail}"
FORM_usernombre="${FORM_usernombre:-$FORM_UserNombre}"
FORM_usernombre="${FORM_usernombre:-$FORM_Usernombre}"
Nota**
Parecen duplicados unos valores, pero por alguna razón asi funciona bien, si se
quita la duplicidad me vaciaba las variables.
Otros cambios:
-Cambiar Mensaje de bienvenida al cargar Login.
vim /etc/chilli/www/login.tmpl
-Cambiar imagen de espera al cargar Login.
vim /etc/chilli/www/coova.html
Modificar lo que está en rojo (recordar
que las imagenes que pongamos, DEBEN existir en el folder):
<img
src="coova.jpg"
alt="" border="0" height="210"
width="242"/></a><br>
<small><img
src="wait.gif"/>
redirecting...</small></p>
-Cambiar pagina a la que redirecciona una vez que hace
loggeo exitoso:
vim /etc/chilli/www/login.chi
case
"$FORM_res" in
success|already)
url=$FORM_redirurl
url=${url:-$FORM_userurl}
url="https://www.google.com"
header "<meta http-equiv=\"refresh\"
content=\"5;url=${url}\"/>"
uamfile
"login_success" 1
footer
exit
-Cambiar
Mensaje de loggeo exitoso:
vim /etc/chilli/www/login_success.tmpl
<!--
-- The login success message
-->
-<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>-
<h1>Ha iniciado exitosamente!</h1>
Seras redirigido a:
<p><a
href="https://www.google.com">https://www.google.com</a></p>
Para salir de la
sesion, escriba "logout" (o "http://logout/") en su
navegador. <b>Disfrute!</b>
-Cambiar
Terminos y Acuerdos de Uso del Servicio:
vim
/etc/chilli/www/terms.tmpl
-Cambiar
imagen y texto en encabezado y pie de pagina:
vim
/etc/chilli/www/header.tmpl
vim
/etc/chilli/www/footer.tmpl
FINAL DEL ARTICULO.
Este tutorial se validó al momento de su redacción, por lo que si algo falla, favor hacer doble check o dejar preguntas en los comentarios.
Recordar que esto es Open Source, por lo que no deben quitar logos y mensajes que hagan mención de Coova.org ya que ellos son los que lo desarrollan.
Tambien tomar en cuenta que todo esto
es con fines educativos, o quizás también para algo pequeño como un negocio
propio, y pequeño, ya que se salta MUCHAS
medidas de seguridad, que para aplicar en un caso corporativo, no ajustaría
este tutorial, sin embargo, es un buen comienzo para formar algo mejor.
Referencias
How to install a wireless hotspot with captive page on Linux using CoovaChillihttps://www.howtoforge.com/tutorial/how-to-install-a-wireless-hotspot-with-captive-page-in-linux-using-coovachilli/#configure-hostapd
FreeRadius 3.0.x Installation and configuration with Mysql
https://lalitvc.wordpress.com/2014/07/03/freeradius-3-0-x-installation-and-configuration-with-mysql/
Hostapd : The Linux Way to create Virtual Wifi Access Point
https://nims11.wordpress.com/2012/04/27/hostapd-the-linux-way-to-create-virtual-wifi-access-point/Open source captive portal and RADIUS solution
https://github.com/coova/coova-chilli
No hay comentarios:
Publicar un comentario