Archive of October 2010


Fri 29 Oct

Mejorando la seguridad de WHM/Cpanel con Suhosin

Suhosin es un sistema de protección para PHP que se encarga de, entre otras cosas, comprobar la seguridad de las funciones ejecutadas, localizar los fallos de seguridad típicos en la programación y evitar que puedan ser explotados. En la misma web indican que instalando Suhosin te puedes evitar tener que pensar en la programación segura, Suhosin se encargaría de todo. No se si será para tanto... ;) En este post veremos una de sus utilidades, bloquear funciones peligrosas que no queremos que se puedan ejecutar en nuestro hosting compartido.

Al tratarse de una extensión de PHP tendremos que usar EasyApache para compilarlo para disponer de el en nuestros WHM. Daré por supuesto que esta parte ya está hecha. Una vez con el soporte habilitado y Apache reiniciado procedemos a bloquear funciones. Para ello debemos editar el php.ini y añadir una línea como la siguiente:

suhosin.executor.func.blacklist = "exec,shell_exec,system,passthru,proc_open,popen,proc_terminate,
show_source"

De esta forma, dichas funciones quedarán prohibidas y no se podrán llamar desde las páginas web que nuestros clientes suban.

Esto, en un mundo feliz e ideal, se dejaría configurado y no nos preocuparíamos más. Pero claro, en un mundo ideal el cliente no te crearía un centenar de incidencias y tus compañeros developers no te llamarían constantemente preguntando porque no pueden hacer un exec desde PHP.

Si por ejemplo tenemos un dominio el cual no queremos limitar, se tendrá que modificar el virtualhost siguiendo el método de WHM http://docs.cpanel.net/twiki/bin/view/EasyApache3/InsideVHost que se resume en:

Tenemos las carpetas:

/usr/local/apache/conf/userdata/std/2/

/usr/local/apache/conf/userdata/ssl/2/

/usr/local/apache/conf/userdata/std/1/

/usr/local/apache/conf/userdata/ssl/1/

2 indica que la versión de Apache que se está utilizando es 2, 1… pues Apache1.

ssl se aplicará al virtualhost con ssl, std sin ssl.

Imaginemos entonces que tenemos apache2, y el usuario se llama Google, la web que alojamos google.es y solo nos interesa http, sin ssl.

Entonces creamos la siguiente carpeta:

/usr/local/apache/conf/userdata/std/2/google/google.es/

Y dentro un fichero loquequieras.conf con el siguiente contenido:

php_admin_value suhosin.executor.func.blacklist "show_source"

Esta configuración añadirá dicha línea al VirtualHost de google. De forma que todos los demás tienen las restricciones arriba indicadas, mientras que google solamente show_source. Es necesario indicar al menos una función, no vale dejarlo vacio.

Una vez hecho, le decimos a whm que regenere el httpd.conf

/scripts/verify_vhost_includes
/usr/local/cpanel/bin/apache_conf_distiller --update
/scripts/rebuildhttpdconf


Wed 20 Oct

Añadir nodos online a nuestro MySQL Cluster

A partir de la versión 7.0 y 7.1 se han añadido nuevas funcionalidades a MySQL Cluster que aumentan tanto la escalabilidad como el rendimiento de la base de datos. La nueva mejora que hoy voy a tratar aquí es la posibilidad de añadir nuevos nodos de almacenamiento a nuestro cluster en caliente sin necesidad de hacer una parada de mantenimiento.

A la hora de escalar nuestro cluster hay que tener en cuenta siempre el número de réplicas (NoOfReplicas) y el número de nodos que queremos. Debemos recordar que dicho número debe ser divisible y al mismo tiempo que tanto uno como otro tienen un límite. En el ejemplo que voy a mostrar tendremos la base de datos con dos réplicas y dos nodos y lo pasaremos a 2 réplicas y 4 nodos. De esta forma, pasaremos de tener un único Node Group (2/2=1) a tener dos Node Groups (4/2=2).

El primer paso es configurar los Management Node. Para ello añadimos los dos nuevos ndbd a los ficheros config.ini:

[ndbd]
Id = 1
Hostname = 192.168.1.10
[ndbd]
Id = 2
Hostname = 192.168.1.11
[ndbd]
Id = 3
Hostname = 192.168.1.12
[ndbd]
Id = 4
Hostname = 192.168.1.13

A continuación reiniciamos todos los Management Nodes para que lean el nuevo fichero de configuración y una vez en marcha haremos lo mismo con los Data Nodes que ya están en funcionamiento:

# db_mgmd -f config.ini –reload
ndb_mgm> 1 RESTART
ndb_mgm> 2 RESTART

De la misma forma, reiniciamos nuestros SQL Nodes con el típico /etc/init.d/mysqld restart

Iniciamos los dos nuevos nodos con --initial:

3 #> ndbd --initial
4 #> ndbd --initial

Desde la consola de administración creamos el nuevo Node Group incluyendo los nuevos nodos 3 y 4:

ndb_mgm> CREATE NODEGROUP 3,4

Desde un SQL Node lanzamos el reparticionado de cada tabla para que los datos y los índices se repartan entre los 4 nodos existentes.

mysql> ALTER ONLINE TABLE productos REORGANIZE PARTITION;
mysql> ALTER ONLINE TABLE clientes REORGANIZE PARTITION;
mysql> ALTER ONLINE TABLE ventas REORGANIZE PARTITION;

Una vez hecho, se recomienda un OPTIMIZE TABLE en las tablas para "desfragmentar" los dos nodos originales.

Listo, hemos pasado de una infraestructura de dos nodos a una de cuatro sin ninguna parada de servicio. Nadie se ha enterado y hemos aumentado el throughput y la disponibilidad de nuestro cluster.

1 Comment · Tags: ,

Wed 13 Oct

Ya soy certificado en MySQL Cluster 5.1

Finalmente, aunque estuve a punto de tirar la toalla, estoy certificado en MySQL Cluster. Después de múltiples problemas con el soporte de Oracle y el /ignore que me había puesto Prometric, pude hacer el exámen. Tengo que dar las gracias a Brandye Barrington de Oracle, sin su ayuda mi certificado de MySQL DBA5.0 aún estaría en el limbo entre PearsonVUE y Prometric. Gracias a el tuve mi certificado migrado y pude examinarme :)

Sobre MySQL Cluster que decir... una gran herramienta pensada para ofrecer un rendimiento brutal y una alta disponibilidad casi perfecta. La verdad, tener un servidor MySQL Cluster con 50 GB de RAM y que toda la BBDD e índices estén en RAM y particionados por múltiples nodos... me suena como una poesía :) Espero que la herramienta siga avanzando, ya que es la mejor solución libre que existe para bases de datos gigantes, con necesidades de alto throughput, escalabilidad, alta disponibildiad y failover. Vamos, que la replicación master-master es para pobres ;) Próximamente iré publicando distintos posts relacionados con MySQL Cluster para todos vosotr@s.

Ahora estoy preparando la certificación OCA de Oracle 11g, que es otro mundo completamente distinto. Pero de momento, aquí va el logo de mi nueva certificación en MySQL Cluster 5.1.

MySQL Cluster 5.1 Certification

YEAHHH!!!!111