Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

martes, 29 de marzo de 2011

Sistema NAS casero (II)

Tal y como prometí, hoy hablaré del sistema operativo elegido, y de su configuración. De entre todos los sistemas operativos (por ejemplo, Unix, Linux, Windows, Solaris, BSD,...etc) elegiré un candidato de entre los dos más extendidos, primero por que el sistema no necesita grandes requerimientos, y segundo porque no todos los sistemas son fáciles de localizar de forma "normal". Está claro que usar Windows para una aplicación donde no se requiere una interactividad con el usuario, y donde precisamente lo que mas se necesitará es eficiencia en la E/S, no es lo más inteligente. Por otro lado tenemos al ya de antemano ganador: Linux.
Muchas veces he oido eso de: "¿qué Linux has instalado?". A ver, hay diferentes distribuciones, pero en realidad todos son sistemas operativos Linux. Y todos son prácticamente iguales. Sólo varían, básicamente y a grosso modo, en la ubicación de los archivos de configuración, y en el software que use para sincronizar e instalar los paquetes de software. Entrando un poco más en profundidad, ya si se pueden apreciar algunas diferencias, que son interesantes de tener en cuenta para sistemas mas críticos:

- Algunas distribuciones (por ejemplo Gentoo) permite una personalización al milímetro, compilando cada paquete de software que instales según unos criterios que fijas en el momento de la instalación.
- Según que distribución se elija, la "instalación básica" consumirá más o menos espacio (por ejemplo, Ubuntu es más tragón que Debian, y éste más que Gentoo). Por supuesto que, y siempre que sepamos lo que hacemos, podremos borrar cosas que no usemos.
- La cantidad de paquetes disponibles en cada distribución varia de una a otra. Aunque de todas formas cualquier distribución hoy día tiene las aplicaciones típica de un servidor (apache, webpy, bind, dhcp-server, etc). Y en cualquier caso, siempre te puedes compilar tu propio software a partir de las fuentes.

Teniendo en cuenta las exigencias y los requisitos de mi padre, cualquier distribución habría funcionado perfectamente. En nuestro caso, elijo un Ubuntu server LTS. De esta forma, conseguimos una instalación muy fácil, que no nos exige mucha configuración inicial, y una buena colección de paquetes, ya que no se qué cosas nuevas se le pueden 'antojar' a mi padre.

Sobre como instalar un sistema Linux basado en Ubuntu y con un sistema RAID software, os remito al post Instalación de Ubuntu Server + RAID de este mismo blog.

Configuración del servidor SSH.

Lo primero es instalar el servidor ssh, para ello se ejecutan las siguientes ordenes (todas como usuario root, o en su defecto, usando sudo para coger los permisos de root temporalmente):
apt-get update
apt-get install openssh-server

Tal y como se instala, con la configuración por defecto, ya nos podremos conectar con cualquier cliente ssh, simplemente indicando nuestro usuario y nuestra clave, de la siguiente manera:

usuario@mi_ip

Aun cuando la configuración por defecto es suficiente para la mayoría de los usuarios, hay algunas opciones interesantes, de cara a la seguridad, que vendría bien reseñar (aunque no las tomaré en consideración en el proyecto de mi padre):

Editando el archivo /etc/ssh/sshd_config

- PermitRootLogin. Esa opción fija la forma en la que permitiremos conectar a nuestro usuario root por ssh. Mi consejo es, siempre dejarlo como "no" (PermitRootLogin no). De esta forma solo podrá conectarse el usuario root en local, sin posibilidad de hacerlo remotamente. Imaginaos las consecuencias de tener un ssh escuchando en la IP publica, y permitiendo un 'logeo' del usuario root...o incluso que se produzca un acceso a otra maquina de la misma subred....etc. No es la mejor política de seguridad. Lo mejor es que solo los usuarios "normales" puedan conectarse por ssh. Si es necesario trabajar como usuario root, hacemos un cambio de usuario con el comando 'su', e introducimos la clave del usuario root  (así, obligamos a que el intruso tenga que 'logearse', primero con el usuario 'normal' y luego como root). Ni que decir tiene que se desactivarían las funciones sudo. Otra opción es permitir que el usuario root acceda, usando una clave pública. En este caso lo único que conseguimos es  facilitar la vida del que administra muchos equipos, ya que usaría la misma clave para acceder a cada uno de ellos.
- El puerto. Si dejamos el servidor ssh en el puerto por defecto, se lo pondremos en bandeja a cualquiera que quiera intentar acceder de forma ilícita. Al menos, hagamos que tenga que 'escanear' todos los puertos, para que a priori no sepa por donde atacar. Cambiar el puerto que trae por defecto hacia uno 'alto' es siempre una buena política de seguridad.
- MaxAuthTries. Con esta opción indicamos cuántos intentos fallidos de acceso permitimos. Una buena política es emplear 2 ó 3, pero no más.
- MaxStartUps. Con este parámetro indicamos cuántas conexiones no autenticadas permitimos de forma simultánea. Es decir, si por ejemplo "juan" esta accediendo, pero aun no ha terminado de escribir su contraseña, y simultáneamente lo esta intentando "pedro", deberemos seleccionar un valor mínimo de 2. De esta forma permitiremos dos conexiones no autenticadas (pero que están en proceso de ser autenticadas). Si dejamos un valor muy alto, estamos poniendo en bandeja de plata que los intrusos paralelicen el intento de ataque, probando múltiples claves simultáneamente. Un valor de 2 ó 3 es una buena política de seguridad.

Configuración del servidor SAMBA.

Comenzamos con la instalación del mismo (deberas ser el usuario root, o en su defecto ejecutar los siguientes comandos con los permisos de root, mediante sudo):

apt-get update
apt-get install samba

Editamos el archivo de configuracion de samba:

nano /etc/samba/smb.conf

Y añadimos las siguientes lineas al final:

[DATOS]
comment = Mis cositas varias
path = /home/datos
public = yes
writable = yes
browseable = yes

Si el directorio a compartir es otro, habría que cambiar /home/datos por el directorio deseado.

De esta forma conseguimos tener un recurso samba compartido, sin necesidad de utilizar un usuario y una contraseña para acceder, facilitando la conexión a todos aquellos usuarios que necesitan una solución doméstica, y no quieren pensar en usuarios y contraseñas. Ni que decir tiene que esta no es la opción recomendable en entornos empresariales.

Ahora, para acceder a nuestros datos, basta con que hagamos desde nuestro equipo windows domestico lo siguiente:

1) Abrir un explorador de archivos (por ejemplo "mi pc").
2) Escribir lo siguiente en la barra de direcciones: \\mi_ip\datos

De esta forma se listará todo su contenido como si fuera una carpeta cualquiera.

Dejo para otro post la configuración de samba en entornos empresariales.

domingo, 27 de febrero de 2011

Sistema NAS casero (I)

Hace tiempo que mi padre me viene pidiendo un sistema de almacenamiento con redundancia, y que se pueda acceder por red. La cuestión es que, hace ya algunos meses, perdió un montón de fotos, y todo por culpa de un disco duro en mal estado y una mala política de copias de seguridad (tan mala como que no existía).

Era evidente que me aprovecharía de la experiencia acumulada en mi actual trabajo, donde tenemos un sistema de almacenamiento de alta redundancia, alta disponibilidad y alta capacidad (100 TeraBytes), diseñado por nosotros mismos (quizás algún día me anime a dar algunas pinceladas de como se montó, isn entrar en detalles técnicos comprometidos). El sistema contaría con los siguientes elementos:

- 2 discos duros de 2 TeraBytes cada uno, marca Samsung de 7200 RPM (de los domésticos, el que mejor rendimiento y durabilidad nos ha dado).
- Placa base mini-itx Asus con microprocesador Intel Atom fanless (disipación del calor pasiva). El consumo global del sistema (micro+placa base) ronda los 20 watios max. por lo que es posible que el consumo medio este entre los 10-15 watios.
- Caja mini-itx formato "cubo" con dos bahías 3'5" para sendos discos duros.
- 2 GB de RAM DDR2 a 800 Mhz (habría bastado con 1 GB de RAM, pero en este caso era un requisito de mi padre que el sistema estuviera "holgado" en todos los sentidos, además, tampoco descarto que en un futuro se instale el servidor de streaming, así se tendría un sistema multimedia para toda la casa).

Mesa de estudio de mi padre

Con todo esto, se tiene un sistema que consume muy poca energía, que no hace ruido (0db reales) y que ofrece un rendimiento muy aceptable para lo que debe ofrecer un NAS. Además, el hecho de contar con un microprocesador x86 nos permite introducir todo el software que imaginemos (servidores de streaming para ver vídeos desde tu navegador, alojándolos en el NAS, sistemas de descarga P2P, etc).

El montaje se realizó intentando optimizar el poco espacio que ofrece la caja (requisito imprescindible, ya que mi padre disponía de poco espacio para la caja):

- Paso 1: Etiquetando. Siempre etiqueto cada disco duro con los últimos tres dígitos de su número de serie, en la parte trasera del mismo. De este modo, si alguno se rompe, los puedo identificar inmediatamente sin tener que sacarlos uno por uno. Uso sólo los tres últimos dígitos, porque las probabilidades de que coincida en los dos discos duros son tan reducidas (y en cualquier caso, comprobable) que no me compensa escribir todo el número de serie al completo. Y esto, en el sistema que tengo montado en mi empresa, en el caso de mi padre habría bastado con un solo dígito, pero ya es costumbre emplear tres.
Detalle del etiquetado del disco duro
- Paso 2: Colocación de la placa madre. Siempre se colocarán los módulos de RAM con la placa madre aun sin introducir en la caja. De otro modo, al presionar para encajar el módulo de RAM, combaremos la placa madre. Seguidamente, se coloca la cubierta trasera con el "layout" de los conectores, y atornillamos la placa madre a la caja.
 - Paso 3: Conexiones caja-placa madre. Seguidamente se realizan las conexiones necesarias entre la caja, y la placa madre: el panel frontal (botón de encendido, LEDs indicadores, etc), los conectores externos de audio (entrada y salida de sonido analógico), y los conectores USB del frontal.
- Paso 4: Colocando la fuente de alimentación. En este caso no hay ninguna tarea especial que realizar, salvo tener cuidado de que no se nos caiga la fuente encima de la placa madre.

- Paso 5: Colocando el disco duro. Doblando adecuadamente el mazo de cables principal (el del conector ATX), se consigue que el disco duro acople de forma adecuada, ya que esta caja y placa madre han tenido la mala fortuna de hacer coincidir la posición del disco duro con la posición del conector ATX de la placa madre. En cualquier caso, con solo doblar debidamente el mazo de cables, se consigue que convivan ambos elementos, aunque no favorece precisamente que haya un buen canal de ventilación.
- Paso 6: Finalmente, una vez comprobado que el equipo arranca y que todas las conexiones están bien realizadas, cerramos el equipo.

En la siguiente entrada veremos que sistema operativo hemos elegido, y que configuración realizamos.