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