"Después del juego es antes del juego"
Sepp Herberger

viernes, 14 de noviembre de 2014

Configuración básica de un punto de acceso con hostapd

hostapd es un excelente software que permite convertir un Linux en un punto de acceso wifi totalmente configurable. La dificultad que le encuentro es que el fichero de configuración /etc/hostapd/hostapd.conf tiene un formato un poco farragoso y me cuesta un montón recordar todas las configuraciones posibles. Vamos a ver la configuración de los principales parámetros con distintos escenarios que será muy útil para hacer pruebas. Empecemos por lo básico:

#/etc/hostapd/hostapd.conf
driver=nl80211
ssid=MiWifi
interface=wlan0
bridge=br0 

Comentemos cada parámetro:

driver: driver a usar por el demonio hostapd para comunicarse con el kernel. Normalmente es nl80211, que soporta muchas tarjetas de red, pero hay otros mas antiguos para casos específicos: hostap, madwifi y prism54.

Ojo: muchas versiones de hostapd sólo vienen preparadas para usar el driver nl80211 y si queremos usar otro (porque la tarjeta de red que tengamos no está soportada por nl80211) hay que recompilar el hostapd (junto con el driver madwifi, por ejemplo) para activarlo.

ssid: SSID de la red wifi que se va a crear desde el punto de acceso.

interface: nombre de la tarjeta de red wifi (normalmente wlanX o athX).

bridge: si la tarjeta de red tiene un bridge con una tarjeta ethernet, debemos indicarlo añadiendo bridgle=brX, siendo brX el nombre de la tarjeta virtual creada por el bridge, con un /etc/network/interfaces parecido a:

#/etc/network/interfaces
iface eth0 inet manual
iface wlan0 inet manual
iface br0 inet static
bridge_maxwait 0
bridge_stp off
bridge_ports eth0 wlan0
address 192.168.0.254
netmask 255.255.255.0
broadcast 192.168.0.255

Mas parámetros dentro de hostapd.conf:

channel=1
hw_mode=g

channel: canal usado la red wifi creada. Debe estar entre 1 y 11, pero recordemos los canales se superponen físicamente en el espacio de frecuencias , y que los canales óptimos para que no existan conflictos son 1, 6 y 11.  Versiones modernas de hostapd permite el valor "auto", de tal forma que se busca el canal menos saturado dentro del entorno donde esté la red wifi.

hw_mode: modo de red usado por la red wifi. Puede ser a (11mbps), b (22mbps) y g (54mbps). El modo n (104mbps) se configura aparte, con otro parámetro.

Otro grupito de parámetros:

ieee80211n=1
wmm_enabled=1
ht_capab=[SHORT-GI-40][DSSS_CCK-40]

Los anteriores parámetros permiten activar el modo n en la red wifi del punto de acceso:

ieee80211n: si está a 1, el modo de la wifi es el n (104mbps)

wmm_enabled: si está a 1, se activa el modo WMM para funcionalidad HT (higth throughput-alto rendimiento) completa. Esto activa sistemas mas potentes de modulación de la señal y uso de frecuencias que permite alcanzar velocidades mas altas.

ht_capab: parámetros de HT. Aquí indicamos los distintos flags que queremos activar al usar HT. Esto depende fuertemente de la tarjeta wifi usada y su driver y es todo bastante esotérico. Normalmente lo mejor es googlear hasta encontrar los que funcionan para nuestro sistema. Una lista mas o menos completa los parámetros que podemos encontrar es:

[LDPC] [HT40-] [SMPS-STATIC] [SMPS-DYNAMIC] [GF] [SHORT-GI-20] [SHORT-GI-40][TX-STBC][RX-STBC1][RX-STBC12] [RX-STBC123][DELAYED-BA][MAX-AMSDU-7935] [DSSS_CCK-40] [40-INTOLERANT][LSIG-TXOP-PROT]

Bueno, con esto ya tenemos configuradas las características básicas del punto de acceso (nombre, canal, velocidad). Vamos a centrarnos ahora en el aspecto de la seguridad:

ignore_broadcast_ssid=0

ignore_broadcast_ssid: puesto a 1 oculta la difusión del SSID de la red wifi. De esta manera ningún dispositivo normal podrá verla en su lista de redes wifi y solo podrá conectarse a ella dando su nombre exacto. Es un sistema de seguridad rudimentario y fácil de sortear usando una herramienta de auditoría wifi que haga un sniffing de las redes en el espacio radioeléctrico, pero normalmente es bastante efectivo ante intrusos de bajo nivel.

macaddr_acl=1
accept_mac_file=/etc/hostapd/hostapd.accept

macaddr_acl: con valor 1 activa el filtro MAC en el punto de acceso, puesto a 0 lo desactiva.
accept_mac_file: ruta al fichero que contiene las MACs que tienen autorizado el conectarse al punto de acceso. Los que no tengan una de esas MACs serán rechazados. Es otro sistema de seguridad básico pero muy efectivo.

ap_max_inactivity=21600

ap_max_inactivity: número de segundos que se espera sin que un cliente de muestras de actividad para desconectarlo de la red.

Vamos ahora con los tipos de cifrado. Configurar esto es un auténtico lío, ya que no se define con un solo parámetro. Veremos las distintas opciones:

1) Red abierta, sin cifrado:

auth_algs=0/1

En teoría debería ser auth_algs=0, pero hay tarjetas wifi donde no funciona. En cambio si ponemos auth_algs=1 y luego no definimos ningún tipo de seguridad WEP o WPA se entiende que es una red abierta.

2) Red con clave WEP

auth_algs=1/2/3

1: Open Auth. Usar el método de autenticación  "Autenticación Abierta"
2: Shared Keys. Usar el método de autenticación "Claves compartidas"
3: Open Auth y Shared Keys. Se usa cualquiera de los dos métodos.

Con cifrado WEP se puede poner 1,2 o 3. En principio solo se usaba Open Auth, pero se definió Shared Keys para utilizar un método mas seguro y complejo... con el resultado de que era mas inseguro que el original. Si queremos mas detalles en Internet hay abundante documentación de como funciona cada uno. Lo recomendable a efectos prácticos es usar el valor 1.

Ahora definiremos la clave WEP que tendrán que proporcionar los clientes para conectarse:

wep_default_key=0/1/2/3
wep_key0=123456789a
wep_key1="vwxyz"
wep_key2=0102030405060708090a0b0c0d
wep_key3=".2.4.6.8.0.23"

Si dejamos wep_default_key sin definir no se activará el cifrado WEP. Si queremos usar dicho cifrado el valor de wep_default_key debe ser un número entre 0 y 3 que identifica la clave a usar. Esto nos permite tener 4 claves distintas y usar una u otra simplemente cambiando este valor.

wep_key0:  clave WEP 0
wep_key1:  clave WEP 1
wep_key2:  clave WEP 2
wep_key3:  clave WEP 3

Tan solo es obligatorio definir el wep_keyX  correspondiente al wep_default_key establecido.

En cuanto al formato de la clave WEP, puede ser un string entrecomillado o dígitos hexadecimales. La longitud puede ser 5, 13 o 16 caracteres o 10, 26 o 32 digitos hexadecimales, dependiendo de si usamos claves de 40-bits, 104-bits o 128-bits.

3) Red con clave WPA

El auth_algs debe estar a 1, como en WEP. Desconozco si admite los valores 2 o 3, pero ya hemos dicho que el mas seguro es el 1.

auth_algs=1

El parametro wpa puede ser: 0 (sin wpa), 1 (usar wpa), 2 (usar wpa2) y 3 (usar wpa y wpa2)

wpa=0/1/2/3

Clave, se puede especificar de varias formas:

wpa_passphrase=123456789a # se indica la clave como un string de entre 8 y 63 caracteres.
wpa_psk=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef # se indica la clave como 64 digitos hexadecimales.
wpa_psk_file=/etc/hostapd/psk-file.wpa # la clave se guarda en un fichero aparte. En ese fichero puede haber líneas con
                                       # pares clave PSK-MAC, de tal manera que cada posible cliente tenga una clave
                                       # distinta de acceso a la red Wifi

Algoritmo de gestión de claves usado, puede ser WPA-PSK WPA-EAP o ambos.

wpa_key_mgmt=WPA-PSK/WPA-EAP/WPA-PSK WPA-EAP

WPA-PSK necesita wpa_psk o wpa_passphrase

WPA-EAP es para servidores EAP y Radius, que son un sistema que restringe el acceso por usuario y contraseña. Con Radius hay un servidor centralizado que almacena esos usuarios y permite ser compartido entre muchos puntos de acceso. Su explicación excede esta entrada del blog.

Algoritmo de cifrado usado, el nombre del parámetro a poner depende de si usamos WPA, WPA2 o ambos:

wpa_pairwise=TKIP/CCMP      # usada con wpa
rsn_pairwise=CCMP           # usada con wpa2

Otro parámetro relacionado con el uso de WPA es

wpa_group_rekey=86400

wpa_group_rekey: es el número de segundos del intervalo de renovación de la clave WPA. Cada cierto tiempo se aplica un "rekeying" que cambia claves internas usadas en la transmisión. Se supone que esto aporta seguridad, asi que nos lo creemos y ya está.

Aparte de todos estos parámetros vistos, hay una pléyade de parámetros relacionados con la seguridad y con ajustes finos de la conexión y transmisión que no veremos, ya que solo se usan si queremos configurar aspectos muy especializados del punto de acceso. Aquí hay un ejemplo con muchos de ellos.

Para finalizar, vamos a ver ficheros hostapd.conf completos para diferentes escenarios. Suponemos que tenemos una tarjeta de red llamada wlan0, soportada por el driver nl80211, usamos el canal 1 y no tenemos un bridge de red (no hacemos uso del parámetro bridge=brX). Tendrás que adaptar estos parámetros a tu casuística concreta:

1. Red abierta sin filtro MAC.

driver=nl80211
ssid=WIFI-MIA
interface=wlan0

#Canal 1
channel=1

#Wifi-n
hw_mode=g
ieee80211n=1
wmm_enabled=1
#Estos flags son para mi tarjeta de red, configurar según sea la tuya.
ht_capab=[SHORT-GI-40][DSSS_CCK-40]

#Sin ocultar la SSID
ignore_broadcast_ssid=0

#Sin filtro MAC
macaddr_acl=0
#macaddr_acl=1
#accept_mac_file=/etc/hostapd/hostapd.accept

#Desconexión de clientes a las 6 horas de inactividad
ap_max_inactivity=21600

#Red abierta
auth_algs=1

2. Red abierta con filtro MAC.

driver=nl80211
ssid=WIFI-MIA
interface=wlan0

#Canal 1
channel=1

#Wifi-n
hw_mode=g
ieee80211n=1
wmm_enabled=1
#Estos flags son para mi tarjeta de red, configurar según sea la tuya.
ht_capab=[SHORT-GI-40][DSSS_CCK-40]

#Sin ocultar la SSID
ignore_broadcast_ssid=0

#Con filtro MAC
macaddr_acl=1
accept_mac_file=/etc/hostapd/hostapd.accept

#Desconexión de clientes a las 6 horas de inactividad
ap_max_inactivity=21600

#Red abierta
auth_algs=1

3. Red WEP

driver=nl80211
ssid=WIFI-MIA
interface=wlan0

#Canal 1
channel=1

#Wifi-n
hw_mode=g
ieee80211n=1
wmm_enabled=1
#Estos flags son para mi tarjeta de red, configurar según sea la tuya.
ht_capab=[SHORT-GI-40][DSSS_CCK-40]

#Sin ocultar la SSID
ignore_broadcast_ssid=0

#Sin filtro MAC
macaddr_acl=0

#Desconexión de clientes a las 6 horas de inactividad
ap_max_inactivity=21600

#Cifrado WEP
auth_algs=1
wep_default_key=0
wep_key0=a123456789

4. Red WPA

driver=nl80211
ssid=WIFI-MIA
interface=wlan0

#Canal 1
channel=1

#Wifi-n
hw_mode=g
ieee80211n=1
wmm_enabled=1
#Estos flags son para mi tarjeta de red, configurar según sea la tuya.
ht_capab=[SHORT-GI-40][DSSS_CCK-40]

#Sin ocultar la SSID
ignore_broadcast_ssid=0

#Sin filtro MAC
macaddr_acl=0

#Desconexión de clientes a las 6 horas de inactividad
ap_max_inactivity=21600

#Cifrado WPA
auth_algs=1
wpa=1
wpa_passphrase=a123456789a
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
wpa_group_rekey=86400

5. Red WPA2

driver=nl80211
ssid=WIFI-MIA
interface=wlan0

#Canal 1
channel=1

#Wifi-n
hw_mode=g
ieee80211n=1
wmm_enabled=1
#Estos flags son para mi tarjeta de red, configurar según sea la tuya.
ht_capab=[SHORT-GI-40][DSSS_CCK-40]

#Sin ocultar la SSID
ignore_broadcast_ssid=0

#Sin filtro MAC
macaddr_acl=0

#Desconexión de clientes a las 6 horas de inactividad
ap_max_inactivity=21600

#Cifrado WPA2
auth_algs=1
wpa=2
wpa_passphrase=a123456789a
wpa_key_mgmt=WPA-PSK
rsn_pairwise=TKIP
wpa_group_rekey=86400

6. Red WPA y WPA2

driver=nl80211
ssid=WIFI-MIA
interface=wlan0

#Canal 1
channel=1

#Wifi-n
hw_mode=g
ieee80211n=1
wmm_enabled=1
#Estos flags son para mi tarjeta de red, configurar según sea la tuya.
ht_capab=[SHORT-GI-40][DSSS_CCK-40]

#Sin ocultar la SSID
ignore_broadcast_ssid=0

#Sin filtro MAC
macaddr_acl=0

#Desconexión de clientes a las 6 horas de inactividad
ap_max_inactivity=21600

#Cifrado WPA y WPA2
auth_algs=1
wpa=3
wpa_passphrase=a123456789a
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=TKIP
wpa_group_rekey=86400

Bueno, pues con esto espero que tengamos mas claro como configurar de una forma básica nuestro punto de acceso. Hastá la próxima....

No hay comentarios:

Publicar un comentario