msgbartop
msgbarbottom

13 ene 12 Cómo bloquear el tráfico de un país

Si por cualquier razón necesitáis bloquear el tráfico de un servidor desde algún país en concreto en http://www.countryipblocks.net/ mantienen una lista actualizada de los rangos de ips de cada país.

Puedes descargar varios formatos, incluso uno preparado para insertar directamente en un fichero .htaccess, aunque a mi no me parece el mejor formato ya que obligas a que el servidor web revise una lista de ips que puede llegar a ser muy grande antes de que muestre la página y eso podría hacer que la navegación se enlenteciera demasiado, además un servidor web no es el más adecuado para realizar esa función.

Os pongo varios ejemplo de como realizar el bloqueo desde la línea de comandos. Para los ejemplos he utilizado korea, no se os ocurra utilizar rangos de ips de el país en el que estáis por que os podéis bloquear el acceso. Como diría un amiguete, “no seáis gañanes

Con iptables:

.
/usr/bin/wget -O /tmp/pais.txt https://www.countryipblocks.net/e_country_data/KR_cidr.txt; for i in $(/bin/cat /tmp/pais.txt | /bin/grep -v '#'); do sbin/iptables -A INPUT -s $i -j DROP; done; /bin/rm /tmp/pais.txt

Con apf:

.
/usr/bin/wget -O /tmp/pais.txt https://www.countryipblocks.net/e_country_data/KR_cidr.txt; for i in $(/bin/cat /tmp/pais.txt | /bin/grep -v '#'); do /etc/apf/apf -d $i; done; /bin/rm /tmp/pais.txt

23 nov 11 Cómo cambiar el grupo de seguridad de una instancia de amazon EC2

Amazon Web Services

Antes de empezar 2 conceptos sobre Amazon Web Sevices (aws):
Instancia: es el equivalente a un servidor
Grupo de seguridad: reglas predeterminadas de un firewall

Durante el proceso de creación de una instancia en Amazon EC2 uno de los pasos es asignarle un grupo de seguridad.
Lo normal es dejar abiertos sólo aquellos puertos que realmente necesitas para minimizar los riesgos de accesos y ataques no deseados.

Yo tengo predefinidos tres grupos, uno super básico con sólo el puerto 80, 443 (los usados por las páginas web) y el 22 (ssh), otro más abierto con mas puertos para otro tipo de servidor y el “vivalavirgen” con todo abierto, que en principio no debería de utilizarse para nada excepto algunas pruebas.

En mi caso el problema surgió al crear una nueva instancia para un servidor que tiene servicios en puertos que hasta ahora no había utilizado y sin darme cuenta le asigné un grupo de seguridad que no tenía esos puertos contemplados.

Evidentemente al intentar acceder a esos servicios no podía,así que intenté cambiar el grupo de seguridad de esa instancia pero me llevé una buena sorpresa al comprobar que no era posible por el tipo de servidor que había seleccionado.

La única solución que encontré fue ir al menú de la instancia y seleccionar la opción “Launch more like this” y en el proceso de creación de la nueva instancia asignarle el grupo correcto. Es una forma de hacer esto un poco “de andar por casa” pero funciona y soluciona la papeleta al que lo necesite.

20 sep 11 Forma rápida y efectiva de eliminar spam en blogs y foros

El spam en los blogs es un problema que acaba afectando de alguna forma a todos los que administramos servidores. En WordPress hay estupendos plugins para evitar el spam como Akismet y que funcionan muy bien, pero siempre funcionan después de que el spam ya ha entrado en el blog con el consiguiente consumo de ancho de banda, cpu, memoria y espacio en disco. Evidentemente para un sólo blog no es un problema pero cuando tienes muchos con mucho tráfico y está entrando continuamente spam en todos ellos puede acabar siendo un problema.

En Stop Forum Spam han creado una lista de spammers a nivel mundial que puedes consultar descargando un fichero con las ips, emails o nombres de usuario utilizados o a través de una api que puedes consultar libremente desde cualquier aplicación que desarrolles.

En mi caso para ahorrar tiempo y ancho de banda he creado una entrada en el cron que diariamente descarga las ips bloqueadas durante las ultimas 24 horas y las bloquea directamente.

Ejemplo con iptables

.
/usr/bin/wget -O /tmp/listed_ip_1.zip http://www.stopforumspam.com/downloads/listed_ip_1.zip; /usr/bin/unzip /tmp/listed_ip_1.zip -d /tmp/; for i in $(/bin/cat /tmp/listed_ip_1.txt); do /sbin/iptables -A INPUT -s $i -j DROP; done; /bin/rm /tmp/listed_ip_1.*

y si utilizas el firewall apf

.
/usr/bin/wget -O /tmp/listed_ip_1.zip http://www.stopforumspam.com/downloads/listed_ip_1.zip; /usr/bin/unzip /tmp/listed_ip_1.zip -d /tmp/; for i in $(/bin/cat /tmp/listed_ip_1.txt); do /usr/local/sbin/apf -d $i; done; /bin/rm /tmp/listed_ip_1.*

Espero que os sea útil.

[Actualización]
Acabo de encontrar un plugin para wordpress que utiliza esta lista junto con otras dos:
http://wordpress.org/extend/plugins/stop-spammer-registrations-plugin/

24 ago 11 Error en Apache: (28)No space left on device: Couldn’t create accept lock

Ayer detecté un error poco frecuente en un servidor web con apache.
Después de una caida del servidor, cuando intentaba iniciar el apache este no arrancaba y en el log aparecía el error.
(28)No space left on device: Couldn’t create accept lock (/var/lock/apache2/accept.lock.xxxxx) (5)

Espacio en disco duro no falta, así que el problema era otro por lo que revolviendo por internet vi que, por suerte, no era el primero que le pasaba algo así y que ese error se achacaba a un problema con el array de semáforos.

Al hacer un

ipcs -s

se veía que tenía un montón de semáforos abiertos por el usuario del apache cuando este no está funcionando.
La solución pasa por eliminar todos los semáforos abiertos por el usuario del apache y ya se puede reiniciar sin problemas.

Si los liberas a mano puedes utilizar:

ipcrm -s proceso

O si lo prefieres automatizar un poco:

.
for i in `/usr/bin/ipcs -s | /bin/grep www-data | /usr/bin/awk '{print $2}'` ; do /usr/bin/ipcrm -s $i; done

Ahora sólo me queda averiguar por que se llena el array de semáforos y no se libera.

16 jul 11 Cómo enviar correos desde WordPress con wp_mail

Enviar correos desde WordPress es muy sencillo utilizando la función wp_mail.

Lo mejor es que veáis un ejemplo.

$email="usuario@dominio.com";
$titulo="Subject del Email de prueba";
$mensaje="Email de prueba. bla bla bla";
$headers = 'From: Remitente ' . "\r\n";
wp_mail($email, $titulo, $mensaje, $headers);

En este ejemplo podemos ver los cuatro campos principales. Lo que hace es enviar un email en modo texto, si queremos enviarlo en html debemos añadir un filtro para indicar que el contenido se enviará en html.

add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));

En el ejemplo:

$email="usuario@dominio.com";
$titulo="Subject del Email de prueba";
$mensaje="Email de prueba. bla bla bla";
$headers = 'From: Remitente ' . "\r\n";
add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
wp_mail($email, $titulo, $mensaje, $headers);

Si además queremos enviar un fichero adjunto al mensaje sólo tenemos que añadir un parámetro más a la función wp_mail.

$email="usuario@dominio.com";
$titulo="Subject del Email de prueba";
$mensaje="Email de prueba. bla bla bla";
$headers = 'From: Remitente ' . "\r\n";
$fichero="/home/rastreador/mi_fichero";
$atach= array($fichero);
add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
wp_mail($email, $titulo, $mensaje, $headers,$atach);

12 jul 11 Seguridad WP: No informar de la versión de WordPress

WordPress muestra en las cabeceras de todos los blogs la versión que estás ejecutando. Si quieres añadir una pequeña capa más de seguridad a tu instalación de WordPress lo mejor es eliminar esa información.
Una forma sencilla y rápida de hacer esto es añadir al final de tu fichero functions.php del tema este código:

remove_action('wp_head', 'wp_generator');

11 jul 11 Cómo obtener información de una tarjeta

Para el que no lo sepa es BIN de una tarjeta son las 6 primeras cifras de la tarjeta que identifica el tipo de tarjeta, entindad emisora, si es de crédito o débito y el país. Si tienes una tienda online y cruzas este dato con la ip de la compra, la dirección de envío y alguna otra cosa, te puede ayudar a decidir si una operación es buena o mala, p.e. si te pagan con una tarjeta de EEUU, una ip de Marruecos y una dirección de envío de Madrid el resultado es: lagarto, lagarto, esto huele mal.

Para saber el BIN de una tarjeta yo utilizo Binbase, un sitio donde puedes consultar el bin de una tarjeta. Está limitado a 10 consultas diarias, pero es suficiente para alguien que comienza, si no siempre puedes comprar la base de datos de bines.

En la wikipedia tienes una lista de bines, aunque no se si será muy completa y el algoritmo de Luhn, utilizado para calcular el dígito de control de la tarjeta.

07 jul 11 Cómo saber la operadora de un móvil

Si necesitas saber con que operadora está un móvil, la cmt te facilita esa información a través de un simple formulario de consulta público.

04 jul 11 Cómo modificar permisos de ficheros y directorios con python

Muchas veces cuando instalas en un servidor algún plugin o algún cms, como prestashop, te crean permisos de lectura, escritura y ejecución que no son los más adecuados para la seguridad del servidor. Personalmente me molesta especialmente encontrarme con directorios y ficheros con 777.

Modificar a mano una cantidad muy grande de ficheros y directorios puede requerir mucho tiempo así que he preparado un pequeño script en python que hace esas modificaciones por mi. Sólo hay que cambiar el string ruta_a_explorar por el path y el sólo modifica los ficheros y directorios dejando los permisos 644 para los ficheros y 755 para los directorios.

Espero que os sea útil.

#! /usr/bin/env python
# -*- coding: utf-8-*-
import os, sys, stat

ruta_a_explorar="/ruta/a/explorar/"

for root,dirs,files in os.walk(ruta_a_explorar):
        for file in [f for f in files]:
                pp=os.path.join(root, file).replace("""\\""",'/')
                if stat.S_ISDIR(os.stat(pp)[stat.ST_MODE]):
                        os.chmod(pp,stat.S_IRWXU|stat.S_IWUSR|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH|stat.S_IXOTH)
                elif stat.S_ISREG(os.stat(pp)[stat.ST_MODE]):
                        os.chmod(pp,stat.S_IRUSR|stat.S_IWUSR|stat.S_IRGRP|stat.S_IROTH)

        for dir in [f for f in dirs]:
                pp=os.path.join(root, dir).replace("""\\""",'/')
                print pp
                if stat.S_ISDIR(os.stat(pp)[stat.ST_MODE]):
                        os.chmod(pp,stat.S_IRWXU|stat.S_IWUSR|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH|stat.S_IXOTH)
                elif stat.S_ISREG(os.stat(pp)[stat.ST_MODE]):
                        os.chmod(pp,stat.S_IRUSR|stat.S_IWUSR|stat.S_IRGRP|stat.S_IROTH)
Get Adobe Flash playerPlugin by wpburn.com wordpress themes