Archive for the 'Linux' Category

Instalando un servidor/demonio DHCP

Viernes, Febrero 8th, 2008

La verdad es que facilita mucho conectar maquinas nuevas en red si se omite la configuración manual de las interfaces de red que se quieren conectar fijandolas a configuración automática (esto es, que piden la ip a un servidor dhcpd que tiene que estar instalado en nuestra red local)

Al no tener un router como cualquier internauta si no un servidor que haces las veces de router no tengo un formulario que me permita marcar ‘habilitar dhcpd’ en la red de area local, por lo que me toca instalar el demonio manualmanete (debian):

# apt-get install dhcp

Tan sencillo como eso. Para configurarlo hay que editar primero el archivo /etc/default/dhcp y en la opción INTERFACES (seguramente esta sea la única opción de este archivo) listaremos, separadas por espacios, las interfaces en las que queremos que funcione dhcpd. En mi caso mi servidor tiene 3 interfaces y solo hay dos opciones, o configuro un servidor dhcp para cada una de ellas o le digo a dhcp que trabaje unicamente en una o dos o X interfaces:

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. “eth0 eth1″.
INTERFACES=”eth1″

En mi servidor eth0 es la puerta a internet y eth1 es la red de area local por lo que estoy diciendo a dhcpd que trabaje solamente en mi intranet.

El siguiente y último paso es editar el /etc/dhcpd.conf para que funcione según queramos. Esta es mi configuración:

option domain-name-servers 62.42.230.24,62.42.63.52;
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.230 192.168.0.254;
option broadcast-address 192.168.0.255;
option routers 192.168.0.10;
}

La primera opción son las direcciones de los servidores DNS que se otorgarán a los clientes dhcp, la segunda cuanto tiempo mínimo se tardará en renovar cada asignación, la tercera cuanto tiempo máximo se tardará en renovar cada asignación y la cuarta indica una configuración para una red concreta (que viene determinada por la dirección de red y la máscara de subred).

Dentro de esta última están las opciones range que sirve para determinar que rango de ips se usarán para asignar a los clientes, la dirección de broadcast y la dirección de puerta de enlace que se asignarán a los clientes. Las dos últimas son opcionales.

Después de todas esta configuración ya debería de arrancar el demonio dhcp:

# /etc/init.d/dhcp start
Starting DHCP server: dhcpd.

Nota: Por defecto el paquete instalador de debian no añade al arranque el demonio dhcp.

Instalando Debian en un Ordenador sin Diskketera ni CDROM ni USB

Viernes, Enero 18th, 2008

Por increible que parezca tampoco es la primera vez que me topo con esta situación por lo que paso a detallar como me las he arreglado para una futura referencia.

Primero tuve que hacer ‘bootable’ un disco duro de portatil creando al inicio de este desde un ordenador auxiliar una partición pequeña de 40Mb para instalarle ahí un grub siguiendo este artículo.

Luego gracias al amigo Nitz descubrí una solución que tiene debian para instalarse en un disco duro a través de red sin necesidad de cdrom ni nada mas que windows: una pequeña aplicación llamada debian.exe que crea un directorio llamado debian en C:\ y y que contiene dos archivos, initrd.gz (imágen de disco duro) y linux, un kernel de linux y que se añade al arranque de windows.

Estos dos archivos contituyen un mini-instalador de linux ‘netinstall’ que reconoce lo mas básico del ordenador y la red ethernet para conectarse a internet y bajarse debian tal como lo va instalando.

Cuando obtuve dichos archivos, los introduje en la partición que creé al principio y que contenía grub y configuré el menu.lst para arrancar el instalador:

title Instalador Debian
root (hd0,0) #suponiendo que sea la particion 1 del primer disco duro
kernel /linux
initrd /initrd.gz
boot

A partir de aqui, desenchufar el disco duro del ordenador auxiliar, introducirlo en el ordenador de destino (en mi caso un portatil) y al encenderlo saldrá grub que arrancará el instalador Debian netinstall.

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.

Si vamos a hacer una instalación limpia de grub porque nuestro sistema es nuevo, porque lo hemos perdido o simplemente porque nos mudamos de lilo a grub:

# 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

Si ya teniamos grub instalado (por ej, si existe la carpeta /boot/grub) no hace falta que hagamos lo anteriormente descrito.

En cambio si ya teníamos grub instalado en /boot recuperaremos nuestro preciado mbr desde la consola de grub:

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 (device.map).

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

Miércoles, Abril 11th, 2007

Update: Actualmente hay una actualización a este manual aqui, que implementa EAP-MSCHAPv2 para autenticar clientes con usuario y contraseña sobre base de datos mysql.

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.