GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo instalar un punto de acceso inalámbrico con página cautiva en Linux usando CoovaChilli

El propósito de este artículo es demostrar cómo puede convertir una computadora o computadora portátil basada en Linux en un punto de acceso inalámbrico donde los usuarios pueden autenticarse a través de una página de portal cautiva. Para esta tarea, el software del controlador principal será CoovaChilli. Este software es una solución de administración de puntos de acceso ideal para hoteles, restaurantes, supermercados, parques y cualquier lugar que ofrezca Internet WiFi.

Requisitos

  • Una distribución de Linux. En este artículo, usaré Fedora 20. Las versiones posteriores 21/22 deberían funcionar bien.
  • Bibliotecas de desarrollo necesarias para compilaciones de paquetes fuente.
  • Una instalación de servidor MySQL en funcionamiento.
  • Un dispositivo de red con cable que se conecta a Internet.
  • Capacidad de ejecutar comandos sudo.
  • Un dispositivo de red inalámbrica que admita el modo de punto de acceso. Para ver si su dispositivo inalámbrico es compatible con el modo AP, ejecute:
    sudo iw phy |grep -A 5 -i 'Modos de interfaz compatibles' | grep '*'

Instalar dependencias de CoovaChilli

yum install libnl3-devel libtalloc-devel iptables

Instalar hostapd

Hostapd permite que su computadora funcione como un punto de acceso (AP) WPA/WPA2 Authenticator. Otras funcionalidades incluyen los servicios de autenticación Radius, aunque no los usaremos aquí.

La mayoría de las distribuciones de Linux (incluida Fedora) tienen versiones preempaquetadas de hostapd y se pueden instalar usando el software de administración de paquetes. Por ejemplo, en Fedora, CentOS y otras distribuciones de Linux basadas en Red-Hat, un simple comando instalará este paquete:

yum install hostapd

Sin embargo, para instalar la última versión de hostpad, necesitaremos descargar y compilar las fuentes. Esto se puede hacer fácilmente de la siguiente manera:

cd /usr/src
sudo git clone git://w1.fi/hostap.git

Esto descargará hostapd, el demonio del servidor, y las fuentes wpa_supplicant. Estamos interesados ​​en el primero, por lo que cambiaremos a las fuentes de hostapd:

cd hostap/hostapd

Hostapd no tiene un comando de 'configuración', por lo que antes de compilar hostapd, debemos cambiar el prefijo de instalación. Una forma rápida y sencilla de cambiar el directorio de instalación predeterminado es mediante sed:

sed -i “s:export BINDIR ?= /usr/local/bin/:export BINDIR ?= /usr/sbin:g” Makefile

A continuación, copie el archivo de configuración predeterminado:

cp -v defconfig .config

necesitaremos cambiar algunos valores predeterminados en el archivo de configuración:

vim .config

Descomenta las siguientes opciones:

CONFIG_LIBNL32=y # Use libnl 3.2 libraries
CONFIG_IEEE80211N=y # Enables IEEE 802.11n support
CONFIG_WNM=y # Enables Network Management support
CONFIG_IEEE80211AC=y # Enables IEEE 802.11ac support
CONFIG_DEBUG_FILE=y # Support for writing debug log to file

Ejecute hacer e instalar:

make
sudo make install

Para comprobar si hostapd está correctamente instalado, ejecute:

hostapd -v

El comando anterior le mostrará la versión y los créditos

Configurar hostapd

Cree un archivo de configuración de hostapd usando un archivo de muestra:

sudo mkdir /etc/hostapd
sudo cp -v /usr/src/hostap/hostapd/hostapd.conf /etc/hostapd/
sudo vim /etc/hostapd/hostapd.conf

Cambie los siguientes parámetros en el archivo hostapd.conf:

driver=nl80211
interface=wlan0 # Change this to your wireless device
ssid=KAMPALA-3 # Change this to your SSID
hw_mode=g
channel=6 # Enter your desired channel
ieee80211n=1 # Enable IEEE 802.11n
wpa=1
wpa_passphrase=myverysecretpassword
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

Crear directorio para sockets hostapd:

sudo mkdir /var/run/hostapd

Establezca el estado de la interfaz WiFi en 'ARRIBA' y desbloquee Wifi si el interruptor suave está activado:

sudo rfkill unblock wifi
sudo ip link set dev wlan0 up

Pruebe e inicie hostapd:

sudo hostapd -d /etc/hostapd/hostapd.conf

Si todo va bien, el demonio hostapd debería iniciarse y no cerrarse.

A continuación, cree un archivo de servicio systemd. Por ahora, la mayoría de las distribuciones de Linux usan systemd para controlar los servicios:

sudo vim /etc/systemd/system/hostapd.service

[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=dnsmasq.service

[Service]
Type=forking
PIDFile=/var/run/hostapd.pid
ExecStartPre=/bin/mkdir -p /var/run/hostapd
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /var/run/hostapd.pid -B

[Install]
WantedBy=multi-user.target

Habilite el servicio para que se inicie automáticamente al arrancar:

sudo systemctl enable hostapd.service

Radio libre

Dado que solicitaremos a los clientes que se autentiquen antes de acceder a Internet, se necesita la instalación de un servidor Radius. FreeRadius es un servidor de radio basado en código abierto. También se puede instalar usando su administrador de paquetes de Linux favorito, como yum o apt. Pero como queremos instalar la última versión, compilaremos desde la fuente.

Descargar freeradius:

cd /tmp/
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.9.tar.bz2

Descomprima las fuentes y cambie a la ubicación de instalación:

sudo tar jxvf freeradius-server-3.0.9.tar.bz2 -C /usr/src/
cd /usr/src/freeradius-server-3.0.9

Ejecute el script de configuración asegurándose de usar el prefijo y la ruta de la biblioteca correctos para su configuración:

sudo ./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --localstatedir=/var/ --enable-fast-install=no

Proceda a compilar e instalar:

sudo make
sudo make install

Si te encuentras con el siguiente error

mkdir:no se puede crear el directorio '/etc/raddb/':el archivo existe
hacer:*** [/etc/raddb/] Error 1

Ejecute lo siguiente para solucionarlo:

rmdir /etc/raddb
make install && make install

Agregar grupo y usuario de radio:

sudo groupadd -r radiusd
sudo useradd -r -M -c "Radius Server User" -g radiusd radiusd -s /sbin/nologin

Configurar tablas MySQL freeradius

Inicie el servidor MySQL si no se está ejecutando. Como se mencionó anteriormente, el proceso de inicialización se realiza a través de systemd, por lo que:

sudo systemctl -q is-active mysqld.service || sudo systemctl start mysqld.service

Asegúrese de que el servicio se inicie incluso en el arranque:

sudo systemctl enable mysqld.service

Crear base de datos de radios:

mysqladmin -u root -p[MYSQL_ROOT_PASSWORD] create radius

Genere tablas de base de datos utilizando el esquema MySQL:

sudo cat /etc/raddb/mods-config/sql/main/mysql/schema.sql | mysql -u root -p[MYSQL_ROOT_PASSWORD] radius

Cree un usuario de radio de MySQL y establezca privilegios en la base de datos de radio:

mysql -u root -p[MYSQL_ROOT_PASSWORD] radius

GRANT ALL PRIVILEGES ON radius.* to [FREERADIUS_DB_USER]@localhost IDENTIFIED by '[FREERADIUS_DB_PASS]';

Configure el módulo de radio SQL:

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

Descomente o cambie los siguientes parámetros:

driver = "rlm_sql_mysql"
dialect = ”mysql”
server = "localhost"
port = 3306
login = "FREERADIUS_DB_USER"
password = "FREERADIUS_DB_PASS"
read_clients = yes

Agregar contadores SQL de chillispot:

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

Agregue esta línea al final del archivo anterior:

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

Siguiente enlace sql, sqlcounter a módulos disponibles:

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 clientes de radio

sudo vim /etc/raddb/clients.conf

Cambie la contraseña a la contraseña utilizada anteriormente para la base de datos MySQL de FreeRadius:

secret = [FREERADIUS_DB_PASS]

Configurar servidor Radius:

sudo vim /etc/raddb/radiusd.conf

En la sección de seguridad, cambie el nombre de usuario y grupo creado durante la instalación:

user = radiusd
group = radiusd
allow_vulnerable_openssl = yes
IMPORTANT: Don't do this. You really should update to recent versions of OpenSSL

En la sección de creación de instancias (Near line 728), agregue los siguientes módulos de contador:

chillispot_max_bytes
noresetcounter

Configure el servidor virtual predeterminado en sitios disponibles:

sudo vim /etc/raddb/sites-available/default

En la sección de autorización:

Comenta lo siguiente:

#filter_username

Descomente lo siguiente:

auth_log
unix


Cambie lo siguiente:

'-sql' to sql

Agregue lo siguiente al final de la sección de autorización:

chillispot_max_bytes
noresetcounter

A continuación, en la sección de contabilidad, descomente lo siguiente:

radutmp

Cambie lo siguiente:

'-sql' to sql

A continuación, en la sección de sesión, descomente lo siguiente:

radutmp
sql

A continuación, en la sección posterior a la autenticación, descomente lo siguiente:

reply_log

Cambia lo siguiente:

'-sql' to sql

Configure el servidor virtual de solicitudes de túnel interno en sitios disponibles:

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

En la sección de autorización, cambie lo siguiente:

'-sql' to sql

Agregue lo siguiente al final de la sección de autorización:

chillispot_max_bytes
noresetcounter

A continuación, en la sección de sesión, descomente lo siguiente:

sql

A continuación, en la sección posterior a la autenticación, descomente lo siguiente:

reply_log

Cambia lo siguiente:

'-sql' to sql

Agregue los siguientes contadores de MySQL 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 la propiedad de los directorios de configuración y registro:

sudo touch /var/log/radius/radutmp
sudo chown -R radiusd:radiusd /etc/raddb
sudo chown -R radiusd:radiusd /var/log/radius

Crear usuario administrador en la base de datos MySQL de radius:

echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[ADMIN_USER]', 'Cleartext-Password', '[ADMIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius

Radio de inicio para fines de inicialización y prueba

sudo /usr/sbin/radiusd -X

Abra una nueva ventana de terminal para probar las conexiones:

radtest [ADMIN_USER] [ADMIN_PASSWORD] 127.0.0.1 0 [FREERADIUS_DB_PASS]

Si recibe un mensaje como este, entonces ha terminado con la configuración del radio mínimo y requerido para los siguientes pasos:

Se recibió el Id. de aceptación de acceso 174 de 127.0.0.1:1812 a 0.0.0.0:0 de longitud 20

Pero antes de dejar de lado el radio, cree un archivo de servicio systemd para su servidor de radio:

sudo vim /etc/systemd/system/radiusd.service

[Unit]
Description=FreeRADIUS high performance RADIUS server.
After=mysqld.service syslog.target network.target
[Service]
Type=forking
ExecStartPre=-/bin/mkdir /var/log/radius
ExecStartPre=-/bin/mkdir /var/run/radiusd
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/log/radius
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/run/radiusd
ExecStartPre=/usr/sbin/radiusd -C
ExecStart=/usr/sbin/radiusd -d /etc/raddb
ExecReload=/usr/sbin/radiusd -C
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

Habilite el servicio para que se inicie automáticamente al arrancar:

sudo systemctl enable radiusd.service

Instalar Haserl

Se necesita Haserl para el miniportal incrustado incluido en CoovaChilli.

Descargar haserl:

cd /tmp
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gz

Empaca el tarball:

sudo tar zxvf haserl-0.9.35.tar.gz -C /usr/src/
cd /usr/src/haserl-0.9.35/

Compilar e instalar:

./configure --prefix=/usr –libdir=/usr/lib64

(Asegúrese de cambiar a la biblioteca correcta o al prefijo deseado)

make
sudo make install

Instalar CoovaChilli

CoovaChilli es un software de portal cautivo basado en código abierto. Comenzó a partir del obsoleto proyecto chili. Una vez finalizada la instalación y configuración de coovachilli, podrá redirigir a sus clientes de punto de acceso WiFi a una página de inicio de sesión, es decir, un portal cautivo donde pueden iniciar sesión y acceder a Internet.

Descarga las últimas fuentes de coovachilli:

cd /usr/src
sudo git clone https://github.com/coova/coova-chilli.git

Configurar y compilar coova:

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

(Asegúrese de cambiar a la biblioteca correcta o al prefijo deseado)

make
sudo make install

Configurar CoovaChilli

Todos los archivos de configuración se encuentran en:/etc/chilli. Deberá crear un archivo de configuración con las modificaciones de sus sitios de la siguiente manera:

sudo cp -v /etc/chilli/defaults /etc/chilli/config
sudo vim /etc/chilli/config

Cambie los siguientes parámetros para que coincidan con su entorno:

HS_WANIF=eth0 # WAN Interface toward the Internet
HS_LANIF=wlan0 # Subscriber Interface for client devices
HS_NETWORK=10.1.0.0 # HotSpot Network (must include HS_UAMLISTEN)
HS_NETMASK=255.255.255.0 # HotSpot Network Netmask
HS_UAMLISTEN=10.1.0.1 # HotSpot IP Address (on subscriber network)
HS_RADSECRET=[FREERADIUS_DB_PASS] # Set to be your RADIUS shared secret
HS_UAMSECRET=[FREERADIUS_DB_PASS] # Set to be your UAM secret
HS_ADMUSR=[ADMIN_USER]
HS_ADMPWD=[ADMIN_PASSWORD]

Agregue el script chili ipup.sh. El propósito de estos scripts es preparar el sistema para que actúe como un enrutador. También es posible que desee agregar otros comandos, p. Configuración de la puerta de enlace.

sudo vim /etc/chilli/ipup.sh

#!/bin/sh
#
# Allow IP masquerading through this box
/usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

IMPORTANTE:Cambie el dispositivo de Internet por el correcto.

Hacer script ejecutable:

sudo chmod 755 /etc/chilli/ipup.sh

Habilite coovachilli para que se inicie en el momento del arranque:

sudo systemctl enable chilli

Iniciar coovachilli:

sudo systemctl start chilli

Prueba de su portal cautivo

Antes de comenzar la prueba, asegúrese de que primero puede acceder a Internet localmente.


Luego, usando un cliente inalámbrico como un teléfono inteligente o una computadora portátil, abra su navegador web favorito. Vaya a cualquier URL/sitio web de su elección.

Si siguió los pasos anteriores, será redirigido a la página del portal cautivo como se muestra a continuación:

Administración de usuarios

Para agregar usuarios para que puedan acceder a Internet usando su punto de acceso, ejecute el siguiente comando para cada usuario. Puede automatizarlo usando un script si lo desea.

echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[LOGIN_NAME]', 'Cleartext-Password', '[LOGIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius

¡Eso es todo amigos!

Sígueme en:@jzikusooka


Linux
  1. Cómo instalar el servidor web Nginx en Linux

  2. Cómo instalar Vagrant en Linux

  3. Cómo instalar un servidor FTP en Rocky Linux 8 con VSFTPD

  4. Cómo instalar Elasticsearch en Ubuntu 22.04 con SSL

  5. ¿Cómo instalar un módulo para todos los usuarios con pip en linux?

Cómo instalar LAMP Stack con PhpMyAdmin en Arch Linux

Cómo instalar Drupal CMS en RHEL 8 Linux

Cómo instalar Joomla CMS en RHEL 8 Linux

Cómo ejecutar un alias con Sudo en Linux

Cómo instalar el servidor web OpenLiteSpeed ​​en Alma Linux 8

Cómo instalar MongoDB en Rocky Linux 8