martes, 25 de marzo de 2008

Lvm Centos HowTO



LVM es una implementación de un administrador de volumenes logicos para el kernel Linux. Se escribió originalmente en 1998 por Heinz Mauelshagen, que se basó en el administrador de volumenes de veritas usado en sistemas HP-UX .

LVM incluye muchas de las características que se esperan de un administrador de volúmenes, incluyendo:

  • Redimensionado de grupos lógicos

  • Redimensionado de volúmenes lógicos

  • Instantáneas de sólo lectura (LVM2 ofrece lectura y escritura)

  • RAID0 de volúmenes lógicos

LVM no implementa RAID1 o RAID5 , por lo que se recomienda usar software específico de RAID para estas operaciones, teniendo las LV por encima del RAID

Ventajas de usar LVM en un sistema pequeño

  • Una de las decisiones que afronta un usuario instalando GNU/Linux es cómo particionar el disco duro. La necesidad de estimar cuanto espacio será necesario para el sistema, para los temporales o para los datos personales, puede convertirse en algo problemático, por lo que muchos usuarios optan por crear una partición que ocupe todo el disco y allí introducir los datos. Aún habiendo estimado correctamente cuanto espacio se necesita para /home, /usr, /tmp, o cualquier otro directorio importante, es bastante común que nos quedemos sin espacio en estas particiones, cuando tenemos espacio de sobra en alguna otra.

  • Con el uso de un administrador de volúmenes lógicos, el disco completo puede ser asignado a un único grupo lógico y definir distintos volúmenes lógicos para almacenar /home u otros directorios. En el caso que nos quedemos sin espacio, por ejemplo, en /home, y tenemos espacio en /opt, podríamos redimensionar /home y /opt y usar el espacio que le hemos quitado a /opt y añadírselo a /home. Hay que tener en cuenta, que para realizar esto, nuestro sistema de ficheros debe soportar el redimensionado por arriba y por abajo, como ReiserFS.

  • Otra alternativa sería dejar una cierta cantidad de espacio del disco sin asignar y cuando fuera necesario, expandir el volumen.

Ventajas de usar LVM en un sistema grande

  • Administrar un sistema con muchos discos es un trabajo que consume tiempo, y se hace particularmente complejo si el sistema contiene discos de distintos tamaños. Balancear los requerimientos de almacenamiento de distintos usuarios (a menudo conflictivos) puede ser una tarea muy laboriosa y compleja.

  • Los grupos de usuarios (llamémosles por ejemplo administración, desarrollo, etc...) pueden tener sus volúmenes lógicos y éstos pueden crecer lo que sea necesario, y el administrador puede realizar las operaciones oportunas sobre dichos volúmenes.

Cuando un nuevo disco se añade al sistema, no es necesario mover los datos de los usuarios. Simplemente se añade el nuevo disco al grupo lógico correspondiente y se expanden los volúmenes lógicos todo lo que se considere adecuado. También se pueden migrar los datos de discos antiguos a otros nuevos, de forma totalmente transparente al usuario.



Anatomía de un LVM

  • Un LVM se descompone en tres partes:

    • Volúmenes físicos (PV): son los discos duros, particiones o cualquier otra "cosa" que parezca un disco duro (raid's)

    • Volúmenes lógicos (LV): es el equivalente a una partición en un sistema tradicional. El LV es visible como un dispositivo estándar de bloques, por lo que puede contener un sistema de achivos (por ejemplo /home)

    • Grupos de volúmenes (VG): es la parte superior de la LVM. Es la "caja" en la que tenemos nuestros volúmenes lógicos (LV) y nuestros volúmenes físicos (PV). Se puede ver como una unidad administrativa en la que se engloban nuestros recursos. Hay que hacer notar que mientras un PV no se añada al VG, no podemos comenzar a usarlo.

  • A su vez, un PV se divide en chunks de datos, que se conocen como PE (physical extents), que son del mismo tamaño que los PE del VG. Además, un LV se divide también en LE (logical extents), cuyo tamaño es el mismo para todos los LV del VG.
    Por ejemplo, teniendo como referencia la imagen del comienzo del artículo, supongamos que tenemos un VG llamado CASA, con 4MB de PE, al que queremos añadir un LV para /tmp/. Añadimos dos particiones de disco, /dev/sda4 y /dev/sdb3, que se llamarán PV1 y PV2 (se las puede renombrar a discreción del usuario). Los PV's pueden ser de distinto tamaño y por lo tanto, tendrán un número distinto de PE, por lo que supongamos que tenemos para PV1 99 PE's y para PV2 248 PE's. Ahora, podemos crear el LV que necesitamos, que puede ser de cualquier tamaño entre 1 y 347 (99+248) PE. De esta forma se crea una tabla que relaciona PE's y LE's y si, por ejemplo, escribimos 4 MB en el LE número 1 del LV, se corresponderán con el PE 51 de la PV1.

  • La tabla que relaciona PE's y LE's, se llama tabla de mapeo, y la correspondencia puede ser de dos tipos:

    • Directo: se asigna un rango de PE's a otro rango de LE's en orden. Por ejemplo, las LE's del número 1 al 99 se mapean sobre las PE's del 100 al 347 de PV2.

    • Entrelazado: las LE's se entrelazan sobre las PE's de los volúmenes físicos, por ejemplo:

Destino

Origen

Primer chunk de la LE1

Primer chunk de la PV1

Segundo chunk de la LE1

Primer chunk de la PV2

Tercer chunk de la LE1

Segundo chunk de la PV1

...

...

Instantáneas (snapshots)

  • Las instantáneas (snapshots) permiten al administrador crear un nuevo dispositivo que será una copia exacta del LV, congelada en algún punto del tiempo. Normalmente esto se realiza de forma automática, para no alterar el funcionamiento normal del sistema. Cuando la instantánea ha terminado, el administrador puede quitar el dispositivo sin mayor complicación. Además, no es necesario que los datos en el LV se encuentren en un estado consistente, ya que muchos sistemas de ficheros en el kernel 2.6 lo realizan de forma automática.
    Una diferencia importante entre la versión 1 de LVM (LVM1 a partir de ahora) y la versión 2 (LVM2) es que en la primera, los snapshots eran de sólo lectura, mientras que en LVM2 son de lectura y escritura. ¿Cuál es la diferencia? En LVM1, se crea lo que se llama una tabla de excepciones, que se usa para mantener una lista de qué bloques en disco han cambiado. Si un bloque va a ser modificado en el origen, primero se copia en la instantánea, se marca como copiado en la tabla de excepciones y luego los nuevos datos se copian al volumen original. En LVM2, las instantáneas funcionan como en LVM1, pero con la característica de que si los datos se escriben en el snapshot (una vez montado), ese bloque se marca como usado en la tabla de excepciones y no se copia al volumen original. Esta característica es muy útil debido a que podemos crear nuestra instantánea, montarla y probar un programa o un nuevo navegador de ficheros. Si ocurre algo desastroso, la desmontamos, la borramos y volvemos a colocar el volumen original.











Juntándolo todo

Un ejemplo concreto ayudará:

Supongamos que tenemos un grupo de volumen llamado VG1, este grupo de volumen tiene una extensión física de 4MB. Dentro de este grupo de volumen metemos 2 particiones, /dev/hda1 y /dev/hdb1. Estas particiones se convertirán en los volúmenes físicos PV1 y PV2 (se les puede dar nombres más significativos dependiendo del administrador). Los PV's son divididos en trozos de 4MB, y este será el tamaño de extensión del grupo de volumen. Los discos son de distintos tamaños y tendremos 99 extensiones en PV1 y 248 en PV2. Ahora podemos crear un volumen lógico, que puede tener el tamaño que queramos entre 1 y 347 (248 + 99) extensiones. Cuando creamos el volumen lógico se define un mapeado entre extensiones lógicas y físicas, ej. extensión lógica 1 podría mapearse en la extensión física 51 de PV1, los datos escritos en los primeros 4 MB del volumen lógico se escribirán en la extensión 51 de PV1.



Tareas Comunes

Inicializar un disco o particion para uso con lvm

pvcreate /dev/sda

pvcreate /dev/sda1

pvcreate /dev/sda5



Volumen de grupo

Como ya sabemos los volumenes de grupos abarcan particiones o discos, por lo tanto, si queremos crear un grupo de volumen llamado fundacion y agregar varias particiones hacemos lo siguiente:

vgcreate fundacion /dev/sda1 /dev/sda2 /dev/sdb1

Luego necesitamos activar el volume de grupo

vgchange -a y fundacion

para desactivarlo seria:

vgchange -a n fundacion

Para borrar el grupo fundacion escribimos:

vgremove fundacion



Nota: Esto borrara el volumen de grupo y todos su volumenes logicos.



Si queremos extender nuestro volumen de grupo, es decir, necesitamos agregar otra particion u otro disco, entonces digitamos

vgextend fundacion /dev/hdc1

Esto agrega la particion /dev/hdc1 a nuestro grupo de volumen fundacion.

Para ver los cambios escribimos:

vgdisplay fundacion

Y para ver las particiones activas y asociadas a un volumen de grupo:

pvdisplay



Borrando volumenes fisicos de un volumen de grupo

Si queremos sacar /dev/sdc1 de nuestro volumen de grupo fundacion, entonces :

vgreduce fundacion /dev/sdc1



Volumenes Logicos

Para crear un volumen logico de 1GB a partir de nuestro volumen de grupo fundacion hacemos:

lvcreate -L+1G -n lv1 fundacion

donde, lv1 es nuestro volumen logico a crear

Si quieres que el volumen logico este ubicado en una particion especifica del volumen de grupo fundacion entonces se hace de la siguiente manera:



lvcreate -L+1G -n lv1 fundacion /dev/sdb1


Luego de esto deberia crearse un volumen logico ubicado en /dev/fundacion/lv1 al cual le dariamos formato y luego montamos en nuestro filesystem:

mkfs.ext3 /dev/fundacion/lv1

Luego esta listo para ser montado donde deseemos

mount /dev/fundacion/lv1 /mnt





Extendiendo un volumen logico

Si necesitamos mas espacio en nuestro volumen logico lvm1 entonces lo extendemos a nuestra manera teniendo siempre en cuenta el espacio del volumen de grupo al que pertenecemos, Es decir, no podemos exceder el tamano de nuestro volumen logico mas alla del espacio libre que tiene nuestro volumen de grupo. Seria :



Primero desmontamos la particion, si esta montada:

umount /mnt/

lvextend -L+1G /dev/fundacion/lv1

Esto incrementa en 1Gb el volumen logico lv1. Adicional a esto, tenemos que decirle al sistema operativo que se cambio ese volumen:

e2fsck -f /dev/fundacion/lv1

para revisar el filesystem. Luego:

resize2fs /dev/fundacion/lv1.

Luego de esto ya podemos montar nuevamente la particion lv1 con los cambios realizados.



Reduciendo un volumen logico:

Nota: Puede ser muy peligroso realizar esta tarea.

Si nuestro volumen logico lv1 tiene 2Gb de espacio y deseamo reducirlo en 1gb, realizamos lo siguiente:

Desmontamos el volumen si esta montado.

umount /mnt

e2fsck -f /dev/fundacion/lv1

Luego le hacemos el resize a nivel del sistema operativo

resize2fs /dev/fundacion/lv1 1G

Esto lo que hace es decirle al SO que el volumen logico lv1 sera ahora de 1Gb

Desactivamos el volumen logico:

lvchange -a n /dev/fundacion/lv1

Finalmente lo reducimos:

lvreduce -L-1G /dev



Para confirmar que se ha hecho efectivo verificamos el size del volumen:

lvdisplay /dev/fundacion/lv1

Y confirmarlo en el sistema operativo

fdisk -s /dev/fundacion/lv1



Finalmente montamos nuevamente el volumen logico con el nuevo size:

mount /dev/fundacion/lv1 /mnt









































Bibliografia:

http://es.wikipedia.org/wiki/LVM

http://www.tldp.org/HOWTO/LVM-HOWTO.html








lunes, 6 de agosto de 2007

Linux sistema de vigilancia
Autor: www.liberaliatempus.com


Contratar un sistema comercial de vigilancia que contemple la grabación en video supone, por regla general, un desembolso de dinero elevado, bien por el precio de la maquinaria y la instalación, bien porque la empresa instaladora sólo trabaja mediante contratos de mantenimiento que valen más de lo debido. Si bien ese tipo de sistemas comerciales pueden ser imprescindibles en entornos concretos, son muchas las ocasiones en las que contratar el servicio, aún siendo necesario, escapa por completo al presupuesto disponible. Vamos a estudiar en este artículo cómo crear un sistema de video-vigilancia adaptable a casi cualquier presupuesto.

Preliminares

Instalaremos nuestro sistema de vigilancia en un piso con una superficie de ochenta metros cuadrados con un aspecto en plano similar a este:

Nos interesa tener vigilado el paso por un lugar concreto del pasillo de entrada a la vivienda, así que dispondremos una instalación basada en una cámara que abarque toda esa zona. Para nuestros propósitos, es necesario tener a nuestra disposición una webcam y un ordenador PC. Este artículo se ha escrito haciendo las pruebas con el siguiente equipamiento:

  • Cámara webcam Logitech Quickcam Zoom, que llega a grabar a una velocidad de 30 fps, a una resolución de 640 por 480 píxeles. Se conecta al PC mediante el interfaz USB y se puede conseguir de segunda mano por menos de treinta euros .
  • PC Pentium III 1.100 Mhz. con 512 MB de memoria RAM, un disco duro de 70 GB y una tarjeta gráfica SiS con 64 MB de RAM integrada en la placa base.
  • Monitor VGA CRT de 15 pulgadas.
  • Sistema operativo linux Ubuntu Dapper Drake.
  • Servidor Web Apache.
  • Programa Motion con la extensión Motion.cgi.

A priori, el coste de todo el material no debería sobrepasar los cien euros si sabemos bien dónde buscar todas las piezas.


Instalación del hardware

La instalación de la cámara la haremos siguiendo el esquema anterior, donde se muestra la disposición que nos interesa. Colocaremos el dispositivo en la parte media de la pared y haremos un pequeño taladro para poder pasar el cable USB hasta la habitación donde va a quedar colocado el PC. En nuestro caso, hemos tenido que usar un pequeño alargador adicional USB de un metro y medio que ha permitido bajar el cableado por un lugar no visible. La cámara no necesita alimentación adicional, así que, una vez colocada y enchufada al PC, habrá terminado nuestro trabajo y quedaremos a la espera de tener la imágen capturada para calibrar la posición como es debido.


Instalación del software

Existen multitud de sistemas de software adaptados a la video-vigilancia que funcionan bajo entornos linux. Por ejemplo, el software "Devolution Security System" (http://devsec.sourceforge.net/), nos permite disponer de una aplicación semi-profesional orientada a la vigilancia. Permite el control de hasta dieciséis cámaras, detecta movimiento, graba secuencias de video en mpeg4, emite video hacia la red local o hacia internet, etc. Algo más de lo que nosotros andamos buscando, pero que nos puede dar una idea de las capacidades de adaptación de nuestro sistema a un coste realmente bajo.

El software elegido para la aplicación de nuestro proyecto se llama Motion (http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome), un programa de deteccción de movimiento creado por Kenneth Jahn Lavrsen. Motion orienta su funcionamiento hacia cámaras de tipo V4L (generalmente webcams) y su operativa es relativamente sencilla: el programa captura imágenes desde el dispositivo y las compara. Si la imagen actual difiere de la anterior en un número de píxeles configurable, queda almacenada en el disco, teniendo la posibilidad de que el programa genere una película de video a partir de una serie de imágenes fijas. Además de almacenar la imagen o generar un video, el programa es capaz de emitir un sonido de alerta cuando se produzca el evento. Podemos motitorizar las acciones y el funcionamiento del programa mediante una interfaz web accesible desde cualquier ordenador con una conexión a internet, lo que hace que el control sobre el programa de detección sea total.

La instalación del software se puede hacer desde los paquetes pre-compilados (en la página web se pueden descargar versiones para las distribuciones más importantes) o desde la compilación directa del código fuente, que se ofrece en un archivo comprimido. Para una instalación sobre Ubuntu, elegiremos para la instalación la herramienta apt-get, que nos evitará tener que andar buscando las distintas dependencias (para otras distribuciones, habrá que descargar el paquete de la página web y atender a las dependencias):

[root@ubuntu02 ~]# apt-get install motion

Tras la instalación del programa principal, descargaremos e instalaremos el scriptscript nos permitirá acceder al programa Motion a través de un navegador web y nos permitirá repasar, modificar o borrar las diferentes capturas de pantalla y los videos. Para la instalación del programa, descomprimiremos el contenido del archivo en el directorio de publicación de Apache (/var/www/ en Ubuntu) y copiaremos el fichero motion.cgi.conf en la rama de configuraciópn /etc. Motion.cgi. Este

[root@ubuntu02 ~]# tar xvzf motion.cgi-0.1.tar.gz
[root@ubuntu02 ~]# cp motion.cgi-0.1/motion.cgi.conf /etc/

Una vez hecho esto, tendremos que modificar unas lineas del archivo de configuración general de Apache (http.conf) que nos permita la ejecución de los archivos cgi incluidos con el script. Buscaremos las siguientes directivas en el archivo de configuración y las adaptaremos a nuestro caso particular. Si no existen dichas directivas, las crearemos (con estas directivas se permite la ejecución de archivos cgi fuera de la directiva configurada en ScriptAlias, ya que suponemos que nuestro sistema no se está instalando en un entorno de producción) :

# 1ª directiva

AllowOverride None
Options +ExecCGI
Order allow,deny
Allow from all


# 2ª directiva
AddHandler cgi-script cgi pl

Para terminar, y como nuestra intención es grabar secuencias de video, necesitaremos algún codificador de MPEG instalado en el sistema. El autor de este artículo se decanta por ffmpeg, ya que proporciona soporte directo para Motion.

[root@ubuntu02 ~]# apt-get install ffmpeg

El resto de la configuración de Apache puede quedar tal y como se ofrece por defecto, así que con este último paso quedará instalado todo el programa y sólo nos faltará adaptar la configuración a nuestro caso particular.


Configuración del sistema

Aunque en primer lugar deberíamos atender a la configuración de nuestra cámara, esto no será necesario, pues el modelo expuesto es reconocido de forma totalmente automática por nuestro sistema. Si estamos haciendo la instalación con otro modelo de cámara, lo primero que tendremos que hacer es comprobar que el sistema la reconoce de forma adecuada. Para hacer esto, simplemente cargaremos una aplicación tipo Camorama (http://camorama.fixedgear.org/) y comprobaremos que la cámara funciona de forma adecuada y expone correctamente los colores.

El programa Motion lee su configuración del archivo /etc/motion/motion.conf. La lista de opciones de configuración es bastante extensa, así que conviene abrir la página del manual (man motion) y leer la sección relativa a las opciones de configuración. Para hacer nuestras primeras pruebas, atenderemos especialmente a siguientes opciones: target_dir, que establece la ruta dónde se guardarán las imágenes o el video; videodevice, que especifica el dispositivo de video a usar (/dev/video0 para la cámara web); width y height, que establecen el tamaño de grabación de las imágenes (lo dejaremos en 320 y 240 para empezar); framerate, que especifica los frames a capturar por segundo (para la cámara propuesta podemos establecer 25 sin problema); threshold, que le indica al programa qué número de píxeles deben ser distintos a la imagen anterior para que se detecte un cambio (con 1500 es más que suficiente para detectar el movimiento de una persona, pero lo reduciremos si el movimiento a detectar es de algo más pequeño); ffmpeg_cap_new on especifica que grabará películas en tiempo real. Dejaremos el resto de opciones en su valor por defecto o bien atenderemos a las distintas explicaciones que nos ofrece el archivo de configuración de ejemplo que viene junto al programa

Por su parte, el script motion.cgi se ejecuta mediante la lectura del archivo /etc/motion.cgi.conf. Dicho archivo sólo contiene en su interior cinco parámetros que dejaremos de la siguiente forma:

SOURCE=webcam=webcam-live.cgi
IMAGEDIR=images
ABSOLUTEPATH=/var/www/motion.cgi-0.1/
RELATIVEPATH=/motion/
MOTIONBIN=/usr/bin/

Con los cambios adicionales que deseemos aplicar al archivo /etc/motion/motion.conf y el script motion.cgi configurado podemos pasar a la ejecución del programa.


Puesta en marcha

Accederemos al interfaz mediante la dirección http:///motion.cgi-0.1/ y cargaremos de esta forma el script motion.cgi, el cual nos permitirá un control casi total del programa. Como podemos observar, el funcionamiento es bastante sencillo: Las dos primeras opciones nos permiten listar las fuentes disponibles de nuestro dispositivo: Tree muestra un árbol en la parte superior con las imágenes y los videos capturados y Live muestra la captura en tiempo real de la webcam. Con Start/Stop Motion iniciaremos o pararemos el programa. Con las tres opciones siguientes obtendremos el estado del programa y forzaremos la captura de una imagen o un video. Una vez en funcionamiento, el aspecto de nuestro interfaz podría parecerse a esto:


Conclusiones

Tal y como hemos podido observar, el montaje de un sistema de video-vigilancia no tiene que suponer el desembolso de grandes cantidades de dinero. Con un poco de imaginación y algo de atención, podemos montarnos un sistema semi-profesional que permitirá tener vigiladas ciertas zonas de interés. El programa Motion tiene una capacidad tremenda para convertir dicho sistema en algo que va más allá de lo casero, pero eso ya queda al arbitrio del interés que pueda tener el lector de adentrarse en los entresijos del programa. Nosotros hemos cumplido con nuestro propósito, que era demostrar la implantación de un sistema casero de video-vigilancia con herramientas de software libre y material de bajo coste.

FTP Server HOWTO RHEL 5


FTP Server HOWTO Red Hat Enterprise Linux 5
Autor: Cristhian Nunez

Introducción.

Acerca del protocolo FTP.
FTP (File Transfer Protocol) o Protocolo de Transferencia de Archivos (o ficheros informáticos) es
uno de los protocolos estándar más utilizados en Internet siendo el más idóneo para la transferencia
de grandes bloques de datos a través de redes que soporten TCP/IP. El servicio utiliza los puertos 20
y 21, exclusivamente sobre TCP. El puerto 20 es utilizado para el flujo de datos entre cliente y
servidor. El puerto 21 es utilizando para el envío de órdenes del cliente hacia el servidor.
Prácticamente todos los sistemas operativos y plataformas incluyen soporte para FTP, lo que
permite que cualquier computadora conectada a una red basada sobre TCP/IP pueda hacer uso de
este servicio a través de un cliente FTP.

Acerca de vsftpd.
Vsftpd (Very Secure FTP Daemon) es un equipamiento lógico utilizado para implementar
servidores de archivos a través del protocolo FTP. Se distingue principalmente porque sus valores
predeterminados son muy seguros y por su sencillez en la configuración, comparado con otras
alternativas como ProFTPD y Wu-ftpd. Actualmente se presume que vsftpd es quizá el servidor FTP
más seguro del mundo.

Tipos de Conexiones FTP
Activa
La secuencia es la siguiente:
El cliente se conecta al servidor por el puerto 21

Cuando el cliente realiza la solicitud de transferencia el servidor hace una conexion por el puerto

20 para la transferencia a un puerto del cliente por encima del 1024
Pasiva
El cliente se conecta al servidor ftp por el puerto 21

Cuando el cliente realiza la solicitud, el cliente inicia la transferencia saliendo por un puerto

encima del 1024 y llegando al servidor por otro puerto encima del 1024.

Instalación a través de yum.
yum -y install vsftpd

Ficheros de configuración.
/etc/vsftpd.user_list Lista que definirá usuarios a enjaular o no a enjaular, dependiendo
de la configuración.
/etc/vsftpd/vsftpd.conf Fichero de configuración.

Procedimientos.
Utilice un editor de texto y modifique el fichero /etc/vsftpd/vsftpd.conf. A continuación
analizaremos los parámetros a modificar o añadir, según se requiera para necesidades particulares.

Parámetro anonymous_enable.
Se utiliza para definir si se permitirán los accesos anónimos al servidor. Establezca como valor YES o
NO de acuerdo a lo que se requiera.
anonymous_enable=YES
Parámetro local_enable.
Es particularmente interesante si se combina con la función de jaula (chroot). Establece si se van a
permitir los accesos autenticados de los usuarios locales del sistema. Establezca como valor YES o
NO de acuerdo a lo que se requiera.
local_enable=YES
Parámetro write_enable.
Establece si se permite el mandato write (escritura) en el servidor. Establezca como valor YES o NO
de acuerdo a lo que se requiera.
write_enable=YES
Parámetro ftpd_banner.
Este parámetro sirve para establecer el banderín de bienvenida que será mostrado cada vez que un
usuario acceda al servidor. Puede establecerse cualquier frase breve que considere conveniente.
ftpd_banner=Bienvenido al servidor FTP de Codigo Libre
Estableciendo jaulas para los usuarios: parámetros chroot_local_user y chroot_list_file.
De modo predeterminado los usuarios del sistema que se autentiquen tendrán acceso a otros
directorios del sistema fuera de su directorio personal. Si se desea recluir a los usuarios a solo poder
utilizar su propio directorio personal, puede hacerse fácilmente con el parámetro chroot_local_user
que habilitará la función de chroot() y los parámetros chroot_list_enable y chroot_list_file para
establecer el fichero con la lista de usuarios que quedarán excluidos de la función chroot().
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
Con lo anterior, cada vez que un usuario local se autentique en el servidor FTP, solo tendrá acceso a
su propio directorio personal y lo que este contenga. No olvide crear el fichero
/etc/vsftpd/vsftpd.chroot_list, ya que de otro modo no arrancará el servicio vsftpd.
touch /etc/vsftpd/vsftpd.chroot_list
Control del ancho de banda.
Parámetro anon_max_rate.
Se utiliza para limitar la tasa de transferencia en bytes por segundo para los usuarios anónimos,
algo sumamente útil en servidores FTP de acceso público. En el siguiente ejemplo se limita la tasa
de transferencia a 5 Kb por segundo para los usuarios anónimos:
anon_max_rate=5120
Parámetro local_max_rate.
Hace lo mismo que anon_max_rate, pero aplica para usuarios locales del servidor. En el siguiente
ejemplo se limita la tasa de transferencia a 5 Kb por segundo para los usuarios locales:
local_max_rate=5120
Parámetro max_clients.
Establece el número máximo de clientes que podrán acceder simultáneamente hacia el servidor FTP.
En el siguiente ejemplo se limitará el acceso a 5 clientes simultáneos.
max_clients=5
Parámetro max_per_ip.
Establece el número máximo de conexiones que se pueden realizar desde una misma dirección IP.
Tome en cuenta que algunas redes acceden a través de un servidor intermediario (Proxy) o puerta
de enlace y debido a esto podrían quedar bloqueados innecesariamente algunos accesos. en el
siguiente ejemplo se limita el número de conexiones por IP simultáneas a 5.
max_per_ip=5
Iniciar, detener y reiniciar el servicio vsftpd.
A diferencia de otros servicios FTP como Wu-ftpd, el servicio vsftpd no requiere configurarse para
trabajar sobre demanda, aunque tiene dicha capacidad. Por lo tanto no depende de servicio xinetd.
La versión incluida en distribuciones como CentOS 4, Red HatTM Enterprise Linux 4 y White Box
Enterprise Linux 4 puede iniciar, detenerse o reiniciar a través de un guión similar a los del resto del
sistema.
Para iniciar por primera vez el servicio, utilice:
service vsftpd start
Para hacer que los cambios hechos a la configuración surtan efecto, utilice:
service vsftpd restart
Para detener el servicio, utilice:
service vsftpd stop
Agregar el servicio al arranque del sistema.
Para hacer que el servicio de vsftpd esté activo con el siguiente inicio del sistema, en todos los
niveles de corrida (2, 3, 4, y 5), se utiliza lo siguiente:
chkconfig vsftpd on

Usuarios Enjaulados
Un usuario enjaulado es aquel que ve su home user como si fuera la /. Por ejemplo, Si tengo un
servidor FTP corriendo con la opcion usuarios enjaulados habilitada “chroot_local_user=YES” si yo
me quiero conectar como pepito al servidor, asumiendo que el usuario pepito tiene la ruta de su
home en /home/pepito. Cuando este se conecte via FTP le saldra que su directorio / es en realidad
/home/pepito.
Esta medida es muy utilizada para evitar que los usuarios naveguen a traves del sistema de
archivos del servidor.
Creamos el archivo definido en la opcion “chroot_list_file=/etc/vsftpd/vsftpd.chroot_list”
vi /etc/vsftpd/vsftpd.chroot_list
Luego agregamos todos los usuarios que queremos enjaular. Por ejemplo pepito y reiniciamos el
sistema
Ahora cuando pepito se conecte via ftp vera cuando ejecute pwd que el directorio actual donde se
encuentre sera /, sin embargo en realidad estara conectado a su home user /home/pepito.

Bibliografia
www.alcancelibre.org
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch15_:_Linux_FTP_Server_Set
up

DHCP Server HOWTO RHEL 5

DHCP Server Howto Red Hat Enterprise 5
Autor: Cristhian Nunez
Introducción.

Acerca del protocolo DHCP.

DHCP (acrónimo de Dynamic Host Configuration Protocol que se traduce Protocolo de configuración
dinámica de servidores) es un protocolo que permite a dispositivos individuales en una red de
direcciones IP obtener su propia información de configuración de red (dirección IP; máscara de sub-
red, puerta de enlace, etc.) a partir de un servidor DHCP.
Sin la ayuda de un servidor DHCP, tendrían que configurarse de forma manual cada dirección IP de
cada anfitrión que pertenezca a una Red de Área Local. Si un anfitrión se traslada hacia otra
ubicación donde existe otra Red de Área Local, se tendrá que configurar otra dirección IP diferente
para poder unirse a esta nueva Red de Área Local. Un servidor DHCP entonces supervisa y
distribuye las direcciones IP de una Red de Área Local asignando una dirección IP a cada anfitrión
que se una a la Red de Área Local. Cuando, por mencionar un ejemplo, una computadora portátil se
configura para utilizar DHCP, a ésta le será asignada una dirección IP y otros parámetros de red
necesarios para unirse a cada Red de Área Local donde se localice.
Existen tres métodos de asignación en el protocolo DHCP:
• Asignación manual: La asignación utiliza una tabla con direcciones MAC
(acrónimo de Media Access Control Address, que se traduce como dirección de
Control de Acceso al Medio). Sólo los anfitriones con una dirección MAC definida
en dicha tabla recibirá el IP asignada en la misma tabla. Ésto se hace a través de
los parámetros hardware ethernet y fixed-address.
• Asignación automática: Una dirección de IP disponible dentro de un rango
determinado se asigna permanentemente al anfitrión que la requiera.
• Asignación dinámica: Se determina arbitrariamente un rango de direcciones IP
y cada anfitrión conectado a la red está configurada para solicitar su dirección IP
al servidor cuando se inicia el dispositivo de red, utilizando un intervalo de
tiempo controlable (parámetros default-lease-time y max-lease-time) de
modo que las direcciones IP no son permanentes y se reutilizan de forma
dinámica.
Acerca de dhcp por Internet Software Consortium, Inc.
Fundado en 1994, Internet Software Consortium, Inc., distribuye un conjunto de herramientas para el
protocolo DHCP, las cuales consisten en:
• Servidor DHCP
• Cliente DHCP
• Agente de retransmisión.
Dichas herramientas utilizan un API (Application Programming Interface o Interfaz de Programación
de Aplicaciones) modular diseñado para ser lo suficientemente general para ser utilizado con
facilidad en los sistemas operativos que cumplen el estándar POSIX (Portable Operating System
Interface for UNIX o interfaz portable de sistema operativo para Unix) y no-POSIX, como Windows.

Instalación a través de yum.
yum -y install dhcp

Procedimientos.
Fichero de configuración /etc/dhcpd.conf.
Considerando como ejemplo que se tiene una red local con las siguientes características:
• Número de red 192.168.1.0
• Máscara de sub-red: 255.255.255.0
• Puerta de enlace: 192.168.1.1
• Servidor de nombres: 192.168.1.1
• Servidor Wins: 192.168.0.1
• Servidores de tiempo (NTP): 0.pool.ntp.org, 1.pool.ntp.org y 2.pool.ntp.org
• Rango de direcciones IP a asignar de modo dinámico: 192.168.1.11-
192.168.1.199
• Dos direcciones IP se asignarán como fijas (192.168.0.253 y 192.168.0.254) para
las tarjetas de red con direcciones MAC (Media Access Control o Control de
Acceso de Medios) 00:50:BF:27:1C:1C y 00:01:03:DC:67:23.
NOTA: Es indispensable conocer y entender perfectamente todo lo anterior para
poder continuar con este documento.

Puede utilizar el siguiente contenido de ejemplo para adaptar y crear desde cero un nuevo
fichero /etc/dhcpd.conf que se ajuste a una red y conjunto de sistemas en particular.
ddns-domainname "onemax.local";
ddns-update-style interim;
option domain-name-servers 192.168.1.15,192.168.1.12;
default-lease-time 18000;
max-lease-time 25200;
option routers 192.168.1.1;
option subnet-mask 255.0.0.0;
option domain-name "onemax.local";
option ntp-servers 192.168.1.12;
subnet 192.168.1.0 netmask 255.0.0.0 {
range 192.168.1.50 192.168.1.230;
}
Detalles;
- option domain-name-servers Envia a los clientes los DNS por defectos a ser utilizados
- default-lease-time 18000; Es el tiempo por defecto que un cliente puede permanecer con una
direccion ip. El cliente deja libre esta direccion y trata de adquirir una nueva. El tiempo es expresado
en segundos.
- max-lease-time 25200; Este es el tiempo maximo permitido por el Servidor para que la ip sea
liberada. Puede darse el caso que el computador no este encendido cuando se cumpla el default-
lease-time por lo que el servidor le da otro periodo de tiempo antes de asignarsela a otro equipo
- option routers 192.168.1.1; Esta es la opcion del default gw enviada a los clientes.
- option subnet-mask 255.0.0.0; Esta es la opcion de la mascara por defecto
- option ntp-servers 192.168.1.12; Esta es la opcion el servidor de sincronizacion del
tiempo o ntp server
- subnet 192.168.1.0 netmask 255.0.0.0 {
range 192.168.1.50 192.168.1.230;
} Con esta opcion le declaramos al dhcp server el rango de red y el pool de direcciones ip que
entregara.

Iniciar, detener y reiniciar el servicio dhcpd.
Para iniciar por primera vez el servicio dhcpd, utilice:
/etc/init.d/dhcpd start
Para hacer que los cambios hechos a la configuración del servicio dhcpd surtan efecto, utilice:
/etc/init.d/dhcpd restart
Para detener el servicio dhcpd, utilice:
/etc/init.d/dhcpd stop
Agregar el servicio dhcpd al arranque del sistema.
Para hacer que el servicio de dhcpd esté activo con el siguiente inicio del sistema, en todos los
niveles de corrida (2, 3, 4, y 5), se utiliza lo siguiente:
/sbin/chkconfig dhcpd on

Comprobaciones desde cliente DHCP.
Hecho lo anterior solo falta con configurar como interfaces DHCP las estaciones de trabajo que sean
necesarias sin importar que sistema operativo utilicen.
Después de configurado e iniciado el servicio, desde una terminal como root en otro sistema que
será utilizado como cliente, considerando que se tiene una interfaz de red denominada eth0, utilice
los siguientes mandatos para desactivar la interfaz eth0 y asignar una nueva dirección IP a través
del servidor dhcp.
/sbin/ifdown eth0
/sbin/dhclient eth0

Lo anterior deberá devolver el mensaje «Determinando la información IP para eth0...» y el símbolo
de sistema. Para corroborar, utilice el mandato ifconfig para visualizar los dispositivos de red
activos en el sistema.

Casos Adicionales


Puede darse el caso de que necesitemos en determinado momento que un equipo se mantenga
siempre con la misma direccion ip, quiza porque esta corriendo una aplicacion especial donde otros
clientes se conectan. Para ello entonces necesitamos apartar la direccion en el serividor DHCP. Esto
se hace utilizando la direccion MAC ADRESS del equipo y adicionandola en nuestro servidor de la
siguiente manera:
host m253 {
option host-name "m253.codigolibre.local";
hardware ethernet 00:50:BF:27:1C:1C;
fixed-address 192.168.1.253;
}
Cada vez que el host se conecte obtendra la misma direccion porque por medio a la mac address ya
el servidor dhcp aparto esta direccion exclusiva para dicho host.

Filtrado por Mac address
Otra situacion se presenta cuando desea filtrar por direccion mac, es decir, desea solamente que mi
servidor dhcp filtre a un rango de direcciones conocidas, asi cualquier extrano o visitante que llegue
a la empresa no podra conectarse a nuestra red de una manera tan facil.
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.230;
deny unknown clients;
}
host abc {hardware ethernet 00:06:4F:4E:DA:DB}
host cde {hardware ethernet 00:19:5B:FF:31:04}

Dentro de la declaracion del pool de ips escribimos la opcion “deny unknown-clients”, esta opcion
permite enviar direcciones solamente a los hosts conocidos. Mas abajo estan los equipos bpena y
cvasquez declarados en el dhcp, por lo tanto, Nuestro servidor solamente enviara direcciones a
estos 2 conocidos que son los unicos declarados.

Bibliografia
www.alcancelibre.org
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch08_:_Configuring_the_DHCP
_Server

Apache HOWTO RHEL 5

Apache Web Server
Autor: Cristhian Nunez

Acerca del protocolo HTTP.
HTTP (Hypertext Transfer Protocol, o Protocolo de Trasferencia de Hipertext), es el método utilizado
para transferir o transportar información en la Red Mundial (WWW, World Wide Web). Su propósito
original fue el proveer una forma depublicar y recupertar documentos HTML.
HTTP es un protocolo de solicitud y respuesta a través de TCP, entre agentes de usuario
(Navegadores, motores de índice y otras herramientas) y servidores, regularmente utilizando el
puerto 80. Entre la comunicación entre éstos puede intervenir como servidores Intermediarios
(Proxies), puertas de enlace y túneles.
Acerca de Apache.

Apache es un servidor HTTP, de código abierto y licenciamiento libre, que funciona en Linux,
sistemas operativos derivados de UnixTM, Windows, Novell Netware y otras plataformas. Ha
desempeñado un papel muy importante en el crecimiento de la red mundial, y continua siendo el
servidor HTTP más utilizado, siendo además el servidor de facto contra el cual se realizan las
pruebas comparativas y de desempeño para otros productos competidores. Apache es desarrollado
y mantenido por una comunidad de desarrolladores auspiciada por Apache Software Foundation.

Configuracion Basica
Instalar los paquetes
yum -y install httpd

Para iniciar, detener,reiniciar el servicio:
/etc/init.d/httpd start - Inicia el servicio Apache
/etc/init.d/httpd stop - Detiene el servicio Apache
/etc/init.d/httpd restart - Reinicia el servicio Apache
/etc/init.d/httpd status - Verifica el status de Apache
Apache viene con la configuracion estandard, solo basta con reiniciar el servicio y dirigirse a su
navegador y digitar http://localhost

El archivo de configuracion de apache por defecto es /etc/httpd/conf/httpd.conf.
Cualquier ajuste que se requiera realizar, ya sea para configurar Sitios de Red virtuales u otra
funcionalidad adicional, se puede realizar sin tocar el fichero principal de configuración, utilizando
cualquier fichero con extensión *.conf dentro del directorio /etc/httpd/conf.d/.
Directorios virtuales.

Si, por ejemplo, se quisiera añadir el alias para un directorio localizado en /var/ftp/pub/ y el cual
queremos visualizar como el directorio /pub/ en Apache, solo bastaría crear un fichero que
denominaremos arbitrariamente como el fichero denominado /etc/httpd/conf.d/aliases.conf con
el siguiente contenido:
Alias /pub /var/ftp/codigolibre

Si trata de acceder hacia este nuevo directorio virtual con el navegador, notará que no está
permitido el acceso. Para poder acceder deberá haber un documento índice en el interior
(index.html, index.php, etc) o bien que dicho directorio sea configurado para mostrar el contenido
del siguiente modo:
Alias /pub /var/ftp/pub

Options Indexes Includes FollowSymLinks
AllowOverride all


El parámetro Indexes indica que se deberá mostrar el contenido del directorio. El parámetro
FollowSymLinks posibilita poder colocar enlaces simbólicos dentro del directorio los cuales se
seguirán. El parámetro Includes especifica que se permite la utilización de los SSI (Server Side
Includes) que posibilitan utilizar funciones como autenticación. El parámetro AllowOverride all
posibilita utilizar ficheros .htaccess.

Reinicie o recargue Apache y acceda hacia http://127.0.0.1/pub/ con cualquier navegador de red y
visualice el resultado.

Dominios virtuales
# Sitio de Red virtual con definición de directorio para CGI

DocumentRoot /var/www/html/codigolibre/test
ServerName test.codigolibre.local
ServerAlias test.codigolibre.local
ServerAdmin webmaster@codigolibre.local
ErrorLog /var/www/html/codigolibre/html/test/logs/error_log
CustomLog /var/www/html/codigolibre/html/test/logs/access_log combined
ScriptAlias /cgi-bin/ "/var/www/html/codigolibre/html/test/cgi-bin/"

AllowOverride None
Options None
Order allow,deny
Allow from all

AddHandler cgi-script .cgi


Restriccion de Acceso a directorios
Apache® 2.x tiene mejores medidas de seguridad que las versiones anteriores, debido a que su
configuración predeterminada viene de tal modo que deshabilita muchas cosas que podrán
considerarse de cierto riesgo. Parte de esa seguridad incluye deshabilitar los SSI (Server Side
Includes o Inclusiones del Lado del Servidor) y el uso de los ficheros .htaccess. Estos últimos sirven
para modificar o agregar funciones a directorios.
Básicamente solo se necesita agregar las siguientes líneas a cualquier definición del directorio que
se desee utilizar:
Options Includes
AllowOverride All

Procedimientos.
Autenticación de directorios.
La autenticación para un directorio, contra un fichero que incluye claves de acceso, se realiza a
través de la siguiente sintaxis en cualquier fichero .htaccess.
AuthName "Acceso solo usuarios autorizados"
AuthType Basic
require valid-user
AuthUserFile /cualquier/ruta/hacia/fichero/de/claves
Ejemplo.
Se procede a crear un directorio que será visto desde cualquier navegador como
http://127.0.0.1/privado/.
Genere el fichero /etc/httpd/conf.d/ejemplo-autenticar.conf con el siguiente contenido:
Alias /privado /var/www/privado

Options Includes
AllowOverride All
Order allow,deny
Allow from all

Genere el directorio /var/www/privado/ realizando lo siguiente:
mkdir -p /var/www/privado
Genere el fichero /var/www/privado/.htaccess realizando lo siguiente:
touch /var/www/privado/.htaccess
Edite el fichero /var/www/privado/.htaccess y agregue el siguiente contenido:
AuthName "Solo usuarios autorizados"
AuthType Basic
require valid-user
AuthUserFile /var/www/claves
Genere el fichero de claves de acceso como /var/www/claves, utilizando el siguiente
procedimiento:
touch /var/www/claves
Con el fin de establecer la seguridad necesaria, cambie los atributos de lectura y escritura solo para
el usuario apache:
chmod 600 /var/www/claves
chown apache:apache /var/www/claves
Agregue algunos usuarios virtuales al fichero de claves, /var/www/claves, utilizando el siguiente
procedimiento con el mandato htpasswd:
htpasswd /var/www/claves fulano
htpasswd /var/www/claves mengano
Reinicie el servicio httpd:
service httpd restart


Bibliografia
www.alcancelibre.org
www.linuxhomenetworking.com

sábado, 21 de julio de 2007

OpenLDAP HOWTO RHEL 5

HOWTO OpenLDAP RHEL 5

OpenLDAP Howto

Autor: Cristhian Nunez


Introducción

LDAP (Lightweight Directory Access Protocol) es un protocolo para consulta y modificación de servicios de directorio que se desempeñan sobre TCP/IP. LDAP utiliza el modelo X.500 para su estructura, es decir, se estructura árbol de entradas, cada una de las cuales consiste de un conjunto de atributos con nombre y que a su vez almacenan valores.

Paquetes Requeridos

openldap
openldap-clients
openldap-servers

Procedimientos

Crear la clave de acceso que se asignará en LDAP para el usuario administrador del directorio. Basta ejecutar desde una terminal:
slappasswd
Lo anterior debe dar como salida un criptograma como lo mostrado a continuación:

{SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Se edita el fichero /etc/openldap/slapd.conf y se verifica que los ficheros de esquema mínimos requeridos estén presentes. De tal modo, debe quedar algo así:

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema

Se editan los siguientes parametros, si no existen crearlos:

database bdb
suffix "dc=codigolibre,dc=org"
rootdn "cn=Administrador,dc=codigolibre,dc=org"
rootpw {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
directory /var/lib/ldap/

Inicie el servicio de LDAP y añada éste al resto de los servicios que arrancan junto con el sistema:

service ldap start
chkconfig ldap on

Edite el fichero /usr/share/openldap/migration/migrate_common.ph y modifique los los valores de las variables $DEFAULT_MAIL_DOMAIN y $DEFAULT_BASE a fin de que queden del siguiente modo:

# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "codigolibre.org";
# Default base
$DEFAULT_BASE = "dc=codigolibre,dc=org";

A continuación hay que crear el objeto que a su vez contendrá el resto de los datos en el directorio. Genere un fichero base.ldif del siguiente modo:

/usr/share/openldap/migration/migrate_base.pl > base.ldif

Se utilizará ldapadd para insertar los datos necesarios. Las opciones utilizadas con este mandato son las siguientes:

-x autenticación simple
-W solicitar clave de acceso
-D binddn Nombre Distinguido (dn) a utilizar
-h anfitrión Servidor LDAP a acceder
-f fichero fichero a utilizar

Una vez entendido lo anterior, se procede a insertar la información generada en el directorio utilizando lo siguiente:

ldapadd -x -W -D 'cn=Administrador, dc=codigolibre, dc=org' -h 127.0.0.1 -f base.ldif

Una vez hecho lo anterior, se podrá comenzar a poblar el directorio con datos. Lo primero será importar los grupos y usuarios existentes en el sistema. Realice la importación de usuarios utilizando los guiones correspondientes del siguiente modo:

/usr/share/openldap/migration/migrate_group.pl /etc/group group.ldif
/usr/share/openldap/migration/migrate_passwd.pl /etc/passwd passwd.ldif
Lo anterior creará los ficheros group.ldif y passwd.ldif, los cuales incluirán la información de los grupos y cuentas en el sistema, incluyendo las claves de acceso. Los datos se podrán insertar en el directorio LDAP utilizando lo siguiente:

ldapadd -x -W -D 'cn=Administrador, dc=codigolibre, dc=org' -h 127.0.0.1 -f group.ldif
ldapadd -x -W -D 'cn=Administrador, dc=codigolibre, dc=org' -h 127.0.0.1 -f passwd.ldif

Comprobaciones.

Antes de configurar el sistema para utilizar LDAP para autenticar, es conveniente verificar que todo funciona correctamente.

El siguiente mandato verifica que directorios disponibles existen en el servidor 127.0.0.1.
ldapsearch -h 127.0.0.1 -x -b '' -s base '(objectclass=*)' namingContexts
Lo anterior debe devolver una salida similar a lo siguiente:

# extended LDIF
#
# LDAPv3
# base <> with scope base
# filter: (objectclass=*)
# requesting: namingContexts
#

#
dn:
namingContexts: dc=su-red-local,dc=com
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

El siguiente mandato debe devolver toda la información de todo el directorio solicitado (dc=codigolibre,dc=org).

ldapsearch -x -b 'dc=codigolibre,dc=org' '(objectclass=*)'

Otro ejemplo es realizar una búsqueda específica para un usuario en particular. Suponiendo que en el sistema se tiene un usuario denominado fulano, puede ejecutarse lo siguiente:
ldapsearch -x -b 'uid=fulano,ou=People,dc=codigolibre,dc=org'

Lo anterior debe regresar algo como lo siguiente:

# extended LDIF
#
# LDAPv3
# base with scope sub
# filter: (objectclass=*)
# requesting: ALL
#



# fulano, People, linuxparatodos.net
dn: uid=fulano,ou=People,dc=codigolibre,dc=org
uid: fulano
cn: fulano
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: xxxxxxxxxxxx
shadowLastChange: 12594
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 505
gidNumber: 505
homeDirectory: /home/fulano

# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

Configuración de clientes.

Defina los valores para los parámetros host y base a fin de establecer hacia que servidor y a que directorio conectarse. Para fines prácticos, el valor del parámetros base debe ser el mismo que se especificó en el fichero /etc/openldap/slapd.conf para el parámetro suffix.

# Your LDAP server. Must be resolvable without using LDAP.
# Multiple hosts may be specified, each separated by a
# space. How long nss_ldap takes to failover depends on
# whether your LDAP client library supports configurable
# network or connect timeouts (see bind_timelimit).

host 192.168.0.1

# The distinguished name of the search base.
base dc=codigolibre,dc=org

Configuración de clientes Ubuntu

Asumiendo que tenemos instalado el servidor LDAP procederemos a configurar los clientes en ubuntu.

Instalar los siguientes paquetes:
#apt-get install libnss-ldap libpam-ldap nscd
Responder todas las preguntas de la siguiente manera:
LDAP Account for root: cn=admin,dc=codigolibre=org
Password: XXXX
Make local root database admin: yes
Database require logging in: No
Root login account: cn=admin,dc=codigolibre,dc=org
Root login password: XXXX
Libnss-ldap te permitira utilizar te permite utilizar ldap como un servicio de nombres, libpam-ldap permite accionar para autenticar los usuarios a traves de ldap y finalmente nscd es un demonio como especie de cache.

Editar los archivos :

#vi /etc/libnss-ldap.conf
host ldap
base dc=codigolibre,dc=org
rootbinddn cn=admin,dc=codigolibre,dc=org
#vi /etc/libnss-ldap.secret
XXXXX
#vi /etc/pam_ldap.conf
host ldap
base dc=suredlocal=com
rootbinddn cn=admin,dc=codigolibre,dc=org
#vi /etc/pam_ldap.secret
XXXXX
Editar los archivos necesarios en /etc/pam.d/ para la autenticacion
#vi /etc/pam.d/common-account
account sufficient pam_ldap.so
account required pam_unix.so
#Si deseas que se cree automaticamente el home user
#session required pam_mkhomedir.so umask=0022 skel=/etc/skel/ silent
#vi /etc/pam.d/common-auth
auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass
#vi /etc/pam.d/common-password
password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5
#vi /etc/pam.d/common-session
session sufficient pam_ldap.so
session required pam_unix.so
session optional pam_foreground.so

Finalmente editamos /etc/nsswitch.conf y agregamos la directiva ldap
# vim /etc/nsswitch.conf
passwd: files ldap
group: files ldap
shadow: files ldap

Entornos Graficos

Instalar phpldapadmin

Descargar la ultima version de http://phpldapadmin.sourceforge.net/download.php
Guia Instalacion http://wiki.phpldapadmin.info/tiki-index.php?page=es.Documentation&bl



Bibliografia

Alcance Libre
http://www.alcancelibre.org/staticpages/index.php/como-ldap-auth
Joel Barrios
Jaime M. Tan Nozawa
http://www.debuntu.org/book/export/html/158



martes, 26 de junio de 2007

HOWTO INSTALL MSA1500cs RED HAT EL 5

Installing MSA1500cs Red Hat EL 5 HOWTO
Author Cristhian Nunez
Date 2007-06-26


Overview

A storage area network (SAN) is an architecture to attach remote computer storage devices such as disk array controllers, tape libraries and CD arrays to servers in such a way that to the operating system the devices appear as locally attached devices. Although cost and complexity is dropping, as of 2007, SANs are still uncommon outside larger enterprises.

By contrast to a SAN, network-attached storage (NAS) uses file-based protocols such as NFS or SMB/CIFS where it is clear that the storage is remote, and computers request a portion of an abstract file rather than a disk block.

The HP StorageWorks 1500cs Modular Smart Array (MSA1500) is a Fibre Channel storage area network (SAN) 2U controller shelf that connects to HP StorageWorks SCSI and/or Serial ATA (SATA) disk enclosures. Together they provide customers with a flexible low-cost, high capacity storage solution. The MSA1500cs has been designed as a hardware foundation for future solutions to ensure maximum investment protection.

MSA1500cs Features

Increased scalability w/ SCSI drives - Gain increased SCSI capacity with the enterprise-class 300GB U320 SCSI drives now giving a total SCSI capacity of 16.8TB.

Low Cost, Higher Capacity with SATA drives - For less than $.01 per/MB customers can obtain up to 64TB of capacity.

Modular 2U Rack-Mount Disk Array Controller Shelf - Ability to attach SCSI and Serial ATA enclosures.

RAID 6 with HP's Advanced Data Guarding technology (RAID ADG) 2Gb/1Gb Fibre connections to host - Highest level of fault tolerance ADG, allocates 2 sets of parity data across multiple drives while allowing simultaneous write operations. This level of fault tolerance can withstand 2 simultaneous drive failures without downtime or data loss. Ensures customer's 1Gb infrastructure by supporting both 1/2Gb FC fabrics.

Hot plug expansion and replacement support - Hot plug expansion and replacement of hard drives, redundant controllers, for simple, fast installation and maintenance. Fans and power supplies are also hot plug replaceable.

Integrated configuration and management tools - Uses a standard set of management and utility software. These tools consistently lower the cost of ownership by reducing training and technical expertise needed to install and maintain the MSA1500cs.

Ability to upgrade from the MSA1000 to the MSA1500cs - Ability to move the MSA1000 controllers to the empty controller bays in the MSA1500cs while also upgrading the firmware. Provides greater scalability and flexibility with the added benefit of allowing the mixing of SCSI and SATA drives MSA1500cs.

Mix of SATA and SCSI MSA1500cs - Ability to mix Serial ATA enclosures and SCSI disk enclosures behind the same MSA1500 controller she

Implementation

Installing and Configuring the SAN

- Download and install the qla2xxx driver.
Note: The qla2xxx cd drivers are not working correctly. Therefore, we need to download the correct drivers qla2xxx-v8.01.07-1-dist.tgz from qlogic web site.
Unpack and install:
tar -xvzf *.tgz
cd qlogic
./drvsetup
cd qla2xxx-x-yy-zz
./extras/build.sh install
Copy .ko to /lin/modules/2.6xxx/kernel/driver/scsi/qla2xxx

We need create a file to block the default qla2xxx driver and install the new driver.
Create the file HBA_MOUNT.sh
#!/bin/bash
rmmod qla2400
rmmod qla2300
rmmod qla2xxx_conf
rmmod qla6312
rmmod qla2xxx

modprobe -v qla2xxx
modprobe -v qla2300
modprobe -v qla2322
modprobe -v qla2400
modprobe -v qla2xip

ifconfig fc0 10.1.2.3
ifconfig fc1 10.1.2.4

After do this, Make a link to /etc/rc5.d/ like this:
ln -s /root/HBA_MOUNT.sh /etc/rc5.d/S11HBA

We are ready to use the SAN Database
So, now we are gonna install another utilities from the cdrom:
Assuming that the cdrom is installed in /media/cdrom
Install ACU (Array Configuration Utility)
rpm -ivh /media/cdrom/ACU/Linux/x86/cpacuxe-7.50-23.linux.rpm
Install ADU (Array Diagnostic Utility)
rpm -ivh /media/cdrom/ADU/Linux/x86/hpadu-7.50-23.linux.rpm
Install SMH ()
rpm -ivh /media/cdrom/SMH/Linux/i386/hpsmh-2.1.5-146.rpm

Finally activate cpqacuxe and hpsmh.

/etc/init.d/hpsmhd restart
cpqacuxe -R
We can login trhought web browser typing: http://localhost:2381

Now we are gonna configure the array with ACU
Select create array, At the right side, choose the disks you want to the array.
After create the array, We need to create a logical drive. Go to create logical drive, select the array type and size.
Finally, we need to make a presentation the logical drive to operating system. Click in the controller, select “Selective Storage Presentation” , click enable, and the host mode select linux and check the box
Exit ACU and restart the system.

Now, Lets format the partition /dev/sda
mkfs.ext3 /dev/sda
Mount the partition in /oracle
mount /dev/sda /oracle


Expanding array and Logical Drives
To Expand the array and logical drive, Make the following steps
Click over array you want expand, and select option “Expand Array”
Select the disks you want to expand
After do this, Save the configuration, A process will start and it ll take a long time to complete the expand array (4 o 5 hours)
After complete the expand array process, click on the new array and select “Extend Logical Drive” . It will take a long time too.
Finally, we need to tell to the operating system for the changes.
umount /oracle
e2fsck -f /dev/sda
resize2fs /dev/sda




jueves, 14 de junio de 2007

Openvpn HOWTO Red Hat EL 5

Openvpn HOWTO


1 Introduccion

¿Qué es una VPN?

La VPN es una tecnología de red que permite una extensión de la red local sobre una red pública o no controlada, como por ejemplo Internet.

El ejemplo más común es la posibilidad de conectar dos o más sucursales de una empresa utilizando como vínculo Internet, permitir a los miembros del equipo de soporte técnico la conexión desde su casa al centro de cómputo, o que un usuario pueda acceder a su equipo doméstico desde un sitio remoto, como por ejemplo un hotel. Todo esto utilizando la infraestructura de Internet.

Para hacerlo posible de manera segura es necesario proveer los medios para garantizar la autenticación, integridad y confidencialidad de toda la comunicación:

Autenticación y autorización: ¿Quién está del otro lado? Usuario/equipo y qué nivel de acceso debe tener.

Integridad: La garantía de que los datos enviados no han sido alterados.

Confidencialidad: Dado que los datos viajan a través de un medio potencialmente hostil como Internet, los mismos son susceptibles de interceptación, por lo que es fundamental el cifrado de los mismos. De este modo, la información no debe poder ser interpretada por nadie más que los destinatarios de la misma.

Tipos de VPN

VPN de acceso remoto

Éste es quizás el modelo más usado actualmente y consiste en usuarios o proveedores que se conectan con la empresa desde sitios remotos (oficinas comerciales, domicilios, hotel, aviones, etcétera) utilizando Internet como vínculo de acceso. Una vez autenticados tienen un nivel de acceso muy similar al que tienen en la red local de la empresa. Muchas empresas han reemplazado con esta tecnología su infraestructura dialup (módems y líneas telefónicas), aunque por razones de contingencia todavía conservan sus viejos modems.

VPN punto a punto

Este esquema se utiliza para conectar oficinas remotas con la sede central de organización. El servidor VPN, que posee un vínculo permanente a Internet, acepta las conexiones vía Internet provenientes de los sitios y establece el túnel VPN. Los servidores de las sucursales se conectan a Internet utilizando los servicios de su proveedor local de Internet, típicamente mediante conexiones de banda ancha. Esto permite eliminar los costosos vínculos punto a punto tradicionales, sobre todo en las comunicaciones internacionales.... es mas comun el anterior punto. tambien llamada tecnologia de tunel o tunneling

VPN interna

Este esquema es el menos difundido pero uno de los más poderosos para utilizar dentro de la empresa. Es una variante del tipo "acceso remoto" pero, en vez de utilizar Internet como medio de conexión, emplea la misma red de área local (LAN) de la empresa. Sirve para aislar zonas y servicios de la red interna. Esta capacidad lo hace muy conveniente para mejorar las prestaciones de seguridad de las redes inalámbricas (WiFi).

Un ejemplo muy clásico es un servidor con información sensible, como las nóminas de sueldos,

ubicado detrás de un equipo VPN, el cual provee autenticación adicional más el agregado del cifrado, haciendo posible que sólo el personal de RRHH habilitado pueda acceder a la información.

Certificado digital

Un Certificado Digital es un documento digital mediante el cual un tercero confiable (una autoridad de certificación) garantiza la vinculación entre la identidad de un sujeto o entidad y su clave pública.Si bien existen varios formatos de certificado digital, los más comúnmente empleados se rigen por el estándar UITT X.509v3. El certificado contiene usualmente el nombre de la entidad certificada, un número serial, fecha de expiración, una copia de la clave pública del titular del certificado (utilizada para la verificación de su firma digital), y la firma digital de la autoridad emisora del certificado de forma que el receptor pueda verificar que el esta última ha establecido realmente la asociación.

Formato de Certificado Digital

El certificado digital está formado por:

Clave pública
Clave privada
Información del Propietario
Información del emisor del Certificado

2 Paquetes Necesarios

openvpn2.0.71.el4.rf
lzo1.084.2.el4.rf
openssldevel0.9.7a43.4
openssl0.9.7a43.4

3 Procedimientos

Configurando tu propia Autoridad Certificadora (CA Certificate Authority) y generacion de certificados y par de llaves para el Servidor OpenVPN y un cliente VPN.
El primer paso al construir una VPN con OpenVPN 2.0 es establecer una PKI (Infraestructura de LLave Publica Public Key Infrastructure), esta PKI consiste de:

Un certificado aparte (tambien conocido como llave publica) y una llave privada para el servidor y cada cliente.

Un Certificado Mastro para la Autoridad Certificadora (CA) y su llave la cual es usada para firmar cada certificado de el servidor y el cliente. Generar la llave y el certificado Maestro para la Autoridad Certificadora (CA).

En esta seccion se generaran los certificados/llaves para la CA, el server y el cliente. Para la administracion de la PKI usaremos los scripts que vienen con OpenVPN (easyrsa) pero en este caso usaremos la nueva version que tiene muchas mejoras, es esta easyrsa 2.0.

Estos scripts de la version 2.0 de easyrsa estan en: /usr/doc/openvpn2.0.6/easy

rsa/2.0/

Se recomienda copiar el contenido de dicho directorio por ejemplo a /etc/openvpn/easyrsa V2.0.

Entonces haremos:
# cd /etc/openvpn
# mkdir easyrsaV2.0
# cp r /usr/doc/openvpn2.0.6/easyrsa/2.0/* /etc/openvpn/easyrsa V2.0
# cd /etc/openvpn/easyrsaV2.0
Ahora editaremos el archivo vars lo primero que se hara es definir la ruta para la variable KEY_DIR que por default estara asi: /etc/openvpn/easyrsaV2.0/keys, pero dicho directorio no existe por lo que primero lo crearemos:

# mkdir p /etc/openvpn/easyrsaV2.0/keys
Es en este directorio donde se almacenaran las llaves privadas, los archivos de requerimiento de certificado (.csr) y los certificados (.crt) y otros archvos e como el serial y el index.txt.

Ahora configuraremos los parametros KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG y KEY_MAIL, no hay que dejar ninguno de estos parametros vacios, los valores de estas variables seran pasadas de manera determinada a los certificados que crearemos, por ejemplo:

export KEY_COUNTRY="DR"
export KEY_PROVINCE="Santo Domingo"
export KEY_CITY="Distrito Nacional"
export KEY_ORG="Fundacion Codigo Libre"
export KEY_EMAIL="cristhian@codigolibre.org"
Lo siguiente es inicializar la PKI, asi:

# source ./vars

NOTE: If you run ./cleanall, I will be doing a rm rf on

/etc/openvpn/easyrsaV2.0/keys

Si se editaron los parametros correctamente veras algo como lo que salio arriba.
Ahora configuraremos un entorno nuevo.
# ./cleanall

Conforme vayas creando certificados, keys, y requerimientos para firma de certificados, tendras que entender que solo los archivos.key deben de mantenerse confidenciales. Los archivos .crt y .csr pueden ser enviados sobre un canal inseguro como un email en texto plano.

Generando Parametros Diffie Hellman.
Los parametros Diffie Hellman deben de ser generados para el Servidor OpenVPN:

# ./builddh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.............................................................................+..
#

Construiremos el certificado/key para la CA: Veremos algo asi:
# ./pkitool initca
Using CA Common Name: Tuxjm CA
Generating a 1024 bit RSA private key
............................++++++
........................++++++
writing new private key to 'ca.key'

Generacion de certificado y llaves para el servidor.

Lo siguiente es generar el certiicado y la llave privada par el servidor:

# ./pkitool server servidor
Generating a 1024 bit RSA private key
...........++++++
...................................................................++
++++
writing new private key to 'servidor.key'

Using configuration from /etc/openvpn/easyrsaV2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'MX'
stateOrProvinceName :PRINTABLE:'Baja California'
localityName :PRINTABLE:'Tijuana'
organizationName :PRINTABLE:'Tuxjm'
commonName :PRINTABLE:'servidor'
emailAddress :IA5STRING:'jmedinaaa@uxjm.net'
Certificate is to be certified until Apr 30 03:50:13 2016 GMT (3650
days)
Write out database with 1 new entries
Data Base Updated
#
Como pudimos ver lo todos los valores fueron tomados de el archivo vars y le agrego el valor de commonName el valor de el argumento que pusimos: ./pkitool server servidor, en este caso le puso servidor.

Generacion de certificado y llave privada para un cliente.
Esto es muy similar a los pasos previos
# ./pkitool cliente1
Generating a 1024 bit RSA private key
.........................................++++++
............................++++++
writing new private key to 'cliente1.key'
Using configuration from /etc/openvpn/easyrsaV2.0/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'MX'
stateOrProvinceName :PRINTABLE:'Baja California'
localityName :PRINTABLE:'Tijuana'
organizationName :PRINTABLE:'Tuxjm'
commonName :PRINTABLE:'cliente1'
emailAddress :IA5STRING:'jmedinaaa@tuxjm.net'
Certificate is to be certified until Apr 30 03:51:59 2016 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
#

Como pudimos ver lo todos los valores fueron tomados de el archivo vars y le agrego el valor de commonName el valor de el argumento que pusimos: ./pkitool server cliente1, en este caso le puso cliente1.
Ahora crearemos un segundo certiicado para un nuevo cliente:
# source ./vars
NOTE: If you run ./cleanall, I will be doing a rm rf on
/etc/openvpn/easyrsaV2.0/keys
# ./pkitool cliente2
Conforme vayas agregando clientes lo haras con esta misma herramienta (pkitool) no hay que olvidar que cada vez que se vaya a usar el script pkitool se tiene que ejecutar el comando source ./vars antes de crear, o revocar algun certificado.

Bien, ahora lo que sigue es copiar los archivos necesarios a su lugar respectivo, en el caso de: ca.crt, dh1024.pem, servidor.crt y servidor.key van en el servidor, asi que los podemos dejar en donde estan, los archivos ca.crt, cliente1.crt y cliente1.key se tendran que pasar a el cliente, esto tiene que ser por un medio seguro, se puede usar ssh para pasarlos a la maquina cliente.

Suponiendo que aun estamos en /etc/openvpn/easyrsaV2.0
# mkdir archivoscliente1
# cd keys
# cp v ca.crt cliente1.crt cliente1.key ../archivoscliente1/

Y luego:
# cd ..
# chmod R 755 archivoscliente1
$ scp r archivoscliente1 usuario@clientevpn:.

Creando archivos de configuracion para el servidor y el cliente.

Consiguendo los archivos de configuracion de ejemplo.

Es recomendable usar los archivos de configuracion de ejemplo de OpenVPN como un punto inicial para tu propia configuracion. estos pueden ser encontrados en: /usr/doc/openvpn2.0.6/sampleconfigfiles/ Los archivos que necesitaremos son: server.conf y client.conf

Editando el archivo de configuracion de el servidor.

El archivo de configuracion de ejemplo para el servidor es un punto de inicio ideal para la configuracion de un servidor OpenVPN. Creara una VPN usando una interfaz de red virtual TUN (para routed mode), escuchara conexiones de clientes en el puerto UDP 1194 (El numero de puerto oficial de OpenVPN), y distribuira direcciones virtuales de la subred 10.8.0.0/24 para los clientes que se conecten.

Copiamos el archivo de configuracion de el servidor:
# cd /etc/openvpn/
# cp /usr/doc/openvpn2.0.6/sampleconfigfiles/server.conf .
Editar el archivo server.conf y cambiar los valores de las lineas de los parametros: ca, cert, key y dh para que apunten a los archivos generados en la seccion anterior.

Por ejemplo quedaria asi:
ca /etc/openvpn/easyrsaV2.0/keys/ca.crt
cert /etc/openvpn/easyrsaV2.0/keys/servidor.crt
key /etc/openvpn/easyrsaV2.0/keys/servidor.key
dh /etc/openvpn/easyrsaV2.0/keys/dh1024.pem

Editando el archivo de configuracion de el cliente.

En el cliente VPN tambien se deben de seguir los procedimientos de instalacion que se dieron al inicio, una vez que este todo instalado es hora de copiar los archivos que se generaron en el servidor y se copiaron por un medio seguro (ssh/scp), dichos archivos son:

ca.crt cliente1.crt cliente1.key

Y hay que copiarlos de donde esten a /etc/openvpn/ y ponerles los permisos adecuados:

# chmod 644 ca.crt
# chmod 644 cliente1.crt
# chmod 600 cliente1.key

Ahora lo que sigue es usar un archivo de configuracion para el cliente de ejemplo:

# pwd
/etc/openvpn
# cp /usr/doc/openvpn2.0.6/sampleconfigfiles/client.conf .

Entonces en el cliente tendremos:

# pwd
/etc/openvpn
# ls
ca.crt client.conf cliente1.crt cliente1.key

Teniendo estos archivos, lo que sigue es editar el archivo client.conf y cambiar los parametros de ca, cert y key para que apunten a los nombres de archivos que acabamos de copiar, en este caso el valor de ca se deja como esta, y se cambia el valor de cert de client.crt a cliente1.crt y el valor de key de client.key a cliente1.key, hay que recordar que el archivo ca.crt es universal tanto para los clientes y los servidores.

Ahora hay que editar el parametro de remote para puntarlo a el nombre de host o direccion IP y puerto de el servidor OpenVPN.

Por ejemplo:
remote 200.222.111.101 1194
Bien una vez editado el parametro guardar el archivo.


Inicializacion de la VPN y pruebas iniciales de conectividad.

Iniciando el Servidor.
Primero hay que asegurarse que el servidor OpenVPN es accesible desde el Internet, esto quiere decir:
Abrir el puerto UDP 1194 en el firewall o configurar una regla de redireccionamiento de puerto
(port forwarding) de el puerto UDP 1194 desde el gateway/firewall a la maquina servidor OpenVPN.

Lo siguiente es asegurarse que la interfaz TUN no esta firewalleada.

Por simplicidad y para hacer pruebas iniciales, es recomendable iniciar el servidor OpenVPN desde la linea de comando, en lugar de iniciarlo como un servicio (daemon).

# cd /etc/openvpn/
# openvpn server.conf
Tue May 2 21:30:49 2006 OpenVPN 2.0.6 i686pclinux [SSL] [LZO]
built on Apr 29 2006
Tue May 2 21:30:49 2006 DiffieHellman initialized with 1024 bit key
Tue May 2 21:30:49 2006 TLSAuth MTU parms [ L:1542 D:138 EF:38 EB:0
ET:0 EL:0 ]
Tue May 2 21:30:49 2006 TUN/TAP device tun0 opened
Tue May 2 21:30:49 2006 /sbin/ip link set dev tun0 up mtu 1500
Tue May 2 21:30:49 2006 /sbin/ip addr add dev tun0 local 10.8.0.1
peer 10.8.0.2
Tue May 2 21:30:49 2006 /sbin/ip route add 10.8.0.0/24 via 10.8.0.2
Tue May 2 21:30:49 2006 Data Channel MTU parms [ L:1542 D:1450 EF:42
EB:135 ET:0 EL:0 AF:3/1 ]
Tue May 2 21:30:49 2006 UDPv4 link local (bound): [undef]:1194
Tue May 2 21:30:49 2006 UDPv4 link remote: [undef]
Tue May 2 21:30:49 2006 MULTI: multi_init called, r=256 v=256
Tue May 2 21:30:49 2006 IFCONFIG POOL: base=10.8.0.4 size=62
Tue May 2 21:30:49 2006 IFCONFIG POOL LIST
Tue May 2 21:30:49 2006 Initialization Sequence Completed
Si muestra algo similar a lo de arriba significa que en el servidor todo fue bien.
Iniciando el Cliente.
Como en la configuracion de el servidor, es mejor inicializar el cliente desde la linea de comandos.

# cd /etc/openvpn/
# openvpn client.conf
Wed May 3 10:36:32 2006 OpenVPN 2.0.6 i686pclinux [SSL] [LZO]
built on Apr 29 2006
Wed May 3 10:36:32 2006 IMPORTANT: OpenVPN's default port number is
now 1194, based on an official
port number assignment by IANA. OpenVPN
2.0beta16 and earlier used 5000
as the default port.
Wed May 3 10:36:32 2006 WARNING: No server certificate verification
method has been enabled.
See http://openvpn.net/howto.html#mitm for more info.

Wed May 3 10:36:32 2006 LZO compression initialized
Wed May 3 10:36:32 2006 Control Channel MTU parms [ L:1542 D:138
EF:38 EB:0 ET:0 EL:0 ]
Wed May 3 10:36:32 2006 Data Channel MTU parms [ L:1542 D:1450 EF:42
EB:135 ET:0 EL:0 AF:3/1 ]
Wed May 3 10:36:32 2006 Local Options hash (VER=V4): '41690919'
Wed May 3 10:36:32 2006 Expected Remote Options hash (VER=V4):
'530fdded'
Wed May 3 10:36:32 2006 UDPv4 link local: [undef]
Wed May 3 10:36:32 2006 UDPv4 link remote: 200.222.111.101:1194
Wed May 3 10:36:32 2006 TLS: Initial packet from 200.222.111.101:1194, sid=cb908c7a 37dab07c
Wed May 3 10:36:33 2006 VERIFY OK: depth=1,/C=MX/ST=Baja_California/L=Tijuana/O=Tuxjm/CN=Calcom_CA/emailAddress=jmedinaaa@tuxjm.net
Wed May 3 10:36:33 2006 VERIFY OK: depth=0,/C=MX/ST=Baja_California/L=Tijuana/O=Tuxjm/C
Wed May 3 10:36:35 2006 /sbin/ip route add 10.8.0.1/32 via 10.8.0.5
Wed May 3 10:36:35 2006 Initialization Sequence Completed

Si muestra algo similar a lo de arriba significa que en el cliente todo fue bien. Ahora, intenta hacer ping a traves de la VPN desde el cliente. Si estas usando openvpn en modo routed ( usando dev tun en el archivo de configuracion de el server), intenta:

# ping 10.8.0.1

Si el ping se hace con exito, Felicitaciones! ahora ya tienes una VPN funcional.


4 Problemas Encontrados y Soluciones

Si el ping fallo o la inicializacion de el cliente OpenVPN para completar, aqui hay un checklist de sintomas comunes y sus soluciones:

Obtienes el mensaje de error: TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity).

Este error indica que el cliente no fue capaz de establecer una conexion de red con el servidor.

Soluciones:

Asegurate de que el ciente esta usando la direccion correcta de el hostname/IP y el numero de puerto que le permitira alcanzar a el servidor OpenVPN

La conexion "stalls" al inicio cuando se usa la configuracion proto udp, el archivo de log de el servidor muestra la linea:

TLS: Initial packet from x.x.x.x:x, sid=xxxxxxxx xxxxxxxx

Sin embargo el log de el cliente no muestra una linea equivalente.

Solucion:
Tienes una conexion en un solo sentido de el cliente a el servidor. La direccion de el servidor hacia el cliente esta bloqueada por un firewall, usualmente en el lado e el cliente. El firewall puede ser (a) un software de firewall personal corriendo en el cliente, o (b) el gateway (router)_ que hace NAT para el cliente. Modifica el firewall para permitir conexiones de regreso a paquetes UDP de el servidor para alcanzar el cliente. Ver el FAQ para informacion adicional para la resolucion de problemas.