Implementando Content Security Policy en el blog (WordPress)

By | November 23, 2017

Content-Security-Policy (CSP) no es más que un header más (como X-XSS-Protection o X-Frame-Options) que ayuda a mejorar la seguridad de nuestro sitio web. Básicamente con CSP especificamos qué origen puede tener cada tipo de recurso servido en nuestra página.

CSP divide los tipos de recursos que puede cargar una web con una serie de directivas: default-src (por defecto), img-src (imágenes), font-src (fuentes), style-src (estilos), script-src (scripts), etc… en cada directiva especificamos el posible origen del recurso. Un ejemplo en Apache para un blog WordPress:

Header set Content-Security-Policy \
"default-src 'self' *.github.com *.wordpress.org secure.gravatar.com w.org s.w.org;\
 font-src 'self' 'unsafe-inline' data: *.googleapis.com fonts.gstatic.com;\
 style-src 'self' 'unsafe-inline' data: *.googleapis.com assets-cdn.github.com;\
 media-src 'self' *.youtube-nocookie.com;\
 frame-src 'self' *.youtube-nocookie.com;"

Un ejemplo en Nginx:

add_header Content-Security-Policy \
"script-src 'self' 'unsafe-inline' 'unsafe-eval' *.youtube.com *.googleapis.com *.google-analytics.com;\
 frame-src 'self' *.youtube.com;\
 font-src 'self' https://themes.googleusercontent.com;\ 
 object-src 'self'";

Continue reading

Probando Kimchi para administrar entornos virtuales KVM en Ubuntu 16.04 LTS

By | November 21, 2017

Tanto en mi sobremesa con Debian Stretch como en mi portátil con Ubuntu 16.04 tengo prácticamente todas mis máquinas virtuales corriendo con KVM. Acostumbrado a virt-manager, decidí probar Kimchi en el portátil para administrar el entorno virtual.

Kimchi no es más que una interfaz web escrita en HTML5 que sirve para administrar de una forma sencilla e intuitiva nuestro entorno de máquinas virtuales KVM. Dada su facilidad de uso es idónea para iniciarse en entornos de virtualización. IBM, por ejemplo, la incluye actualmente en su solución PowerKVM.
Continue reading

De HTTP a HTTPS con Let’s Encrypt en modo manual (Debian)

By | November 19, 2017

Lenta pero inexorablemente el protocolo HTTPS se está convirtiendo en un nuevo estándar mínimo a cumplir para la mayoría de webs. Los principales navegadores y buscadores como Firefox o Chrome ya vienen anunciándolo hace tiempo. Se trata de una evolución que no sólo afectará a webs de medios de pago, sino también a blogs, periódicos online, etc…

Por suerte, actualmente contamos con Let’s Encrypt como Autoridad Certificadora abierta, gratuita y fruto del trabajo conjunto de organizaciones como Mozilla, Cisco o la EFF.

El proceso de certificación SSL con Let’s Encrypt constará principalmente de dos fases:

  1. Validación (challenge) contra la CA de Let’s Encrypt para verificar que somos los propietarios del dominio del que se va a generar un certificado SSL.
  2. Instalación del certificado en el servidor web Apache.

Posteriormente, también debemos tener en cuenta cómo renovar nuestro certificado.

Continue reading

Revisión del total de sockets abiertos (totsck) reportado por sar

By | November 15, 2017

Normalmente utilizo sar para revisar diversas métricas del sistema. Su uso es sencillo y permite acceder rápidamente a históricos de rendimiento para analizar múltiples recursos como pueden ser CPU, RAM, etc… Recientemente estuve revisando el uso de sockets para el proyecto sarviewer y creo que los valores reportados por sar pueden llevar a cierta confusión.

Pongamos un ejemplo:

Continue reading

Pasando lista a los crawlers que visitan nuestra web

By | October 29, 2017

La respuesta la tenemos en los logs de nuestro servidor web Apache o Nginx. Siempre y cuando nuestro formato de logs contenga información sobre el User-Agent que visita nuestra web.

Por ejemplo para Apache servirían los siguientes formatos:

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{User-agent}i" agent

En el caso de Nginx:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

Continue reading