Parece mentira que un biólogo necesite, en un determinado momento, montar y configurar un servidor con Linux pero estoy dando aplicación profesional a los conocimientos que he adquirido en casa sobre este tema, concretamente lo estoy aplicando a la monitorización ambiental remota. Hoy voy a montar un servidor Linux que en principio sólo necesita ser seguro, tener servicio de administración remota, web, MySQL y php. Por ahora no necesito ni el servidor de nombres (DNS), ni el de correo externo (POSTFIX).

Una buena guía de instalación de un servidor es la que tiene publicada en HowtoForge The Perfect Setup - Debian Etch (Debian 4.0) que podemos encontrar traducida al español en diferentes sitios (usa google).

Yo he seguido los pasos de instalación saltando aquellos que corresponden con las configuraciones de BIND9 y POSTFIX, para conseguir la configuración de máquina que necesito, pero además he añadido alguna más para reforzar la seguridad y ajustarse a mis necesidades.

Antes de empezar tener en cuenta que tendréis que adaptar los pasos que se describen a vuestros datos de red y dominio. En este ejemplo la IP del servidor será 192.168.1.10, el nombre de la máquina "dolores" y el nombre del dominio "menstrual.es" (nota: no he mirado si existe este dominio, pero su utilización en este blog es meramente de ejemplo con cierto toque de cachondeo, sin ánimo de ofender a nadie).

ACTUALIZACIÓN PRIMERA DEL SISTEMA

Después de haber reiniciado el sistema, y dependiendo la forma en que se hizo la instalación, puede ser necesario una actualización. Yo la hago por costumbre. Lo primero es editar el archivo de las fuentes de paquetes de debian etch:

# vi /etc/apt/sources.list

 

Y debe quedar así en el caso de España, o si tenemos otras fuentes que nos van mejor pues con las vuestras:

# deb http://ftp.rediris.es/debian/ etch main

deb http://ftp.rediris.es/debian/ etch main deb-src http://ftp.rediris.es/debian/ etch main
deb http://security.debian.org/ etch/updates main deb-src http://security.debian.org/ etch/updates main

Ahora actualizamos:

# aptitude update && aptitude upgrade

(Nota: Usar aptitude en vez de apt-get, es porque me ha sacado de algún problema de dependencias cruzadas y opciones del kernel, así que lo prefiero aunque es más bien una cuestión de gustos).

CONFIGURACIÓN DE LA RED

Si hemos dejado a Debian configurar la red durante la instalación, lo habrá hecho mediante DHCP, si se trata de un servidor lo más normal para saber siempre cual es la dirección de nuestra máquina, será configurarle una IP fija para ello debemos editar el archivo /etc/network/interfaces.

# vi /etc/network/interfaces

Debe de quedar así:

# 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 dhcp iface eth0 inet static address 192.168.1.10 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 192.168.1.1 dns-search dolores.menstrual.es

Si hemos tenido que hacer cambios reiniciamos la configuración de red:

# /etc/init.d/networking restart

Ahora editamos el hostname

# vi /etc/hosts

Y debe parecerse a esto:

127.0.0.1	localhost
127.0.1.1	dolores.menstrual.es	dolores
# The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts

Ahora añadimos el nombre de la máquina al archivo /etc/hostname:

# echo dolores.menstrual.es > /etc/hostname

Ahora reiniciamos la máquina para aplicar los cambios de la actualización y de la red, con el comando # reboot

INSTALACIÓN DE ALGUNOS PROGRAMAS ÚTILES PARA LA GESTIÓN DEL SERVIDOR

Esta es una lista no exhaustiva que puede variar dependiendo de las necesidades y gustos de cada uno:

aptitude install vim mc rsync build-essential wget bzip2 binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev linux-kernel-headers lynx m4 make ncftp nmap openssl perl perl-modules rdate unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++

SERVICIO SSH PARA ADMINISTRACIÓN REMOTA

Después de terminar la instalación del sistema operativo mínimo, tal y como se describe en los pasos de HowtoForge, necesitamos instalar el servidor de ssh para poder administrar de forma remota el servidor. Es más, yo a partir de este punto, elimino el teclado y el monitor a la torre y sólo tendré acceso de este modo, recuerda que el carácter # delante de los comandos significa que debes hacerlo como root:

# aptitude install ssh openssh-server

Una vez instalado, por seguridad vamos a desactivar el acceso directo de root, es preferible entrar con una cuenta sin privilegio y luego hacer un su o sudo. Para ello, hay que editar /etc/ssh/sshd_config y cambiar PermitRootLogin "no" por defecto lo encontraremos en "yes".
Otra buena medida de seguridad es limitar el número de cuentas que pueden acceder, añadiendo la directiva AllowUsers aaaaa bbbbb ccccc ... donde a, b c, ... son la lista de usuarios permitidos. Cuidado con esta directiva que un error tipográfico os puede dejar fuera del servidor.

INSTALACIÓN DE SUDO

Este programa se ha hecho especialmente popular con Ubuntu. Yo me he acostumbrado a usarlo y siempre lo instalo para evitar tener que identificarme como root

# aptitude install sudo

Después editamos el archivo /etc/sudoers y añadimos una última línea con nuestro usuario administrador:

# vim /etc/sudoers

[...] root ALL=(ALL) ALL user ALL=(ALL) ALL

Vim nos advertirá que se trata de un archivo sólo de lectura, tendremos que forzar que guarde los cambios con :wq!
La primera vez que lo utilicemos, recibiremos una advertencia y deberemos de ser consecuentes con ella:

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others. #2) Think before you class. #3) With great power comes great responsibility.

INSTALACIÓN DE MySQL

Ahora instalamos MySQL con el siguiente comando:

$ sudo aptitude install mysql-server mysql-client libmysqlclient15-dev

Editamos el archivo /etc/mysql/my.cnf para que MySQL escuche en todas las interfaces

$sudo vim /etc/mysql/my.cnf

Debe quedar así:

[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address          = 127.0.0.1
[...]

Ahora reiniciamos el servicio de MySQL ejecutando:

$ sudo /etc/init.d/mysql restart

Para comprobar que el sistema está funcionando ejecutamos:

$ sudo netstat -tap | grep mysql
tcp        0      0 *:mysql                 *:*                     LISTEN     6456/mysqld

Tenemos que dar una contraseña al usuario root de MySQL:

$ sudo mysqladmin -u root password tucontraseñarootsql
$ sudo mysqladmin -h dolores.menstrual.es -u root password tucontraseñarootsql

INSTALACIÓN DE APACHE 2

Instalación de Apache2 como servidor web:

$ sudo aptitude install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert

INSTALACIÓN DE PHP5

Instalamos php5 en el servidor ejecutando:

$ sudo aptitude install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-repre php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

A la pregunta de seguir instalando libc-client sin soporte para Maildir, respondemos que sí.
Y ahora editamos el archivo /etc/apache2/mods-available/dir.conf:

$ sudo vim /etc/apache2/mods-available/dir.conf

Y debería de quedar así:

<IfModule mod_dir.c>

DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml
</IfModule>

Y por último añadimos el puerto 443 al archivo /etc/apache2/ports.conf:

$ sudo vim /etc/apache2/ports.conf

[...] Listen 80 Listen 443

Después cargamos los siguientes módulos de Apache2:

$ sudo a2enmod ssl
$ sudo a2enmod rewrite
$ sudo a2enmod suexec
$ sudo a2enmod include

Para cargar todos los cambios en Apache, lo forzamos a leer de nuevo los archivos de configuración:

$sudo /etc/init.d/apache2 force-reload

MANTENER EL SERVIDOR EN HORA

Instalamos el servicio ntp:

$ sudo aptitude install ntp ntpdate

LOGS DE ADMINISTRACIÓN

La revisión de los logs del sistema es una aspecto básico de la administración, pero pesado. Herramientas de análisis de los logs como logcheck ayudan en esta tarea. Instalamos el paquete con:

$ sudo aptitude install  logcheck

Tiger es una vieja herramienta de detección de intrusos que lleva en Debian desde la distribución de woody. Tiger facilita una forma de revisar asuntos comunes relacionados con las "formas hack" de vulnerar la seguridad, passwords, problemas en archivos del sistema, procesos de comunicación ... La versión de Debian incluye nueva seguridad específica para Debian: MDSsums da suministros binarios y también revisa los ya instalados y los paquetes vulnerables. Tiger revisa cada día los aspectos de vulnerabilidad y envía un correo al usuario administrador.

$ sudo aptitude install  tiger chkrootkit

Ejecutamos el comando para hacer nuestra primera auditoría:

$ sudo tiger

Si tu máquina se parece a la mía, ya puedes ir a por un café, porque tiger tiene para un rato. Yo creo que hasta aquí se puede decir que se ha quedado un servidor, bastante majo, ¡Disfrútalo!