Archivo de la categoría: VPS

Acelera tus webs con el módulo PageSpeed de Google

pagespeedPageSpeed es un módulo de código abierto para Apache desarrollado por Google que automatiza muchas de las optimizaciones y buenas prácticas que recomienda Google PageSpeed para mejorar la velocidad de nuestras páginas. Funciona aplicando diversos filtros de salida, es decir, haciendo cambios en el contenido antes de que este salga del servidor hacia el cliente.

Hay más de 40 filtros de optimización disponibles, algunos de los cuales son:

  • Optimización de imágenes y compresión
  • Concatenación y minificación de recursos CSS y JavaScript
  • Extensión de caché
  • Carga aplazada de JavaScript y recursos gráficos
  • Y muchos otros más

Instalarlo en uno de nuestros VPS es muy sencillo. Vamos a ver cómo sería una instalación completa en un VPS con CentOS, el sistema operativo que recomendamos para los VPS.

Primero descargamos el paquete para CentOS

wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.rpm

Una vez se descarga, ejecutamos la instalación

sudo yum install at  # si no tienes 'at' ya instalado
sudo rpm -U mod-pagespeed-*.rpm

Tan fácil como esto, ya tendríamos el módulo instalado. Reiniciamos Apache con el comando

service httpd restart

Para comprobar que se ha instalado y PageSpeed está activo, abrimos la consola de desarrollador del navegador y en las cabeceras de respuesta del servidor, PageSpeed añade la siguiente:

Captura de pantalla 2015-07-06 a las 16.49.37El archivo de configuración global se encuentra en /etc/httpd/conf.d/pagespeed.conf y se puede configurar individualmente por dominios o carpetas mediante .htaccess.

La configuración que trae por defecto el módulo PageSpeed es bastante efectiva, pero si tenemos casos especiales o se quiere optimizar algunas cuestiones al máximo, deberemos echar mano de la documentación oficial.

Facebooktwitter

Cómo instalar múltiples versiones de PHP en Plesk 12

elephpantUna de las muchas ventajas de los VPS es la flexibilidad que ofrecen, por ejemplo para tener diferentes versiones de PHP disponibles al mismo tiempo. Un caso que se suele dar con mucha asiduidad es si tenemos una suscripción con un script PHP antiguo que ya no es compatible con versiones nuevas de PHP, y tenemos otra suscripción que utiliza las últimas novedades que trae PHP, nos veríamos en un dilema que se soluciona de manera muy sencilla si podemos poner a las suscripciones la versión de PHP más adecuada para cada una.

Plesk 12 nos permite instalar múltiples versiones de PHP en nuestro VPS de forma muy sencilla. Para ello debemos acceder como root por SSH y ejecutar el script autoinstaller y seguir los sencillos pasos.

  • Nota: antes de realizar la instalación, recomendamos hacer un backup del VPS completo

Para ejecutar el script sólo hay que poner:

/usr/local/psa/admin/sbin/autoinstaller

Nada más ejecutarlo, nos mostrará la pantalla de bienvenida al asistente de instalación y unas instrucciones para proseguir. Pulsamos «N» para continuar.

El siguiente paso es seleccionar la fuente de software. Por defecto viene marcado el servidor de Parallels, por lo que no hace falta tocar nada, pulsamos «N» para continuar. Ahora nos pide la configuración del proxy HTTP, de nuevo continuamos como viene por defecto, pulsando «N«. El asistente nos preguntará a qué producto le queremos instalar cosas, viene seleccionado Plesk 12 por defecto, por lo que una vez más lo dejamos tal cual y pulsamos «N«.

Una vez hecho esto, ya hemos llegado a donde nos interesa. El asistente nos muestra qué componentes podemos instalar.

Captura de pantalla 2015-06-15 a las 15.33.54En esta guía queremos instalar múltiples versiones de PHP, por lo que las seleccionamos escribiendo el número que tienen al lado, por ejemplo 10, 11 y 12, pulsando intro cada vez. Se quedaría así en nuestro caso:

Captura de pantalla 2015-06-15 a las 14.56.48Una vez seleccionadas las versiones que nos interesan, pulsamos «N» para continuar. El asistente nos dirá cuánto espacio necesita para la instalación, pulsamos «N» otra vez para continuar y se hará la instalación despues de informarnos de cuántos paquetes va a instalar.

Cuando termine la instalación, recomendamos hacer un reinicio del VPS desde el Power Panel de Parallels (recordamos que no es el mismo panel de Plesk).

Captura de pantalla 2015-06-15 a las 15.03.20Una vez reiniciado, ya podemos acceder a Plesk e ir a Configuración de hosting de la suscripción que nos interese, y en Soporte para PHP podremos seleccionar qué versión de PHP queremos asignarle a la suscripción.

Captura de pantalla 2015-06-15 a las 15.03.43

Facebooktwitter

Qué son y cómo usar las variables de entorno de Apache desde Plesk

El uso de contraseñas fuertes es sin duda imprescindible para la seguridad, pero a veces se puede convertir en un dolor de cabeza el gestionarlas a la hora del desarrollo de nuestra página web. Pongamos unos ejemplos en los que el buscar un equilibrio entre seguridad y comodidad puede ser complicado:

  • Si quieres que tu programador pueda hacer su trabajo pero no quieres entregarle contraseñas de la base de datos u otros servicios que use tu web.
  • Si quieres tener tu código fuente en un servicio de control de versiones de manera pública, como GitHub, pero que nadie vea tus datos sensibles.
  • Si estás desarrollando en tu máquina local y no quieres tener que cambiar tu archivo de configuración de contraseñas, nombres de usuario, etc, cada vez que subes código al servidor.

Una forma de resolver estos puntos es mediante el uso de variables de entorno de Apache. Haciendo uso de ellas, podemos crear variables a nivel del servidor, a las cuales tenemos acceso desde el código fuente, incrementando así la seguridad de las contraseñas y otros datos sensibles, y haciendo más cómodo el desarrollo.

Vamos a ver un ejemplo en PHP. Imaginemos que tenemos un archivo config.php con el siguiente contenido:

<?php
$password = "clave123";
$usuario = "usuario123";
$base_datos = "nombre_db";

Vamos a sustituir las contraseñas escritas a mano por variables de entorno de Apache. La manera más sencilla de crear estas variables en nuestro VPS es desde Plesk, accediendo a «Configuración del servidor web» para el dominio en que queremos crearlas.

Captura de pantalla 2015-06-05 a las 13.17.29En el campo «Directivas adicionales de Apache» ponemos estas variables:

SetEnv DB_PASS "clave123"
SetEnv DB_USUARIO "usuario123"
SetEnv DB_NOMBRE "nombre_db"

Cuando ya están creadas, acceder a ellas desde nuestro código PHP es muy sencillo. Lo harcemos mediante la función de PHP getenv(). El código del archivo config.php con las claves lo podemos convertir a:

<?php
$password = getenv("DB_PASS");
$usuario = getenv("DB_USUARIO");
$base_datos = getenv("DB_NOMBRE");

Como vemos, ya no hay contraseñas en nuestro código fuente, sólo hay referencias a variables que están configuradas en Apache, de forma que podemos tener nuestro código fuente en repositorios abiertos al público sin que se vean las contraseñas, o permitir que un programador pueda trabajar sin tener que darle acceso total con las claves. Además, si se está desarrollando en local, se pueden configurar también las variables de entorno en el servidor Apache local de forma que no hay que cambiar el código con las contraseñas cada vez que se sube al servidor.

No sólo puede aplicarse a contraseñas de bases de datos, podemos usarlo también por ejemplo para claves API de Twitter, Facebook, y otros servicios, además de otras configuraciones como por ejemplo a qué archivo escribir logs, a qué correo avisar en caso de errores graves y todo tipo de variables que cambian según el entorno en que se ejecuta el código.

Hay que tener presente una cosa muy importante, y es que las variables de entorno aparecen en phpinfo(), por lo que hay que ir con cuidado con esto y asegurarse de no tener ninguna página ejecutándolo, o mejor aún, desactivar la función en la configuración de PHP.

Captura de pantalla 2015-06-05 a las 13.18.08

Facebooktwitter

Cómo instalar Fail2Ban para proteger tu VPS (2ª parte)

lockEn el anterior post vimos cómo instalar Fail2Ban en un VPS con CentOS, y en esta segunda y última entrega vamos a ver cómo configurar los parámetros mas básicos y algunos filtros útiles.

Recien instalado, Fail2Ban viene con una configuración por defecto que está en /etc/fail2ban/jail.conf, pero es muy recomendable hacer una copia local y hacer nuestra configuración en ella:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Una vez hecha la copia local, debemos configurar los parámetros básicos.

vi /etc/fail2ban/jail.local

El fichero puede editarse también por sFTP si no estás familiarizado con vi.

La primera sección es la de [DEFAULT], que tiene los siguentes parámetros básicos:

  • ignoreip: Aquí podemos listar separadas por un espacio las IPs que fail2ban debe ignorar, es decir, una lista blanca. Si dispones de IP fija sería una buena idea ponerla.
  • bantime: Tiempo en segundos que banea la IP que se salte alguna de las normas.
  • maxretry: Intentos máximos antes de banear una IP.
  • findtime: Por defecto está en 10 minutos, si un usuario intenta conectarse más veces de el valor maxretry en menos de 10 minutos, se le baneará.

Cuando ya estén configurados los parámetros básicos, se puede continuar viendo los diferentes servicios que pueden ser protegidos por Fail2Ban y se puede activar o personalizar cualquiera de ellos. Por ejemplo el servicio de protección para SSH viene activo por defecto:

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]
logpath  = /var/log/secure
maxretry = 5

En este caso deberíamos configurar los parámetros «dest» y «sender» para que cuando salte esta norma, nos envíe un correo de aviso a la dirección que le indiquemos.

Cuando el archivo de configuración esté a nuestro gusto, guardamos y siempre debemos reiniciar Fail2Ban para que los cambios tengan efecto.

sudo service fail2ban restart

Fail2Ban viene por defecto con muchos servicios preconfigurados que sólo debemos activar en el fichero de configuración para empezar a protegerlos. Por ejemplo algunos que consideramos útiles pueden ser:

  • apache-badbots: banea bots conocidos que se dedican a escanear la web en busca de emails a los que enviar spam.
  • php-url-fopen: banea usuarios que intenten explotar esta función a traves de peticiones GET/POST
  • horde: si usas este webmail, puedes protegerlo
  • apache-modsecurity: banea IPs que se salten normas de ModSecurity (si está habilitado)

Puedes obtener más información y ver la documentación en la web oficial de Fail2Ban.

Primera parte: cómo instalar Fail2Ban

Facebooktwitter

Cómo instalar Fail2Ban para proteger tu VPS (1ª parte)

fail2banConectar a tu VPS  por SSH con una buena contraseña es un método muy seguro de acceder a tu servidor, pero el servicio SSH por su naturaleza debe estar expuesto a internet, lo cual no deja de ser un vector de ataque para potenciales hackers y debemos hacer todo lo posible para reducir este riesgo al mínimo.

De hecho si revisas los logs  de este servicio, posiblemente encuentres repetidos intentos de login, tanto por parte de individuos como de bots, tratando de acceder por fuerza bruta, probando una contraseña tras otra hasta encontrar la que entre y tener acceso root en el servidor.

Fail2Ban es una herramienta cuya función es mitigar este tipo de ataques. Lo hace leyendo constantemente los logs de acceso, y cuando detecta que se está saltando alguna de las reglas que tenga configuradas, hace cambios en el firewall para bloquear el acceso al atacante.

Vamos a ver cómo instalar Fail2Ban en un VPS con CentOS, que es el sistema operativo que recomendamos a nuestros clientes. Primero debemos habilitar el repositorio EPEL.

wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

Una vez habilitado, instalamos el paquete con yum:

yum install fail2ban

Ya tendríamos instalado Fail2Ban. En el próximo post explicaremos cómo configurar los parámetros más básicos y algunos de los filtros más útiles, aunque si no puedes esperar y quieres saber más sobre Fail2Ban, puedes ver la documentación oficial y empezar a configurar este programa.

Segunda parte: cómo configurar Fail2Ban

Facebooktwitter

Cómo instalar MyTop en tu VPS para monitorizar MySQL

mytopMyTop es una herramienta de consola que es muy recomendable instalar en los VPS para monitorizar tu base de datos MySQL. Es especialmente interesante a la hora de identificar consultas especialmente lentas a la base de datos, y así eliminar los cuellos de botella que crean y mejorar el rendimiento tanto de las páginas web como del servidor en general. Su interfaz es muy parecida al comando top, programa en el que está claramente inspirado.

Vamos a ver cómo instalar MyTop en un VPS con CentOS 6, que es el sistema operativo más utilizado y recomendado en los VPS de Evidalia, aunque en principio se puede instalar prácticamente cualquier sistema UNIX que cuente con Perl, DBI y el módulo Term::ReadKey, incluyendo Mac OS X.

Para poder instalar MyTop, primero debemos habilitar el repositorio EPEL.

wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

Una vez habilitado, ya podemos instalar MyTop:

yum install mytop

Así quedaría instalado MyTop en el VPS.

Ahora ya podemos utilizarlo, para ejecutar el comando vamos a suponer que nuestro nombre usuario de la base de datos es «administrador», la contraseña es «g403jd2kds» y el nombre de la base de datos es «blog». El comando tomaría esta forma:

mytop -uadministrador -pg403jd2kds -bblog

Es importante no quitar los argumentos -u, -p y -b seguidos del nombre de usuario, contraseña y nombre de la base de datos sin dejar espacio como en el ejemplo. Y ya tendríamos mytop en marcha para monitorizar la base de datos.

Para más información, se puede ver la documentación oficial y la web oficial.

Facebooktwitter

Instalación y primeros pasos con Node.js

node2La semana pasada vimos qué es Node.js, su funcionamiento y posibles usos que se le pueden dar. Hoy veremos cómo instalarlo en un VPS y dar los primeros pasos con él. En este caso vamos a ver cómo instalarlo en un CentOS, ya que es el sistema operativo más utilizando en nuestros VPS.

Debemos seguir los pasos de instalación que nos indican en la documentación oficial, que son simplemente dos comandos:

curl -sL https://rpm.nodesource.com/setup | bash

Este comando hace unas comprobaciones básicas para ver si podemos instalar Node.js y proporciona instrucciones en caso contrario para poder instalarlo. En un VPS tal cual lo entregamos no debe dar ningún problema.

yum install -y nodejs

Con este comando se instala Node.js y una vez finalice, podemos comprobar que la instalación se ha completado correctamente con:

node -v

Si la instalación es correcta nos mostrará la versión de Node.js que se ha instalado.

Una vez Node.js está instalado, vamos a ver un ejemplo básico de servidor HTTP con un código sacado directamente de la web oficial que guardaremos en nuestro VPS con el nombre «servidor.js»:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hola Mundo\n');
}).listen(1337, '127.0.0.1');
console.log('Servidor en marcha en http://127.0.0.1:1337/');

Accedemos a la carpeta donde hayamos guardado el archivo por SSH y ejecutamos el siguiente código para ponerlo en marcha:

 node servidor.js
Servidor en marcha en http://127.0.0.1:1337/

Y ya tenemos en marcha un servidor web escuchando peticiones en el puerto 1337. Si os fijais en el código, el servidor está en marcha en una IP local del servidor, por lo que no tenemos acceso vía web. Para poder acceder vía web, debemos ir a nuestro panel Plesk y en la suscripción que querramos usar para Node.js debemos indicar que Apache haga de proxy inverso para que dirija el tráfico del puerto 80 al puerto 1337 (el puerto que está escuchando el servidor Node que hemos creado) de forma transparente para los usuarios.

Para ello debemos ir a Configuración del servidor web  de la suscripción y en Directivas adicionales para HTTP ponemos el siguiente código:

<Location /> 
ProxyPass http://localhost:1337/ 
ProxyPassReverse http://localhost:1337/ 
</Location>

Guardamos el cambio y al acceder al dominio de la suscripción deberíamos ver el mensaje «Hola Mundo», lo cual significa que el servidor está funcionando correctamente.

Como podemos ver es un ejemplo muy básico con el que hemos aprendido a ejecutar un script con Node.js y dirigir el tráfico web a dicho script para que sea este quien lo maneje.

El siguiente paso es estudiar la API y la documentación de Node.js y buscar tutoriales especializados para seguir aprendiendo esta novedosa tecnología.

Facebooktwitter

¿Qué es Node.js?

nodejs-logoNode.js es una tecnología open source relativamente nueva que está tomando mucha fuerza, y que básicamente permite ejecutar código Javascript en el servidor, en lugar del navegador donde es normalmente ejecutado. Puede ser instalado en las tres plataformas principales (Windows, Mac OS X y Linux).

Node.js interpreta código Javascript utilizando el motor V8 de Google y proporciona un modelo dirigida por eventos y operaciones de entrada/salida asíncronas, lo cual hace que sea ideal para aplicaciones en tiempo real con muchas conexiones simultáneas donde la comunicación entre clientes y servidor es constante (un ejemplo sencillo sería un chat, o una API REST).

Actualmente el lenguaje de programación de lado de servidor más usado es sin duda PHP, pero al contrario que este, Node.js no necesita de un servidor como Apache o nginx, ya que es el propio Node quien se encarga de recibir conexiones y entregar las respuestas HTTP. Afortunadamente encargarse de esto es relativamente sencillo y se traduce en un rendimiento enorme y gran escalabilidad, haciendo capaz a Node de responder a un número de conexiones que colapsarían a PHP.

Sin embargo, no todos los aspectos son positivos. Una de las principales desventajas de Node.js actualmente es la disponibilidad en servidores compartidos. Ahora mismo, no se puede simplemente subir una aplicación en Node a un servidor y esperar que funcione. Por este motivo es el uso de VPS cada vez más popular, ya que se tiene libertad total para instalar cualquier software, incluyendo Node, y así adoptar rápidamente este tipo de nuevas tecnologías.

Para obtener más información, puede visitar las siguientes webs:
nodejs.org
Wikipedia

Facebooktwitter

Cómo ajustar el valor memory_limit de PHP desde Plesk

Una de las directivas de configuración de PHP que más se suele tener que ajustar es el memory_limit. El valor que le asignemos limita la cantidad de memoria del sistema en bytes que un script puede utilizar como máximo, y está pensado para evitar que un posible script mal programado entre por ejemplo en un bucle infinito y nos ocupe toda la memoria del sistema. Cuando llega al límite asignado, simplemente muere.

Es importante tener claro que este límite no es el global para PHP, si no de cada script individual que se esté ejecutando, por ello el valor ideal es el menor que no de errores de memoria.

Si tenemos un script que hace uso intensivo de memoria y supera el límite asignado, PHP nos dará un error parecido a este

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2348617 bytes) in /script.php on line 10

Para aumentar la memoria de PHP desde Plesk, debemos ir a la sección Configuración PHP

conf php plesk

y en el campo memory_limit ponemos la memoria en Mb que queremos asignarconf memory_limit

Guardamos el cambio y comprobamos que no da errores. Si continua dando errores, vamos aumentando la memoria poco a poco (en aumentos de 32 Mb por ejemplo) hasta que encontremos el limite más bajo posible que no nos de errores.

Facebooktwitter

Cómo activar la compresión GZIP en tu servidor

En el anterior post comentábamos algunas estrategias básicas para aumentar la velocidad de carga de nuestra web y una de las más efectivas es activar la compresión GZIP.

El primer paso que debes realizar en tu servidor es comprobar que el módulo de Apache mod_deflate esté activo. En Evidalia Host está activado por defecto tanto en VPS como en los planes compartidos. Para ello debemos comprobar el archivo de configuración de Apache

vi /etc/httpd/conf/httpd.conf

y buscar la línea

#LoadModule deflate_module modules/mod_deflate.so

Si tiene el símbolo # al principio de la línea no está activado, por lo que quitamos el símbolo y reiniciamos Apache

/etc/init.d/httpd restart

Una vez el módulo está activado, debemos indicarle al servidor que comprima las páginas. Para ello, se debe crear un archivo de configuración mod_deflate.conf dentro de /etc/httpd/conf.d/

vi /etc/httpd/conf.d/mod_deflate.conf

Dentro añadimos el siguiente código

<Location />
<IfModule mod_deflate.c>
# se comprueba que el módulo está activo

# activamos la compresión
SetOutputFilter DEFLATE

# hacemos que no comprima imágenes
SetEnvIfNoCase Request_URI \.(?:gif|jpeg|jpg|png)$ no-gzip dont-vary

# nos aseguramos de que los proxies no envien contenido incorrecto
Header append Vary User-Agent env=!dont-vary

<IfModule mod_headers.c>
# hacemos que controle bien peticiones que vienen de detras de un proxy
Header append Vary User-Agent env=!dont-vary
</IfModule>
</IfModule>
</Location>

Guardamos y reiniciamos Apache de nuevo

/etc/init.d/httpd restart

Y comprobamos que la compresión está activa usando http://checkgzipcompression.com

De esta manera habremos activado la compresión GZIP en nuestro servidor. Alternativamente, si no queremos activarla en todo el servidor, no crearíamos el archivo de configuración mod_deflate.conf e indicaríamos vía .htaccess qué peticiones deseamos que el servidor comprima.

Para configuraciones más avanzadas, recomendamos comprobar la documentación oficial de mod_deflate en http://httpd.apache.org/docs/current/mod/mod_deflate.html

Facebooktwitter