Montando mini-servidor web casero con Linux Capítulo 1: Razones, elementos necesarios y preparación.

Mayo 12, 2008 por Signum · 5 Comentarios
Publicado en: Linux 

Desde hace mucho que vengo con la idea de montar un mini servidor web casero con la finalidad de adentrarme un poco más en los aspectos de seguridad, configuración y mantenimiento de un servidor bajo Linux. Aunque es de esperarse que se establezcan diferencias entre un servidor web, un servidor de una red u dominio y un servidor de respaldos; no puedo aprender todos los procesos con 1 solo pero para eso tengo varios computadores y poder hacer pruebas con cada uno.

Siempre me han llamado la atención los servidores web y nunca me había realmente mentalizado en crear uno para uso personal, siempre eran ideas esporádicas pero nunca como ahora que ya más o menos voy teniendo experiencia en el campo de linux.

Anteriormente quería comenzar con un servidor de dominio bajo Windows 2003 server y Active Directory pero naaaa, ya estoy algo harto de Wintendo y es hora de estar un rato con Linux.

Razones:

Comienzo por mencionar las razones para hacer un servidor web y de ficheros; la idea principal es que yo pueda hacer pruebas web desde otro pc que no sea el de uso cotidiano y que siempre esté disponible. A su vez, quisiera que cada vez que quiera acceder desde otro lugar a mis datos, instaladores, programas etc… pueda hacerlo. La parte de aprendizaje también es muy importante, conocer como se monta y administra de manera muy básica un servidor es una experiencia bastante divertida y sé que me ayudará a entender muchas cosas.

Elementos necesarios:

Básicamente lo que se necesita es un computador extra, mucha paciencia y dedicación. Yo actualmente dispongo de:

  • Computador INTEL Pentium III 933Mhz, 2 Discos duros ATA de 40Gb cada uno, 1 unidad de CD, monitor y teclado.
  • 1 Hub o concentrador de red.
  • Cable de red y puntas para poder conectar el servidor al Hub.
  • 1 UPS para enviar señal de apagado al servidor si hay un corte de electricidad.
  • Muchas ganas de leer y aprender.
  • Consideraciones:

    Antes de hacer todo el proceso debemos pensar un poco como vamos a hacer las cosas; tener una idea de como será el proyecto, los programas a instalar, las configuraciones de seguridad y todo ese tipo de cosas. Yo no he empezado todo esto sin antes haber leido y experimentado un poco sobre cada cosa; principalmente porque no quiero llegar perdido a hacer un servidor. Lo que yo quiero hacer es lo siguiente:

    - Montar un servidor con las siguientes opciones y programas:

  • Servidor Web bajo Apache 2.2.x y configuración avanzada (probablemente requerirá compilar paquetes).
  • PHP 5 y configuración avanzada (probablemente requerirá compilar paquetes).
  • Servidor FTP mediante pureftp para poder subir o descargar archivos al servidor.
  • Servidor DB (Data Base o Base de datos) mediante MySQL y configuración avanzada (probablemente requerirá compilar paquetes).
  • Montar SSH para poder administrar el servidor de manera remota.
  • Establecer puntos de montajes muy específicos para seguridad / rendimiento.
  • Establecer políticas de seguridad mediante SeLinux.
  • Firewall mediante iptables y shorewall.
  • Configuración de un UPS conectado a una red local.
  • Configuración de un DNS no-ip para no tener que aprenderme la IP de la máquina (el cual será dinámica) cada vez que quiera acceder al servidor
  • Preparación:

    Lo primero de todo es elegir una distribución; para mi caso particular elegí Debian Etch 4. ¿Por qué Debian?, porque siempre ha sido mi distribución favorita, es muy buena distribución para servidores por su estabilidad y seguridad; los desarrolladores de Debian son bastante dedicados cuando se trata de seguridad y estabilidad. Probablemente no sea la mejor distribución para servidores, pero es una de las mejores.

    Antes de comenzar a montar o instalar todo debemos tomar en cuenta cada punto y tratar en la medida de lo posible hacerlo lo más parecido a un servidor web profesional; probablemente las cosas que yo mencione sean muy básicas e incluyan muchas otras opciones que en un servidor web profesional no incluyan, pero la idea principal es poseer un servidor web muy funcional.

    Comenzaremos por lo más básico, como en todo sistema son las particiones :). Debemos tomar en consideración cómo dividiremos las particiones y qué sistema de archivos usaremos en cada una así como las opciones de montaje, todo esto en pro del rendimiento / seguridad del sistema. Recordemos algunas de las opciones de montaje y sus funciones:

  • nosuid: Esta opción evita la asignación de los bits suid y sgid, es decir, evita que un usuario pueda definir permisos de root en archivos que no lo deberían tener, por ejemplo, piensen en la posibilidad de que un usuario normal pueda ejecutar un rootkit con permisos de root.
  • noexec: Con esta opción, se le dice al sistema de archivos que ignore ejecutables, es decir que en cualquier partición montada con este parámetro, será imposible ejecutar binarios.
  • nodev: Ignora dispositivos y caracteres especiales. En los *nix, estos tipo de nodos se encuentran normalmente en /dev, sin embargo, el crear un archivo de este tipo no es difícil, en base a eso, se podría crear un archivo tipo device o special character que le facilite al sistema usar un dispositivo remoto. Si un hacker creara un archivo de este tipo para poder usar su teclado en tu sistema desde un sistema remoto, no sería muy apreciable verdad ;)
  • ro: Esta es una de las opciones más conocidas, y se explica por si misma, ro proviene de Read Only.
  • Lista sacada de: Utilizando las opciones de mount como método de seguridad

    Yo he decidido dividir todo de la siguiente forma:

    /boot

    A la partición de /boot le asigné 90Mb bajo un sistema de archivos EXT2 ya que no necesita Journaling. A su vez en el punto de montaje la coloqué como ro (Read Only - Solo lectura-). Ésto es bueno hacerlo únicamente luego de que ya hayamos configurado e instalado el kernel a nuestro gusto.

    /home

    Al /home le asigné unos 15Gb bajo el sistema de archivos ReiserFS gracias a su muy buena velocidad con ficheros de poco tamaño; en ésta partición montaré todos los datos personales y las webs. La partición la monté con nosuid,noexec,nodev.

    /var

    a /var le asigné 5Gb bajo un sistema de archivos JSF ya que es bastante bueno con el manejo de bases de datos. A parte la monté con las siguientes opciones nosuid,noexec,nodev.

    /tmp

    Le asigné 500Mb bajo sistema de archivos EXT3 y con las siguientes opciones de montaje nodev,nosuid,noexec,data=writeback (esta configuración podría acarrear problemas al compilar paquetes).

    /dev/hdb1

    Con su permiso me tomaré la molestia de montar a /dev/sdb bajo un sistema de ficheros cifrado y exclusivamente para uso personal, la idea es montarlo única y exclusivamente cuando requiera acceso a él desde otro computador y poder acceder a los datos de ahí. Para los curiosos, no, no meteré porno, solo quiero probar como funciona un sistema de ficheros cifrado :).

    Siguiente paso:

    Lo siguiente que hay que hacer es preparar el sistema para compilar instalando los paquetes:

    apt-get install build-essential make kernel-package libncurses5-dev gcc g++ libglade2-dev

    Ahora lo que haremos luego de tener los paquetes necesarios será compilar un kernel optimizado, yo elegí el 2.6.18. En un servidor no necesitas realmente tener un kernel actuaizado a la última versión (en este caso la 2.6.25), a menos que necesites un X soporte que solo te brinde dicha versión. Siempre y cuando el kernel tenga los parches adecuados y el soporte que necesitas estará bien.

    Quité el soporte para tarjetas de vídeo y aceleradores gráficos porque no los necesito, no instalaré una interfáz; tampoco hay soporte para ALSA ni OSS, no IPv6, no soporte para hardware multimedia ni para mouse, tampoco para unidades SCSI ni SATA mucho menos SAS, no soporte para puerto paralelo y muchas otras cosas más que no usaré.

    Agregué soporte para SeLinux, para Netfilter, configuré el kernel para trabajar con procesador Pentium III y agregué algunas cosas extra que necesito. Salió un kernel bastante pequeño ciertamente y con solo el soporte necesario.

    Bueno, a penas llevo la primera parte del servidor, a medida que vaya sacando más capítulos iré explicando como voy haciendo las demás configuraciones, espero poder hacerlo bien ;).

    Salu2