CONFIGURANDO UN PUNTO DE ACCESO FREEBSD PARA TU RED WIRELESS Por Michael S. DeGraw-Bertsch y traducción por Alberto Fernández Sanchez (LievenX) A iro n e t Yagi Antenna-1 BSD AP Wireless 1 INTRODUCCIÓN Un punto de acceso es (semejante a un teléfono celular), tiene un enlace desde la LAN wíreless a la red cableada y la salida a Internet . Hay bastantes puntos de accesos disponibles en el mercado, integrados con las funciones de cable-modem o router DSL firewall. Estas soluciones especiales son convenientes , pero se hacen a veces un tanto rígidos en cuanto a nuestros propósitos y algo inseguros. La mayoría de los puntos de acceso comerciales (Access Points) están sujetos a las limitaciones propias del protocolo WEB . (Para mas información buscar por el documento de Ido Dubrawsky “Wíreless (In)Security”. Este artículo describe como configurar un PC corriendo con FreeBSD para servir como punto de acceso (AP) aplicado a un escenario de una red inalámbrica. Este punto de acceso FreeBSD no necesita que sea un servidor o un PC moderno. En base a esto, hay gente que recomienda el aprovechar las viejas “máquinas” tipo 386 o 486 para desempeñar esta tarea, los procesadores altos la verdad es que sobran en esta implementación. Encontrando el Hardware Una vez que consigas tu viejo portátil ( futuro access point ), necesitaras tarjetas wíreless 802.11b . Algunas compañías trabajan con este tipo de Standard , como Orinoco (a.k.a, WaveLAN,Lucent, o Agüere), Cisco, o LinkSys. Las Orinoco siempre son las mas popularmente aceptadas debido a su conector para una posible conexión a una antena externa, (aunque el conector del pigtail es propietario…). La potencia de la tarjeta suele ser de 30 mW de salida que será suficiente ya que le conectaremos una tarjeta externa. Las tarjetas Cisco Aironet 350 tiene una potencia de salida en EEUU de 100 mW (autolimitadas a 30 mW por favor si conseguís que trabajen a 100 mW hacermelo saber [email protected]) claro está que el precio de estas tarjetas Cisco son bastante mas elevado. Todos los casos prácticos de este manual están basados en tarjetas wíreless Orinoco, pero pueden ser exportadas las ideas a otro tipo de tarjetas . 2 Una nota desafortunada referente a las tarjetas Orinoco: Las tarjetas antiguas llamadas WaveLAN en vez de Orinoco , necesitarán una actualización de BIOS antes para que trabajen debidamente bajo FreeBSD. La actualización está gratis disponible en la página web de Orinoco (http://www.wavelan.com). El problema es que la utilidad de actualización solo funciona bajo Microsoft Windows. La solución sería saltar a Windows y con un adaptador PCMCIA actualizar la tarjeta. Se puede considerar la posibilidad de obtener una antena externa o dos . Así si la zona donde esté ubicado tu FreeBSD tiene poca cobertura podremos desplazar la antena externa en zonas mas ricas en cobertura. Las antenas externas también serán usadas para el control de la radiación y aprovecharlo al máximo. El rango de radiacción de una antena PCMCIA y mayoritariamente vertical, el cual limita algo el alcance de la radiación. En cambio las antenas externas proveerá mayor cobertura (ya que la radiaccion es mayoritariamente horizontal) se podrá concentrar el rango de radiación para proveer mayor ganancia de señal. En lo referente a la seguridad, las tarjetas wireless pueden trabajar con encriptación de 128 bits WEP o con 40 bits WEP. WEP es ( Wired Equivalency Protocol). Esta seguridad es deficitaria y realmente no trabaja en una encriptación fiable (tal como discutiremos al final del artículo). La compra de una tarjeta con 128 bits de WEP realmente no merece la pena por la gran diferencia en cuanto a la relación servicios prestados-precio. El consejo es que se compren tarjetas de 40-bits de WEP y que os ahorreis el dinero. Finalmente, si tu punto de acceso es una máquina de sobremesa, necesitaras también los correspondientes adaptadores PCI o ISA a PCMCIA , ya que las tarjetas wíreles solo son vencidas como PCMCIA . Ambos adaptadores trabajan con FreeBSD , a través de PCI Orinoco y requieren a versión de FreeBSD más reciente ( por lo menos 4.4RELEASE). Mira la sección de loader.conf para las opciones que necesitaras si estas usando adaptadores PCI. . CONFIGURANDO EL FREEBSD Una vez se haya reunido todo el material necesario (antenas,adaptadores,tarjetas,equipo) puedes configurar el FreeBSD. Con algunos cambios en el kernel, un script de configuración adaptado a nuestras prentensiones, y unos a cuantos minutos de paciencia, entonces ya estaremos listos. Las siguientes secciones te guiarán a través de los cambios que se necesitarán hacer a nivel de configuración. 3 EL KERNEL El primer paso es configurar el kernel . Si tu has hecho esto anteriormente , estupendo, solo pasa a la siguiente sección para las opciones que necesitas añadir . Si crees que no lo tienes el kernel adaptado y no sabes como no te preocupes dirígete al episodio 9 de el HandBook de FreeBSD (http://www.freebsd.org/doc/en_US.ISO88591/books/handbook/kernelconfig.html). Una pequeña guía que te servirá para empezar. Para empezar, necesitarás las fuentes del kernel en tu mákina. Si no existe el directorio /usr/src/sys/ en tu sistema, necesitaras instalar las fuentes. La manera más facil de hacerlo es arrancar /stand/sysinstall como root, elegir “Configure”, después “Distributions”, luego “src” , y finalmente “sys”. 1.- CONFIGURE 2.- DISTRIBUTIONS 3.- SRC 4.- SYS Aceptamos después y las fuentes del kernel estarán en tu máquina. Con las fuentes instaladas, cambia de directorio a /usr&src/sys/i386/conf. Copia GENERIC a un nuevo archivo, como por ejemplo MYKERNEL. Edita el archivo, añade las opciones de la siguiente seccion y cuando termines graba el archivo y pon: config MYKERNEL cd ../ ../compile/MYKERNEL make depend && make && make install Reinicia el sistema , y cuando rearranques de Nuevo estaremos usando el Nuevo kernel adaptado a nuestras pretensions. ( Si observamos cualquier problema o incluso no arranca , cuando salga la linea de comandos en el arranque, presiona cualquier tecla, y teclea “boot kernel.old [enter] así lo que conseguiremos es usar el kernel viejo. Si esto pasa por favor vuelve al capitulo 9 de el HandBook mencionado anteriormente.) LAS OPCIONES DEL KERNEL Si estas usando el kernel genérico (GENERIC KERNEL), solo hay unas pocas opciones que deberías activar; todo lo demás está activado por defecto con lo cual no hará falta modificarlo. Si tienes ya en el momento de ponernos manos a la obra un kernel personalizado, verifica que tu tienes activadas las líneas apropiadas. 4 Primero, debes añadir el soporte para tarjetas wireless . Si lo tienes quitado, añade el dispositivo <wi|an|awi>, donde WI es para tarjetas Orinoco, AN es para tarjetas Airones, y AWI es para tarjetas PRISM. Segundo, si es necesario, añade el soporte para PCMCIA con las siguientes tres lineas: device card devide pcic0 at isa? Irq 0 port 0x3e0 iomem 0xd0000 device pcic1 at isa? Irq 0 port 0x3e2 iomem 0xd4000 disable Además de lo expuesto deberíamos añadir el soporte para filtros IP y para desvio de IP, con las siguientes opciones: 1.- filtros IP -> con la opcion IPFILTER 2.- desvio de IP -> con la opcion IPDIVERT. 3.- demas opciones -> device bpf , y opcionalmente, options IPFILTER_LOG. Mientras lo estas activando podríamos aprovechar y activar las opciones relativas a IPsec , para configurar la seguridad en nuestro sistema: options IPSEC, options IPSEC_ESP, y options IPSEC_DEBUG. Estas utilidades serán discutidas en breve en el apartado de Seguridad en Redes Wireless. Con los dispositivos apropiados y las opciones en su sitio, compila e instala tu kernel. LOADER.CONF Si estas usando un adaptador PCI y tienes algún problema (como por ejemplo a la hora de arrancar y no reconoce tu tarjeta wireless, o la tarjeta directamente no trabaja) , prueba añadiendo las siguientes líneas a /boot/loader.conf: hw.pcic.intr_path=”1” hw.pcic.irq=”0” Tal vez necesites decir a tu BIOS que no esta corriendo un Sistema Operativo PnP (plug & play), y permitir las interrupciones ISA en el parámetro IRQ que estes usando. (El tema de IRQs será tratado también en la sección de pccard.conf.) Si estás usando un equipamiento viejo WaveLAN , tendrás que añadir hw.pic.ignore_function_1=”1” al fichero /boot/loador.conf . Es la solución más fácil, de todas formas, para usarlos juntos en un portátil o en un adaptador ISA. 5 RC.CONF Tu fichero de configuración /etc/rc.conf necesita 3 cambios. Primero, añade la linea pccard_enable=”YES” para habilitar el demonio de PCMCIA . Si estás usando un portátil, esta opció debería estar activada pero nunca esta de más que te lo repases una segunda vez. Segundo , poner el gateway_enable=”YES” para permitir tu servidor para pasar el trafico gíreles al resto de la red. Tercero y último , para NAT (Network Address Translation ) o lo que es lo mismo traducción de direcciones de red , añade la linea ipnat_enable=”YES”. NAT sera explicada en la siguiente sección. TRADUCCIÓN DE DIRECCIONES DE RED (NAT) NAT es un de los grandes “diablillos “ de Internet hoy en día. Previene las conexiones end-to-end . Desafortunadamente, IPV6 no tiene un uso extenso, y almenos que tu quieras invertir un buen rato configurando la red con IPV6 , recurriremos a NAT. ( Si quieres gastar tiempo configurando IPV6, revisa la pagina http://www.6bone.net y, si tu tienes una ip dinámica, mira esta otra: http://www.freenet6.net.) El NAT en FreeBSD usa el codigo de filtro de IP del kernel y es muy simple de ponerlo. En la sección anterior habilitamos NAT en el arranque , pero no lo configuramos. Lo siguiente es un ejemplo /etc/ipnat.conf, el cual es leido en el arranque y habilita NAT en salida del interfaz ep0, traduciendo todo el tráfico desde la 10.0.0.0/16 para cualquier direccion del ep0: map ep0 10.0.0.0/16 -> 0.0.0.0/32 portmap tcp/udp 40000:65000 map ep0 10.0.0.0/16 -> 0.0.0.0/32 Sustituye tu identificativo interfaz externo y tu subred gíreles, reinicia , y tus conexiones gíreles serán enrutadas y configuradas correctamente con NAT. CONFIGURACIÓN WIRELESS Como hemos hablado en la introducción, este artículo se basa unicamente en tarjetas Orinoco Wireless, los cuales son dispositivos WI . El principal comando de configuración es , wicontrol, que trata sobre esto. Las tarjetas Airones que son dispositivos AN , se configurarán con ancontrol. Hay varios parámetros que necesitaran ser configurados para tu conexión wireless, tales como frecuencia, modo de operación, y nombre de estación. Por conveniencia, tu 6 puedes crear un script llamado /usr/local/sbin/wireless.sh , el cual meterá estos parámetros cada vez . El script, que comentamos , podría ser según ponemos abajo: #!/bin/sh #Arrancar a través de la shell sh wicontrol –f 7 #Mete la frecuencia de la tarjeta wireless. Legalmente el rango es desde 1 (2.412 GHz) #a (2.462 GHz) en los Estados Unidos, 1 a 13 (2.472 GHz) en Europa, 10 (2.457 GHz) #a 13 en Francia , y 1 a 14 (2.484 GHz) en Japón. Elige la frecuencia en base a esto. o #toma otra frecuencia si lo deseas. wicontrol –p 1 #Modo BBS, significa quelos clientes tienen que ser miembros con un solo AP, y no #directamente conectados con ningún otro. wicontrol –c 1 #Modo IBSS, una extensión del modo BSS. wicontrol –s “servername” #Mete el nombre de la estación. No tiene que encontrar un nombre DNS al servidor. wicontrol –k “12345” #La llave WEP. Cambiala a un bit menos …. obvio. wicontrol –e 1 #Habilita seguridad WEP. ifconfig wi0 ssid “frfa” #Mete el nombre de la red inalálmbrica. ifconfig wi0 inet 10.0.0.77 netmask 255.255.255.0 #Configura la dirección IP y la máscara de red para el dispositivo de tu AP wireless. #Cambia el nombre del dispositivo si es necesario. Hay opciones adicionales disponibles , pero no son necesarias en nuestro caso. Estas opciones están perfectamente documentadas en el manual de wicontrol. La siguiente sección cubrirá como el script de configuración correrá dinámicamente. PCCARD.CONF Un consejo que damos es no configurar estáticamente con el script en el arranque del sistema, porque tu tarjeta puede no ser inicializada cuando el script esta arrancado. Arrancarlo el script a mano de todas formas es bastante molesto y necesitas acceso continuamente al equipo para arrancarlo. La solución más simple es añadir una línea al archivo de configuración de la PCCARD. El archivo está típicamente /etc/defaults/pccard.conf, pero su localización actual es definida por la variable de pccard_conf. Si lo defines esta en /etc/rc.conf, usa el valor que indica. De otra manera se aplica los valores por defecto. Edita el archivo, y busca en la seccion con el título: card “Lucent Technologies” “WaveLAN/IEEE” 7 Ahora inserta /user/local/sbin/wireless después del último comentario en ese bloque . Esto arracancara tu script wireless tantas veces como la tarjeta sea insertada, asegurate que tu conexión esta siempre debidamente configurada. Un detalle muy importante es si estamos usando diferentes tarjetas wíreless, la sección del titulo será diferente como por ejemplo card “Airnonet” “PC4800”. Los cambios permanecen iguales. Si tu CPU se cuelga cuando la pccard arranca, puede ser debido a que esta utilizando una IRQ para la tarjeta wireless que está realmente en uso.Saca la tarjeta y reinicia, y encuentra el IRQ libre desde la salida del comando dmesg. Ahora solo tendrás que editar el fichero de configuración de nuevo, revisando la sección de la tarjeta apropiada. En esa línea de configuración de esa sección, cambia el espacio “?” por un numero IRQ libre. Esto forzará a la pccard a tomar un número IRQ libre por esta razón evitarás los conflictos IRQ. Configuración de clientes La configuración de los clientes wíreless es muy parecido a la configuración de los puntos de acceso aquí relatados. La configuración del kernel es la misma, exceptuando para las opciones de IPDIVERT y el IPFILTER y para el dispositivo bdf. En el fichero /etc/rc.conf , simplemente revisa que la opcion de pccard_enable=”YES” este reflejada. Las opciones de NAT y de gateway no son necesarias. Los cambios en pccard.conf son identicos a los descritos para el caso de AP . El script de configuración tiene que ser identico tanto como en el caso de Punto de Acceso como en el caso de Cliente Wireless. Si estas usando un modo diferente, frecuencia, network name, o llave WEP, tus máquinas no verá a ninguna otra y no podrán conectar. Hay una linea que debes añadir al script /usr/local/sbin/wireless.sh . En el final del script deberemos añadir : route add default a.b.c.d Sustituye a.b.c.d con la dirección IP de tu Punto de Acceso Wireless. Finalmente, si tu cliente es un ordenador de sobremesa usando un adaptador PCI, deberás tener el loader.conf según hemos descrito anteriormente. Es esto seguro? En este punto, casi has acabado, el punto de acceso y los clientes están trabajando. Deberías configurar tu red inalámbrica en casa , y quizás poner una en la oficina. La verdad es que estás contentísimo de tener una red Wifi trabajando en tu salón o en la cafetería. Has conectado para revisar tu correo por telnet , de todas formas empiezas a preocuparte cuando piensas que tu contraseña en texto plano puede mandarse por 8 broadcast por toda tu zona de cobertura y que algún tipo curioso esté esnifando la LAN simplemente con tener una tarjeta wíreless, el software apropiado y una antena. Podríamos filtrar el tráfico por direcciones MAC trivial para un cracker que escanea el medio inalámbrico , toma una MAC válida , y la usa para sus propósitos. Entonces es cuando nos preguntamos por WEP… (Wired Equivalency Protocol) WEP fue adoptado por el Standard 802.11 sin ningún cambio, y esto es ligeramente mejor que no tener nada implementado. Este algoritmo es relativamente facil para crackear, especialmente si interceptamos mas texto cifrado con el misma llave de cifrado, la implementación es deficiente, y presta a debate sobre la vulnerabilidad de la encriptación de este mecanismo para redes WIFI. WEP se supone que brinda integridad en los datos: cambia un bit en texto cifrado RC4, y lanzará de nuevo el mismo bit en texto plano. Para cubrirnos de los exploits, WEP añade checksum CRC-32 como parte de la carga útil de los paquetes encriptados. De todas formas, muchas cadenas de caracteres diferentes producen el mismo checksum CRC-32. Puesto que es matemáticamente simple cambiar el mensaje y mantener el mismo CRC, la integridad de cada paquete protegido por WEP está lejos de ser garantizada. ¿Pero entonces WEP es completamente inútil ? No realmente. Recuerda que esto es el Wired Equivalency Protocol y ofrece casi tanto la misma seguridad que una LAN cableada. El momento en que el cracker necesite obtener tus datos wireless es problable que sea semejante al ataque sufrido a que alguien tome acceso a tu LAN cableada, si y si ellos lo prueban es realmente complicado. ¿Así que, que tiene que hacer el usuario wireless ? Arriesgarse del todo y solo implementar WEP? De ningún modo, aunque no protejera tus datos wireless , puedes crear un DMZ (zona desmilitarizada que divirá tus ordenadores internos de la red pública) solo para tu tráfico wireless. Si tus usuarios necesitan acceso a los recursos internos tales como intranet, configurales dentro de una VPN, como si ellos estubieran en casa. Esto prevendrá intrusos que ganen acceso inmediato a tu red local. Si la maquina FreeBSD que estás usando como Gateway wireless es también tu router, un firewall o reglas de filtros IP mantendra controlado el tráfico inseguro que viaja entre las redes wireless y la red cableada de tu lan. El siguiente paso, para asegurar tus datos, acuerda trabajar con protocolos seguros. SSH (versión 2 ) proveerá casi la seguridad a prueba de hackers para tus necesidades de conexiones por terminales. Una idea mejor es trabajar con protocolos no seguros bajo tuneles reenviando los puertos por SSH. Por ejemplo para tunelizar el trafico POP3 entre tu cliente , 192.168.77.12, y tu servidor de correo, 192.168.1.25, corre lo siguiente en tu cliente: 9 Ahora dirije tu cliente de correo a localhost , y tu contraseña y correo estarán libres. Hemos visto que SSH es bastante potente, de todas formas no es perfecto. Según hemos hablado deberíamos crear un tunel, en un unico puerto, por cada una de las conexiones seguras que queramos hacer. Esto es poco práctico. Especialmente si no tienes accesso al servidor al cual te quieres conectar de forma segura. La solución , meter IPsec. Acordar tuneles mediante IPsec con Encapsulated Security Payload (ESP) entre tus clientes y el punto de acceso. De esta manera , todo el tráfico entre las máquinas será encriptado. Cuando el tráfico de los clientes es llevado mas allá del punto de acceso, esto mandrendrá encriptado entre los clientes y el punto de acceso. Similarmente, todo el tráfico entrante independientemente del origen, es encriptado entre el punto de acceso y el cliente. Esto limitara el fisgoneo que en otras soluciones es posible. IPsec añade la ventaja de proveer autentificación bastante robusta. Desde la conexión de las maquinas tienen una llave prestada de autentificación o un certificado X.509, solo los host autorizados podrán conectar. Ver los manuales de cómo configurar IPsec en redes FreeBSD. Recomendamos leer el proyecto KAME (http://www.kame.net) . Ellos han desarrollado IPsec y IPv6 para BSDs, y tienen más links de información a otros sites. Tambien puedes buscar información de racoon, ipsec, y setkey. Ver “OpenBSD como una solucion VPN” por Alex Withers (Sys admin., September 2000) para temas relaccionados de IPsec bajo OpenBSD. Conclusiones En este artículo, hemos dado una introducción de el maravilloso mundo de las redes inalámbricas 802.11b . Hemos mostrado como crear un punto de acceso económico, como configurar los clientes FreeBSD, y como tapar los agujeros de seguridad. Lo ultimo que queda es que salgas , compres algo de equipamiento , lo conectes y configures y disfrutes de este nuevo mundo. Sobre los autores • Mike DeGraw-Bertch es escritor sobre el tema de la seguridad y sistemas UNIX en Boston , en el area de Massachussets . Cuando no está trabajando, escribiendo, hacheando con Perl, o jugando con sus redes inalámbricas, puede 10 • estar localizable jugando al jockey sobre hielo. Para contactar con Mike puedes dirijirte a [email protected] Alberto Fernández Sanchez (LievenX) es el traductor del texto , es miembro de la asociación de usuarios de redes inalambricas de Guadalajara (AURIGA) y miembro del grupo GuadaWireless (http://www.guadawireless.net) . Para contactar con LievenX puedes dirijirte a [email protected] 11