Instalar un Servidor Web Seguro (Linux + Apache + PHP + Joomla + Tomcat/JBOSS) : P1 – Instalando el sistema.
Con la siguiente serie de artículos vamos a tratar de definir un conjunto de recomendaciones a la hora de instalar un servidor web Apache sobre distribuciones Linux, particularizando la instalación en nuestra querida Debian. Estos árticulos estarán basados principalmente en referencias, textos e ideas obtenidas de nuestra querida red de redes. Al final del mismo citare todas ellas. Si hago referencia a algún texto que no hago constar pido por favor que se me comunique para que lo pueda incluir.
Es muy probable que por falta de tiempo y desconocimiento quizás, este documento tenga varias erratas pero intentare ir corrigiéndolas en la medida de mis posibilidades, o me vayáis comentando.
Voy a tratar de que sean artículos prácticos en el que se establezcan una serie de consejos, sin profundizar en exceso en los términos ya que en caso contrario podría convertirse en una verdadera novela de terror. De todas formas al tratarse de artículos técnicos muchas veces no quedara más remedio que familiarizarse con comandos, ficheros de configuración, rutas…
Creo que a estas alturas no hace falta mencionarlo, pero por si las moscas… debemos de ser conscientes de que la seguridad es algo vivo de lo que no hay que despreocuparse. La base del sistema debe ser sólida, pero debemos de ser consciente de la importancia de mantenerlo. Son muchas las horas que se invierten en el mantenimiento de nuestros sistemas, pero debemos de ser conscientes de la importancia que supone y aplicar la teoría del “más vale prevenir que curar”. ¿ Reactivos o proactivos?.
Vamos a ponernos manos a la obra. Como todo en esta vida, hay que empezar por el principió: La instalación del propio sistema. Y por suerte como todo también en esta vida, disponemos de varias opciones. Nosotros vamos a optar por descargarnos la última versión estable desde los repositorios oficiales de Debian.
En el momento de realizar este documento, la versión sobre la que vamos a trabajar es Squeeze (Debian 6).
No ve voy a enrollar con las ramas de Debian, pero me parece interesante al menor reseñar que disponemos de 3 ramas. Estable, Testing e Inestable. En este caso como se trata de un servidor web en producción siempre es recomendable instalar la rama estable, ya que es la más probada y menos problemas de seguridad va a presentar, aunque como contrapartida siempre será la más obsoleta de todas ellas.
Una vez nos hayamos descargado la imagen, deberemos comprobar que el fichero es el mismo que ellos publican. Comprobamos la HASH y firma.
La instalación es bastante sencilla ya que las nuevas distribuciones de Linux disponen de instaladores gráficos que hacen que el proceso se simplifique mucho, aunque sabemos que la consola… siempre será la consola.
Una cosa que debemos de tener clara en todo momento y nos puede evitar muchos dolores de cabeza, es que cuando menos paquetes instalemos en nuestros sistemas más seguro será el mismo. Una buena política por lo tanto, es instalar solo lo aquello realmente necesario. En este caso al tratase de un servidor web, en principio puede que no tenga mucho sentido montar toda la parte gráfica.
En este caso únicamente vamos a instalar el sistema base + servidor web. Sabemos que con la maravilla APT que acompaña a Debian, siempre estamos salvados en caso necesidad de instalar algún otro paquete. Para instalar nuevos paquetes siempre estamos a tiempo.
Quiero comentar, que mientras estemos realizando la instalación, es conveniente mantener el equipo dentro de una red segura, y actualizar el equipo antes de exponerlo a los peligros que esconde el mundo exterior.
En este caso lo vamos a montar sobre un entorno virtual, y la maquina sobre la que voy a realizar la instalación dispondrá de 2GB de memoria, 70 GB de disco y un procesador Intel(R) Xeon(R) E5440.
Antes de nada, comentar que vamos a crear volúmenes lógicos en previsión de que estos puedan crecer en el tiempo y así de una forma sencilla poder aumentar el tamaño de los mismos.
Vamos a ver qué particiones voy a realizar:
- /boot (500MB) – Es interesante generar una partición para el arranque, que es donde vamos a instalar grub
- /swap (4GB)
LVM
- Root / ( 20GB) Donde vamos a instalar la raiz de nuestro Linux
- /tmp (2GB) Interesante proteger nuestro tmp
- /var (20 GB)
- /var/log 20GB
Vais a ver que la instalación es muy sencillita… No vamos a comentar mucho más sobre la instalación base, ya que como hemos comentado no debería plantearnos ningún problema. En caso de no ser así, tenemos la suerte de que Debian es una distribución muy soportada, existiendo en la red infinidad de documentación que seguro van a resolver todas nuestras dudas.
Una vez instalado el sistema, vamos a ver que nuestro sistema este totalmente actualizado.
En debían sabemos que los repositorios se configurar en un ficherito llamado sources.
Una configuración podría ser…
#vi /etc/apt/sources
deb http://ftp.es.debian.org/debian/ squeeze main
deb-src http://ftp.es.debian.org/debian/ squeeze main
deb http://security.debian.org/ squeeze /updates main
deb-src http://security.debian.org/ squeeze /updates main
Aunque podemos introducir alguna otra cosilla. Sin entrar en polémicas…
deb http://ftp.es.debian.org/debian/ Squeeze main contrib non-free
deb-src http://ftp.es.debian.org/debian/ Squeeze main contrib non-free
deb http://security.debian.org/ squeeze /updates main contrib non-free
deb-src http://security.debian.org/ squeeze /updates main contrib non-free
deb http://volatile.debian.org/debian-volatile squeeze /volatile main
deb-src http://volatile.debian.org/debian-volatile squeeze /volatile main
Ejecutamos los siguientes comandos que nos permitirán actualizan nuestra maquina con las últimas versiones de los paquetes que se encuentren en los repositorios:
#apt-get update
#apt-get upgrade
#apt-dist-upgrade
Y finalmente nos deberemos encontrar con un mensaje del tipo
0 actualizados, 0 se instalarán, 0 para eliminar y 0 no actualizados.
En este paso podemos decir que tenemos nuestra maquina completamente actualizada.
Una vez tengamos preparada la maquina, en caso de querer cambiarla de segmento de red, editamos el siguiente archivo.
#vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
#iface eth0 inet dhc
iface eth0 inet static
address 10.XXX.XX.XXX
netmask 255.255.255.0
gateway 10.XXX.XX.XXX
Ahora ejecutamos
#/etc/init.d/networking restart
Y la interfaz debería contener la nueva configuración.
Ifconfig para comprobar que todo está como deseamos…
#ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:cb:91:3b
inet addr:10.X.X.X Bcast:10.X.X..255 Mask:255.255.255.0
inet6 addr: fe81::21c:29ff:fcb:913b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18728376 errors:27 dropped:31 overruns:0 frame:0
TX packets:17731570 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2090033744 (1.9 GiB) TX bytes:4219909420 (3.9 GiB)
Interrupt:18 Base address:0x1400
En caso de necesitar cambiar el nombre de la máquina:
#vi /etc/hostname
WebServer
Una de las primeras cosas que me gusta hacer es instalar el OpenSSH, para permitir conexiones remotas seguras. Anteriormente ya hemos hablado de este tema.
#apt-get install openssh-server
Ya tenemos acceso a través de ssh. Podemos empezar con el siguiente fichero de configuración:
#vi /etc/ssh/sshd_config
Port 8566
Protocol 2
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 60
PermitRootLogin no
StrictModes yes
RhostsRSAAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
IgnoreUserKnownHosts yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
MaxAuthTries 3
MaxStartups 3
Banner /etc/issue
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
Y seguir por el uso de certificados, tema sobre el que ya hemos hablado anteriormente.
Cuando procedemos a instalar los paquetes debemos disponer de permisos de root, o una herramienta muy útil llamada sudo . Si no disponemos del paquete, es interesante instalarlo ya que nos va a permitir no tener que utilizar el usuario root a la hora de conectarnos a la maquina y ejecutar comandos que requieran privilegios de root:
#apt-get install sudo
Ya empezamos a tener un sistema sobre el que empezar a trabajar….