logo debian

Guía para montar un servidor en Debian 9 Stretch

cc
Esta guía para montar un servidor en Debian 9 Stretch junto a las imágenes con marca de agua de DPLinux.net o Hardlimit.com están bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported.

This page is available in English.

Alejandro Cobo López (cc) 2015-2017

Rev. 1.5 (20170901)

correo dplinux

Puedes preguntar tus dudas y dejar tus comentarios en nuestro foro.

NOTA 1: Cada sección está dividida en dos categorías: procedimiento/resumen y explicación. Si lo único que necesitas es un recordatorio y/o copiar&pegar las lineas en la consola para realizar una configuración rápidamente, puedes seguir los pasos del procedimiento ordenadamente. Si por el contrario no estás familiarizado con el proceso, necesitas conocer el significado de algún paso o parámetro o simplemente te interesa saber exactamente qué estas haciendo, puedes leerte la explicación.

NOTA 2: Cada sección es independiente del resto. Si es necesario realizar alguna operación extra, se remitirá a la sección donde se explica la misma.

NOTA 3: Los servicios sólo hay que instalarlos una vez. Si en varios aparatados se pide la instalación de algún servicio que ya ha sido instalado previamente, te puedes saltar ese paso.

Índice de contenido

1. Instalación de Debian

1.1. ¿32 o 64 bits?

Resumen

Explicación

1.2. Edición de Debian

Resumen

Explicación

1.3. Proceso de instalación

Resumen

Explicación

2. Conceptos elementales

2.1. Copiar y pegar en la consola

2.2. Operaciones con el editor de texto Nano

2.3. Entrar como root y salir de root

2.4. Archivos de configuración y secciones

2.5. Redirección de puertos en el router

2.6. Propietarios y permisos en archivos y carpetas

3. Configuraciones post-instalación

Resumen

Explicación

3.1. Configuración de la red

Procedimiento

Explicación

3.1. Actualización del sistema

Procedimiento

Explicación

3.2. Instalación de herramientas esenciales

4. Servicios web

4.1. Servidor web Apache

Procedimiento

Explicación

4.1.1. Limitando el número de procesos Apache

Procedimiento

Explicación

4.1.2. Servidores virtuales

Procedimiento

Explicación

4.1.3. Habilitar el archivo .htaccess

Procedimiento

Explicación

4.1.3.1. Bloquear el acceso a una página

4.1.3.2. Mover página de dirección

4.1.3.3. Habilitar caché del navegador

4.1.4. Protección anti ataques DoS

Procedimiento

Explicación

4.1.5. Página segura HTTPS con SSL-RSA

Procedimiento

Explicación

4.1.6. Proteger web con contraseña

Procedimiento

Explicación

4.1.7. Estadísticas de la web con AWStats

Procedimiento

Explicación

4.2. Sistema de gestión de base de datos MariaDB (MySQL)

Procedimiento

Explicación

4.2.1. Gestión desde la linea de comandos

Procedimiento

Explicación

4.2.2. Gestión con phpMyAdmin

Procedimiento

Explicación

4.3. PHP

Procedimiento

Explicación

4.3.1. Aumentar el límite de subida de archivos

Procedimiento

Explicación

5. Instalación de CMS

5.1. WordPress

Procedimiento

Explicación

5.2. OwnCloud

Procedimiento

Explicación

5.3. Moodle

Procedimiento

Explicación

6. Intercambio de archivos P2P

6.1. BitTorrent (Tansmission)

Procedimiento

Explicación

6.2. eDonkey2000 (aMule)

Procedimiento

Explicación

7. Otros servicios

7.1. Servidor de transferencia de archivos FTP

Procedimiento

Explicación

7.2. Intercambiador de correo

7.2.1. Enviar correo a través de una cuenta de Gmail

Procedimiento

Explicación

7.2.2. Enviar correo sin recurrir a Gmail

Procedimiento

Explicación

7.2.3. Envíar archivos adjuntos por correo desde la consola

Procedimiento

Explicación

7.3. Servicio de compartición de archivos Samba (SMB)

Procedimiento

Explicación

7.3.1. Carpetas públicas (sin contraseña)

7.3.2. Carpeta privada (con contraseña)

8. Gestión y monitorización del servidor

8.1. Consola remota con SSH

8.1.1. Ejecución remota de programas gráficos

Procedimiento

Explicación

8.1.2. Gestión de archivos y carpetas con FISH

8.3. Monitorización con histórico (Cacti)

Procedimiento

Explicación

8.4. Monitorización en tiempo real (Linux-Dash)

Procedimiento

Explicación

8.5. Top

8.6. Apachetop

Procedimiento

Explicación

8.7. Monitorización de la red con IPTraf

8.8. Bloquear acceso a ciertas direcciones IPs

Procedimiento

Explicación

8.9. Bloquear IPs con comportamientos extraños con fail2ban

Procedimiento

Explicación

9. Referencias

 


1. Instalación de Debian

El primer paso antes de montar el servidor pasa por instalar Debian. Para ello hay de descargar la imagen de disco, pero hay varias opciones donde elegir.

1.1. ¿32 o 64 bits?

Resumen

Por rendimiento, instala la versión de 32 bits aunque tengas más de 4 Gb de RAM.

Por soporte, instala la versión de 64 bits.

Explicación

Esta es la pregunta del millón que todo el mundo se ha hecho en alguna ocasión. La respuesta rápida y típica es: si tienes menos de 4 Gb de RAM, usa 32 bits y si tiene 4 Gb o más, instala la de 64 bits. Se trata de una respuesta que técnicamente no es incorrecta pero sí demasiado simple. Puede haber entornos en los que con menos de 4 Gb de RAM, un sistema operativo de 64 bits ofrezca un mejor resultado. Por ejemplo, está más que demostrado que la codificación de vídeo tiene un aumento de rendimiento significativo en sistemas de 64 bits. Y sí, puede haber entornos con 4 o más Gb de RAM donde los 32 bits ofrezca un mejor resultado. Y resulta que este último caso es el nuestro.

Alguno se preguntará qué sentido tiene instalar un sistema operativo de 32 bits en una máquina con más de 4 Gb de RAM cuando con direcciones de 32 bits no se puede acceder a más de esa cantidad de memoria. Desde hace bastante tiempo, todos los procesadores x86 incluyen una característica llamada PAE (Physical Address Extension o extensión de memoria física). Con esta técnica, un procesador trabajando en 32 bits puede direccionar hasta 64 Gb de RAM. Evidentemente, esto tiene truco y el truco está en que no se pueden manejar hilos de ejecución de más de 4 Gb, por lo que si un proceso quiere acceder a más de esa cantidad, tendrá problemas.

Una vez solucionado el problema de la cantidad de memoria, ¿por qué en nuestro servidor, 32 bits nos podrían ofrecer mejores resultados? Tengamos en cuenta que el programa más exigente que va a estar funcionando es el servidor web Apache.

apache phoronix
32 vs 64 bits en un Core 2 Duo. Fuente: Phoronix.

Tal y como vemos en el banco de pruebas realizado por Phoronix, Apache compilado para 32 bits obtiene un resultado ligeramente superior. En otros artículos se puede comprobar que esta afirmación se mantiene.

La razón por la que existe esta pequeña diferencia de rendimiento es que las direcciones de memoria de 64 bits ocupan el doble que las de 32, por lo que si el programa no hace un uso intensivo del repertorio de instrucciones x86_64 (AMD64 o Intel 64), esa cantidad extra de datos a mover resiente ligeramente el rendimiento.

Esta diferencia se aprecia también en procesadores relativamente recientes aunque las distancias se acortan.

apache phoronix 2
32 vs 64 bits en un Core i7 720Q. Fuente: Phoronix.

Además hay que tener en cuenta que los 32 bits ofrecen una mayor compatibilidad con bibliotecas ‘legacy’. Por último cabe destacar que los procesos lanzados por Apache, apenas llegan a varias decenas de megabytes, por lo que alcanzar el límite de 4 Gb se antoja muy complicado.

Evidentemente si tu máquina tiene más de 64 Gb de RAM, no tienes más remedio que instalar un sistema operativo de 64 bits.

Ahora bien, en el uso en el escritorio, las ediciones de 32 bits apenas se usan en la actualidad. Eso quiere decir que la cantidad de usuarios con sistemas de 64 bits es muy superior al de usuarios con sistemas de 32 bits. Esto redunda en que existe un mejor soporte en sistemas de 64 bits ya que hay más ojos a la caza de fallos. Algunas distros han decidido abandonar los 32 bits y la realidad es que las compilaciones para procesadores de 32 bits son una especie ne peligro de extinción.

Por eso, instalar Debian compilado para 32 bits no son todo ventajas y debes sopesar bien qué opción te conviene más teniendo en cuenta que la tendencia es a abandonar la antigua arquitectura.

1.2. Edición de Debian

Resumen

Instala la edición ‘Netinst’.

Explicación

Debian se distribuye en numerosas ediciones, ya no solo en formatos (CD, DVD, BD) sino en el contenido de cada versión. En nuestro caso queremos instalar el sistema más básico posible, sin entorno de escritorio y sin apenas servicios de serie, por lo que usaremos el edición ‘Netinst’. Se trata de una imagen que ocupa apenas 300Mb y que descarga de los repositorios oficiales los paquetes necesarios durante la instalación.

1.3. Proceso de instalación

Resumen

Sigue los pasos habituales de instalación. Cuando llegues a la selección de componentes a instalar, marca sólo «SSH server» y «Utilidades estándar de sistema». El resto de opciones las dejamos desmarcadas.

Explicación

Debian 9, al igual que cualquier otra distribución actual, resulta extremadamente fácil de instalar. No obstante, por tratarse de un servidor habrá que elegir un par de opciones. A día de hoy resulta cada vez más difícil encontrar máquinas con unidades ópticas y en el caso concreto de un servidor, por cuestiones de eficiencia energética ni siquiera es recomendable instalar una, por lo que el proceso para realizar la instalación se podría querer hacer desde una unidad de memoria USB.

Para arrancar la imagen de disco desde una unidad USB, desde Linux puedes usar esta orden como root (2.3. Entrar como root y salir de root):

cat debian.iso > /dev/sdX
sync

Donde X es el dispostivo USB al que se copiará la imagen. ¡Atención! Todo el contenido del dispositivo será eliminado. Asegúrate de que lo eliges correctamente. Para ver los dispositivos de almacenamiento conectados y sus rutas, escribe en consola esto como root:

fdisk -l | grep Disk

Una vez que tenemos la imagen en cualquier medio, lo arrancamos y elegimos la opción «Graphical Install».

Tras unos segundos nos aparece la selección del idioma. Elegimos «Spanish – Español»

Cuando hacemos clic en «Continue», el idioma del instalador cambia y nos pregunta por el país. Elegimos el nuestro y le damos a continuar.

En la siguiente pantalla nos preguntará por la distribución del teclado. Una vez terminada la configuración local, comienzan las preguntas de carácter técnico. La primera es el nombre de la máquina. En principio este nombre es irrelevante y se puede cambiar con posterioridad aunque sería conveniente elegir uno distintivo.

nombre red instalacion
Nombre de la máquina

Ahora llega el momento de elegir la clave de root. Es fundamental que esta contraseña sea muy robusta porque nuestro servidor va a estar expuesto a Internet y las contraseñas débiles son vulnerables a los ataques de fuerza bruta.

Muchas veces, la creencia es que una contraseña compleja, con caracteres no alfabéticos y sin sentido es la mejor opción porque nadie podría averiguarla. La realidad es que en un ataque de fuerza bruta, la coherencia de la contraseña es irrelevante (siempre que no sea excesivamente simple) por lo que una clave con muchos caracteres hará nuestro sistema más seguro. Como con casi todas las experiencias en sistemas Unix-like, los chicos de xkdc ya han tratado el tema:

password_strength
Viñeta sobre la seguridad de las contraseñas. Fuente: xkcd

Para terminar con la configuración de las credenciales, introducimos nuestro nombre y una contraseña para nuestro usuario. Una vez más, una contraseña robusta resulta de vital importancia.

instalacion nombre
Nombre real del usuario
instalacion cuenta usuario
Nombre de usuario para la cuenta
instalacion clave usuario
Contraseña para la cuenta de usuario

Elegimos la zona horaria y llega el particionado del disco. Esta opción depende de cada caso, pero si vamos a montar un servidor lo habitual es usar todo el disco duro para dicho servidor, sin otros sistemas operativos instalados. Teniendo en cuenta esta premisa, el método de particionado que elegimos será «Guiado – utilizar todo el disco».

instalacion particionado guiado
Particionado del disco duro

Si tenemos varios discos duros instalados, deberemos elegir aquel donde queremos instalar Debian 9.

instalacion disco
Elección del disco duro físico

Para finalizar el particionado, debemos elegir el esquema de particiones. En nuestro caso vamos a separar la partición raíz de la /home, aunque la opción de separar /var y /tmp junto a /home no es una mala idea. Si se producen fallos lógicos en el sistema de archivos (por ejemplo en un apagón o porque el PC se quede colgado cuando había transacciones en curso), el sistema va a intentar reparar los errores automáticamente durante el arranque. Desafortunadamente, los sistemas de archivos ext no permiten su comprobación cuando están montados y para poder ejecutar la herramienta de comprobación (fsck), es necesario montar y mantener montada la partición donde se encuentra el programa. Eso quiere decir que el analizador del sistemas de archivos sólo va a comprobar las particiones que estén desmontadas y esas son todas menos la que tiene fsck. Si mantenemos /var y /tmp en la partición raíz, no se solucionarán posibles fallos lógicos. Téngase en cuenta en por defecto, las bases de datos de MySQL (MariaDB) y Redis almacenan su información en /var y un fallo en la partición puede provocar pérdidas de datos sin que lo sepamos.

instalacion particion home
Carpetas personales en una partición separada

Una vez introducidas todas las opciones, aparece un cuadro-resumen con los cambios que se realizarán en el disco. Si por cualquier razón, has particionado el disco de otra forma, es recomendable que revises los cambios previstos para no llevarte sorpresas desagradables.

Una vez confirmado, comienza la instalación del sistema base que son los componentes esenciales para que el sistema funcione. Sobre ese sistema base se instalarán los servicios que vamos a necesitar.

instalacion sistema base
Progreso de la instalación del sistema base

Después de unos minutos llega el turno de elegir nuestro país una vez más. De esta elección dependerá el mirror desde donde se descargarán los paquetes para instalar el resto del sistema y las actualizaciones futuras.

Cualquier mirror nos valdrá aunque cuanto más cerca esté geográficamente, más rápido irá.

Mirror de la Universidad Carlos III de Madrid

Si tu servidor está conectado directamente a Internet o lo haces a través de un router, la configuración de proxy la deberás dejar en blanco.

instalacion proxy
Configuración de proxy

Cuando termine de actualizar la base de datos de paquetes, automáticamente comenzará una segunda fase de instalación de componentes hasta que aparece un mensaje en el que se nos pide si queremos participar en las estadísticas de uso de paquetes. Aquí podemos elegir la opción que queramos.

instalacion estadisticas
Elección para participar en las estadísticas de uso de paquetes

Ahora llega el momento de seleccionar los componentes que queremos instalar. Como podemos ver en esta pantalla, tenemos la opción de elegir entre varios entornos de escritorio y varios servidores. En nuestro caso, tan solo vamos a dejar marcadas la opciones «SSH server» y «Utilidades estándar de sistema». El resto de opciones las dejamos desmarcadas.

Ahora comenzará la última fase de la instalación de componentes que tardará unos minutos dependiendo de la velocidad de nuestra conexión a Internet.

instalacion tercera fase
Tercera fase de la instalación

En la siguiente pantalla nos pregunta que queremos escribir en el sector de arranque para que apunte a Grub. La respuesta es sí.

instalacion grub
Diálogo para instalar cargador de arranque

También habrá que especificar en qué disco físico se graba el sector de arranque. Si sólo tienes un disco duro, elígelo. Si tienes varios discos duros dependerá de tus preferencias y del disco que use la BIOS para arrancar. Lo normal es elegir el disco donde se ha realizado la instalación.

instalacio disco grub
Elección de la unidad de disco en la que se instalará Grub

El proceso, que incluye configuraciones automáticas postinstalación, tardará unos segundos. Cuando termine, aparecerá un último mensaje en el que nos dicen que extraigamos el medio de instalación. Lo hacemos y le damos a continuar.

instalacion fin
Mensaje de fin de la instalación

El sistema se reiniciará y pasados unos segundos nos encontraremos con esta pantalla:

El sistema está instalado y listo para empezar a meterle mano.

2. Conceptos elementales

En esta sección se van a comentar algunos conceptos elementales que vas a necesitar a lo largo de esta guía. Échale un vistazo rápido y consúltala cuando se de por sabido algo en las explicaciones.

2.1. Copiar y pegar en la consola

Para copiar texto desde un terminal debes pulsar ctrl+shift+c.

Para pegar texto a un terminal pulsa ctrl+shift+v.

Recuerda que el cursor en la consola sólo se puede mover con las flechas del teclado, no con el ratón.

2.2. Operaciones con el editor de texto Nano

Para moverse por el documento hay que usar los cursores del teclado. Se puede seleccionar texto con el ratón, pero no se puede mover el cursor con el ratón. El principio para añadir y eliminar texto es similar al de otros editores de texto.

Guardar cambios: ctrl+o, intro

Salir: ctrl+x. Si has realizado cambios que no quieres guardar, pulsa ‘n’ a continuación.

nano 1
Diálogo para guardar cambios antes de salir

Buscar: ctrl+w. Una vez pulsado, escribe o pega (2.1. Copiar y pegar en la consola) el texto que quieres buscar y pulsa intro.

2.3. Entrar como root y salir de root

El usuario root es el más privilegiado del sistema y desde él se puede realizar cualquier operación. En la inmensa mayoría de pasos de esta guía es necesario estar registrado como root. Para entrar como root ha que escribir en consola:

su

A continuación se introduce la contraseña y se pulsa intro. Vemos que el usuario (primera cadena de caracteres del intérprete de comandos) cambia a root:

root 1
Entrando como root

Para salir del usuario root, escribe:

exit
root 2
Saliendo de root

A veces será necesario escribir exit varias veces. Para asegurarte que has salido de root, mira el usuario que aparece en el intérprete de comandos (a la izquierda de la linea).

2.4. Archivos de configuración y secciones

La mayor parte de los programas en Linux almacenan sus configuraciones en archivos de texto que contienen parámetros junto al valor de dicho parámetro.

Algunos archivos de configuración están estructurados en secciones. Una sección comienza con <Nombre de la sección (valores)> y termina con </Nombre de la sección>. Dos ejemplos son las secciones VirtualHost y Directory de Apache:

<VirtualHost *:80>
   Parámetros dentro de la sección VirtualHost
      <Directory /ruta>
         Parámetros dentro de la sección Directory
      </Directory>
</VirtualHost>

La sección ‘Directory’ a su vez se encuentra dentro de la sección ‘VirtualHost’.

Los parámetros dentro de cada sección sólo actúan en la misma. De esa forma se pueden crear distintas secciones con propiedades diferentes que se mantienen aisladas las unas de las otras.

2.5. Redirección de puertos en el router

Si quieres tener la posibilidad de acceder a tus servicios desde Internet, deberás redireccionar los puertos de tu router al servidor. Lo único que necesitas saber es la IP local del servidor y los puertos que tienes que direccionar. Existen mulitud de guías publicadas para los distintos modelos de router. Los puertos más relevantes son:

· FTP: 21
· SSH: 22
· Web: 80
· Web segura (HTTPS): 443
· aMule remoto (aMuleGUI): 4712
· Transmission remoto y acceso mediante web: 9091

2.6. Propietarios y permisos en archivos y carpetas

En Linux, todos los archivos y carpetas tienen dueño. El dueño es el que decide sobre quien puede o no puede modificar, visualizar o ejecutar el archivo. Esos son los permisos.

El único usuario que tiene la capacidad de leerlo y modificarlo todo es el usuario ‘root’ independientemente de los permisos del archivo o carpeta.

Para modificar el dueño de un archivo o carpeta se usa el comando chown. Para cambiar el dueño de un archivo, tan solo debemos escribir:

chown nombre_de_usuario:grupo /ruta/archivo

Una de las peculiaridades de los sistemas de archivos para Linux es que almacenan estos atributos: cada archivo tiene asociado sus permisos y dueño.

Por otra parte existen las agrupaciones de usuario (grupos). Varios usuarios pueden pertenecer a un mismo grupo. Es posible dar permisos a los usuarios de un determinado grupo, diferentes a los del resto.

De esa forma existen tres agrupaciones a las que se pueden aplicar los permisos: el dueño del archivo o carpeta, los usuarios pertenecientes al grupo al que pertenece el dueño y el resto de usuarios. Para ver los permisos de los archivo, escribimos esto en consola:

ls -l
ls -l
Ejecución de ls -l en la carpeta personal

Los permisos están representados en la columna de la izquierda (ej: -rw-r–r–). Más a la derecha están el dueño y el grupo al que pertenece el dueño que habitualmente tiene el mismo nombre porque normalmente sólo hay un usuario por grupo (ej: root root).

Centrémonos en la primera columna. Vemos varios caracteres y guiones en una posición concreta. Los caracteres significan esto:
· d: directorio
· r: permiso de lectura
· w: permiso de escritura
· x: permiso de ejecución

Esa información está dividida en cuatro comunas. De izquierda a derecha, la primera de ellas nos dice si es un archivo o un directorio y está formado por un solo carácter. Si aparece una ‘d’ es un directorio. Si aparece un guión es un archivo.

La segunda columna tiene tres caracteres y se corresponde a los permisos del dueño del archivo. El primer carácter indica si hay permiso de lectura o no, el segundo de escritura y el tercero de ejecución. Si aparece un carácter, por ejemplo r, significa que hay permiso para lectura. Si aparece un guión significa que el dueño no tiene permiso para la lectura.

La segunda columna representa los permisos de los usuarios pertenecientes al grupo del dueño. Y la tercera columna son los permisos para el resto de usuarios.

Si miramos el archivo ‘moodle-2.9.tgz’ del ejemplo de arriba vemos que tiene estos caracteres (de izquierda a derecha):

: Es un archivo (no un directorio)
r: El dueño del archivo puede leerlo
w: El dueño del archivo puede escribir en él
: El dueño del archivo NO puedo ejecutarlo
r: Los usuarios del grupo pueden leerlo
: Los usuarios del grupo NO pueden escribir en él
: Los usuarios del grupo NO pueden ejecutarlo
r: El resto de usuarios pueden leerlo
: El resto de usuarios NO pueden escribir en él
: El resto de usuarios NO pueden ejecutarlo

La forma más simple de representar estos valores es en binario: un cero si no hay permiso y un uno si sí lo hay. Como cada campo tiene 3 bits (lectura, escritura y ejecución), se usa el sistema octal que va de 0 (000) a 7 (111). Por ejemplo, el valor 5 (101) indica que se puede leer y ejecutar, pero no escribir.

De esa forma, chmod usa esta nomenclatura para modificar los permisos de los archivos. Inicialmente, el archivo ‘moodle-2.9.tgz’ del ejemplo tiene los atributos 644 (110-100-100). Si queremos que los usuarios del grupo no solo puedan leer el archivo sino que también puedan escribir en él, deberemos modificar la segunda columna de 4 a 6 quedando los permisos 664 (110-110-100), usaremos chmod de esta forma:

chmod 664 moodle-2.9.tgz

Evidentemente para realizar esta operación deberemos tener permiso de escritura en dicho archivo.

Para los absolutos profanos en la materia, la traducción de binario a octal y viceversa es:
000=0, 001=1, 010=2, 011=3, 100=4, 101=5, 110=6, 111=7.

3. Configuraciones post-instalación

Resumen

Si vas a manejar tu servidor mediante SSH desde el principio para poder desconectar todos los periféricos, averigua su dirección IP (de la tabla DHCP de tu router) y conéctate a él. Si no, regístrate con tu nombre de usuario localmente. Desde ahí podrás averiguar la dirección ip usando este comando:

ip a

Explicación

Una vez que tenemos Debian 9 instalado en nuestro sistema, hay que realizar algunas operaciones antes de tenerlo completamente listo para instalar y configurar servicios. Gracias a que hemos hecho una instalación incluyendo el servicio SSH, podemos desconectar todos los periféricos de nuestra máquina-servidor ya que a partir de ahora la vamos a configurar a través de SSH. Su manejo in-situ sería idéntico.

Lo primero que necesitamos es averiguar la IP con la que se ha registrado el servidor a través de DHCP (puedes probar con las primeras IPs que ofrece tu servidor DHCP o mirando la tabla de asignación de IPs de tu router). Si no consigues una pista, deberás acceder localmente a la máquina.

debian 8 ssh
Accediendo a nuestro servidor a través de SSH

Como curiosidad, con el servidor recien instalado se puede comprobar que el consumo de memoria es realmente bajo: apenas 80Mb de RAM. Eso cambiará conforme vayamos ejecutando servicios.

debian 8 top
Reducido consumo de memoria de Debian 9 Stretch recién instalado

3.1. Configuración de la red

Procedimiento

Como root:

nano /etc/network/interfaces

sustituir la última linea por:

auto enp0s3
 iface enp0s3 inet static
 address nuestra_ip_local
 netmask máscara_de_subred
 gateway puerta_de_acceso

NOTA: Recuerda que enp0s3 es el nombre de tu dispositivo de red y que este puede ser diferente al del ejemplo. Para saber el nombre de tu dispositivo de red, puedes escribir en consola:

ip a

Para terminar:

reboot

Explicación

Debido a la naturaleza del sistema (un servidor), es esencial contar con una IP local fija ya que nuestro router redireccionará los puertos a dicha IP. Si esta cambiara, nuestro servidor quedaría irremediablemente incomunicado con el exterior.

Para configurar una IP local estática vamos a editar el archivo ‘interfaces’. Para ello, como root (2.3. Entrar como root y salir de root), escribimos lo siguiente:

nano /etc/network/interfaces

Nos vamos a encontrar con esto:

Tan solo tenemos que sustituir la última linea por:

auto enp0s3
 iface enp0s3 inet static
 address nuestra_ip_local
 netmask máscara_de_subred
 gateway puerta_de_acceso

· address indica la IP del dispositivo de red conectado a Internet. Deberá cumplir con la norma para evitar conflictos con direcciones IP públicas. Las direcciones privadas normalizadas están divididas en tres clases: clase A de 10.0.0.0 a 10.255.255.255, clase B de 172.16.0.0 a 172.31.255.255 y clase C de 192.168.0.0 a 192.168.255.255. La más extendida es la clase C.
· netmask es la máscara de subred. Habitualmente vale 255.255.255.0.
· gateway es la puerta de acceso predeterminada, es decir, la dirección IP local del router desde el que nos conectamos a Internet.

Ten en cuenta que enp0s3 es el nombre de tu dispositivo de red y que este puede ser diferente al del ejemplo. Para saber el nombre de tu dispositivo de red, puedes escribir en consola:

ip a

En mi caso, el archivo de configuración quedaría de esta forma:

Una vez introducidos los cambios en el archivo de configuración, lo guardamos y salimos de Nano (2.2. Operaciones con el editor de texto Nano). Para aplicar los cambios debemos reiniciar el sistema empleando la siguiente instrucción como root:

reboot

Cuando se ha reiniciado, comprobaremos que la IP de nuestra máquina será la que hemos introducido. Evidentemente para reconectarnos con SSH deberemos tener en cuenta este cambio:

3.2. Actualización del sistema

Procedimiento

Como root:

apt-get update
apt-get upgrade

Explicación

A pesar de haber realizado una instalación desde la red (con la que debería quedar un sistema completamente actualizado), vamos a llevar a cabo el proceso de actualización para asegurarnos de que disponemos de las últimas versiones de todo el software instalado.

En primer lugar escribimos la siguiente orden como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get update
Salida típica cuando se ejecuta ‘apt-get update’

Con esta operación se actualiza la base de datos de paquetes, de forma que el sistema ahora sabe qué paquetes están disponibles tanto para actualizar como para instalar. Cada vez que queremos instalar un paquete o actualizar el sistema, deberemos ejecutar dicha instrucción en caso de que llevemos algunas horas sin hacerlo.

Ahora debemos ejecutar esto:

apt-get upgrade
apt-get upgrade
Salida típica cuando se ejecuta ‘apt-get upgrade’

Como era de esperar, no hay nada que actualizar.

Esta operación la debes realizar periódicamente ya que en ocasiones aparecen parches de seguridad sin los cuales tu servidor podría ser vulnerable a ataques externos. A veces las actualizaciones vienen con nuevas características y mejoras de rendimiento.

3.3. Instalación de herramientas esenciales

Para la edición de los archivos de configuración, vamos a necesitar un editor de texto. Vale cualquiera pero vamos a emplear ‘nano’. Nano viene instalado por defecto en Debian 9 por lo que no es necesario realizar ninguna gestión al respecto. Si por alguna razón no estuviera instalado, deberás ejecutar este par de lineas como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install nano

4. Servicios web

Una vez que tenemos Debian 9 completamente configurado y actualizado, llega el momento de empezar a instalar servicios.

4.1. Servidor web Apache

Procedimiento

Como root:

apt-get update
apt-get install apache2 apache2-doc apache2-utils

Explicación

Apache es uno de los servidores web más extendidos y es el que vamos a usar en esta guía. Debian 9 viene con Apache 2.4, la última versión estable del programa.

Para instalar Apache 2 hay que escribir la siguiente orden en consola como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install apache2 apache2-doc apache2-utils

En ese momento nos aparece la siguiente información:

instalacion apache
Dependencias para la instalación de Apache

Confirmamos las dependencias y esperamos unos minutos. Una vez finalizada la instalación, el servicio se iniciará y lo hará cada vez que arranquemos el equipo. Para comprobar que el servidor web está funcionando correctamente, no tememos más que acceder a la IP local de nuestro servidor desde un navegador web:

servidor web funcionando
Servidor web en funcionamiento

Por defecto, los archivos del servidor web se almacenan en /var/www/html donde encontrarás el archivo ‘index.html’ que se muestra por defecto (la página mostrada más arriba). Ese archivo deberá ser sustituido por tu index.html.

La ruta se puede cambiar (4.1.2. Servidores virtuales). En cualquier caso, puedes empezar a subir tu contenido a dicha carpeta y será accesible desde ya.

4.1.1. Limitando el número de procesos Apache

Procedimiento

Como root:

apt-get update
apt-get install libapache2-mpm-itk
nano /etc/apache2/apache2.conf

Añadir al final de apache2.conf:

<IfModule mpm_prefork_module>
   StartServers 5
   MinSpareServers 5
   MaxSpareServers 10
   MaxClients 150
   MaxRequestsPerChild 0
</IfModule>
/etc/init.d/apache2 restart

Explicación

A veces puede ocurrir que recibamos una gran cantidad de peticiones web. En ese momento empiezan a ejecutarse un gran número de procesos Apache y pueden acabar consumiendo toda la memoria RAM. A partir de ahí, el sistema empieza a tirar del archivo de intercambio por lo que nuestro servidor empezará a responder a una velocidad extremadamente lenta. Si limitamos el número de procesos a ejecutar, evitaremos esta situación.

Para ello necesitamos instalar un módulo para Apache llamado MPM. Ejecutamos la siguiente linea como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install libapache2-mpm-itk

Una vez finalizada la instalación hay que editar el archivo de configuración de Apache. El archivo de configuración se encuentra en /etc/apache2/apache2.conf por lo que habrá que ejecutar la siguiente linea para editarlo con nano (2.2. Operaciones con el editor de texto Nano) como root:

nano /etc/apache2/apache2.conf

Una vez dentro del archivo de configuración debemos añadir el siguiente texto:

<IfModule mpm_prefork_module>
   StartServers 5
   MinSpareServers 5
   MaxSpareServers 10
   MaxClients 150
   MaxRequestsPerChild 0
</IfModule>

El significado de cada linea es el siguiente:

· StartServers: número de procesos que de ejecutan al iniciar Apache.
· MinSpareServers: mínima cantidad de procesos que se mantienen en espera. Siempre debe haber procesos en espera ya que de esa forma se acorta el tiempo de acceso de los clientes.
· MaxSpareServers: cantidad máxima de procesos en espera.
· MaxClients: número máximo de procesos que se pueden ejecutar. Este es el valor más importante para controlar el uso de RAM. Para saber cuántos procesos como máximo se deben poder ejecutar, hay que saber cuando nos ocupa cada uno, algo que depende de varios factores. Para averiguarlo tendrás que iniciar algún programa de monitoreo como Top y ver cuanto consume cada proceso de Apache. A partir de ahí y sabiendo cuánta memoria como máximo queremos que consuma, podemos obtener la cantidad correcta.
· MaxRequestsPerChild: es el número de peticiones que atiende cada hilo de ejecución. Si el valor es alto, pueden ocurrir fallos ya que los procesos necesitan reiniciarse periódicamente para limpiar la memoria. Si el número es demasiado bajo el rendimiento se resentirá.

Finalmente reiniciamos Apache con la siguiente linea como root:

/etc/init.d/apache2 restart

4.1.2. Servidores virtuales

Procedimiento

Como root:

nano /etc/apache2/sites-available/000-default.conf

Usar como plantilla esto:

<VirtualHost *:80>
   DocumentRoot "/home/Servidor/dplinux.net/"
   ServerName dplinux.net
   ServerAlias dplinux.net
   CustomLog ${APACHE_LOG_DIR}/access_dplinux.log combined
</VirtualHost>
nano /etc/apache2/apache2.conf

Eliminar todas las secciones ‘Directory’ que encontremos en el archivo (2.4. Archivos de configuración y secciones).

/etc/init.d/apache2 restart

Explicación

Si queremos acceder a páginas diferentes desde dominios diferentes con un único servidor debemos usar servidores virtuales (VirtualHosts). Desde aquí no solo es posible decirle al servicio qué página debe abrir según con qué dominio reciba la petición sino que es el lugar para elegir el directorio donde se almacena la web.

Los servidores virtuales se configuran en en el archivo ‘000-default.conf’ por lo que habrá que ejecutar como root (2.3. Entrar como root y salir de root) esto:

nano /etc/apache2/sites-available/000-default.conf

En ese momento el archivo se abre con Nano (2.2. Operaciones con el editor de texto Nano) e inicialemente nos vamos a encontrar con el siguiente texto:

000-default
Contenido inicial del archivo de configuración ‘000-default’

Las lineas que aparecen para configurar son:
· ServerAdmin: correo electrónico del administrador
· DocumentRoot carpeta donde se almacena la web
· ErrorLog directorio donde se registran los errores del servidor

Tal y como está el archivo inicialmente, sea como sea que accedamos al servidor desde un navegador web (desde cualquier dominio apuntando a la IP), se mostrará la página a la que apunta «DocumentRoot».

Una buena plantilla para un par de servidores virtuales puede ser como la que sigue:

<VirtualHost *:80>
   DocumentRoot "/home/Servidor/dplinux.net/"
   ServerName dplinux.net
   ServerAlias dplinux.net
   CustomLog ${APACHE_LOG_DIR}/access_dplinux.log combined
</VirtualHost>
<VirtualHost *:80>
   DocumentRoot "/home/Servidor/alexcobo.net/"
   ServerName alexcobo.net
   ServerAlias alexcobo.net
   CustomLog ${APACHE_LOG_DIR}/access_alexcobo.log combined
</VirtualHost>

Poniendo el nombre del dominio tanto en las opciones ‘ServerName’ como ‘ServerAlias’, la página mostrada desde ese dominio será la que apunta ‘DocumentRoot’. En el caso de que no coincida, se servirá la web que aparezca en el primer VirtualHost de la lista.

En esa plantilla vemos dos secciones VirtualHost (2.4. Archivos de configuración y secciones), una para atender las peticiones desde el dominio dplinux.net otra para el dominio alexcobo.net. Cada una tiene sus configuraciones independientes y se pueden añadir tantas secciones VirtualHost como sean necesarias.

Como hemos configurado nuestros sitios individualmente, las configuraciones genéricas del archivo apache2.conf las debemos eliminar para que no entren en conflicto. Para eso:

nano /etc/apache2/apache2.conf

Ahora eliminamos todas las secciones ‘Directory’ que encontremos en el archivo (2.4. Archivos de configuración y secciones). Con eso nos aseguramos de poder usar cualquier carpeta diferente a ‘/var/www/html’ que viene por defecto.

Para que se apliquen los cambios, deberás reiniciar Apache con:

/etc/init.d/apache2 restart

Pero ¿cómo funciona todo esto? El proceso de ofrecimiento de páginas es el siguiente:
· Escribes
https://dplinux.net en el explorador web.
· Tu ordenador le pide al servidor DNS la IP de dicho dominio.
· Tu ordenador se conecta a dicha dirección IP y dice que quiere comunicarse con dplinux.net (esta información está contenida en el encabezado
Host: de la petición).
· Nuestro servidor web comprueba la configuración para averiguar qué contenido ofrecer con esa petición.
· Si dplinux.net está como parámetro de ‘
ServerName o ‘ServerAlias’ en una sección VirtualHost, se ofrece lo que diga DocumentRoot. Si no la encuentra, ofrece lo que diga el primer VirtualHost de la lista. Si no existe ningún VirtualHost, recurre a la configuración almacenada en el archivo de configuración de Apache que se encuentra en /etc/apache2/apache2.conf.

4.1.3. Habilitar el archivo .htaccess

Procedimiento

Como root:

a2enmod rewrite
nano /etc/apache2/sites-available/000-default.conf

Añadir dentro de la sección VirtualHost correspondiente una sección Directory:

<Directory "/var/www/html">
   Require all granted
   Options Indexes FollowSymLinks MultiViews
   AllowOverride All
</Directory>
/etc/init.d/apache2 restart

Explicación

El archivo .htaccess es un archivo de configuración de vital importancia que se aplica a cada subcarpeta de nuestro servidor. En él podemos hacer cosas como bloquear ciertas páginas, limitar el enlazado de cierto material (como imágenes) y muchos más.

Para habilitarlo lo único que tenemos que hacer es activar el módulo «rewrite», así que escribimos en consola como root (2.3. Entrar como root y salir de root):

a2enmod rewrite

Ahora debemos editar con Nano (2.2. Operaciones con el editor de texto Nano) el archivo000-default.conf como root:

nano /etc/apache2/sites-available/000-default.conf

Ahí debemos crear una sección Directory dentro de una sección VirtualHost (2.4. Archivos de configuración y secciones). Eso se hace copiando el siguiente texto dentro de una sección VirtualHost:

<Directory "/var/www/html">
   Require all granted
   Options Indexes FollowSymLinks MultiViews
   AllowOverride All
</Directory>

En el campo Directory deberemos poner la carpeta donde queremos que .htaccess funcione. Si queremos habilitar .htaccess en unas carpetas y deshabilitarlo en otras, podemos usar un esquema como el siguiente:

<Directory "/var/www/html">
   AllowOverride None
</Directory>

<Directory "/var/www/html/wordpress">
   Require all granted
   Options Indexes FollowSymLinks MultiViews
   AllowOverride All
</Directory>
htaccess
Habilitando .htaccess en el subdirectorio ‘/wordpress’

De esta forma .htaccess funcionará en /var/www/html/wordpress pero no en /var/www/html.

Cada sección Directory es independiente y puede haber tantas como necesitemos en una sección VirtualHost.

Por último reiniciamos el servidor Apache con:

/etc/init.d/apache2 restart

4.1.3.1. Bloquear el acceso a una página con .htaccess

Una de las posibilidades que nos permite el archivo .htaccess es impedir el acceso a una subcarpeta o archivo de nuestro servidor web.

Si todavía no disponemos de un archivo .htaccess, lo creamos en la subcarpeta donde queramos que tenga efecto.

touch /var/www/html/subcarpeta/.htaccess
nano /var/www/html/subcarpeta/.htaccess

Para bloquear el acceso a un archivo, pegamos al final del archivo el siguiente texto:

<Files archivo.html>
   deny from all
</Files>

Para impedir el acceso a una carpeta, pegamos esto:

<Directory /var/www/html/subcarpeta/bloqueada>
   deny from all
</Directory>

4.1.3.2. Mover página de dirección

En alguna ocasión es posible que queramos mover nuestra web de dirección. ya sea porque queremos cambiarle el nombre, porque queremos pasar de un subdominio y a un dominio o cualquier otra razón.

Para que los robots de búsqueda y los usuarios puedan seguir accediendo al contenido sin tener que conocer la nueva dirección, podemos redireccionar todo el contenido al nuevo dominio. De esa forma, los navegadores web y robots recibirán un código de estado «301 moved permanently» lo que indica que el sitio ha sido movido.

Lo único que tenemos que hacer es crear un archivo .htaccess en la subcarpeta donde se encontraba la web:

touch /var/www/html/subcarpeta/.htaccess
nano /var/www/html/subcarpeta/.htaccess

Finalmente pegamos este texto:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://dominio.com/$1 [R=301,L]

Lo único que debemos modifica es el dominio de nuestra nueva web. Ahora cada vez que alguien acceda a la antigua dirección, será redireccionado inmediatamente a la nueva y los robots de búsqueda sabrán que el sitio ha sido movido.

4.1.3.3. Habilitar caché del navegador

Si habilitamos la caché del navegador con Apache, nos ahorraremos una gran cantidad de ancho de banda cuando tengamos que servir ciertos elementos y por otra parte, al cliente le cargará la página mucho más rápido. No obstante, hay que tener cuidado ya que si permitimos el cacheo de ciertos archivos, el cliente podría estar visualizando contenido sin contactar con el servidor, por lo que serían visitas no contabilizadas. Además si hay ciertos elementos que cambian con frecuencia, en el caso de que se haya accedido previamente a ese recurso, los cambios no se visualizarán hasta que expire la caché.

En primer lugar activamos el módulo Expires y reiniciamos Apache como root:

 a2enmod expires
/etc/init.d/apache2 restart

Si no contamos con un archivo .htaccess, lo creamos:

touch /var/www/html/subcarpeta/.htaccess
nano /var/www/html/subcarpeta/.htaccess

Y añadimos el siguiente texto:

<IfModule mod_expires.c>
   <filesmatch "\.(jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG|css|ico)$">
      ExpiresActive on
      ExpiresDefault "access plus 30 day"
   </filesmatch>
</IfModule>

Los parámetros que nos interesan son estos:
· filesmatch: ahí se indican las extensiones de los archivos que se van a almacenar en la caché del navegador. No añadas la extensión html ya que son archivos que consumen poco caudal y cualquier modificación no surtirá efecto en la visualización hasta que caduque la caché
· ExpiresDefault «access plus xx day»: se indica la cantidad de días que se almacenará la caché. Cuando más tiempo, menos se repetirán los envíos de ciertos archivos a visitantes habituales pero más tardarán en poder visualizar los cambios producidos en esos archivos

4.1.4. Protección anti ataques DoS

Procedimiento

Como root :

apt-get update
apt-get install libapache2-mod-evasive
mkdir -p /var/log/apache2/evasive
chown -R www-data:root /var/log/apache2/evasive
nano /etc/apache2/mods-available/mod-evasive.load

Pegar la siguiente plantilla:

LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so
 DOSHashTableSize 2048
 DOSPageCount 20
 DOSSiteCount 30
 DOSPageInterval 1.0
 DOSSiteInterval 1.0
 DOSBlockingPeriod 10.0
 DOSLogDir "/var/log/apache2/evasive"
 DOSEmailNotify correo@servidor
/etc/init.d/apache2 restart

Explicación

Internet es un hábitat salvaje y anárquico donde no hay normas ni leyes en cuanto a la forma de acceder a los servicios. Es habitual que haya robots de búsqueda que realicen una exploración desmedida de tu sitio y, si tienes muchas páginas publicadas, estos robots irresponsables pueden tirar el servicio. Por otra parte existe la típica fauna de listos que, por diversión, se dedican a tirar servidores y es posible que llegue el buen día en que el tuyo se convierta en un objetivo.

Existen varias formas de minimizar daños ante este tipo de ataques. Una de ellas ya se ha comentado en la sección 4.1.1. Limitando el número de procesos Apache. Pero también existen módulos que expulsan del servidor a los clientes con un comportamiento poco cívico.

El módulo que vamos a emplear se llama Evasive y sirve para evitar grandes perjuicios ante estas situaciones. Para instalarlo escribimos las siguientes órdenes como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install libapache2-mod-evasive
mkdir -p /var/log/apache2/evasive
chown -R www-data:root /var/log/apache2/evasive
[instalacion evasive]
Proceso de instalación del mod Evasive

Con las dos primeras órdenes instalamos el módulo, con la tercera creamos una carpeta donde se almacenarán los registros de actividad y con la cuarta damos los permisos a dicha carpeta para que Apache pueda escribir en ella.

Cada vez que nos ataquen, en la carpeta de registros ‘/var/log/apache2/evasive’ se creará un archivo de texto cuyo nombre será la IP atacante. Dentro del archivo veremos un número que indica el PID del proceso Apache que se ha matado para neutralizar el ataque.

Una vez instalado el módulo hay que configurarlo, por lo que debemos editar el archivo de texto (2.2. Operaciones con el editor de texto Nano) que hay en /etc/apache2/mods-available/mod-evasive.load usando como root la siguiente orden:

nano /etc/apache2/mods-available/mod-evasive.load

Entonces nos encontraremos con un archivo vacío que deberemos dejar como vemos en la siguiente imagen:

configuracion evasive
Contenido final del archivo de configuración ‘mod-evasive.load’

A continuación tienes una buena plantilla que puedes copiar y pegar a tu archivo de configuración:

LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so
 DOSHashTableSize 2048
 DOSPageCount 20
 DOSSiteCount 30
 DOSPageInterval 1.0
 DOSSiteInterval 1.0
 DOSBlockingPeriod 10.0
 DOSLogDir "/var/log/apache2/evasive"
 DOSEmailNotify correo@servidor

El significado de los distintos parámetros es el siguiente:
· DOSHashTableSize: tamaño de la lista de IP que se comprueba.
· DOSPageCount: número máximo de peticiones para una misma página.
· DOSSiteCount número máximo de peticiones desde una IP determinada a cualquier página del servidor.
· DOSPageInterval: Tiempo en segundos en el que se cuentan intentos de acceso a una página en concreto por un mismo cliente.
· DOSSiteInterval: Tiempo en segundos en el que se cuentan intentos de acceso a cualquier página desde una IP.
· DOSBlockingPeriod: Tiempo en segundos en el que el atacante no podrá acceder al sitio.

Una vez que lo tenemos todo configurado, deberás reiniciar apache usando la siguiente linea como root:

/etc/init.d/apache2 restart

4.1.5. Página segura HTTPS con SSL-RSA

Procedimiento

Como root:

a2enmod ssl
a2ensite default-ssl
/etc/init.d/apache2 restart
openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
cp server.crt /etc/ssl/certs/
cp server.key /etc/ssl/private/
nano /etc/apache2/sites-available/default-ssl.conf

Pegar la siguiente plantilla:

<IfModule mod_ssl.c>
   <VirtualHost _default_:443>
      ServerAdmin correo@servidor.com
      DocumentRoot /var/www/html
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
      SSLEngine on
      SSLCertificateFile /etc/ssl/certs/server.crt
      SSLCertificateKeyFile /etc/ssl/private/server.key
         <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
         </FilesMatch>
         <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
         </Directory>
      BrowserMatch "MSIE [2-6]" \
      nokeepalive ssl-unclean-shutdown \
      downgrade-1.0 force-response-1.0
      BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
   </VirtualHost>
</IfModule>
cd /etc/ssl/private/
cp server.key server.key.otr
openssl rsa -in server.key.otr -out server.key
/etc/init.d/apache2 restart

Explicación

Si queremos tener la posibilidad de establecer conexiones cifradas a través de HTTPS, deberemos tener un certificado SSL. SSL (Secure Sockets Layer) es el protocolo de cifrado más usado en la web y RSA (Rivest, Shamir, Adleman) es el algoritmo que cifrará la información que se envía a través de SSL.

En primer lugar hay que activar el módulo SSL de Apache. Este modulo viene instalado de serie por lo que tan solo hay que poner en consola como root (2.3. Entrar como root y salir de root) lo siguiente:

a2enmod ssl
activando ssl
Activación del módulo SSL de Apache

Después hay que crear un archivo de configuración para los sitios seguros de nuestro servidor ejecutando la siguiente linea:

a2ensite default-ssl
activando default-ssl
Activación del archivo de configuración ‘default-ssl’

Con esta operación se habrá activado el archivo de configuración para las conexiones SSL que se encuentra en /etc/apache2/sites-available/. Una vez realizadas estas dos operaciones hay que reiniciar el servidor Apache para que se apliquen los cambios, así que como root:

/etc/init.d/apache2 restart

Ahora llega el momento de crear las claves RSA. Este algoritmo creará una clave pública y otra privada (un par de claves) con las cuales se podrá establecer una comunicación segura bidireccional entre el servidor y el cliente.

La forma de funcionar de RSA a grandes rasgos es creando dos claves: la pública y la privada. La clave privada permanece almacenada en el servidor y es secreta. La clave pública es la que conoce el cliente (navegador web). Cualquier cosa cifrada con la clave privada mediante RSA sólo se puede descifrar con la clave pública (no con la privada). Y cualquier cosa cifrada con la clave pública sólo se puede descifrar con la privada (y no con la pública). Con este método se pueden establecer comunicaciones seguras de la siguiente forma:

· El cliente envía su clave pública al servidor y el servidor envía su clave pública (diferente a la del cliente) al cliente.

· A partir de ese momento, el cliente cifra la información a enviar con la clave pública que le ha enviado el servidor, de forma que la información sólo se puede descrifrar con la clave privada del servidor, que es secreta. Para la comunicación en el otro sentido se hace lo mismo.

De esa forma, una clave pública va asociada unívocamente a una clave privada y viceversa y resulta muy difícil (prácticamente imposible con las tecnología actual), obtener la clave privada a través de la clave pública.

Para crear un par de claves asociadas entre sí, usaremos un programa llamado OpenSSL que viene instalado por defecto en Debian 9. En primer lugar vamos a crear un par de claves de una longitud 2048 bits (es el mínimo recomendable a día de hoy):

openssl genrsa -des3 -out server.key 2048

En ese momento nos pide una contraseña. Esta contraseña condicionará el par creado e introducirá aletoriedad en la obtención del par. Esta contraseña debes recordarla.

rsa clave
Creación de una par de claves RSA

Ahora llega el momento de crear un certificado en base a la clave generada. Un certificado es un archivo que acredita al navegador que la conexión proviene del servidor al que estamos contactando y que no hay usurpación de identidad. A través de él se proporciona la información para establecer la conexión segura. Como root ejecutamos lo siguiente:

openssl req -new -key server.key -out server.csr
[certificado ssl]
Creación de un certificado

Como podemos ver, nos pide una serie de datos que, en realidad, son opcionales. Esta información será la que ofrecerá el certificado para que el cliente pueda comprobar la procedencia. El único campo obligatorio es el primero: la contraseña de la clave RSA que hemos introducido previamente.

Por último habrá que firmar el certificado para que el cliente tenga la certeza de que realmente ha sido enviado por nuestro servidor (cifrado con nuestra clave privada) y no por un atacante que ha suplantado nuestra identidad. Para ello ejecutamos como root esto:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

El parámetro 365 nos dice que la validez del certificado será de 1 año aunque esta caducidad no impedirá seguir usando conexiones seguras una vez haya transcurrido dicho periodo. Cuando lo ejecutemos, nos pedirá una vez más la clave que hemos introducido previamente:

certificado firmado
Proceso de firma de cerificado

Ahora tenemos dos archivos relevantes: server.key (nuestro par de claves) y server.crt (nuestro certificado firmado con nuestra clave privada). Estos archivos hay que copiarlos a /etc/ssl/ para que sean reconocidos por Apache. Para ello, ejecutamos como root lo siguiente:

cp server.crt /etc/ssl/certs/
cp server.key /etc/ssl/private/

Editamos el archivo de configuración para sitios seguros default-ssl.conf (2.2. Operaciones con el editor de texto Nano) que se encuentra en /etc/apache2/sites-available. Como root:

nano /etc/apache2/sites-available/default-ssl.conf

Aquí vemos una gran cantidad de texto que nos recuerda en gran medida a la estructura del archivo de configuración de sitios sin seguridad (4.1.2. Servidores virtuales), por lo que su configuración se hace de forma parecida con la salvedad de que esta vez estamos usando el puerto 443 reservado a conexiones HTTPS en vez del 80 para conexiones HTTP. La sección VirtualHost refleja esta diferencia.

Una buena plantilla con la que puedes sustituir el texto incluido por defecto es esta:

<IfModule mod_ssl.c>
   <VirtualHost _default_:443>
      ServerAdmin correo@servidor.com
      DocumentRoot /var/www/html
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
      SSLEngine on
      SSLCertificateFile /etc/ssl/certs/server.crt
      SSLCertificateKeyFile /etc/ssl/private/server.key
         <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
         </FilesMatch>
         <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
         </Directory>
      BrowserMatch "MSIE [2-6]" \
      nokeepalive ssl-unclean-shutdown \
      downgrade-1.0 force-response-1.0
      BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
   </VirtualHost>
</IfModule>

Los parámetros más relevantes son:
· SSLCertificateFile donde debemos escribir la ruta del certificado.
· En SSLCertificateKeyFile va la ruta del par de claves que hemos generado.

Dentro de la sección VirtualHost podemos aplicar las mismas configuraciones que las del archivo de configuración para webs sin seguridad.

Una vez almacenada la configuración, hay que reiniciar Apache con:

/etc/init.d/apache2 restart

Entonces vemos que debemos introducir la contraseña que usamos para generar el par de claves:

inicio apache ssl
Iniciando Apache con SSL (pidiendo contraseña)

La petición de esta contraseña ocurrirá cada vez que inicies el servicio Apache, lo que incluye el arranque del equipo. Esto es un engorro ya que la automatización de todos los servicios al inicio es fundamental en cualquier servidor. Para evitar que nos vuelva a pedir la clave, hacemos esto:

cd /etc/ssl/private/
cp server.key server.key.otr
openssl rsa -in server.key.otr -out server.key
quitar clave rsa
Eliminando contraseña del par de claves RSA

Con esto lo que estamos haciendo es regenerar la clave sin contraseña sin cambiar el contenido de la misma. Recordemos que la contraseña añadía aleatoriedad a la generación por lo que, hasta cierto puento, resulta importante generar el par de claves asociadas a una contraseña. Ahora tenemos un par generado con dicha aleatoriedad sin necesidad de tener que usar el patrón que empleamos en su generación.

Cuando reiniciemos Apache, comprobaremos que ya no nos pide la contraseña.

Una vez lo tenemos todo listo, podemos probar el funcionamiento a través de un navegador web usando el protocolo HTTPS con una dirección del tipo https://nuestra_ip. Cuando accedemos por primera vez, nos aparece el clásico mensaje diciendo que la conexión no está verificada.

firefox ssl1
Conexión no verificada en Firefox

Esto se debe a que nuestro certificado no se encuentra dentro del certificado raíz del navegador ya que no proviene de una entidad certificadora. Esto no compromete la seguridad de la conexión pero sí puede ser una molestia. Si vemos el certificado que ha obtenido el navegador, se comprueban los datos que hemos introducido previamente.

firefox ssl2
Detalles del certificado

Añadimos una excepción y obtenemos nuestra página segura.

firefox ssl3
Web que se ha enviado cifrada desde nuestro servidor

Si observamos los detalles del enlace, vemos que Firefox considera que se ha establecido una conexión de alta seguridad.

firefox ssl4
‘Cifrado de alto grado’ según Firefox

4.1.6. Proteger web con contraseña

Procedimiento

Como root:

htpasswd -c /var/www/html/subcarpeta/.htpasswd nombre_de_usuario
nano /etc/apache2/sites-available/000-default.conf

Pegar dentro de la sección VirtualHost correspondiente:

<Directory "/var/www/html/subcarpeta/">
   AllowOverride All
   Require all granted
   Allow from all
   Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
touch /var/www/html/subcarpeta/.htaccess
nano /var/www/html/subcarpeta/.htaccess

Pegamos esto:

AuthName "Introduce credenciales"
AuthType Basic
AuthUserFile /var/www/html/subcarpeta/.htpasswd
require valid-user
/etc/init.d/apache2 restart

Explicación

Si queremos proteger una subcarpeta de miradas indiscretas, tan solo tenemos que establecer una contraseña.

Lo primero es generar un usuario con su correspondiente contraseña para Apache de esta forma como root (2.3. Entrar como root y salir de root):

htpasswd -c /var/www/html/subcarpeta/.htpasswd nombre_de_usuario

La ruta deberá ser la de nuestra subcarpeta.

Entonces introducimos la contraseña que queramos. Después editamos el archivo de configuración web (2.2. Operaciones con el editor de texto Nano):

nano /etc/apache2/sites-available/000-default.conf

Dentro de la sección VirtualHost (2.4. Archivos de configuración y secciones) desde donde se acceda a la subcarpeta a proteger, pegamos esto modificando la ruta en ‘Directory’ donde se encuentra dicha subcarpeta:

<Directory "/var/www/html/subcarpeta/">
   AllowOverride All
   Require all granted
   Allow from all
   Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>

Por último creamos un archivo .htaccess:

touch /var/www/html/subcarpeta/.htaccess
nano /var/www/html/subcarpeta/.htaccess

Y pegamos lo siguiente:

AuthName "Introduce credenciales"
AuthType Basic
AuthUserFile /var/www/html/subcarpeta/.htpasswd
require valid-user

En el apartado AuthUserFile debemos poner la ruta donde se encuentra el archivo de contraseña que hemos creado previamente. El resto de parámetros los dejamos como están.

Cuando reiniciemos Apache, el explorador web nos pedirá una contraseña para acceder a esa subcarpeta:

/etc/init.d/apache2 restart

4.1.7. Estadísticas de la web con AWStats

Procedimiento

Como root :

apt-get update
apt-get install awstats libnet-ip-perl libgeo-ipfree-perl
nano /usr/share/doc/awstats/examples/awstats_configure.pl

Sustituimos estas lineas:

$AWSTATS_PATH='/usr/share/awstats';
$AWSTATS_ICON_PATH='/usr/share/awstats/icon';
$AWSTATS_CSS_PATH='/usr/share/awstats/css';
$AWSTATS_CLASSES_PATH='/usr/share/awstats/lib';
$AWSTATS_CGI_PATH='/usr/lib/cgi-bin';
$AWSTATS_MODEL_CONFIG='/usr/share/doc/awstats/examples/awstats.model.conf';
$AWSTATS_DIRDATA_PATH='/var/lib/awstats';
chown www-data /usr/lib/cgi-bin/awstats.pl
nano /etc/awstats/awstats.dplinux.net.conf

Dentro de ese archivo pegamos esto:

LogFile="/var/log/apache2/access_dplinux.log"
LogFormat=1
SiteDomain="dplinux.net"
DNSLookup=0
LoadPlugin="tooltips"
LoadPlugin="geoipfree"
chmod 755 /var/log/apache2
nano /etc/crontab

Después de la última linea pegamos esto:

*/10 * * * * root /usr/lib/cgi-bin/awstats.pl -config=dplinux.net -update > /dev/null
cd /usr/lib/cgi-bin/
touch .htaccess
nano .htaccess

Pegamos esto:

<Files "awstats.pl">
AuthName "Introduzca credenciales"
AuthType Basic
AuthUserFile /var/www/html/awstats/.htpasswd
require valid-user
</Files>
htpasswd -c /var/www/html/awstats/.htpasswd nombre_de_usuario_para_ver_estadisticas
nano /etc/apache2/sites-available/000-default.conf

Al final de la sección VirtualHost de la que queramos obtener estadísticas, pegamos esto:

Alias /icon/ /usr/share/awstats/icon/
   <Directory /usr/share/awstats/icon>
      Options None
      AllowOverride None
      Require all granted
      Allow from all
   </Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
   <Directory "/usr/lib/cgi-bin">
      AllowOverride All
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
      Require all granted
      Allow from all
   </Directory>

Alias /awstatsclasses "/usr/share/awstats/lib/"
Alias /awstats-icon/ "/usr/share/awstats/icon/"
Alias /awstatscss "/usr/share/doc/awstats/examples/css"
ScriptAlias /estadisticas/ /usr/lib/cgi-bin/
/usr/lib/cgi-bin/awstats.pl -config=dplinux.net -update
a2enmod cgi
/etc/init.d/apache2 restart

Explicación

AWStats es un programa que sirve para registrar la actividad de nuestro servidor Apache. Básicamente genera estadísticas de visitas que ordena temporalmente y genera visualizaciones en función de la procedencia, número de visitas en ciertos días de la semana, evolución mes a mes, por horas del día, referidos, sistemas operativos empleados, navegadores web y más información.

awstats 1
Estadísticas por horas de AWStats

Resulta útil para llevar estadistas de visitas detalladas. Su fuente de información es el archivo de registro de Apache, por lo que es el sistema, de lejos, más fiable para saber el número de visitar reales de nuestro sitio.

awstats 2
Estadísticas por navegador de AWStats

Para poner en marcha las estadísticas con AWStats, lo primero es instalar algunos paquetes como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install awstats libnet-ip-perl libgeo-ipfree-perl

Con esto tendremos instalado el programa y los complementos necesarios para identificar las IPs entrantes por países. Una vez instalado, editamos el archivo de configurarión de AWStats (2.2. Operaciones con el editor de texto Nano):

nano /usr/share/doc/awstats/examples/awstats_configure.pl

Ahí nos vamos a encontrar con esto:

awstats config
Contenido inicial del archivo de configuración ‘awstats_configure.pl’

Las lineas que debemos modificar son la relacionadas con las rutas (PATHS) de color azul en la imagen. Todas ellas deben ser reemplazadas por lo siguiente:

$AWSTATS_PATH='/usr/share/awstats';
$AWSTATS_ICON_PATH='/usr/share/awstats/icon';
$AWSTATS_CSS_PATH='/usr/share/awstats/css';
$AWSTATS_CLASSES_PATH='/usr/share/awstats/lib';
$AWSTATS_CGI_PATH='/usr/lib/cgi-bin';
$AWSTATS_MODEL_CONFIG='/usr/share/doc/awstats/examples/awstats.model.conf';
$AWSTATS_DIRDATA_PATH='/var/lib/awstats';

Para que Apache pueda acceder al programa para mostrar las estadísticas, hay que cambiar los permisos:

chown www-data /usr/lib/cgi-bin/awstats.pl

Ahora llega el momento de configurar nuestra instancia de AWStats. Esto habrá que hacerlo para cada dominio que tengamos siempre que cada uno de ellos genere un archivo de registro (log) diferente, que es lo habitual y es como lo hemos hecho en el apartado 4.1.2. Servidores virtuales. Debemos editar/crear el archivo awstats.nuestro_dominio.conf que se encuentra en /etc/awstats/. En mi caso, la linea a ejecutar sería como sigue:

nano /etc/awstats/awstats.dplinux.net.conf

Dentro de ese archivo debemos pegar lo siguiente:

LogFile="/var/log/apache2/access_dplinux.log"
LogFormat=1
SiteDomain="dplinux.net"
DNSLookup=0
LoadPlugin="tooltips"
LoadPlugin="geoipfree"

Estas configuraciones tendremos que modificarlas en función de la configuración de nuestro archivo de configuración ‘000-default’ que hemos dejado a punto en el apartado 4.1.2. Servidores virtuales. Además hemos habilitado el plugin ‘tooltip’ que nos mostrará un mensaje de descripción de cada elemento que aparezca en las estadísticas. También se habilita ‘geoipfree’ que sirve para ofrecer estadísticas geográficas en función de la IP del cliente.

El siguiente paso es modificar los permisos de la carpeta de registros (logs) de Apache para que AWStats pueda tener acceso a ella:

chmod 755 /var/log/apache2

Ahora hay que configurar el servicio cron de Linux. Este servicio ejecuta procesos periódicamente. Es necesario ya que AWStats necesita leer los registros cada cierto tiempo para elaborar las estadísticas. Para ello, ponemos en consola como root esto:

nano /etc/crontab

Entonces nos aparecerá un texto como el siguiente:

crontab
Contenido inicial del archivo Crontab

Después de la última linea debemos pegar esto:

*/10 * * * * root /usr/lib/cgi-bin/awstats.pl -config=dplinux.net -update > /dev/null

Esta linea significa que cada 10 minutos se va a ejecutar el script awstats.pl con usuario root usando la configuración para dplinux.net. El tiempo podemos modificarlo, aunque 10 minutos es un periodo razonable. El apartado -config debemos configurarlo con nuestro dominio.

Una vez modificado el archivo contrab, guardamos y salimos de Nano.

Lo habitual es que no queramos que las estadísticas sean públicas y debido a que se accede a ellas desde la web, debemos tomar medidas para preservar la privacidad de las mismas así que ahora vamos a configurar un nombre de usuario y una contraseña.

Nos vamos al directorio /usr/lib/cgi-bin/ y creamos un archivo .htaccess con las siguientes órdenes como root:

cd /usr/lib/cgi-bin/
touch .htaccess
nano .htaccess

El archivo aparece vacío y en el pegaremos lo siguiente:

<Files "awstats.pl">
AuthName "Introduzca credenciales"
AuthType Basic
AuthUserFile /var/www/awstats/.htpasswd
require valid-user
</Files>

Con esto estamos diciendo que cuando se acceda al archivo awstats.pl desde el navegador, se requerirán credenciales para poder visualizarlo. Ese archivo es el que genera la vista de las estadísticas en nuestro navegador.

Cuando hayamos guardado y salido de nano, debemos crear la carpeta awstats en var/www/html/:

cd /var/www/html
mkdir awstats
cd awstats

Ahí ejecutamos la siguiente linea como root:

htpasswd -c /var/www/html/awstats/.htpasswd nombre_de_usuario_para_ver_estadisticas

En ese momento nos pedirá la contraseña para el usuario. Ponemos la que queramos:

awstats clave
Creación de credenciales para acceder a AWStats

Ahora editamos el archivo de configuración de nuestros sitios:

nano /etc/apache2/sites-available/000-default.conf

Al final de la sección VirtualHost de la que queramos obtener estadísticas, pegamos esto:

Alias /icon/ /usr/share/awstats/icon/
   <Directory /usr/share/awstats/icon>
      Options None
      AllowOverride None
      Require all granted
      Allow from all
   </Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
   <Directory "/usr/lib/cgi-bin">
      AllowOverride All
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
      Require all granted
      Allow from all
   </Directory>

Alias /awstatsclasses "/usr/share/awstats/lib/"
Alias /awstats-icon/ "/usr/share/awstats/icon/"
Alias /awstatscss "/usr/share/doc/awstats/examples/css"
ScriptAlias /estadisticas/ /usr/lib/cgi-bin/

Con esto decimos que, en algún momento, querremos acceder al contenido del directorio /usr/lib/cgi-bin que es donde se encuentra AWStats. Esto se hace a traés de un enlace simbólico con la función ‘ScriptAlias’. Además hemos dicho que al acceder a la carpeta ‘/estadisticas’ de nuestra web, ejecute el contenido de ‘/usr/lib/cgi-bin’. Esta ruta se puede modificar en la última linea que hemos pegado. Por otra parte se han habilitado algunas opciones, como el archivo .htaccess (necesario para que funcione la protección con contraseña), la ejecución de scripts CGI y los enlaces simbólicos.

Ahora debemos generar las estadísticas por primera vez con la siguiente linea:

/usr/lib/cgi-bin/awstats.pl -config=dplinux.net -update

Para finalizar, habilitamos el módulo CGI y reiniciamos Apache:

a2enmod cgi
/etc/init.d/apache2 restart

Ahora podremos acceder a nuestra estadísticas a través de la siguiente dirección: http://tudominio.com/estadisticas/awstats.pl

Posibles problemas que puede surgir

Error: SiteDomain parameter not defined in your config/domain file. You must edit it for using this version of AWStats:

Revisa que /etc/awstats/awstats.tudominio.conf tiene todos los campos correctamente escritos y que no hay más configuraciones de las indicadas. Si las hay, déjalas comentadas

No se ven los iconos:

En /etc/apache2/sites-available/default prueba cambiando el campo Alias /icon/ /usr/share/awstats/icon/ por Alias /awstats-icon/ /usr/share/awstats/icon/

4.2. Sistema de gestión de base de datos MariaDB (MySQL)

Procedimiento

Como root:

apt-get update
apt-get install mariadb-server
mysql -u root
CREATE USER 'alejandro'@'localhost' IDENTIFIED BY 'contraseña';
GRANT ALL PRIVILEGES ON *.* TO 'alejandro'@'localhost';
FLUSH PRIVILEGES;
exit
service mysql restart

Seguir el proceso guiado de configuración.

Explicación

Si queremos tener disponibles webs con cierta complejidad y, sobre todo, si usamos un CMS (gestor de contenido), deberemos tener disponible una base de datos. Una de los sistemas de gestión de base de datos más extendidos es MySQL, un proyecto de código abierto que inició Sun Microsystems. Hace unos años Sun fue comprada por Oracle y el miedo de los desarrolladores a que el nuevo dueño diera giro cerrando la licencia, provocó que se creara una bifurcación con las mismas funciones que MySQL. Esa bifurcación se llama MariaDB y con el tiempo se ha ido convirtiendo en el estándar de facto. A pesar de que la mayoría de distribuciones ofrecen tanto MySQL como MariaDB, la tendencia es a ir dejando de dar soporte a MySQL.

Para instalar MariaDB debemos escribir la siguiente linea como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install mariadb-server

Aceptamos las dependencias y comienza la instalación. Al cabo de los minutos se inicia automáticamente la configuración de la base de datos donde tendremos que introducir la contraseña del usuario root de la base de datos (no tiene por qué coincidir con la contraseña root del sistema).

mariadb clave
Petición de contraseñar para el usuario ‘root’ de MariaDB

Unos segundos después finaliza la instalación y ya tenemos nuestro sistema de gestión de base de datos listo.

Hasta ahora, se podía acceder al usuario root de MySQL desde cualquier usuario del sistema, pero desde Debian 9 Stretch, no es posible acceder al usuario root de la base de datos desde otros usuarios diferentes al root del sistema. Eso quiere decir que cuando desde www-data (Apache) se intenta acceder a la base de datos como superusuario, va a salir un error (SQLSTATE[HY000] [1698]), por lo que hay que crear un nuevo usuario en la base de datos y darle privilegios de administrador:

mysql -u root
CREATE USER 'alejandro'@'localhost' IDENTIFIED BY 'contraseña';
GRANT ALL PRIVILEGES ON *.* TO 'alejandro'@'localhost';
FLUSH PRIVILEGES;
exit
service mysql restart

Existen dos formas de gestionarla: desde la linea de comandos o gráficamente a través del navegador con phpMyAdmin.

4.2.1. Gestión desde la linea de comandos

Procedimiento

mysql -u root -p

Crear base de datos (desde mysql):

create database dplinux;

Mostrar bases de datos disponibles (desde mysql):

show databases;

Importar base de datos (desde consola del sistema):

mysql -p -u root nombre_bd < archivo.sql

Exportar base de datos (desde consola del sistema):

mysqldump -u root -pclave_bd nombre_bd > archivo.sql

Explicación

Desde la consola se pueden realizar todo tipo de operaciones y resulta especialmente práctica si queremos automatizar tareas como hacer una copia de seguridad periódica de una base de datos.

Si queremos crear una base de datos, debemos escribir esto en consola:

mysql -u root -p

De esa forma entramos en la linea de comandos del SGBD:

dentro mysql
Consola de MariaDB (mysql)

Ahí debemos escribir la siguiente orden:

create database dplinux;
crear bd
Base de datos creada en MariaDB

Para mostrar las bases de datos disponibles, escribimos lo siguiente:

show databases;
mostrar bd
Listado de bb.dd. disponibles

Para importar una base de datos existente salimos de mysql con el comando exit y desde consola tan solo tenemos que escribir esto:

mysql -p -u root nombre_bd < archivo.sql

En ese momento, nos pide la contraseña y se realiza la importación. Es importante tener en cuenta que la base de datos debe existir por lo que hay que crearla previamente. Si no, no se realizará la importación.

Para exportar una base de datos, escribimos esto en consola:

mysqldump -u root -pclave_bd nombre_bd > archivo.sql

Nótese que al modificador -p va unido a la clave. De esta forma no será necesario introducir la clave cada vez que se exporta, por lo que es la forma adecuada si queremos automatizar el proceso, siempre que nos aseguremos de que nadie pueda leer la contraseña que introducimos.

4.2.2. Gestión con phpMyAdmin

Procedimiento

Como root:

apt-get update
apt-get install phpmyadmin

Acceder a través de http://nuestra_ip/phpmyadmin

Explicación

Para gestionar las bases de datos desde el navegador, lo primero es instalar phpMyAdmin como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install phpmyadmin

Aceptamos las dependencias y esperamos unos minutos. Durante el proceso de instalación pregunta cuál es nuestro servidor web:

phpmyadmin 1
Elección de servidor web

Debemos indicar que es ‘apache’ con la barra espaciadora. Después pulsamos intro y continúa la instalación. Más adelante nos preguntará si queremos que se cree autimáticamente la base de datos necesaria para el funcionamiento de phpMyAdmin o queremos crearla manualmente. Debemos elegir ‘Sí’,

Luego nos pregunta por la contraseña de administrador del sistema de gestión de base de datos. Debemos introducir la contraseña que hemos elegido para root a la hora de instalar MariaDB.

phpmyadmin 3
Contraseña ‘root’ de MariaDB

Ahora hay que introducir una contraseña para phpMyAdmin. Es posible usar la misma contraseña que hemos usado para MariaDB aunque puede ser otra:

phpmyadmin 4
Contraseña para phpMyAdmin

Unos segundos después finaliza el proceso de instalación. Podemos comprobar el correcto funcionamiento desde nuestro navegador a través de la dirección http://nuestra_ip/phpmyadmin

phpmyadmin 5
Petición de credenciales de phpMyAdmin

Como usuario introducimos root y ponemos nuestra contraseña de MariaDB.

phpmyadmin 6
Ventana principal de phpMyAdmin

Aquí ya podemos realizar las operaciones que queramos relacionadas con las bases de datos almacenadas en nuestro servidor.

4.3. PHP

Procedimiento

Como root:

apt-get update
apt-get install php7.0 libapache2-mod-php7.0 php7.0-mysql

Explicación

PHP es un lenguaje de programación interpretado que permite generar documentos html en función de ciertas variables. Si quieres poder ejecutar código PHP en tu servidor, debes instalar el intérprete y el módulo para Apache. PHP es un lenguaje de programación muy extendido que se usa en prácticamente todos los CMS.

Para instalar PHP debes ejecutar la siguiente linea como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install php7.0 libapache2-mod-php7.0 php7.0-mysql

En cuestión de segundos se instala y configura todo lo necesario.

4.3.1. Aumentar el límite de subida de archivos

Procedimiento

Como root:

nano /etc/php/7.0/apache2/php.ini

Modificar valores de los parámetros ‘upload_max_filesize‘ y ‘post_max_size‘.

Explicación

PHP es un lenguaje que se usa en multitud de ámbitos y uno de ellos es en la subida de archivos a nuestro servidor. Por defecto, el límite de tamaño de dichos archivos es de tan solo 2 Mb por lo que todas las aplicaciones web que hagan uso de PHP para transferir archivos, verán su capacidad de subir archivos limitada a esa cantidad.

Para aumentar dicho límite, debemos modificar el archivo php.ini que se encuentra en /etc/php5/apache2/. Para ello como root (2.3. Entrar como root y salir de root):

nano /etc/php/7.0/apache2/php.ini

Ahora tenemos que encontrar los parámetros ‘upload_max_filesize’ y ‘post_max_size’. Podemos usar el buscado de nano presinando ctrl+w (2.2. Operaciones con el editor de texto Nano):

upload max filesize php
Parámetro ‘upload_max_filesize’ del archivo de configuración ‘php.ini’
post max size php
Parámetro ‘post_max_size’ del archivo de configuración ‘php.ini’

Los valores que vienen por defecto se modifican a nuestro gusto. Si queremos que el límite esté en 2 Gb, ponemos 2048M en ambos parámetros.

Una vez realizado el cambio, reiniciamos Apache con:

/etc/init.d/apache2 restart

5. Instalación de CMS

Un CMS (Content management system o sistema de gestión de contenidos) es un paquete de software que permite crear páginas para una finalidad determinada sin demasiado esfuerzo. Con ellos podremos crear blogs, mantener foros, tener almacenamiento en la nube y mantener otros servicios web de cierta complejidad de una forma sencilla.

El procedimiento habitual consiste en descargar el CMS, crear una base de datos y seguir los pasos del asistente de instalación. Pero cada gestor de contenidos tiene sus peculiaridades y hay ciertos detalles que producen pequeñas diferencias en el proceso de instalación.

5.1. WordPress

Procedimiento

Instala Apache (4.1. Servidor web Apache), PHP (4.3. PHP) y MariaDB (4.2. Sistema de gestión de base de datos MariaDB (MySQL)).

Como root :

wget https://es.wordpress.org/wordpress-4.8.1-es_ES.tar.gz
tar xzvf wordpress-4.8.1-es_ES.tar.gz
mv /home/alejandro/wordpress /var/www/html/
chown -R www-data:www-data /var/www/html/wordpress/

Sigue los pasos del asistente de instalación a través de http://nuestra_ip/wordpress

Habilitar archivo .htaccess (4.1.3. Habilitar el archivo .htaccess).

nano /var/www/html/wordpress/.htaccess

Pegar esto:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /wordpress/
   RewriteRule ^index\.php$ - [L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . wordpress/index.php [L]
</IfModule>

Ir a Ajustes > Enlaces permanentes y elegir el formato de enlace.

Explicación

WordPress es el CMS para la creación de blogs más popular. Dispone de una gran comunidad detrás que crea y mantiene plugins que añaden interesantes funciones a este gestor de contenidos.

Existen dos formas de instalar WordPress: a través del gestor de paquetes APT o manualmente. La instalación a través del gestor de paquetes tiene como inconveniente que las posibilidades de elección de ciertos componentes (como el sistema de gestión de base de datos) se restringe a las dependencias del paquete.

En nuestro caso, realizaremos una instalación manual ya que no tendremos las mismas ataduras y tendremos un mejor control de la instalación.

Primero descargamos el CMS. Para conocer el enlace de descarga de la última versión disponible en .tar.gz, nos vamos a su web: https://es.wordpress.org/

Para la descarga con wget, escribimos esto en consola:

wget https://es.wordpress.org/wordpress-4.8.1-es_ES.tar.gz
wordpress 1
Descarga de WordPress con wget

Una vez descargado, lo descomprimimos en la carpeta de páginas de Apache. Suponiendo que la carpeta raíz se encuentra en /var/www/html, podemos elegir una subcarpeta como /wordpress. Como root (2.3. Entrar como root y salir de root):

tar xzvf wordpress-4.8.1-es_ES.tar.gz
mv /home/alejandro/wordpress /var/www/html/
chown -R www-data:www-data /var/www/html/wordpress/

Lo que hemos hecho ha sido descomprimir el archivo .tar.gz en la carpeta personal del usuario, moverla a la capeta de las web de Apache y cambiar el propietario del contenido a www-data para que Apache pueda acceder y manipular el contenido cuando lo necesite.

Ahora queda configurar WordPress. Creamos una base de datos con el nombre que queramos. En mi caso la voy a nombar ‘wordpress’ y va a ser creada desde la linea de comandos:

wordpress 4
Creación de base de datos ‘wordpress’ en MariaDB

Ahora ejecutamos el asistente de instalación de WordPress abriendo con un explorador web la dirección de nuestro servidor junto a la subcarpeta donde hemos copiado el CMS: http://nuestra_ip/wordpress y nos aparece esta pantalla:

wordpress 2
Asistente de instalación de WordPress

A continuación nos pregunta por los detalles de conexión al sistema de gestión de base de datos. Los campos que debemos rellenar son:
· Nombre de la base de datos debe de coincidir con el anteriormente introducido
· El nombre de usuario será «root»
· La contraseña es la que hemos introducido al instalar MariaDB.

El resto de campos los podemos dejar como están, a no ser que tengamos una muy buena razón para cambiarlos:

wordpress 3
Datos de configuración en el asistente de instalación

Cuando finaliza la configuración de la base de datos, nos pide los detalles del sitio: nombre, usuario administrador, contraseña y demás:

wordpress 5
Descripción del sitio y datos de administrador

Hacemos clic en «Instalar WordPress» y ya está:

wordpress 6
Mensaje de fin de instalación de WordPress

Ya podemos crear contenido y personalizar la estética a nuestro gusto.

wordpress 7
Portada con entrada de pruebas

Configuración de los enlaces permanentes

WordPress ya está funcionando y, en principio, no hay que configurar nada más. Pero a veces resulta recomendable que las direcciones (URL) estén relacionadas con el contenido. Desde el punto de vista del SEO y la estética, no es lo mismo una dirección del estilo http://nuestro_dominio/?p=339 que http://nuestro_dominio/titulo_entrada.

Para conseguir que las direcciones a nuestra entrada tengan ese aspecto, primero debemos activar el archivo .htaccess (4.1.3. Habilitar el archivo .htaccess) y luego hay que editarlo (2.2. Operaciones con el editor de texto Nano) en la carpeta donde está instalado WordPress (/var/www/html/wordpress/ en nuestro caso). Para ello escribimos en consola como root:

nano /var/www/html/wordpress/.htaccess

Normalmente aparecerá el siguiente contenido:

wordpress 8
Contenido de .htaccess en la subcarpeta de WordPress

En caso de que no encuentres esas lineas, deberás copiarlas y guardar el archivo. Para que te resulte más fácil, puedes hacer un copia&pega de lo siguiente, no olvidando cambiar /wordpress/ (en RewriteBase) por tu subcarpeta en el caso de que sea diferente:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /wordpress/
   RewriteRule ^index\.php$ - [L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . wordpress/index.php [L]
</IfModule>

Una vez tengas ese texto en el archivo .htaccess, deberás ir a WordPress desde el navegador a la sección Ajustes > Enlaces permanentes:

wordpress 9
Ajustes de enlaces permanentes

Ahí eliges la estructura que consideres más apropiada y guardas los cambios. Ahora ya deberían funcionar los enlaces permanentes con la estructura que has elegido.

wordpress 10
Acceso a la entrada de prueba a través de enlace con título

Si te aparece un «error 403 Forbidden», debes asegurarte de que en has configurado adecuadamente la sección Directory del archivo de configuración 000-default a la hora de habilitar el archivo .htacces tal y como se ha explicado en la sección 4.1.3. Habilitar el archivo .htaccess. Si te encuentras con este error, debes añadir esta linea a la sección Directory de tu VirtualHost (2.4. Archivos de configuración y secciones):

Options Indexes FollowSymLinks MultiViews

5.2. OwnCloud

Procedimiento

Instala Apache (4.1. Servidor web Apache), PHP (4.3. PHP) y MariaDB (4.2. Sistema de gestión de base de datos MariaDB (MySQL)).

Como root:

wget https://download.owncloud.org/community/owncloud-10.0.2.tar.bz2
tar xjvf owncloud-10.0.2.tar.bz2
mv /home/alejandro/owncloud /var/www/html/
chown -R www-data:www-data /var/www/html/owncloud/
apt-get update
apt-get install curl libcurl3 php7.0-curl php7.0-gd php7.0-json php7.0-intl php7.0-mcrypt php7.0-imagick php7.0-zip php7.0-dom php7.0-mb
/etc/init.d/apache2 restart
mysql -u root -p
create database owncloud;
mkdir /home/usuario/datos_owncloud/
chown -R www-data:www-data /home/usuario/datos_owncloud/

Habilitar el archivo .htaccess (4.1.3. Habilitar el archivo .htaccess).

Recomendable acceder a ownCloud a través de una conexión cifrada (4.1.5. Página segura HTTPS con SSL-RSA).

Configurar ownCloud a través de http://nuestra_ip/owncloud

Seguir los pasos del apartado 4.3.1. Aumentar el límite de subida de archivos.

Explicación

OwnCloud es un CMS que permite montar tu servicio de almacenamiento «en la nube». En realidad no sería lo que se conoce como nube ya que estaría alojado en tu servidor, pero su funcionamiento sería el mismo. El servicio homólogo más conocido es Dropbox.

Para montar un servicio con ownCloud debes tener en cuenta las limitaciones de tus recursos principalmente marcadas por tu conexión a Internet. La velocidad de transferencia de archivos puede ser demasiado lenta con grandes volúmenes de datos cuando se trabaja sobre conexiones ADSL (o cualquier otra conexión con gran asimetría entre el caudal de subida y bajada).

No obstante te permite almacenar tantos datos como capacidad tenga el disco duro del servidor y si disponemos de una buena conexión a Internet o trabajamos principalmente a través de una red local, puede ser una buena opción.

Para instalar Owncloud lo primero que debemos hacer es descargar el CMS desde su web. Por alguna razón, la web de descargas es un poco enrevesada. Una vez estamos dentro de owncloud.org (no confundir con .com), nos vamos a la sección de descargas:

owncloud 1
Página de descargas de ownCloud

En el apartado 1 «Download ownCloud», hacemos clic en «Download». Ahí nos aparece esta ventana:

owncloud 2
Opciones de decarga

En el primer paso que aparece hay dos enlaces, uno para descargar un archivo .tar.bz2 y otro para un archivo .zip. Descargamos el .tar.bz2. Una forma de descargarlo directamente en nuestro servidor es desde la consola con este comando:

wget https://download.owncloud.org/community/owncloud-10.0.2.tar.bz2

¡Ojo! Ese enlace es para la versión 8.0.3 que la última en el momento de escribir esta guía, pero salen nuevas versiones constantemente por lo que deberás asegurarte de descargar la última versión yendo a la web de descargas y copiando el enlace allí publicado.

Una vez descargado, lo descomprimimos a nuesta carpeta web configurada en el VirtualHost (4.1.2. Servidores virtuales) que en nuestro caso es /var/www/html/. Como root (2.3. Entrar como root y salir de root):

tar xjvf owncloud-10.0.2.tar.bz2
mv /home/alejandro/owncloud /var/www/html/
chown -R www-data:www-data /var/www/html/owncloud/

Lo que hemos hecho ha sido descomprimir el archivo .tar.gz en la carpeta personal del usuario, moverla a la capeta de las web de Apache y cambiar el propietario del contenido a www-data para que Apache pueda acceder y manipular el contenido cuando lo necesite.

Si has instalado Debian 9 de 32 bits, debemos instalar cURL para PHP, una herramienta que permitirá manejar archivos de más de 4Gb. Sin ella, tendremos problemas con archivos grandes. Para ello, en consola como root:

apt-get update
apt-get install curl libcurl3 php7.0-curl php7.0-gd php7.0-json php7.0-intl php7.0-mcrypt php7.0-imagick php7.0-zip php7.0-dom php7.0-mb

Y reiniciamos el servidor Apache con:

/etc/init.d/apache2 restart

Ahora hay que crear una base de datos en MariaDB. Para ello ejecutamos esta orden en consola:

mysql -u root -p

Introducimos nuestra contraseña del usuario root de la base de datos (no del usuario root del sistema) y escribrimimos esto en la consola de mysql:

create database owncloud;

El nombre de la base de datos que hemos elegido es owncloud, pero podría ser cualquier otro.

owncloud 4
Creación de la base de datos para ownCloud

Para finalizar con la configuración preliminar, hay que habilitar el archuvo .htaccess (4.1.3. Habilitar el archivo .htaccess). Es muy recomendable acceder a ownCloud a través de una conexión cifrada (4.1.5. Página segura HTTPS con SSL-RSA) porque de lo contrario, una escucha (por ejemplo a través de una red Wifi pública), comprometerá la privacidad de los datos. Así pues, la habilitación del archivo .htaccess deberá incluirse en el archivo de configuración para sitios seguros.

Ahora llega el momento de configurar el CMS en sí. Así que nos metemos desde un navegador en http://nuestra_ip/owncloud. Esa será la dirección siempre que la subcarpeta que hayamos elegirdo sea /owncloud.

Debian 9 owncloud 10
Asistente de configuración de ownCloud

Tanto el nombre de usuario como la contraseña la podremos elegir a gusto.

Hay que tener muchísimo cuidado con la carpeta que elegimos para almacenar los datos ya que, como reza el mensaje de advertencia que aparece, si elegimos una subcarpeta accesible, cualquiera podría ver nuestros datos.

Tenemos dos opciones: prohibir el acceso a dicha carpeta configurando el archivo .htaccess o elegir otra carpeta. Si queremos almacenar el contenido en otra partición o disco físico, deberemos poner la ruta de montaje. Un ejemplo de carpeta para almacenar los datos sería /home/usuario/datos_owncloud. Recuerda que a dicha carpeta debe poder acceder y escribir Apache por lo que habría que, o bien modificar los permisos de la misma, o bien cambiar el propietario de la siguiente forma:

mkdir /home/usuario/datos_owncloud/
chown -R www-data:www-data /home/usuario/datos_owncloud/

Para el nombre de usuario y contraseña de la base de datos, introducimos como usuario ‘root’ y la contraseña de MariaDB. El nombre de la base de datos será el mismo que hemos usado en su creación, en nuestro caso ‘owncloud’.

Hacemos clic en «Completar la instalación» y cuestión de segundos tenemos OwnCloud completamente operativo.

owncloud 6
Pantalla de bienvenida de ownCloud

Ahora queda un pequeño detalle opcional. Como vemos, el tamaño máximo de los archivos que podemos subir vía web es de tan solo 2Mb.

owncloud 7
Límite de 2 Mb en la subida de archivos

Eso se debe a la configuración de PHP. Para aumentar este límite deberemos seguir los pasos descritos en el apartado 4.3.1. Aumentar el límite de subida de archivos.

owncloud 8
Aumento del límite a 2 Gb

Ahora el límite es de 2Gb.

5.3. Moodle

Procedimiento

Instala Apache (4.1. Servidor web Apache), PHP (4.3. PHP) y MariaDB (4.2. Sistema de gestión de base de datos MariaDB (MySQL)).

Como root:

wget https://download.moodle.org/download.php/stable33/moodle-latest-33.tgz
tar xzvf moodle-latest-33.tgz
mv /home/alejandro/moodle /var/www/html/
chown -R www-data:www-data /var/www/html/moodle/
nano /etc/apache2/sites-available/000-default.conf

Creamos sección Directory dentro de nuestro VirtualHost:

<Directory "/var/www/html/moodle">
   Options Indexes FollowSymLinks MultiViews
   AllowOverride All
   Require all granted
   Allow from all
   AcceptPathInfo On
</Directory>
apt-get update
apt-get install php5-xmlrpc php5-intl
/etc/init.d/apache2 restart
mkdir /home/usuario/datos_moodle/
chown -R www-data:www-data /home/usuario/datos_moodle/

Configurar a través de http://nuestra_ip/moodle

Explicación

Moodle es una plataforma enfocada a la enseñanza que se usa en numerosas universidades de todo el mundo. Desde ella se pueden gestionar avisos, mensajes, documentos, archivos… y toda la información relacionada con las distintas asignaturas.

Para su instalación, lo primero que debemos hacer es descargar el CMS desde su web. Para descargarlo desde la consola en nuestro servidor, tan solo tenemos que escribir lo siguiente:

wget https://download.moodle.org/download.php/stable33/moodle-latest-33.tgz

Téngase en cuenta que cada poco tiempo aparece una nueva versión de la plataforma por lo cuando leas esta guía, deberás comprobar el enlace al archivo más actual en moodle.org.

Ahora descomprimimos el archivo, movemos el contenido a la carpeta web y cambiamos el propietario del contenido a www-data para que Apache pueda acceder y manipular el contenido cuando lo necesite, todo ello como root (2.3. Entrar como root y salir de root):

tar xzvf moodle-latest-33.tgz
mv /home/alejandro/moodle /var/www/html/
chown -R www-data:www-data /var/www/html/moodle/

Ahora tendremos que configurar algunos parámetros de nuestro servidor web y PHP. En primer lugar nos vamos al archivo de configuración de nuestro sitio (2.2. Operaciones con el editor de texto Nano):

nano /etc/apache2/sites-available/000-default.conf

Dentro de la sección Directory para Moodle (2.4. Archivos de configuración y secciones) añadimos esta linea:

AcceptPathInfo On

Si no dispones de sección Directory para Moodle, deberás crearlo como en esta imagen:

moodle 5
Sección ‘Directory’ para Moodle en ‘000-default.conf’

Para que te resulte más fácil, puedes copiar y pegar este texto:

<Directory "/var/www/html/moodle">
   Options Indexes FollowSymLinks MultiViews
   AllowOverride All
   Require all granted
   Allow from all
   AcceptPathInfo On
</Directory>

Deja todas las lineas como están, excepto el parámetro ‘Directory’ donde tendrás que poner la ruta donde has descomprimido Moodle.

Ahora debemos instalar un par de extensiones para PHP. En consola como root:

apt-get update
apt-get install php5-xmlrpc php5-intl

Una vez hecho esto, reiniciamos Apache con:

/etc/init.d/apache2 restart

Accedemos a la subcarpeta desde un navegador web a través de http://nuestra_ip/moodle o bien, desde nuestro dominio.

moodle 1
Selección de idioma en el asistente de instalación de Moodle

Elegimos el idioma y le damos a siguiente:

moodle 2
Configuración de la ruta para datos

En esta pantalla debemos tener cuidado con un par de cosas. Por una parte debemos elegir la dirección web correctamente. Es posible que estemos accediendo a nuestro servidor web desde su IP local (http://nuestra_ip/moodle). En ese caso, deberemos modificar el campo «Dirección Web» a la dirección pública ya que en caso contrario, los recursos como imágenes no se enlazarán correctamente y desde el exterior la plataforma no funcionará como debe.

En el caso de la dirección de datos, debemos tener especial cuidado ya que si no configuramos un archivo .htaccess para evitar que la carpeta por defecto no tenga acceso, cualquiera podría acceder a los datos a través de esa subcarpeta. Para solucionar este problema tenemos dos opciones: limitar el acceso a esa subcarpeta o mover el directorio de datos a otro lugar. En caso de moverlo, debemos dar a la nueva carpeta permisos para que Apache pueda leer y escribir en ella. Si por ejemplo elegimos la carpeta /home/usuario/datos_moodle, debemos escribir en consola como root lo siguiente:

mkdir /home/usuario/datos_moodle/
chown -R www-data:www-data /home/usuario/datos_moodle/

Sea cual sea nuestra elección, una vez configurado todo, hacemos clic en siguiente.

En la siguiente ventana nos pide elegir el tipo de base de datos. En nuestro caso será «MariaDB nativo/mariadb».

moodle 3
Elección del tipo de SGBD

Al hacer clic en siguiente nos pedirá los datos de la base de datos. Tan solo debemos rellenar los campos «nombre de la base de datos», «Usuario de la base de datos» y «Contraseña de la base de datos».

moodle 4
Configuración de a base de datos

Después de aceptar las condiciones de la licencia, nos aparece una ventana indicando las configuraciones y requisitos que cumplimos y cuales no. En principio deberíamos cumplirlos todos:

moodle 6
Dependencias cumplidas para la instalación de Moodle

Hacemos clic en continuar y en cuestión de segundos comienza el proceso automático de instalación.

moodle 7
Mensajes de estado durante la instalación

Cuando finalice, hacemos clic en «Continuar» (al final de la página). En la siguiente pantalla nos pregunta por una serie de datos como el nombre de usuario y contraseña para el usuario administrador y otros detalles sin importancia que se rellenarán a gusto.

moodle 8
Datos del usuario administrador

Para terminar, debemos rellenar los datos básicos sobre nuestra instancia de Moodle.

moodle 9
Descripción de la página

Cuando le demos a «Guardar cambios», tendremos nuestro sitio completamente configurado y funcionando.

moodle 10
Moodle funcionando

6. Intercambio de archivos P2P

Debido al gran tamaño de ciertos archivos compartidos, es habitual tener un cliente de intercambio de archivos (P2P) en funcionamiento durante varios días. Si quieres descargar distribuciones Linux, programas libres o películas, series y música con una licencia abierta y además quieres participar en la diseminación de dicho material, podrás aprovechar tu servidor (o montar uno dedicado) para este propósito.

Existen dos protocolos muy extendidos: BitTorrent y Ed2k. El primero de ellos es un servicio semicentralizado en el que intervienen una serie de servidores llamados trackers y además cuenta con una técnica llamada DHT que permite el intercambio de fuentes entre pares.

El protocolo Ed2k tiene un funcionamiento similar pero cuenta con un buscador de archivos centralizado lo cual facilita la búsqueda de archivos raros, antiguos y poco extendidos. En este caso existen servidores donde se intercambian fuentes y además se hace uso de una red llamada Kad. Kad es una red totalmente descentralizada por lo que resulta prácticamente imposible tirarla. Por contra tiene que es algo lenta realizando búsquedas y obteniendo fuentes.

Ambos clientes se van a ejecutar en el servidor como demonios (procesos en segundo plano) y se van a manejar desde interfaces gráficas remotas, una forma de controlar estos programas con unos requerimientos ínfimos de ancho de banda.

6.1. BitTorrent (Tansmission)

Procedimiento

Como root:

apt-get update
apt-get install transmission-daemon
/etc/init.d/transmission-daemon stop
nano /etc/transmission-daemon/settings.json

Configuramos los parámetros a nuestro gusto. Importante poner «rpc-whitelist»: «*»,

/etc/init.d/transmission-daemon start
mkdir /home/usuario/datos_torrent
chown -R debian-transmission:debian-transmission /home/usuario/datos_torrent

Configuramos el GUI de Transmission o accedemos vía web a través de http://nuestra_ip:9091/transmission

Explicación

Como cliente de BitTorrent vamos a usar uno de los programas más ligeros para tal efecto: Transmission. Para instalarlo, en consola como root (2.3. Entrar como root y salir de root) escribimos esto:

apt-get update
apt-get install transmission-daemon
transmission 1
Dependencias para instalar Transmission

Aceptamos las dependencias y esperamos unos segundos.

Ahora deberemos configurar el cliente y, como de costumbre, hay que editar un archivo de configuración (settings.json) que se encuentra en /etc/transmission-daemon/. Primero detenemos el demonio de Transmission ya que si no, cualquier modificación en el archivo de configuración no se podrá salvar. En consola como root:

/etc/init.d/transmission-daemon stop

Y ahora editamos el archivo de configuración (2.2. Operaciones con el editor de texto Nano):

nano /etc/transmission-daemon/settings.json
transmission 2
Parámetros a modificar en el archivo de configuración ‘settings.json’

Las lineas que nos interesan son las seleccionadas:

 "rpc-password": "{98329c1d6114d131b96db14c331a02e82bf12f4a/HowdYDD",
 "rpc-port": 9091,
 "rpc-url": "/transmission/",
 "rpc-username": "transmission",
 "rpc-whitelist": "127.0.0.1",
 "rpc-whitelist-enabled": true,

· rpc-password es la contraseña para acceder de forma remota a través del cliente GUI:

 "rpc-password": "tu_contraseña",

· rpc-port es el puerto de acceso remoto. Es el que debemos redireccionar en el router si queremos tener la posibilidad de acceder al cliente desde fuera de nuestra red local. En principio debemos dejarlo como está a no ser que tengamos otro servicio usando dicho puerto.
· rpc-url: es la subcarpeta para el acceso a través de la web. La podemos dejar como está.
· rpc-username: indica el nombre de usuario para la conexión. Podemos elegir cualquiera y es recomendable no dejar el que viene por defecto para repeler ataques por fuerza bruta.
· rpc-whitelist es la lista de IP que tienen permiso para acceder de forma remota. En principio debes sustituir lo que hay por *:

"rpc-whitelist": "*",

· rpc-whitelist-enabled: habilita o deshabilita la lista blanca introducida en rpc-whitelist.

Una vez introducidos los valores, volvemos a iniciar el demonio:

/etc/init.d/transmission-daemon start

Ahora debemos instalar el cliente GUI en nuestro ordenador personal. El proceso de instalación dependerá del sistema operativo que uses y, sea cual sea el caso, es un proceso muy sencillo. Cuando abrimos el cliente GUI, nos vamos al menu Edit > Change Session… Nos aparecerá esta ventana:

transmission 3
Conexión a través del cliente gráfico de Transmission

Debemos rellenar los datos de conexión usando nuestra IP o dominio en el campo «Host». El resto de campos tienen que contener las mismas cadenas que hemos introducido en el archivo de configuración. Cuando le damos a OK, tenemos nuestro cliente GUI enlazado de forma remota al cliente de Bittorrent de nuestro servidor.

Ahora llega el momento de configurar todos los parámetros. El más importante de todos es la carpeta de descargas. En menú Edit > Preferences, hacemos clic en la pestaña «Donwloading».

transmission 4
Pestaña de configuración de las descargas

Ahí hacemos clic al botón con el texto «downloads» que se encuentra en la linea «Save to Location».

transmission 5
Ruta para las descargas por defecto

Esa ruta es la que viene por defecto. Lo normal es querer cambiarla a otra partición o disco físico. Para ello tan solo tenemos que introducir la ruta a la carpeta. El demonio de Transmission se ejecuta con un usuario de sistema llamado «debian-transmission», por lo que la carpeta debe ser de su propiedad. En mi caso he decidido almacenar los datos en mi carpeta personal (/home/usuario/datos_torrent). En consola como root ponemos esto:

mkdir /home/usuario/datos_torrent
chown -R debian-transmission:debian-transmission /home/usuario/datos_torrent

Ahora introducimos esa carpeta en el diálogo que nos ha salido anteriormente en el cliente GUI:

transmission 6
Nueva ruta para las descargas de Transmission

Cerramos todas las ventanas y ya nos podemos poner a descargar abriendo, o bien la dirección donde se encuentra el archivo Torrent (Open URL) o abriendo un archivo Torrent que nos hayamos descargado:

transmission 7
Descargas vistas remotamente desde el cliente gráfico

Por último vamos a acceder desde la web a nuestro cliente. Tan solo debemos escribir la dirección http://nuestra_ip:9091/transmission. Entonces nos pregunta por nuestro nombre de usuario y contraseña. Una vez introducido, podremos gestionar nuestras descargas sin necesidad de usar el cliente GUI:

transmission 8
Descargas vistas remotamente a través de la interfaz web

Cada vez que iniciemos el sistema, se iniciará automáticamente el demonio de Transmission.

6.2. eDonkey2000 (aMule)

Procedimiento

Como root:

apt-get update
apt-get install amule-daemon
amuled
echo -n nuestra_clave | md5sum - | cut -d' ' -f1
nano /home/usuario/.aMule/amule.conf

Poner AcceptExternalConnections=1 y ECPassword=clave generada con md5sum

amuled

Nos conectamos con aMuleGUI y lo configuramos a nuestro gusto.

Explicación

El cliente Ed2k para Linux por excelencia es aMule, así que vamos a usar su demonio.

En primer lugar, como root (2.3. Entrar como root y salir de root) actualizamos la base de datos de paquetes:

apt-get update

Después, instalamos amule:

apt-get install amule-daemon

Ejecutamos amuled con nuestro usuario. Es importante salir de la cuenta root antes de hacerlo (2.3. Entrar como root y salir de root):

amuled
amule 1
Inicio fallido de ‘amuled’

Vemos que aparecen varios errores, pero con esta primera ejecución se crea un archivo de configuración que tendremos que editar:

nano /home/usuario/.aMule/amule.conf

De ahí lo que nos interesa es el parámetro AcceptExternalConnections que debremos poner a 1 y ECPassword en donde debemos poner la clave de conexión remota (la que usaremos en el cliente GUI). La contraseña que tenemos que poner no es la cadena que nosotros hayamos elegido sino el resultado de aplicarle el algoritmo MD5. Para saber qué cadena de caracteres se corresponde con nuestra contraseña, debemos ejecutar esto:

echo -n nuestra_clave | md5sum - | cut -d' ' -f1
amule 4
Clave generada con md5sum a partir de nuestra contraseña

El valor que aparezca es el que debemos poner en el campo ECPassword:

amule 2
Parámetros a configurar en ‘amule.conf’

Guardamos y volvemos a ejecutar amuled:

amuled
amule 3
Arranque del demonio de aMule con éxito

Ahora vemos que se mantiene en ejecución. Para poder configurar el resto de parámetros vamos a usar el cliente GUI AmuleGUI que debemos instalar en nuestro ordenador-cliente. Para instalar este programa, lo descargaremos de su web si usamos Windows (http://www.amule.org/) o de los repositorios de nuestra distro:

amule 5
Conexión remota a nuestro servidor a través de aMuleGUI

Ahí nos pide un par de datos relevantes:
· Conectar a: ahí va la IP o dominio de nuestro servidor.
· Contraseña: es la clave que hemos elegido. En nuestro caso era «nuestra_clave».

A partir de ahora ya podemos configurar nuestro cliente de aMule como si estuviera ejecturándose en nuestro PC, aunque en realidad se está ejecutando de forma remota en nuestro servidor:

amule 6
Gestión remota de aMule a través del cliente gráfico aMuleGUI

Cuando reiniciemos el sistema o cerremos la sesión SSH, el demonio de aMule dejará de ejecutarse. Si queremos dejar el demonio de aMule en ejecución aunque cerremos la sesión SSH, debemos usar la herramienta Screen. Para instalarla y usarla, sigue los pasos explicados en la sección 2.5 de nuestra guía de Raspberry Pi.

7. Otros servicios

7.1. Servidor de transferencia de archivos FTP

Procedimiento

Como root:

apt-get update
apt-get install proftpd

Seguimos el proceso guiado de configuración.

adduser dplinux -shell /bin/false -home /home/servidor_ftp
nano /etc/proftpd/proftpd.conf

Añadimos al final esto:

<Global>
   RootLogin off
   RequireValidShell off
</Global>

<Anonymous ~ftp>
   User ftp
   Group nogroup
      <Limit LOGIN>
         AllowAll
      </Limit>
   UserAlias anonymous ftp
   DirFakeUser on ftp
   DirFakeGroup on ftp
   RequireValidShell off
   MaxClients 10
      <Directory *>
         <Limit WRITE>
            DenyAll
         </Limit>
      </Directory>
</Anonymous>

Explicación

El servidor que vamos a usar es ProFTP. Lo primero, como siempre, es su instalación como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install proftpd
proftp 1
Dependencias para la instalación de ProFTP

Aceptamos las dependencias y esperamos unos segundos. Entonces aprece un diálogo donde deberemos elegir la forma de funcionar del servidor FTP que en nuestro caso será «independiente» y pulsamos intro.

proftp 2
Modo de ejecución del servicio

Los usuarios que emplea ProFTP son los usuarios de sistema, por lo que para crear nuevos usuarios con su correspondiente contraseña, tan solo tendremos que crear cuentas de usuario en el sistema. Si por ejemplo queremos crear el usuario ‘dplinux’, hacemos lo siguiente:

adduser dplinux -shell /bin/false -home /home/servidor_ftp
proftp 3
Datos para la creación de un usuario en Linux

Debemos instroducir la contraseña para dicho usuario. El resto de datos que se nos pide son opcionales.

Con esto se crea el usuario dplinux sin shell asociado y su directorio personal será /home/ftp.

Ahora pasamos a configurar el servicio editando (2.2. Operaciones con el editor de texto Nano) el archivo de configuración ‘proftpd.conf’ que se encuentra en /etc/proftpd/:

nano /etc/proftpd/proftpd.conf

Los parámetros quedan bien especificados, pero lo más importante por cuestiones de seguridad es impedir que el usuario ‘root’ pueda usar el servicio FTP. La razón es que la mayor parte de los ataques por fuerza bruta usan este usuario como objetivo del ataque. Para ello añadimos al final del archivo el siguiente texto:

<Global>
   RootLogin off
   RequireValidShell off
</Global>

Si queremos permitir el acceso a usuario anónimos (anonymous) al servidor, debemos pegar lo siguiente al final del archivo de configuración:

<Anonymous ~ftp>
   User ftp
   Group nogroup
      <Limit LOGIN>
         AllowAll
      </Limit>
   UserAlias anonymous ftp
   DirFakeUser on ftp
   DirFakeGroup on ftp
   RequireValidShell off
   MaxClients 10
      <Directory *>
         <Limit WRITE>
            DenyAll
         </Limit>
      </Directory>
</Anonymous>

Con esta configuración, el usuario ‘anonymous’ tendrá acceso al contenido de la carpeta /home/ftp. La carpeta se puede cambiar en el parámetro ‘Anonymous’ (primera linea).

Para comprobar que el servidor funciona, podemos usar un navegador web. En mi caso voy a probar el contenido de mi carpeta personal:

proftp 4
Carpeta personal a través de FTP

Desde ahí tengo acceso a todas las carpetas con los permisos de lectura/escritura correspondientes a los distintos elementos (2.6. Propietarios y permisos en archivos y carpetas).

El servicio FTP resulta práctico, no solo para poder gestionar archivos desde un cliente FTP sino también para que los CMS puedan gestionar sus actualizaciones, plugins y demás.

7.2. Intercambiador de correo

A menudo resulta interesante tener la posibilidad de enviar correo electrónico desde nuestro servidor. La situación más habitual es que los CMS que estamos usando manden avisos sobre nuevos mensajes en espera, pero el hecho de poder enviar correo abre otras posibilidades interesantes como automatizar el envío de copias de seguridad de bases de datos y otro contenido periódicamente.

Una posibilidad es montar un servidor de correo electrónico, pero normalmente no resulta práctico ya que la mayoría de los servicios de correo eliminan los mensaje recibidos desde destinatarios poco conocidos y en el mejor de los casos tus mensajes acabarán en la carpeta de SPAM.

Para poder enviar correo desde un servicio fiable es necesario un intercambiador de correo (Mail Transfer Agent). En nuestro caso vamos a usar Exim4.

7.2.1. Enviar correo a través de una cuenta de Gmail

Procedimiento

Como root:

apt-get update
apt-get install exim4
dpkg-reconfigure exim4-config

> «el correo se envía mediante un ‘smarthost’; se recibe a través de SMTP o fetchmail»
> El nombre del sistema de correo será ‘localhost’.
> Destinos en blanco.
> Configuración del servidor de correo saliente: smtp.gmail.com::587.
> En las dos siguientes ventanas elegimos «No».
> Maildir
> No

nano /etc/exim4/passwd.client

Al final se añade:

*.google.com:tu_cuenta@gmail.com:tu_contraseña
chown root:Debian-exim /etc/exim4/passwd.client
chmod 640 /etc/exim4/passwd.client
update-exim4.conf
invoke-rc.d exim4 restart

Explicación

Para enviar correo desde nuestro servidor, vamos a usar una cuenta de Gmail como intermediaria. Primero instalamos y reconfiguramos Exim4 con las siguientes órdenes como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install exim4
dpkg-reconfigure exim4-config
exim 10
Tipo de servidor de correo

Elegimos la segunda opción «el correo se envía mediante un ‘smarthost’; se recibe a través de SMTP o fetchmail».

El nombre del sistema de correo será ‘localhost’:

exim 11
Nombre del sistema

El siguiente diálogo sirve para aceptar o rechazar la recepción de correos externos. Nuestro objetivo es tan solo que las aplicaciones internas puedan enviar correo, por lo que dejamos la configuración que viene por defecto con la que sólo se aceptarán correos entrantes desde servicios locales:

exim 3
Direcciones IP para correo entrante

Los destinos para los que se acepta correo se dejan en blanco en ambos casos:

exim 12
Dominios destinatarios de correo
exim 13
IPs destinatarias de correo

Para la configuración del servidor de correo saliente deberemos poner la dirección smtp.gmail.com::587:

exim 14
Dirección del servidor SMTP junto a puerto

En las dos siguientes ventanas elegimos «No» ya que no queremos manipular el encabezado de los mensajes y nuestro servidor no va a estar conectado a través de un modem analógico o una conexión de tarificación por tiempo:

exim 15
Manipulación de cabeceras
exim 7
Limites de conexiones

Ahora podemos elegir «mbox» o «Maildir». La opción «mbox» se usa por mucha herramientas mientras que «Maildir» usa un formato más ordenado para la consulta de correos individualmente. En cualquier caso, no será habitual que consultemos el correo ya que el objetivo es enviarlo. Básicamente podemos elegir la opción que más nos guste:

exim 8
Formato de almacenamiento de correo

En el último diálogo elegimos «No» ya que no vamos querer realizar modificaciones de los archivos de configuración:

exim 9
Distribución del archivo de configuración de Exim4

Ahora debemos proporcionar los datos de conexión (nombre de usuario y contraseña) de nuestra cuenta de Gmail que vamos a usar como intermediaria para enviar correos. Para eso tenemos que editar el archivo de configuración passwd.client (2.2. Operaciones con el editor de texto Nano) que se encuentra en /etc/exim4/, así que como root:

nano /etc/exim4/passwd.client

Al final de ese archivo tienes que pegar el siguiente texto:

*.google.com:tu_cuenta@gmail.com:tu_contraseña

Debido a que se almacena tu contraseña directamente en el archivo, podría haber un fallo de seguridad importante en el caso de que la máquina tenga varios usuarios. Para evitar que otros usuarios puedan ver ese archivo, deberás cambiarle los permisos con:

chown root:Debian-exim /etc/exim4/passwd.client
chmod 640 /etc/exim4/passwd.client

De esa forma ese archivo sólo podrá ser leido por el usuario «Debian-exim» (el usuario sobre el que se lanza el demonio Exim4) y root (2.6. Propietarios y permisos en archivos y carpetas). Si eres el único usuario de la máquina-servidor, no hace falta que tomes esta medida.

Para terminar, refrescamos el archivo de configuración y reiciamos Exim4:

update-exim4.conf
invoke-rc.d exim4 restart

Ahora podemos probar si el sistema funciona con la siguiente orden:

echo "Esto es una prueba" | mail -s Asunto_prueba correo_destinatario@dominio.com

7.2.2. Enviar correo sin recurrir a Gmail

Procedimiento

Como root:

apt-get update
apt-get install exim4
dpkg-reconfigure exim4-config

> «Internet site; el correo se envía y recibe directamente usando SMTP»
> El nombre del sistema de correo: nuestro dominio (ej: dplinux.net).
> Se deja como está.
> Añadimos ‘localhost’ al dominio separando con punto y coma.
> La dos siguientes se dejan en blanco.
> No
> Maildir
> No

Explicación

Si lo que queremos es enviar correo directamente desde nuestro servidor, sin intermediarios, debemos instalar y reconfigurar Exim 4 como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install exim4
dpkg-reconfigure exim4-config

Entonces se abrirá el siguiente diálogo:

exim 1
Modo del servidor de correo

De esas opciones, elegimos la primera «Internet site; el correo se envía y recibe directamente usando SMTP». Cuando pulsamos intro, nos pregunta por el nombre del sistema de correo. Podemos poner el que queramos:

exim 2
Nombre del sistema de correo

El siguiente diálogo sirve para aceptar o rechazar la recepción de correos externos. Nuestro objetivo es tan solo que las aplicaciones internas puedan enviar correo, por lo que dejamos la configuración que viene por defecto con la que sólo se aceptarán correos entrantes desde servicios locales:

exim 3
Direcciones desde las que se recibirá correo

Después se hace la misma pregunta que antes, pero relacionada con los dominios. En realidad es irrelevante lo que pongamos ya que ya hemos permitido recibir correo localmente, pero para asegurarnos añadiremos el dominio ‘localhost’ a la lista separado con punto y coma:

exim 4
Dominios desde los que se aceptará correo

Los dos siguientes diálogos los dejamos en blanco.

exim 5
Dominios a los que se envía correo
exim 6
IPs a las que se envía correo

El siguiente diálogo no tiene importancia ya que, bajo ningún concepto vamos a poner a funcionar un servidor a través de un modem analógico o una conexión que tarife por tiempo, así que elegimos «No»:

exim 7
Límite de conexiones

Ahora podemos elegir «mbox» o «Maildir». La opción «mbox» se usa por muchas herramientas mientras que «Maildir» usa un formato más ordenado para la consulta de correos individualmente. En cualquier caso, no será habitual que consultemos el correo ya que el objetivo es enviarlo. Básicamente podemos elegir la opción que más nos guste:

exim 8
Formato del almacenamiento de correos

En el último diálogo elegimos «No» ya que no vamos querer realizar pequeña modificaciones de los archivos de configuración:

exim 9
Distribución del archivo de configuración

Para comprobar el funcionamiento del envío de correos podemos escribir esto en consola:

echo "Esto es una prueba" | mail -s Asunto_probando correo_destinatario@dominio.com

Recordemos que con este método, la mayoría de servicios de correo eliminan los mensajes directamente (ni siquiera se envía a la carpeta SPAM), por lo que en la mayoría de los casos, aparentemente no funcionará.

7.2.3. Envíar archivos adjuntos por correo desde la consola

Procedimiento

Como root:

apt-get update
apt-get install sharutils

Usar esta orden:

(uuencode archivo1 archivo1 ; uuencode archivo2 archivo2; uuencode archivo3 archivo3)| mail -s "Asunto" direccion@correo.com

Explicación

Sea cual sea el método que hemos empleado para enviar correo (recomendado el expuesto en la sección 7.2.1. Enviar correo a través de una cuenta de Gmail), existe una forma de enviar archivos adjuntos a través de la consola. Esto puede resultar muy práctico para automatizar procesos de copias de seguridad que se envíen periódicamente por correo electrónico.

Lo primero que necesitamos es instalar Sharutils. Como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install sharutils

Para enviar distintos archivos debemos escribir en consola esto:

(uuencode archivo1 archivo1 ; uuencode archivo2 archivo2; uuencode archivo3 archivo3)| mail -s "Asunto" direccion@correo.com

Nótese el hecho de que el nombre del archivo está por duplicado.

7.3. Servicio de compartición de archivos Samba (SMB)

Procedimiento

Como root:

apt-get update
apt-get install samba samba-common libcups2
nano /etc/samba/smb.conf

Añadimos y/o modificamos esto:

[global]
   workgroup = WORKGROUP
   server string = Samba Server %v
   netbios name = dplinux.net
   security = user

Para compartir carpeta pública añadimos esto a smb.conf:

[Carpeta_compartida]
   path = /home/samba/carpeta_compartida
   browsable = yes
   writable = yes
   guest ok = yes
   read only = no

Para compartir carpeta privada:

groupadd gruposamba
useradd usuariosamba -G gruposamba
smbpasswd -a usuariosamba
mkdir -p /home/samba/carpeta_segura
chmod -R 0770 /home/samba/carpeta_segura
nano /etc/samba/smb.conf

Añadimos esto:

[Carpeta_segura]
   path = /home/samba/carpeta_segura
   valid users = @gruposamba
   guest ok = no
   writable = yes
   browsable = yes

Explicación

Samba es la implementación libre del protocolo de compartición de archivo de Microsoft SMB (o CIFS). Con él es posible el intercambio de archivos entre distintas máquinas conectadas en una misma red y debido a la compatibilidad bidireccional con Windows, es uno de los más usados en Linux.

En tu servidor te será útil para pasar archivos de un ordenador a otro (por ejemplo de las descargas de BitTorrent).

Para facilitar el uso de Samba entre sistemas Windows y Linux es muy recomendable que todas las máquinas estén en el mismo grupo de trabajo/dominio.

En primer lugar, instalamos Samba. Como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install samba samba-common libcups2
samba 1
Dependencias para la instalación de Samba

Aceptamos las dependencias y esperamos unos segundos. Cuando termine debemos editar el archivo de configuración smb.conf (2.2. Operaciones con el editor de texto Nano) que se encuentra en /etc/samba/. Como root:

nano /etc/samba/smb.conf
samba 2
Sección ‘global’ del archivo de configuración ‘smb.conf’

Ahí vemos un extenso archivo lleno de comentarios. Los parámetros que nos interesan están en las secciones ‘global’ y ‘Share Definitions’.

En la sección ‘global’ debemos buscar los siguientes parámetros y, en caso de no encontrarlos, los escribimos.

[global]
   workgroup = WORKGROUP
   server string = Samba Server %v
   netbios name = dplinux.net
   security = user

· workgroup indica el grupo de trabajo de las máquinas Windows y debe ser el mismo en todas.
· server string tan solo envía un mensaje de bienvenida. Podemos poner lo que queramos y este parámetro no viene por defecto, así que habrá que escribirlo.
· netbios name: es el nombre de cada máquina y debe ser diferente en cada ordenador. Tampoco viene por defecto.
· security indica el nivel de seguridad de la red. Hay dos opciones: user y shared. Usaremos la opción user. Este parámetro no viene en el archivo, por lo que habrá que escribirlo dentro de la sección ‘global’.
· map to guest viene incluida por defecto y no deberemos modificarla. Sirve para gestionar a los usuarios anónimos.

El resto de parámetro de la sección ‘global’ los dejamos como están. Nos quedará algo parecido a esto:

samba 3
Parámetros a editar en ‘smb.conf’

Una vez configurados los parámetros globales, hay que añadir las carpetas compartidas. Tenemos la opción de permitir el acceso a cualquiera o que el acceso a la carpeta compartida requiera una contraseña.

7.3.1. Carpetas públicas (sin contraseña)

Para que cualquiera pueda acceder a la carpeta compartida, tan solo creamos una sección con el nombre de la carpeta: [Nombre de la carpeta]. A continuación se escriben los parámetros.

Para matener el archivo de configuración ordenado, nos vamos a la parte donde vemos lo siguiente

#============================ Share Definitions

Después de esa linea, pegamos el siguiente texto:

[Carpeta_compartida]
   path = /home/samba/carpeta_compartida
   browsable = yes
   writable = yes
   guest ok = yes
   read only = no

· [Carpeta_compartida] indica el nombre de la carpeta que se mostrará independientemente del nombre real de la carpeta que se está mostrando.
· path nos indica la ruta de la carpeta que queremos compartir que será navegable y modificable por usuarios anónimos.
· browsable sirve para dar permiso de navegación.
· writable da permiso de escritura
· guest ok indica que se habilita el acceso a usuarios anónimos
· read only habilita o deshabilita la protección contra escritura.

samba 4
Parámetros de una carpeta pública llamada ‘Anonymous’

Guardamos el archivo y salimos. Si la carpeta que hemos compartido no existe, la creamos:

mkdir -p /home/samba/carpeta_compartida

Para permitir que cualquiera pueda leer y escribir en dicha carpeta, debemos cambiar los permisos:

chmod -R 777 /home/samba/carpeta_compartida

Por último, reiniciamos Samba con:

/etc/init.d/samba restart

Desde una máquina Linux vemos que ya aparece nuestro servidor:

samba 5
Máquina con Samba vista desde Linux (Dolphin)

Desde Windows vemos la carpeta que hemos compartido accesible de forma anónima:

samba 6
Carpeta pública accesible desde Windows

7.3.2. Carpeta privada (con contraseña)

Si queremos establecer cierto nivel de seguridad en las carpetas compartidas, se pueden pedir credenciales para que no todo el mundo pueda acceder a según qué recursos compartidos.

En primer lugar creamos un grupo en el sistema. Desde consola como root:

groupadd gruposamba

Ahora creamos un usuario de sistema asociado a dicho grupo:

useradd usuariosamba -G gruposamba

Establecemos una constrañsa para dicho usuario:

smbpasswd -a usuariosamba
samba 7
Estableciendo contraseña para ‘usuariosamba’

En el caso de que queramos compartir una carpeta nueva, la creamos en cualquier lugar y le cambiamos los permisos para que sólo se puede leer y escribir por el usuario y el grupo:

mkdir -p /home/samba/carpeta_segura
chmod -R 0770 /home/samba/carpeta_segura

Ahora volvemos a editar el archivo smb.conf:

nano /etc/samba/smb.conf

Y añadimos esta sección a continuación de ‘Share Definitions’:

[Carpeta_segura]
   path = /home/samba/carpeta_segura
   valid users = @gruposamba
   guest ok = no
   writable = yes
   browsable = yes
samba 8
Parámetros de carpeta privada junto a carpeta pública en ‘smb.conf’

Los parámetros son los mismos de antes a excepción de:

· valid users indica los usuarios a los que se les permitirá entrar. En este caso podrán acceder todos los usuarios que pertenezcan al grupo ‘gruposamba’.
· Con gest ok= no indicamos que no se permite el acceso a invitados.

Por último reiniciamos Samba:

/etc/init.d/samba restart

Cuando accedamos a nuestro servidor desde Windows, veremos que nos aparecen las dos carpetas: la pública (Carpeta_compartida) a la que puede acceder cualquiera y la privada (Carpeta_segura) que nos pedirá un nombre de usuario y contraseña; las mismas credenciales que hemos creado al principio.

samba 9
Petición de credenciales en carpeta privada sobre Windows

8. Gestión y monitorización del servidor

Es habitual querer tener la posibilidad de monitorizar el controlar nuestro servidor sin necesidad de estar físicamente delante. Existen varias formas de hacerlo en función de la operación que queremos realizar.

8.1. Consola remota con SSH

SSH es un protocolo cifrado que nos pone delante de la consola de nuestro servidor de forma remota. Su uso es tan sencillo como ejecutar cualquier cliente SSH, conectar a la IP de nuestro servidor e introducir un nombre de usuario y contraseña válidos. Esto es elemental, pero SSH permite muchas más operaciones.

8.1.1. Ejecución remota de programas gráficos

Procedimiento

Escribir en una sesión SSH el nombre del programa a ejecutar (ej: pcmanfm) fuera de root (2.3. Entrar como root y salir de root).

Explicación

A veces puede resultarnos útil ejecutar programas con interfaz gráfica remotamente, algo que en principio podría no resultar demasiado intuitivo ya que SSH sirve para establecer una conexión a una consola.

La forma en que se ejecutan los programa gráficos, es dibujandolos directamente en el servidor gráfico del cliente, es decir, del ordenador desde donde se invoca la ejecución. Eso hace que aparentemente el programa se esté ejecutando en el cliente ya que aparece como tal (una ventana que se puede mover por el escritorio, se puede minimizar, etc), pero la realidad es que la ventana que aparece en nuestra pantalla no es más que un «reflejo» de su ejecución en el servidor.

Para poner un ejemplo, vamos a ejecutar el gestor de archivos PCManFM. Primero lo instalamos como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install pcmanfm

Debido a que nuestro servidor no tiene ningún programa relacionado con el servidor X, entornos de escritorios ni nada gráfico, se van a pedir una gran cantidad de dependencias.

pcmanfm
Dependencias de PCManFM

Desde una sesión SSH, tan solo debemos escribir el nombre del programa. El único requisito es no hacerlo como root:

pcmanfm 2
Mensajes de advertencia en consola al ejecutar PCManFM remotamente

Nos aparecerán algunos mensajes de advertencia que podemos ignorar y en cuestión de segundos se abrirá en nuestro ordenador una ventana con PCManFM:

pcmanfm 3
Ventana de PCManFM ejecutado remotamente

Esta ventana hace parecer que PCManFM se está ejecutando en nuestro ordenador pero no es más que una ilusión; el programa en realidad se ejecuta en el servidor aunque en este ni siquiera haya un servidor gráfico en ejecución.

Dependiendo de la complejidad gráfica y de los cambios, se necesitará una mayor o menos ancho de banda. En cualquier caso, con conexiones lentas la fluidez se puede ver seriamente afectada.

8.1.2. Gestión de archivos y carpetas con FISH

FISH (FIles transferred over SHell protocol) es un protolo que se usa sobre SSH, que permite navegar por el árbol de directorios de nuestro servidor y realizar modificaciones en el sistema de archivos así como transferencias de datos. Es como Samba solo que al realizarse sobre SSH, se puede acceder desde Internet y toda la información viaja cifrada.

El único inconveniente es que resulta más lento que Samba por lo que para transferencias en redes locales no es recomendable por su alto consumo de CPU.

Vamos a realizar un ejemplo usando el gestor de archivos Dolphin de KDE, es decir, vamos a emplear Dolphin como cliente para gestionar los archivos de nuestro servidor de forma remota. Cualquier gestor de archivos con soporte para FISH nos servirá.

Desde nuestro ordenador-cliente ejecutamos Dolphin y nos vamos a ‘Red’. Ahí nos aparecerá algo parecido a lo siguiente:

fish 1
Lista de carpetas y recursos compartidos en red en Dolphin

Hacemos clic en «Añadir carpeta de red»:

fish 2
Elección de protocolo en el asistente para añadir carpeta de red

Seleccionamos «Shell segura (ssh)» y le damos a «Siguiente»:

fish 3
Datos de configuración de la carpeta FISH

Aparecen los siguiente campos:
· Nombre: es el nombre que le daremos a la carpeta y puede ser cualquiera.
· Usuario: nombre de usuario de nuestra cuenta de sistema en el servidor. Puede ser un usuario normal o podemos usar root.
· Servidor: ahí va la IP o dominio de nuestro servidor.
· Puerto: si no hay una buena razón, dejaremos el puerto 22 que es el normalizado para SSH.
· Protocolo: elegimos ‘fish’.
· Carpeta: es la carpeta que se mostrará de primeras. He elegido la el directorio raíz (/) pero se puede elegir cualquier otra. Si por ejemplo queremos comenzar en nuestra carpeta personal, no tenemos más que poner /home/usuario/.
· Codificación: lo dejamos en ‘Unicode UTF-8’.

Por último dejamos marcado «Crear un icono para esta carpeta remota» y hacemos clic en «Guardar y conectar».

fish 4
Petición de contraseña para el usuario

Nos pedirá la contraseña de nuestro usuario. Una vez introducidas nuestras credenciales, hacemos clic en «Aceptar» y se abre una ventana mostrando el directorio raíz:

fish 5
Directorio raíz remoto mostrado en Dolphin a través de FISH

Podemos navegar por todos los directorios y podremos abrir, copiar, pegar, eliminar, renombrar… todos los archivos para los que nuestro usuario tenga los permisos adecuados (2.6. Propietarios y permisos en archivos y carpetas):

fish 6
Carpeta personal remota

Esta forma de acceder al contenido de nuestro disco o discos resulta mucho más fluido que la opción de abrir PCManFM remotamente y puede resultar interesante para realizar ciertas operaciones de una forma más cómoda que desde la consola. Además nos permite mover archivos y carpetas de nuestro ordenador-cliente a nuestro servidor de una forma transparente, como si la carpeta FISH fuera una carpeta local. Eso así, debemos tener en cuenta las limitaciones de ancho de banda de nuestra conexión.

8.3. Monitorización con histórico (Cacti)

Procedimiento

Instala Apache (4.1. Servidor web Apache), PHP (4.3. PHP) y MariaDB (4.2. Sistema de gestión de base de datos MariaDB (MySQL)).

Como root:

apt-get update
apt-get install snmp snmpd rrdtool php7.0-mysql
wget http://www.cacti.net/downloads/cacti-1.1.20.tar.gz
tar xvf cacti-1.1.20.tar.gz
mv /home/usuario/cacti-1.1.20 /home/usuario/cacti
mv /home/usuario/cacti /var/www/html/
mysql -u root -p
create database cacti;
cd /var/www/html/cacti
mysql -u root -p cacti < cacti.sql
nano /var/www/html/cacti/include/config.php

Editamos los distintos parámetros y quitamos caracteres de comentario a $url_path = «/cacti/»;

chown www-data:www-data -R /var/www/html/cacti
nano /etc/crontab

Pegamos al final esto:

*/5 * * * * www-data php  /var/www/html/cacti/poller.php > /dev/null
/etc/init.d/snmpd stop

Añadir la siguiente linea a /var/lib/snmp/snmpd. conf:

createUser usuario MD5 "contraseña" AES128 contraseña_en_AES128

Añadir la siguiente linea a /usr/share/snmp/snmpd. conf:

rouser usuario
/etc/init.d/snmpd start

Accedemos vía web a http://nuestra_ip/cacti y configuramos Cacti. El nombre de usuario/contraseña por defecto es admin/cacti.

Explicación

Cacti es un visualizador de la actividad de nuestro servidor a través de una interfaz web que permite ver las estadísticas de uso en distintos periodos. Desde él se pueden revisar gráficos de actividad tanto del procesador como de la red, el espacio libre en los discos, los usuarios registrados y más.

cacti 1
Cacti recolectando distintas estadísticas del sistema

Para poner en funcionamiento Cacti primero hay que instalar Apache (4.1. Servidor web Apache), PHP (4.3. PHP) y MariaDB (4.2. Sistema de gestión de base de datos MariaDB (MySQL)). Si ya tenemos estos componentes instalados, podemos pasar a instalar otras dependencias como root (2.3. Entrar como root y salir de root):

apt-get install snmp snmpd rrdtool php7.0-mysql

Ahora descargamos Cacti desde su web (http://www.cacti.net/download_cacti.php). Podemos descargarlo directamente a nuestro servidor con:

wget http://www.cacti.net/downloads/cacti-1.1.20.tar.gz

Cuidado con la versión del archivo ya que periódicamente aparece una nueva versión y en el momento en que leas esta guía podría haber una más reciente. Consulta la web de Cacti (http://www.cacti.net) para asegurarte.

Una vez descargado, lo descomprimimos y lo movemos a la carpeta web que tengamos reservada para Cacti (en mi cado será /var/www/html/cacti/):

tar xvf cacti-1.1.20.tar.gz
mv /home/usuario/cacti-1.1.20 /home/usuario/cacti
mv /home/usuario/cacti /var/www/html/

Ahora llega el momento de crear una base de datos para Cacti:

mysql -u root -p
create database cacti;
cacti 2
Creación de una base de datos para Cacti

En este momento hay que importar la base de datos de cacti. Para eso nos vamos a la carpeta donde hemos descomprimido el archivo descargado y ejecutamos la importación de la base de datos:

cd /var/www/html/cacti
mysql -u root -p cacti < cacti.sql

Editamos el archivo de configuración de Cacti (2.2. Operaciones con el editor de texto Nano) que se encuentra en /path/to/cacti/include/:

nano /var/www/html/cacti/include/config.php
cacti 3
Archivo de configuración de Cacti ‘config.pjp’

Los parámetros que debemos poner son estos:

$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "root";
$database_password = "contraseña_MariaDB";
$database_port = "3306";
$database_ssl = false;

Al parámetro $url_path = «/cacti/»; que está comentado le debemos quitar los caracteres ‘//’ de comentario.

Cambiamos el propietario de la carpeta de cacti para que Apache pueda leer y escribir en ella:

chown www-data:www-data -R /var/www/html/cacti

Ahora editamos el archivo contrab para que se ejecute periódicamente la recolección de datos:

nano /etc/crontab

En la última linea añadimos:

*/5 * * * * www-data php /var/www/html/cacti/poller.php > /dev/null
cacti 4
Archivo ‘contrab’ después de añadir linea

Eso hará que se actualicen las estadísticas cada 5 minutos.

Ahora nos metemos en Cacti desde el navegador con la dirección http://nuestra_ip/cacti

cacti 5
Asistente de instalación web de Cacti

Elegimos «New Install» y continuamos.

cacti 6
Selección de nueva instalación con información de la base de datos

Como versión de SNMP elegimos la 5.x. RRDTool tendrá la versión 1.4.x. Comprobamos que cumplimos todos los requisitos y finalizamos:

cacti 7
Cumplimiento de dependencias y elección de versión de SNMP y RRDTool

El nombre de usuario/contraseña por defecto es admin/cacti. Es fundamental que la cambiemos. De lo contrario cualquiera podría tener acceso a las estadísticas de nuestro servidor.

Una vez dentro, debemos configurar las fuentes de información (SNMP) y tendremos que añadir las gráficas que representen los datos que nos interesan.

Antes de nada debemos crear un usuario para SNMP:

/etc/init.d/snmpd stop

Añadimos la siguiente linea a /var/lib/snmp/snmpd. conf:

createUser usuario MD5 "contraseña" AES128 contraseña_en_AES128

Ahora editamos el archivo de configurarión:

nano /usr/share/snmp/snmpd.conf

Y añadimos en la última linea esto:

rouser usuario

Guardamos y reiniciamos SNMP:

/etc/init.d/snmpd start

Una vez hecho esto, nos vamos a la página de cacti en http://nuestra_ip/cacti. Hacemos clic en «Devices» en la columna izquierda. Luego le damos a «localhost». Ahí debemos rellenar los datos de la sección SNMP Options. Guardamos los cambios y luego añadimos todos los campos SNMP en «Associated Data Queries» al final.

cacti 8
Credenciales para SNMP en Cacti

Volvermos a guardar y podemos empezar a añadir gráficas. Nos vamos a ‘New graphs’ (en la columna de la izquierda) y añadimos la información que queramos:

cacti 9
Elección de gráficas a representar

Ya podemos ver las estadísticas de uso de nuestro servidor.

cacti 1
Cacti monitorizando servidor

NOTA: En el momento de escribir esta guía, SNMP tiene un bug que impide crear una contraseña. Siguiendo los pasos de este sitio, se puede solucionar: https://bugs.launchpad.net/ubuntu/+source/net-snmp/+bug/1322431

8.4. Monitorización en tiempo real (Linux-Dash)

Procedimiento

Instala Apache (4.1. Servidor web Apache) y PHP (4.3. PHP).

Como root:

apt-get update
apt-get install git curl php7.0-curl php7.0-json
cd /var/www/html
git clone https://github.com/afaqurk/linux-dash.git
chown www-data:www-data -R /var/www/html/linux-dash

Para establecer contraseña de acceso seguir las instrucciones del apartado 4.1.5. Proteger web con contraseña.

/etc/init.d/apache2 restart

Explicación

Linux-Dash es un monitor web de recursos. Su instalación es bastante sencilla. Además de Apache (4.1. Servidor web Apache) y PHP (4.3. PHP), hay que instalar las siguientes dependencias como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install git curl php7.0-curl php7.0-json

Cuando termine, nos situamos en la carpeta raíz web y clonamos el proyecto de GitHub:

cd /var/www/html
git clone https://github.com/afaqurk/linux-dash.git
linux-dash 1
Clonado del proyecto a través de Git

Luego cambiamos el propietario para que Apache pueda leer y escribir en ella:

chown www-data:www-data -R /var/www/html/linux-dash

Ahora ya podemos acceder a las estadísticas en tiempo real a través de la web http://nuestra_ip/linux-dash

linux-dash 2
Linux Dash monitorizando en tiempo real el servidor

Para proteger la página con contraseña seguimos los pasos descritos en el apartado 4.1.5. Proteger web con contraseña.

linux-dash 3
Añadida sección ‘Directory’ para la subcarpeta ‘linux-dash’

Para terminar, reinicamos Apache:

/etc/init.d/apache2 restart

8.5. Top

Top es una herramienta muy útil que nos permitirá comprobar el consumo de recursos de nuestro servidor desde la consola. Hace un tiempo publicamos una entrada explicando detalladamente toda la información y posibilidades que ofrece Top. Tan solo hay que ejecutar:

top

top general

8.6. Apachetop

Procedimiento

Como root:

apt-get update
apt-get install apachetop
apachetop -f /var/log/apache2/access.log -r -T 60

Explicación

Apachetop es una herramienta muy simple, similar al monitor de sistema Top que sirve para monitorizar la actividad del servidor web Apache. Básicamente funciona leyendo el archivo de registro (log) de Apache. La información es ordenada y presentada en tiempo real de forma que podemos saber en todo momento qué recursos están siendo consultados y por quién (IPs y hosts).

Apachetop no viene instalado por lo que habrá que hacerlo. Como root (2.3. Entrar como root y salir de root):

apt-get update
apt-get install apachetop

Aceptamos las dependencias y en cuestión de segundos lo tenemos disponible. Deberemos ejecutarlo como root de siguiente forma:

apachetop -f /var/log/apache2/access.log -r -T 60

· -f indica que se va a abrir un archivo de registro (log).
· -r hace que aparezcan los nombre de host de los clientes que se conectan
· -T establece un tiempo en el que reside la información en pantalla. Si sucede un evento como que alguien pida algún recurso, aparecerá reflejado durante 60 segundos (según el ejemplo) o hasta que un evento más reciente lo saque de la lista.

apachetop
Apachetop monitorizando páginas visitadas en los últimos 40 segundos

Si tienes varios archivos de registro (log), deberás tener en cuenta sus nombres a la hora de monitorizar sus respectivos servidores virtuales.

8.7. Monitorización de la red con IPTraf

IPTraf es una útil herramienta que muestra el tráfico que viaja por la red desde y hacia nuestro servidor. Desde ella se puede monitorizar el ancho de banda consumido en tiempo real, el número de paquetes por protocolos, etc.

De IPTraf ya hemos hablado así que para saber más, puedes visitar la entrada dedicada a esta herramienta.

iptraf 3
IPTraf mostrando caudales y cantidad de paquetes según protocolos

8.8. Bloquear acceso a ciertas direcciones IPs

Procedimiento

Como root:

Bloquear IP:

iptables -A INPUT -s ip -j DROP
iptables-save > /etc/iptables/rules.v4

Desbloquear IP:

iptables -D INPUT -s ip -j DROP
iptables-save > /etc/iptables/rules.v4

Explicación

Iptables es una poderosa herramienta que sirve para gestionar la red de los sistemas Linux. Viene incluida con el sistema por lo que no hay que instalar nada. Sobre Iptables hay una gran cantidad de recursos escritos y aquí vamos a ver algo tan elemental como restringir el acceso a ciertas IP.

Es frecuente que queramos evitar que ciertas IPs puedan acceder a nuestro servidor, ya sea porque son una fuente de SPAM, de una gran cantidad de tráfico irresponsable o de ataques por fuerza bruta.

Para incluir IP en la lista negra y de esa forma impedir que puedan acceder a cualquier servicio, como root (2.3. Entrar como root y salir de root) hay que poner:

iptables -A INPUT -s ip -j DROP
iptables-save > /etc/iptables/rules.v4

La primera orden expulsa la IP escrita en el campo ‘ip’. La segunda almacena la exclusión en el archivo de reglas de Iptables. Si no se guarda, la IP permanecerá en la lista negra hasta que se reinicie el servidor.

Para quitar una IP de la lista negra escribimos:

iptables -D INPUT -s ip -j DROP
iptables-save > /etc/iptables/rules.v4

8.9. Bloquear IPs con comportamientos extraños con fail2ban

Procedimiento

Como root:

apt-get update
apt-get install fail2ban
cd /etc/fail2ban
cp jail.conf jail.local
nano jail.local

Configurar archivo.

service fail2ban restart

Explicación

Se completará próximamente.

9. Referencias

https://wiki.debian.org/es/NetworkConfiguration
https://www.linode.com/docs/websites/apache/apache-2-web-server-on-debian-7-wheezy
http://www.cyberciti.biz/faq/star-stop-restart-apache2-webserver/
https://fuscata.com/kb/set-maxclients-apache-prefork
http://serverfault.com/questions/520195/how-does-servername-and-serveralias-work
http://www.techrepublic.com/blog/smb-technologist/secure-your-apache-server-from-ddos-slowloris-and-dns-injection-attacks/
https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-14-04
https://www.openssl.org/docs/apps/rsa.html
http://www.tecmint.com/install-mariadb-in-debian/
http://www.liquidweb.com/kb/create-a-mysql-database-on-linux-via-command-line/
https://www.howtoforge.com/installing-apache2-with-php5-and-mysql-support-on-debian-wheezy
http://stackoverflow.com/questions/20073676/how-do-i-install-php-curl-on-linux-debian
http://stackoverflow.com/questions/2184513/php-change-the-maximum-upload-file-size
http://www.webupd8.org/2009/12/setting-up-transmission-remote-gui-in.html
https://www.howtoforge.com/tutorial/proftpd-installation-on-debian-and-ubuntu/
https://www.linode.com/docs/email/exim/sendonly-mail-server-with-exim-on-debian-6-squeeze
http://linuxcommando.blogspot.com.es/2014/04/how-to-setup-exim4-on-debian-to-use.html
https://www.howtoforge.com/samba-server-install-on-debian-7-wheezy
http://roger.steneteg.org/blog/installing-cacti-from-source-on-debian/
http://siddou.mynetgear.com/2013/08/install-snmp-client-debian-7-wheezy/
https://www.howtoforge.com/monitor-ubuntu-14.04-debian-wheezy-with-linux-dash
http://laotraboladecristal.com/2014/12/14/apt-pinning-o-como-instalar-paquetes-de-diferentes-ramas-en-debian/
https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-debian-7

No dudes en dejar un comentario si te surge alguna duda.

44 comentarios en “Guía para montar un servidor en Debian 9 Stretch

  1. Señora guía

    Muchas, muchas felicidades, realmente es la mejor guía que en encontrado en la web, espero que la puedas terminar pronto la verdad es que vale mucho la pena.

    Yo ando montando un servidor para owncloud y me esta dando lata, empezare de nuevo siguiendo tu guía pero la verdad es que me a aclarado muchas dudas, no dudare en proponer esta guía a muchas mas personas, de nuevo, muchas felicidades y muchas gracias.

  2. Un excelente trabajo. Darte las gracias creo yo no es suficiente para mi, sin embargo quiero expresar mi agradecimiento por el tiempo que seguaramente te tomo realizar esta guia, y ponderar tu enorme espiritu de compartir tus conocimientos, no me queda mas que decirte que mil felicidades y sigue adelante en busca de que la información sea compartida.
    Un millon de Gracias.

  3. ¡Fantástica guía! ¡Inmejorable! Simplemente te felicito. Sé que tu trabajo ha demandado muchísimas horas de esfuerzo y concentración. Tu notable labor está ayudando inmensamente, sin duda, a la comunidad de linuxeros debianitas que, como yo, disfrutamos de este maravilloso sistema operativo. ¡Gracias! Saludos afectuosos desde Argentina.

  4. hola amigo, realmente tu guía esta buenísima, felicitaciones por tu gran trabajo, quería preguntar si tendrás alguna buena guía que me ayude a configurar desde 0 un servidor samba4 en debian linux, tengo ya tiempo tratando de dar con un buen material q me ayude con este trabajo si esta a tu alcance ayudarme te lo agradezco mucho hermano un saludo

    1. No conozco un sitio donde lo enseñen desde cero, aunque seguro que hay alguno. En estos momentos estoy actualizando la guía de Raspberry Pi y me es imposible meterle mano a esta pero tomo nota tu petición para añadir un nuevo apartado sobre AD con Samba.

      Un saludo.

  5. Magnifica guía, un gran trabajo, me pongo en marcha siguiendo paso a paso tus indicaciones, ya te contare si he sido capaz
    Felicidades

  6. saludos amigo

    gracias por responder mi mensaje, realmente llevo trabajando en eso de samba4 como un mes y no he dado en el clavo no se de verdad que me estará faltando que no me levanta el servicio y lo levanta pero cuando pruebo el servicio ldap o dns o smbclient no hace nada de verdad seria una gran ayuda que publicaras alguna guía que tu mismo la hallas probado y funcione gracias mano tus publicaciones son buenas

  7. Amigo tengo un problemilla a la hora de conectarme a internet, a la hora de configurar la red no se cual ip configurar, estoy instalando el servidor en una maquina virtual, espero y me puedas orientar, gracias, excelente post.

    1. Las máquinas virtuales suelen tener varios modos de gestionar las redes. Los más utilizados son redes NAT (Network Address Translation) y redes a través un adaptador puente (bridge). Dependiendo del tipo de red que hayas configurado, la máquina dispondrá de una IP privada en la misma subred de tu red local física o dispondrá de una IP local fuera de tu subred para la cual la máquina virtual realizará la traducción correspondiente.

      Si configuras tu máquina virtual con una red de tipo NAT, la máquina virtual asignará una IP diferente a la de tu subred. Eso significa que puedes comunicarte desde la máquina virtual a los dispositivos de tu red y a Internet, pero no en sentido contrario. En este modo no puedes asignar una IP local ya que es la máquina virtual la que asigna dicha IP.

      En modo de adaptador puente (bridge), la máquina virtual crea una tarjeta de red que emula una tarjeta de red física, con una IP propia que se encuentra dentro de la subred de tu red local física. Eso significa que esa máquina virtual se comporta exactamente igual que una maquina física conectada a tu red. En ese caso sí puedes asignar una IP manualmente.

      Para asignar la IP sigue las directrices que indico en la guía que básicamente son respetar la raíz, estar dentro de la misma subred y, por supuesto, que la IP no esté duplicada. Si por ejemplo tu subred tiene raíz 192.168.0.x, puedes asignarle a tu servidor la IP 192.168.0.50 (si esa no está siendo usada por otro dispositivo de red). Si la raíz fuera 192.168.1.x, la IP podría ser 192.168.1.50.

      Un saludo.

  8. Vaya pedazo de currada que te has pegado. Al final no me sirvió porque buscaba otra cosa, pero es un tutorial buenísimo y sólo escribía para agradecerte tu trabajo por mucho que en este caso no me fuese de total utilidad. Un saludo!

  9. oye amigo y como le hago para ponerle un nombre de dominio a mi servidor local?? para no estar poniendo la direccion ip

  10. hola amigo gran tutorial lo empezare a aplicar pero si tengo un dd de 500gb memoria de 16gb placa asus procesador corei7 2da generacion cual seria las particiones que me recomendarias para poder empezar a crear mi servidor web en casa espero me puedas responder x@yahoo.com .

    otro mas como harias esto pero con ipv6 y que sea dinamico seria un gran tuto si lo hicisieses

    1. En primer lugar, te he editado la dirección de correo electrónico para preservar el envío de SPAM. Por otra parte, no respondemos por correo electrónico ya que las respuestas pueden servir a otros visitantes.

      El esquema de particiones depende muchísimo del uso que le vayas a dar al ordenador en general. Si lo único que vas a instalar es un servidor web, un esquema equilibrado sería: 10Gb para root y el resto para /home configurando Apache para que use carpetas almacenadas en /home. De esa forma te resultará más fácil hacer copias de seguridad de todos tus datos y en caso de que tengas que reinstalar todo el sistema, no te tendrás que preocupar de los mismos. También sería posible una sola partición para todo, por lo simple del servicio que se va a ofrecer. Pero insisto, eso depende mucho del uso y también de los gustos; en general, no hay una configuración mejor que otra, cada una tiene sus ventajas e inconvenientes.

      Sobre el servidor con IPv6 no he podido hacer pruebas con IPs públicas ya que mi conexión a Internet sólo me ofrece una IP de 32 bits. En cualquier caso, apunto la sugerencia para futuras ampliaciones de la guía.

  11. Debo darte mis felicitaciones por este fabuloso tutoríal ,explicado con una sencillez que te resulta agradable el leerlo-
    A partir de ahora te seguiré más a menudo

  12. Hola Alejandro! Muchas gracias por este post, es una guía magnífica para ir montando el servidor en casa. Yo me acabo de instalar un Debian 8, voy paso a paso y me he encontrado con un problema una vez instalado el módulo mpm_prefork del apache2. Si pongo los parámetros de configuración de ese módulo en el fichero apache2.conf, a continuación no reinicia el servidor, da un error. Los he tenido que poner en el fichero /etc/apache2/mods-available/mpm-prefork.conf y así sí que reinicia sin problema.

    1. Gracias por el dato, tu experiencia servirá a otros lectores.

      Los pasos para configurar el módulo prefork los pude reproducir en su momento. De hecho he montado varios servidores con ese módulo en concreto y no he tenido ese problema.

      Es posible que alguna actualización reciente haya introducido algún cambio en el archivo apache2.conf original que produce algún conflicto con la plantilla de configuración de prefork que hay en esta guía.

      Un saludo.

  13. Aprovecho para preguntarte un detalle más, hay quien recomienda Nginx en vez de Apache e incluso montar Varnish cache a mayores. ¿Cómo lo ves? ¿Basta con montar Apache a secas o merecerá la pena cualquiera de los otros dos? Muchas gracias.

    1. No he probado Nginx ni ningún caché. Te puedo decir que Apache a secas tiene un rendimiento realmente bueno y que, en base a mi experiencia, con máquinas comedidas se puede suplir un trafico relativamente intenso sin mayores problemas.

      Quizás algún otro lector pueda darte más pistas.

  14. Felicitaciones una guia muy sencilla de comprender y al mismo tiempo cubre lo mas importante en un servidor.

  15. hola estupenda guia, ya yengo mi servidor funcionando y mi web casi a punto.

    Ahora una duda coma ya te imaginas estoy trabajando sobre linux, tengo el servidor y pc personal en el mismo pc.

    Todo funciona de maravilla pero cuando publico un video en mi web, solo sale el reproductor pero no se ve el video.

    los videos los tengo en fomato avi.

    mas o menos los tengo estructurado asi:

    directorio_principal/multimedia/peliculas/aqui tengo todas las peliculas.avi

    al publicar el video me pide el link del mismo y pongo eso,

    [video=http://192.168.0.124/multimedia/peliculas/thor.avi

    pero no se ve nada.

    que puede ser???

    he probado varias formas que he visto por la web pero no me sale el video.

    si pongo el codigo de divx player me pide plugin y no se como instalarlo en linux, ni siquiera si se puede.

    ayuda por favor.

  16. Gracias por esta excelente guía, estaba buscando como montar un servidor en debian para almacenar una base de datos mysql, y los demas servicios, con esta guia empiezo y si tengo algun problema te aviso, se le agradece.

  17. Fantástico trabajo!!! mil felicitaciones!!! completo, claro. Has dado una clase de la que he tratado de aprender. Sólo buscaba un tuto para instalar owncloud y encontré tu genial trabajo. Gracias por esto. Un abrazo!

  18. Gracias, excelente herramienta que me ha servido demasiado. Podrias ayudarme en los siguiente?:
    Tengo un servidor debian 8 (virtual), funcionan correctamente mis paginas dentro de la red local y administro mi servidor remotamente con webmin, pero me sale el siguiente mensaje al tratar de accesar las paginas desde fuera (internet) mediante http puerto 80

    Cannot GET /nombre_ de_la_pagina

    me imagino que si entra a mi servidor pero no puede encontar mis paginas.

    De antemano muchas gracias.

Los comentarios están cerrados.