lunes, 26 de noviembre de 2018

(1/2) Hotspot con portal captivo y autoregistro( VirtualBox,FreeRadius, Coovachilli, HostAPd, MySQL,wifi USB)




CentOS7: (1/2) Hotspot con portal captivo usando  VirtualBox, Wifi USB , FreeRadius, Coovachilli, HostAPd, MySQL y auto-registro.


Situación Presentada


Ya hace tiempo un amigo puso una tienda de café y pues como todo local pequeño maneja su wifi sin aislarla de su red local, lo cual presentaba muchos problemas, sobretodo al momento de su facturación que requería el internet (por lo de los POS para tarjetas), y también el riesgo de que alguien se ponga a tocar más de lo que debe en la red.
También mi amigo deseaba algo parecido a lo que tienen restaurantes en los que recaban correo electrónico y otros datos.

Y qué hago entonces?

Para reducirle los costos al mínimo a mi amigo, y de paso hacer gala de lo que se puede hacer usando open source , algo de tiempo  y dedicación, le dije que íbamos a usar su PC de Caja con un Linux virtualizado, que solo comprara el adaptador Wifi USB, que funciona en modo AP.

Entrando más a detalle lo que se hará es convertir la computadora de escritorio disponible en un hotspot inalambrico donde los clientes se podrán autenticar usando una pagina del portal captivo.

Se va a usar una pieza de software llamado Hostapd para crear el access point con el USB wifi, se va a instalar Freeradius para autenticar en red, CoovaChilli para montar el DHCP y redireccionar al portal captivo.

Componentes del articulo

El contenido se parte en dos debido al limite que da Blogger por post.

 Parte 1
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 (ir)
6.CoovaChilli, portal captivo y DHCP.
7.Probar portal captivo
8.Administración de usuarios
9.Autoregistro y otras personalizaciones del portal


1. Pre-requisitos para instalación

  • Una computadora que pueda virtualizar por lo menos con 10GB libres y 1GB RAM.
  • Un adaptador USB,  en este caso se usó una TP-Link WN7200nd (chipset rt3070/rt2800) también funciona con otras como la WN722n (chipset rtl8188eus) pero deben actualizar el kernel del Linux a 4.4+.
Si no se usan estos dos, usar cualquiera que soporte modo AP,  se puede verificar esto usando el siguiente comando:

sudo iw phy | grep  -A4 -i 'Supported interface modes'
  • Un Linux, en este articulo estaré usando CentOS 7, deben tener el repositorio instalado tambien.

   yum install epel-release

  • Todos los paquetes que vamos a instalar (y librerias de desarrollo a veces, todo esta aquí)
  • Una instancia de MariaDB (o mysql), si no la tienen instalenla, el default pass para root está en blanco.    
   yum install mariadb-server mariadb
  • Una conexión de red a internet (cableada preferiblemente)
  • Conocimiento intermedio de manejo del shell en Linux, Virtualbox y MariaDB (MySQL) ,  

2. Configuración Virtualbox (para detectar USB Wifi)

Como mencioné en los pre-requisitos, ya deberían saber como montar una VM en esta herramienta de Oracle, así que solo explicaré qué hay que hacer para que mapee la USB Wifi a tu VM como que estuviera conectada directamente.
Eso se hace en las opciones de la maquina (settings), luego en el apartado USB , y finalmente le dan click (con la VM apagada) en el plug/conector USB con el signo +  y les aparecerá el dispositivo, y luego le dan OK

**NOTA: Para que la VM lo detecte, tendrán que desconectar el USB, con el filtro USB ya creado,  encenderla y una vez dentro , conectar el USB y lo encontraran.

Para confirmar que si detectó el dispositivo, pueden correr el siguiente comando que mostrará los dispositivos USB conectados, y deberá aparecer el que agregamos al filtro USB.

lsusb

3.       Freeradius


Freeradius es un servidor de Raiuds open source, está disponible para todas las distribuciones,
sirve para autenticar los clientes antes que salgan a internet.

Se necesitan instalar tanto el servidor como el plugin para mysql

yum install freeradius freeradius-mysql freeradius-utils -y

Configurar Freeradius
MariaDB debe estar corriendo, como mencione en los pre-requisitos ya deben tener conocimientos de eso para llevarlo a cabo.

-Crear la base de datos para radius:
echo “create database radius” | mysql -u [usuario_mysql] -p[password_mysql] 

-Generar tablas
en la bd de radius con el esquema que ya trae el plugin de radius:
mysql -uroot  -p radius < /etc/raddb/mods-config/sql/main/mysql/schema.sql

Crear usuario mysql para  los privilegios en la bd radius, dentro de mysql:
GRANT ALL PRIVILEGES ON radius.* to ‘usuariodb_radius’@’localhost’ IDENTIFIED by 'usuariodb_radius_password';

-Configurar modulo sql de Radius:
**Nota: Pueden usar nano o Emacs si no les gusta vim

sudo vim /etc/raddb/mods-available/sql


Descomentar o cambiar los siguientes valores:
driver = "rlm_sql_mysql"
dialect = ”mysql”
server = "localhost"
port = 3306
login = "”usuariodb_radius"
password = "usuariodb_radius_password"
read_clients = yes

-Contadores sql para chillispot :
sudo vim /etc/raddb/mods-available/sqlcounter

agregar al final del archivo :

$INCLUDE ${modconfdir}/sql/counter/${modules.sql.dialect}/chillispot.conf

-Agregar los link simbolicos para el modulo sqlcounter:
sudo ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/sql
sudo ln -s /etc/raddb/mods-available/sqlcounter /etc/raddb/mods-enabled/sqlcounter

-Configurar servidor radius:
sudo vim /etc/raddb/radiusd.conf

Bajo la sección seguridad, cambiar el usuario y gripo creados durante la instalación:
user = radiusd
group = radiusd
allow_vulnerable_openssl = yes

**Nota:  No hacer esto realmente en producción, lo mejor es actualizar la versión del openSSL

Bajo la sección “ instantiate “ por la linea 728, agregar los siguientes modulos de contador:
chillispot_max_bytes
noresetcounter

-Configurar el servidor virtual default en sites-available:
sudo vim /etc/raddb/sites-available/default
Bajo la sección “ authorize “:
Comentar lo siguiente:
#filter_username
Des-comentar lo siguiente:
auth_log
unix
Cambiar lo siguiente:
'-sql' a sql
Agregar lo siguiente al final de la sección “ authorize “ por la línea 273:
chillispot_max_bytes
noresetcounter

Bajo la sección ” accounting “, descomentar:
radutmp
Cambiar:
'-sql' a sql

Bajo la sección ” session “ , descomentar:
radutmp
sql

Bajo la sección ” post-auth  “, descomentar:
reply_log
Cambiar lo siguiente:
'-sql' a sql

-Configurar las solicitudes del servidor virtual para el  inner tunnel:

sudo vim /etc/raddb/sites-available/inner-tunnel


Bajo la sección ” authorize “, cambiar:
'-sql' a sql
Agregar lo siguiente al final de la seccion “ authorize “:
chillispot_max_bytes
noresetcounter

Bajo la sección ” session “, descomentar:
sql

Bajo la sección ” post-auth “, descomentar:
reply_log
Cambiar:
'-sql' a sql

-Configurar clients del radius
sudo vim /etc/raddb/clients.conf
Poner el password usado para acceder a verificación de clientes a la base de datos de FreeRadius (mínimo 8 caracteres):
secret = probando123

-Agregar los siguientes contadores para Chillispot:
sudo vim /etc/raddb/mods-config/sql/counter/mysql/chillispot.conf


sqlcounter chillispot_max_bytes {
counter_name = Max-Total-Octets
check_name = ChilliSpot-Max-Total-Octets
reply_name = ChilliSpot-Max-Total-Octets
reply_message = "You have reached your bandwidth limit"
sql_module_instance = sql
key = User-Name
reset = never
query = "SELECT IFNULL((SUM(AcctInputOctets + AcctOutputOctets)),0) FROM radacct WHERE username = '%{${key}}' AND UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime > '%%b'"
}

-Cambiar permisos de logs y archivos de configuración:
sudo touch /var/log/radius/radutmp
sudo chown -R radiusd:radiusd /etc/raddb
sudo chown -R radiusd:radiusd /var/log/radius

-Crear usuario Admin de Radius en db de mariadb:
mysql -u usuariodb_radius -p -e "INSERT INTO radius.radcheck (UserName, Attribute, Op,Value) VALUES ('usuario_admin', 'Cleartext-Password', ':=', 'password_admin');"

Deberia quedar algo así :
**Nota: Nota que el valor del password debe ser fuerte, no de diccionario.
-Iniciar Radius para realizar prueba
sudo systemctl start radiusd
Abrir nueva terminal y ejecutar lo siguiente:
radtest usuario_admin password_admin 127.0.0.1 1645 probando123

Tendria que salir algo así, y al final recibir un mensaje Access-Accept:

 



4. Hostapd

hostapd es un excelente software que permite convertir un Linux en un punto de acceso wifi (AP) WPA/WPA2 totalmente configurable
Para instalarlo, ejecutar

yum install hostapd -y

Para verificar que fue instalado ejecutar:

hostapd -v

-Configurar hostapd
Abrir archivo de configuración:

sudo vim /etc/hostapd/hostapd.conf

Cambiar lo siguiente en este archivo:
driver=nl80211 # el driver interface entre las operaciones wifi y el kernel
interface=wlan0 # cambiar este a tu dispositivo wifi (ver con comando
ip a )
ssid=MiRedPlecaEtece # cambiar para que sea tu SSID
hw_mode=g # modo de wireless
channel=6 # canal
ieee80211n=1 # habilita el Wireless N
wpa=1
wpa_passphrase=password_wpa
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

o si quieren con la red abierta, para utilizar la autenticación Radius (portal) únicamente, cambiar
wpa=0

 -Iniciar y probar hostapd:
Hay que poner el estado del cliente Wifi  en off, y luego quitar el modo avión(desbloquearlo):

sudo nmcli radio wifi off

sudo rfkill unblock wifi

Iniciar servicio

sudo systemctl start hostapd

Si todo esta bien, debería iniciar el servicio y con cualquier dispositivo deberían ver la red disponible CON los parámetros que le dimos (tipo de red, contraseña, si es abierta, etc)




5. Modificar intensidad de wifi (dBm)


Para esto, primero debemos identificar cuanto es el máximo que soporta en dBm nuestra tarjeta wifi, ejecutando este comando.

sudo iw list | grep dBm
Nos muestra que para todos los canales disponibes, el máximo son 20 dBm.
 
-Cambiar potencia de transmisión.
Esto se hace en unidades mBm , donde cada 1dBm = 100 mBm,  es decir
20 dBm = 2000 mBm máximo, y el mínimo pues, hay que ir probando hasta encontrarlo.
En el caso de la USB wifi usada para este articulo, lo mínimo son 900 mBm ó 9dBm, que equivale como a 5 metros a la redonda.

sudo iw dev wlp0s6u1 set txpower limit 900

No hay comentarios:

Publicar un comentario