Archive for the 'Linux' Category

Instalar GRUB en un disco diferente.

Viernes, Enero 18th, 2008

Me he encontrado muchas veces en la situación de tener que arreglar un disco en un ordenador que no arranca usando una livecd para reinstalar grub, o también preparando discos arrancables para otras máquinas que por un motivo u otro no podían arrancar por sí solas.

Lo primero es localizar en el disco duro que queremos hacer arrancable /boot y montar la partición que lo contenga en, por ejemplo, /mnt/hdb1.

Ahora llega el momento de que grub reconozca el disco duro entero:

# grub-install /dev/hdb –root-directory=/mnt/hdb1

El primer parámetro de grub-install es el dispositivo en donde se instalará el MBR (Master Boot Record). El segundo parámetro es el directorio en el que se instalarán los archivos de grub.

Por defecto creará una carpeta llamada boot y se instalará dentro como grub. Si la partición montada no será la raiz de nuestro SO o si en nuestro linux queremos que ‘/boot’ sea una partición independiente de raiz deberíamos de mover el contenido de /boot (grub) a la raiz de la partición:

# mv /mnt/hdb1/boot/grub /mnt/hdb1
# rm /mnt/hdb1/boot

Para acabar entraremos en la consola de grub mediante el comando ‘grub’ y en ella ejecutaremos:

grub> root (hd1,0)
grub> setup (hd1)
grub> quit

El comando ‘root’ le dice a grub en donde se encuentra la carpeta que contiene los archivos de grub que anteriormente instalamos. En este caso, estaban en hdb1 (disco esclavo del primer IDE, primera partición) por lo que el equivalente en el formato que grub utiliza sería (hd1,0) donde el previo a la coma es el disco duro físico y lo que va despues de la coma es la partición. Conviene recordar que en linux las particiones comienzan por 1 siendo 1 la primera y en el formato que grub utiliza las particiones comienzan por 0 siendo 0 la primera.

El comando ’setup’ le dice a grub que instale el MBR en el disco (hd1) que viene siendo ‘hdb’ basandose en los archivos que encontrará en la raiz que le especificamos en el primer comando.

El comando ‘quit’ simplemente sale de la consola de grub.

Con esto ya tendremos instalado grub, solo queda que cada uno se edite el menu.lst a su gusto.

Nota: Para recuperar un disco que no arrancaba porque había perdido el mbr bastará con seguir solamente el paso de la consola de grub.

Red WiFi Segura: WPA+EAP-TLS+RADIUS

Miercoles, Abril 11th, 2007

Hasta hace un par de días tenía una red WiFi con cifrado WEP y controlaba los accesos a través de los logs del punto de acceso. Cada día crece el número de métodos para romper una red Wireless y crece el número de personas que lo intentan, por lo que al final me animé a cambiar el sistema.

El objetivo de este manual es montar una red WiFi segura, que empleará certificados de cliente y servidor para la autenticación, usando como servidor radius FreeRADIUS. Para ello realizaremos los siguientes pasos:

  1. Instalar FreeRADIUS
  2. Configurar el Punto de Acceso
  3. Configurar el Cliente.

La distribución que emplearé será Debian y trataremos de tirar de apt en la medida que se pueda.

El Punto de Acceso que emplearé a modo ejemplo será un DWL-2000AP+ con soporte WPA. El mio lo traia de fábrica, pero siel que vais a usar no lo tiene, probad actualizando el firmware.

El cliente que usaré, también como ejemplo, será el Mac OS X 10.4 y trataré de explicar tambien como hacerlo en Windows XP.

FreeRADIUS

Al principio traté de instalarlo por apt, pero descubrí que por un problema de licencias con openssl la versión de apt de freeradius no traia el módulo eap+tls, así que habrá que instalar freeradius desde el código fuente.

Primero, prepararle el entorno: necesiraremos openssl, libssl y libssl-dev.

# apt-get install openssl
# apt-get install libssl
# apt-get install libssl-dev

Ahora que ya tenemos el entorno, hay que bajarse la ultima versión de FreeRADIUS, compilarla e instalarla.

# cd /usr/src
# wget ftp://ftp.freeradius.org/pub/radius/freeradius-1.1.5.tar.gz
# tar xvfz freeradius-1.5.5.tar.gz
# cd freeradius-1.5.5
# ./configure –prefix=/ –with-raddbdir=/etc/raddb
# make
# make install

Ahora tendremos freeradius instalado en el sistema, queda configurarlo. Lo primero que haremos será crear los certificados apropiados con la ayuda de estos pequeños scripts procedentes en parte de aqui.

# cd /etc/raddb/certs
# wget http://karman.homelinux.net/blog/descargas/cascripts.tar.gz
# tar xvfz cascripts.tar.gz

Primero crearemos el certificado raíz:

# CA.root

Nos pedirá una serie de datos que realmente no son necesarios, yo solamente rellene los 3 primeros. Si todo ha salido bien, nos habrá creado los archivos root.der, root.p12 y root.pem. El siguiente certificado a crear es el del servidor:

# uname -n
karman.homelinux.net
# CA.server karman.homelinux.net

En este caso es importante que rellenemos el campo Common name con el nombre del servidor, karman.homelinux.net en este caso. Cuando nos pregunte [y/n], respondemos y ambas veces. Si todo ha ido bien, nos habrá creado los archivos karman.homelinux.net.p12, karman.homelinux.net.der y karman.homelinux.net.pem.

Ahora crearemos un certificado por cada usuario ejecutando el script con dos argumentos, el usuario y la contraseña:

# CA.client karman 12345

Como de costumbre, rellenamos los campos, le decimos que si a las dos ultimas preguntas y nos creará los archivos karman.der, karman.pem y karman.p12.

Como hemos dicho que el directorio de configuración sea /etc/raddb, el programa de instalación ha copiado una configuración básica para que arranque freeradius, pero no es lo que necesitamos, por lo que deberemos de modificar los siguientes archivos:

eap.conf

eap {

default_eap_type = tls
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
tls {

private_key_password = whatever
private_key_file = ${raddbdir}/certs/karman.homelinux.net.pem
certificate_file = ${raddbdir}/certs/karman.homelinux.net.pem
CA_file = ${raddbdir}/certs/root.pem
dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random
fragment_size = 1024
include_length = yes

}

}

Este es todo el contenido que tiene que tener el archivo eap.con. Nótese de cambiar los parámetros private_ket_file y certificate_file con los valores correspondientes.

clients.conf

# Punto de Acceso DLink
client 192.168.0.50 {

secret = pruebadeap
shortname = AP
nastype = other

}

Así es como hay que configurar un cliente. Ya viene con 127.0.0.1, que podemos modificar o borrar para que sirva a nuestros propositos. En todo caso, con el que el clients.conf tenga solamente las lineas anteriormente mostradas será suficiente para funcionar. Nótese de cambiar la ip en el campo client por la del punto de acceso y cambiar el campo secret por una contraseña que nosotros queramos.

users

“karman” Auth-Type := EAP

Esto es todo lo que deberá de ir en users. A la hora de añadir un usuario nuevo será tan sencillo como crearle un certificado, añadir esta linea con el nombre de usuario adecuado y darle a ese user su certificado para configurar el ordenador (lo veremos más adelante).

Llegados a este punto, sería conveniente hacer un usuario para el servidor radius añadiendo las siguientes lineas a nuestros passwd, shadow y group:

/etc/passwd: freerad:x:106:106::/etc/raddb:/bin/false
/etc/shadow: freerad:!:13611:0:99999:7:::
/etc/group: freerad:x:106:

y cambiar de usuario y los permisos de todos los archivos de /etc/raddb:

# chmod 700 -R /etc/raddb
# chown -R freerad:freerad /etc/raddb

radiusd.conf

bind_address = 192.168.0.1
user = freerad
group = freerad

En este caso, la modificacion de bind_address no es necesaria, yo la hice porque el ordenador que alberga el radius es a su vez mi router, y no quería que escuchase peticiones de login en internet, solo en intranet. En este archivo hay muchas cosas que podríamos tocar para afinar la configuración, pero de momento nos bastará como viene, ajustes finos a gusto de cada cual.

Ahora que tenemos todo en su sitio como toca, haremos una prueba de arranque con

# radiusd -X

lo que nos dará una salida detallada de arranque. Si todo ha ido bien y sin problemas, podemos bajarnos este script de inicio para debian, copiarlo en /etc/init.d y arrancaremos el servicio con

# /etc/init.d/radius start

Punto de Acceso (AP)

Configuracion de WPA para el Dlink DWL-2000AP+El siguiente paso es configurar nuestro punto de acceso para que cifre la red wireless con WPA (ojo, NO WPA-PSK). Si lo soporta, nos pedirá básicamente tres datos: IP del servidor radius, puerto del servidor radius y el ’secreto’, que viene siendo una contraseña. En nuestro caso ejemplo:

IP: 192.168.0.1
Puerto: 1812
Shared Secret: pruebadeap

Configurando un Cliente Windows/Mac OS X

Es tan sencillo como copiar en el ordenador cliente el certificado /etc/raddb/certs/karman.p12 (o elnombredelusuario.p12) y añadirlo con un doble click sobre el mismo. Nos preguntará si queremos añadirlo a los certificados, le decimos que si y entonces nos preguntará la contraseña que pusimos para cifrar el certificado a la hora de crearlo (12345).

Ahora que tenemos el certificado añadido al sistema, simplemente le damos a conectar a la wifi, con esto tendremos ya la wireless wpa+eap-tls.

Cualquier problema o duda, posteadla como comentario, ya que el manual lo he escrito dos días después de configurar mi WiFi y no se si se me ha podido pasar algo. Si alguien sabe como añadir el certificado y usarlo para autenticación WPA en linux agradecería que me lo enviase por correo o lo posteara en comentarios.

Update: En adición al artículo, he notado que al mes los certificados dejan de funcionar por la siguiente opcion del /etc/ssl/openssl.cnf:

default_crl_days= 30

Yo la he cambiado a 365 días, para que tarde un año.

También hay que editar CA.root y añadir en la instruccion openssl la opcion -days X, donde X es el valor en días que tardará en caducar el certificado raiz, que por defecto está a 30 dias. Ej, lo tengo a 3650 días, 10 años:

openssl req -new -days 3650 -x509 -keyout newreq.pem -out newreq.pem -passin pass:whatever -passout pass:whatever

Recuperar el firm original de fon.

Viernes, Enero 12th, 2007

Si no tenemos el telnet abierto y nuestra fonera no arranca, tenemos que utilizar el cable para poder flashear la fonera mediante redboot y un servidor tftp.

Tambien hay que configurar redboot con una ip local y la ip del servidor tftp de la siguiente forma:

ip_addr -h server_ip -l fonera_ip/24

Cuando tengamos montado el servidor tftp, meteremos en su carpeta los archivos rootfs y vmlinux.bin.l7 para poder descargarlos desde la fonera mediante redboot y flashearlos:

fis init
load -r -v -b 0×80040450 rootfs
fis create -b 0×80040450 -f 0xA8030000 -l 0×00700000 -e 0×00000000 rootfs
load -r -b %{FREEMEMLO} vmlinux.bin.l7
fis create -r 0×80041000 -e 0×80041000 vmlinux.bin.l7

Es importante recordar que no hay que tocar la fonera mientras se está escribiendo la flash pues es un proceso delicadoy hay que tener paciencia ya que es bastante lenta la escritura de la flash. Si fallase, siempre se puede empezar de nuevo.

Cuando haya acabado, reiniciamos la fonera y volverá a funcionar como siempre.

Cuidado con IPKG

Lunes, Diciembre 25th, 2006

Al parecer el programa ipkg de La Fonera está de alguna forma corrupto (o quizas intencionadamente manipulado, who knows).

Según he podido experimentar, el programa ipkg es capaz de instalar correctamentelos paquetes que le demos en nuestra fonera, pero si usamos remove para eliminar algún paquete instalado, no se sabe como ipkg acaba eliminando el directorio /usr/bin de un plumazo y sin parpadear.

Realmente no es un problema excesivamente grave ya que si reiniciamos la fonera a fábrica (bien eliminando /jffs bien pulsando durante 15sec el botón reset) el directorio /usr/bin volverá a su sitio sin mas problemas que reconfigurar la fonera a como la teníamos.

Como consejo, siempre que se pueda evitar usar ipkg remove.

Changing Fonera’s Firmware

Jueves, Diciembre 7th, 2006

Pues bien, como estaba cansado de que cada vez que volvia la fonera a su estado inicial de fábrica tenía que usar los metodos anteriormente descritos para abrir el acceso a la misma, he decidido flashearla con mi propio sistema de archivos en el que ya lleva varias cosas tocadas:

  • Abre los puertos 22 y 80 tanto en la wifi como en la lan.
  • Ejecuta dropbear al inicio.
  • El thinclient funciona, pero está ‘capado’ para que no ejecute los shellscripts que se baje. Clasifica los mismos según hora y dia y no guarda dos shellscripts identicos para evitar que llene la memoria de basura.
  • Corrige el bug de la versión 0.7.1.1 consistente en que el script N45ntpclient se añade de forma constante en el crontab.

La imagen en cuestion se puede descargar de aqui ya preparada para ser flasheada de la siguiente forma desde la fonera:

# mtd write karman.fon.rootfs.squashfs rootfs

Esperar a que acabe y muy importante, no cortar el programa bajo ningun concepto. Cuando haya acabado, reiniciar el router y esperar que arranque.

Nota: A mi esta imagen me ha funcionado perfectamente y es la que uso en todas mis foneras. En cualquiera de los casos no me hago responsable si por cualquier razón no funcionase.

Para aquellos valientes que quieran añadir/modificar/quitar cosas del sistema de archivos raiz, he creado un método con el que construir una imagen squashfs propia y customizada para la fonera descargable desde aqui.

El espacio en memoria para rootfs segun /proc/mtd es de 7274496 bytes (lo que vienen a ser 7.1Mb) así que no recomiendo flashear ninguna imagen de sistema de archivos mayor a dicho tamaño.