sábado, 15 de marzo de 2014

Instalar y configurar servidor casero con debian jessie.

Toda esta información que voy a reflejar aquí ha sido obtenida de la incesante búsqueda en la web, así que no hay prácticamente nada de mi cosecha, todo lo más algún "trick" o "workarround" que se me ocurrió aquel día que me golpeé la cabeza accidentalmente. Se puede decir que ha sido una labor de recopilación. Si no pongo todas las referencias o enlaces a la información original es porque ya no he sido capaz de identificarla en el interminable historial del navegador y también, por qué no decirlo, debido a que las fuentes son una copia de otra copia de otra n-ésima copia. La mía será la n-ésima + 1 y la pongo aquí para que no se me olvide lo que hice.

El escenario es el siguiente:

* Netbook de 9" Intel Atom a 1.6 Ghz 1Gb RAM con Debian Jessie CLIENTE
* Asus P4S800D-X Pentium IV a 3 Ghz 1 Gb RAM con Debian Jessie (JWM, Terminator y Virtualbox) - SERVIDOR
* Samsung Galaxy mini GT-S5570 Qualcomm MSM7227 ARMv6 600 MHz 286 Mb RAM  con Android Gingerbread rooteado, busybox, terminal emulator, supersu etc... - ROUTER
La conectividad entre los tres equipos y la red de redes ya se resolvió a grandes rasgos en el post anterior. Vamos al lío.

Primero instalo el demonio sshd en el servidor.
#aptitude install openssh-server

y tambien un cliente porque luego me hará falta
#aptitude install openssh-client
el cliente también lo instalo en la máquina cliente como dijo Perogrullo.
Voy a utilizar ifplugd para configurar la interfaz usb0
#aptitude install ifplugd
y lo configuro en /etc/default/ifplugd.conf
 1 # This file may be changed either manually or by running dpkg-reconfigure.
2 #
3 # N.B.: dpkg-reconfigure deletes everything from this file except for
4 # the assignments to variables INTERFACES, HOTPLUG_INTERFACES, ARGS and
5 # SUSPEND_ACTION.  When run it uses the current values of those variables
6 # as their default values, thus preserving the administrator's changes.
7 #
8 # This file is sourced by both the init script /etc/init.d/ifplugd and
9 # the udev script /lib/udev/ifplugd.agent to give default values.
10 # The init script starts ifplugd for all interfaces listed in
11 # INTERFACES, and the udev script starts ifplugd for all interfaces
12 # listed in HOTPLUG_INTERFACES. The special value all starts one
13 # ifplugd for all interfaces being present.
14 INTERFACES="usb0"
15 HOTPLUG_INTERFACES="usb0"
16 ARGS="-q -f -u0 -d10 -w -I"
17 SUSPEND_ACTION="stop"

y /etc/network/interfaces
 1 # This file describes the network interfaces available on your system
2 # and how to activate them. For more information, see interfaces(5).
3
4 # The loopback network interface
5 auto lo
6 iface lo inet loopback
7
8 auto usb0
9 iface usb0 inet static
10 address 192.168.42.2
11 netmask 255.255.255.0
12 gateway 192.168.42.129
Este demonio me permite encender y apagar el servidor sin necesidad de conectarle ni monitor ni teclado porque se comunica con los beep del sistema. Así puedo desconectar el router y llevármelo, que es mi teléfono de uso diario. Además esto me aporta algo de seguridad añadida, se podría decir que el teléfono es la "llave" del servidor.

Ya puedo desconectar teclado y monitor. A partir de ahora trabajo con ssh.
$ ssh 192.168.42.2
Genero un par de claves en mi máquina cliente
$ ssh-keygen
y copio el contenido de $HOME/.ssh/id_rsa.pub a ~/.ssh/authorized_keys del servidor. A partir de ahora ya no me pedirá contraseña para acceder mediante ssh.

Voy a utilizar máquinas virtuales para los distintos servicios, serán un debian wheezy con sólo lo indispensable. Para instalarlas utilizaré una mini iso con la que crearé una plantilla (plantilla-deb) con las utilidades básicas del sistema, openssh-server, htop y virtualbox-guest-additions. Las distintas máquinas serán clones con sus servicios específicos (hay que acordarse de seleccionar eñ reseteo de la dirección MAC).



Para conectarme al entorno gráfico utilizo vinagre en el cliente y xrdp en el lado del servidor.

Las guest-additions me sirven para poder montar los distintos servicios (sólo lectura)
# mount -t vboxsf www /var/www
que añadiré al archivo /etc/rc.local

El adaptador de red será el adaptador "puente" usb0 para poder darle una ip dentro de la red. Todas las máquinas pertenecerán al mismo dominio.

/etc/hosts (cliente)
 1 127.0.0.1 localhost
2 127.0.1.1 debian
3
4 #192.168.42.2 server.jorge.com server
5 192.168.42.86 apache-deb.jorge.com apache-deb
6 192.168.42.120 vsftp-deb.jorge.com vsftp-deb
7 192.168.42.51 openldap-deb.jorge.com openldap-deb
8 192.168.42.2 server.jorge.com server
9
10
11 # The following lines are desirable for IPv6 capable hosts
12 ::1     localhost ip6-localhost ip6-loopback
13 ff02::1 ip6-allnodes
14 ff02::2 ip6-allrouters
/etc/hosts (servidores)
 1 127.0.0.1 localhost
2 127.0.1.1 server.jorge.com  server
3
4 # The following lines are desirable for IPv6 capable hosts
5 ::1 localhost ip6-localhost ip6-loopback
6 ff02::1 ip6-allnodes
7 ff02::2 ip6-allrouters
y todas dispondrán de mi clave pública para dejarme acceder sin passwd.

Ahora sólo falta iniciar las máquinas de forma automática.

/etc/init.d/VM
 1 #! /bin/sh
2 # /etc/init.d/VM
3 #
4 VMUSER=jorge
5 VM1NAME= "openldap-deb"
6 VM2NAME="apache-deb"
7 VM3NAME="vsftp-deb"
8
9 case "$1" in
10   start)
11 echo "Starting VirtualBox VM...
12 sudo -H -b -u $VMUSER vboxmanage startvm "$VM1NAME" --type headless
13 sudo -H -b -u $VMUSER vboxmanage startvm "$VM2NAME" --type headless
14 sudo -H -b -u $VMUSER vboxmanage startvm "$VM3NAME" --type headless
15 ;;
16 stop)
17 echo "Saving state of Virtualbox VM...
18 sudo -H -b -u $VMUSER vboxmanage controlvm "$VM1NAME" savestate
19 sudo -H -b -u $VMUSER vboxmanage controlvm "$VM2NAME" savestate
20 sudo -H -b -u $VMUSER vboxmanage controlvm "$VM3NAME" savestate
21 ;;
22 *)
23 echo "Usage: /etc/init.d/VM {start|stop}"
24 exit 1
25 ;;
# chmod +x /etc/init.d/VM
# update-rc.d VM defaults 99 01
(Aquí tengo un problema que solucionar porque hay que parar los servicios y volver a iniciarlos para que funcionen, algo de los runlevel, creo)

Y creo que para empezar eso es todo, ha llevado bastante trabajo, pero ahora queda lo gordo porque no tengo ni idea de ssh y claves públicas y privadas, ni de apache, ni de vsftp y ni mucho menos de openldap.

A lo que si le estoy sacando partido es a su utilidad como servidor multimedia, ya que me ofrece tdt via wifi. Muy cómodo para ver el telediario sentado en el servicio.
 1 #!/bin/bash
2 ssh server killall mplayer
3 killall mplayer
4 ssh server rm stream.dump
5 ssh server mplayer --dumpstream dvb://"laSexta" & > /dev/null
6 sleep 20 && ssh server cat stream.dump | mplayer --cache=5024 --cache-min=70 -