Instala tu primera máquina virtual

(english version)

Este artículo abre una sección dedicada a la virtualización de un servidor para alojar máquinas virtuales. Ahora está muy de moda en el mundo del hosting usar un máquina virtual como un servidor virtual privado (VPS). De manera que de un servidor con gran capacidad de proceso, memoria y disco duro, se puede crear varios servidores virtuales privados.

En este primer artículo voy a tratar libvirt con el hipervisor kvm,

Leer más / Read more

Fail2Ban – Mejora la seguridad de tu servidor.

(english version)

Ya sabes lo importante que es tener tu servidor dedicado o servidor virtual con una buena política de seguridad que dificulte la entrada de atacantes al mismo.

Además de configurar correctamente los servicios de tu servidor dedicado para añadirle  seguridad, podemos contar con herramientas que añaden una capa más que los posibles atacantes deberán sortear si quieren acceder a tu sistema.

Hoy me voy a centrar en fail2ban. Básicamente fail2ban mira en los logs del servidor web (apache), ssl, imap, smtp, etc.. en busca de intentos de acceso que puedan ser maliciosos, como fallos repetitivos de contraseñas, búsquedas de exploits en el servidor, etc…, y añade las ips origen de esos accesos al firewall (iptables) para bloquear el acceso.

En Ubuntu su instalación es bien sencilla ya que está el los repositorios de Ubuntu. Basta con ejecutar en la linea de comando lo siguiente:

$: aptitude install fail2ban

En Centos no está en los repositorios por defecto, por tanto habrá que añadir un repositorio que lo contenga (como epel) o descargarlo desde aquí (32 bits). Si añades el repositorio tendrías que ejecutar:

$: yum install fail2ban

o si te descargas el archivo rpm correspondiente sería:

$: rpm -ivh fail2ban-0.8.4-29.el5.noarch.rpm

Una vez instalado, hay que echar un vistazo a los 2 archivos principales de configuración para comprobar que todo está en orden.

Uno de ellos es /etc/fail2ban/fail2ban.conf, en el cual están los parámetros de configuración de fail2ban propiamente dicho, como son:

  • loglevel -> que establece el nivel de log de fail2ban que se almacenará en el propio archivo de log de fail2ban.
  • logtarget -> especifica la ruta del archivo de log de fail2ban.
  • socket -> establece el archivo de socket para fail2ban.

En /etc/fail2ban/jail.conf es donde debes especificar los servicios de tu servidor junto con los puertos y la ruta del archivo log correspondiente al servicio en cuestión. Por defecto vienen ya muchos servicios configurados y lo único que hay que hacer es comprobar que la ruta del log sea la correcta.

Una vez hecho esto solo queda iniciar (o reiniciar) el servicio:

$: service fail2ban restart

Aunque hay algunas más, ésta es tan solo una capa más de protección para tu servidor bastante potente para poner un poco más difícil los accesos ilegales a tu servidor.

 

Mantenimiento de servidores

(english version)

A cualquiera que base su negocio en Internet, ya sea con tiendas virtuales o con cualquier otro SaaS, el mantenimiento de servidores ayuda en gran medida a que el servicio esté la mayor parte del tiempo activo.

Si no dedicamos tiempo a revisar de forma periódica nuestro servidor podemos vernos inmersos en un serie de problemas desagradables como:

  • Atacantes que obtienen permisos de root en el servidor o que escalan privilegios.
  • Robo o borrado de información almacenada en el servidor (bases de datos por ejemplo).
  • Fallos en discos duros con la consecuente pérdida de información si no se tiene una buena política de backup.
  • Envío de spam con scripts subidos mediante aplicaciones vulnerables.
  • Negación de servicio.
  • Que el servidor pase a formar parte de una botnet.
  • etc..

El mantenimiento de servidores surge para evitar todos estos problemas y puede englobar los siguientes pasos:

Monitorización del servidor 24x7x365.

En el mantenimiento de servidores es imprescindible tener monitorizado el servidor y los servicios críticos que dependan de él, como por ejemplo el ping, el servicio web (puerto 80), servicio mysql, etc. De manera que nos demos cuenta inmediatamente de si alguno de ellos fallan y podamos acceder al servidor para ver qué ocurre.

Para monitorizar el servidor se puede hacer uso de software específico para ello como Nagios, o bien recurrir a algún proveedor especializado en este tema.

Estadísticas de rendimiento del servidor.

Aunque no sea necesario para determinar si el servidor está on line o no, es una gran ayuda para ver la evolución de los recursos del servidor (memoria, carga, espacio en disco, tráfico, etc). Por ejemplo, podemos ver si un momento dado el servidor ha tenido un pico de carga o una bajada de la memoria libre que quizá dependan de factores externos, como un gran número de conexiones entrantes, o quizá dependan de la programación de la aplicación que hay que optimizar.

Refuerzo de seguridad.

Uno de los puntos en el que más incapié se hace en el mantenimiento de servidores es en la seguridad.

Para proteger nuestro servidor de accesos no autorizados que permitieran al atacante realizar cualquier cosa en nuestro servidor, es habitual reforzar la seguridad de los servicios que estén activos.

Por ejemplo el servicio SSH, que es normal tenerlo activo para poder acceder de forma remota al servidor. La configuración de este servicio se puede modificar para que no permita acceso al usuario root, o se puede modificar para cambiar el puerto por defecto, etc.

Deshabilitar servicios innecesarios .

En cualquier instalación de Linux siempre se instalan servicios que a priori no son necesarios para el funcionamiento de nuestras aplicaciones. Es aconsejable estudiar qué servicios se pueden quitar, de forma que no hará falta configurarlos para reforzar la seguridad y ahorraremos tiempo.

Procesos y sockets.

Otra cosa a tener en cuenta en el mantenimiento de servidores a la hora de añadir seguridad al servidor es revisar periódicamente los procesos que se están ejecutando en el mismo, para comprobar si hay algún proceso que no debiera estar ejecutándose o que esté consumiendo demasiados recursos.

En Linux con un simple “ps aux” podemos ver los procesos, su usuario correspondiente y la cpu y la memoria que está consumiendo.

Lo mismo podemos decir de los puertos abiertos. Hay que revisar qué puertos están abiertos y asegurarse de que solo esos y ninguno más está abierto. De esta manera podemos detectar si hay alguna aplicación en marcha mediante la cual se está accediendo al servidor.

Escaneo remoto de puertos.

Esto complementa al apartado anterior. Podemos usar software de escaneo de puertos, como nmap, para comprobar que puertos están abiertos en el servidor y cerrar los que nos interese, bien parando el servicio o bien mediante firewall.

Obviamente el escaneo se hace desde otro servidor y no en local.

Firewall.

Siguiendo con la seguridad, en el mantenimiento de servidores es vital tener en marcha un buen firewall que controle quién y como puede acceder a los servicios activos en nuestro servidor. En Linux, la alternativa más famosa es iptables aunque hay otros frontends basados en él.

Actualizaciones de seguridad.

Para terminar con el tema de la seguridad, es importantísimo revisar si hay actualizaciones de los servicios críticos de nuestro servidor y aplicarlas, como actualizaciones de kernel, servidor web, php, etc.

Normalmente los servicios se instalan con el gestor de paquete de la distribución que estemos usando, por lo que la actualización es una tarea muy sencilla que puede eliminar vulnerabilidades o fallos de seguridad en la programación del software citado anteriormente.

Por ejemplo, algunas vulnerabilidades de kernel descubiertas recientemente permiten a un atacante desde escalar privilegios hasta ganar privilegios de root

Si además, disponemos de un panel de control como Plesk o Cpanel para gestionar el servidor, es muy importante también comprobar si hay actualizaciones del mismo, para prevenir acceso no deseados al servidor.

Como ejemplo, la vulnerabilidad descubierta en febrero de 2012 en la API del Panel Plesk, que permitía a un atacante acceder al servidor mediante inyección de código mysql

Optimización de MySQL.

Si tenemos un servidor con MySQL es necesario modificar la configuración por defecto para que se ajuste a la cantidad de ram, número de cpus, etc, del servidor. De esta manera evitaremos que el servidor de bases de datos se convierta en un cuello de botella en el funcionamiento de las aplicaciones que hagan uso de él.

Comprobación del estado de discos duros .

Por último, pero no menos importante es revisar la salud de los discos duros de nuestro servidor.

En Linux hay herramientas de para comprobar discos como fsck. El problema es que no se puede usar esta herramienta en discos duros montados, ya que producirá una corrupción de datos.

Por tanto para comprobar el disco mientras esté montado podemos mirar los logs (/var/log/dmesg) o si se trata de un RAID podemos mirar en /proc/mdstat

En conekia sabemos que siguiendo estos pasos nos evitaremos muchos dolores de cabeza, ya que limpiar un servidor comprometido sin reinstalar el sistema operativo es bastante complejo y el servicio puede quedar mermado durante un largo periodo de tiempo. Incluso hay veces que no hay mas remedio que reinstalar el sistema operativo y reinstalar todos los datos desde backup si se dispone de uno.

Aunque hay proveedores de hosting que dan el mantenimiento de servidores como servicio, normalmente es el propio cliente quien debería realizar todos los pasos descritos anteriormente.

Para todo aquel que no pueda o no sepa realizar todo estas tareas de mantenimiento en conekia hemos lanzado nuestro producto de mantenimiento de servidores.