Category Archives: servicios - Page 3

Backup de todas las bases de datos MySQL en archivos separados

Antes que nada es menester, nobleza bloggera obliga, disculparme porque hace mucho (MUCHO!) que no posteo nada en el blog. Ando con poco tiempo y pocas cosas interesantes para decir. Pero yendo a lo que nos ocupa…mysql_logo

En estos días necesitaba hacer un backup de todas las bases de datos de un servidor MySQL, pero no me servía hacer mysqldump –all-databases, porque necesitaba tenerlo en archivos separados (uno para cada DB). Seguramente es algo que ya debe haber sido hecho mil veces, pero no tenía tampoco muchas ganas de perder mucho tiempo en Google (una búsqueda rápida no me dio resultados útiles), así que hice el siguiente script muuy sencillo que obtiene todas las DB de un server y hace un dump de cada una. Se los dejo por si les sirve, capaz los saque de un apuro en alguna ocasión.

#!/bin/bash
PORT="3306"
USER="root"
PASSWORD="yourpassword"
mysql=/usr/bin/mysql
mysqldump=/usr/bin/mysqldump

TABLES=`$mysql -P $PORT -u $USER --password=$PASSWORD --execute="SHOW DATABASES;" |awk '{print($1)}' |grep -v "Database" |grep -v "information_schema"`
for table in $TABLES; do
	echo "Backing up $table..."
	file=$table.backup_`date +%Y%m%d`.sql
	$mysqldump -P $PORT -u $USER --password=$PASSWORD $table > $file
	echo "Compressing backup..."
	gzip $file
done

Nota: la definición del puerto es innecesaria, pero yo la tuve que hacer porque en mi caso el servidor no estaba corriendo en el puerto default (3306) sino en otro.

mod_python + Python 2.6 en CentOS

mod_python

mod_python

Hace algún tiempo escribí un pequeño artículo sobre cómo instalar mod_python en Apache 2.2. El tema es que, lógicamente, cada tanto uno quiere actualizar Python para tener las últimas correcciones de bugs y los últimos features. En mi caso quería instalar Python 2.6.1 en un CentOS. El tema es que con yum no veía ninguna actualización, pero tenía Python 2.4.x instalado y yo quería lo último. Me bajé el código, lo compilé, lo instalé y al rato me di cuenta que al hacer eso había roto el yum (que está escrito en Python). Así fue que llegué a darme cuenta de cómo instalar Python 2.6.1 por separado, y recompilar mod_python para que trabaje con esa versión, y esto es lo que quería compartir con ustedes.

Primero: Instalar Python 2.6 en una ubicación alternativa

Lo primero que vamos a hacer es descargar, compilar e instalar Python 2.6 en una ruta alternativa, es decir, sin pisar la instalación actual de Python 2.4 que viene con CentOS.

# cd /usr/src
# wget http://www.python.org/ftp/python/2.6.1/Python-2.6.1.tgz
# tar zxvf Python-2.6.1.tgz
# cd Python-2.6.1/
# ./configure --prefix=/usr
# make
# make altinstall

La clave está justamente en el último paso. En vez de hacer “make install”, hacemos “make altinstall” para que se instale sin sobreescribir la versión actual de Python. Básicamente lo que hace es instalar todas las libs en /usr/lib/python2.6 (esto lo hace de todas formas), y luego crear el binario /usr/bin/python2.6 pero sin sobreescribir /usr/bin/python.

Editado el 10/03/2010: En algunos casos puede ser necesario agregar al configure de Python la opción –enable-shared. Gracias Orcen!

Segundo: Recompilar mod_python

Ahora queda recompilar mod_python contra la nueva versión de python.

# cd /usr/src
# wget http://www.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz
# tar -zxvf mod_python-3.3.1.tgz
# cd mod_python-3.3.1
# ./configure --with-python=/usr/bin/python2.6
# make
# make install

La clave aquí está en el configure al que le pasamos el parámetro de qué binario de Python debe usar.

Tercero: Reiniciar Apache y probar

Por último queda reiniciar Apache y repetir la prueba explicada en el artículo anterior.

# service httpd restart

Instalar mod_evasive en Apache para dificultar ataques DoS

Apache Web Server

Apache Web Server

Describiremos a continuación los pasos para la instalación y configuración de mod_evasive, un módulo para Apache desarrollado por Nuclear Elephant para prevenir ataques DoS. Antes que nada es preciso advertir que no se trata de una solución definitiva y que, incluso, bajo ataques importantes, no sirve de mucho. Pero es una buena forma de evitar ataques pequeños y mantener la salud de nuestro servidor.

¿Cómo funciona?

Básicamente lo que hace es mantener una tabla dinámica con las URIs accedidas por las distintas IPs de los clientes del Apache, y permite ejecutar algunas acciones cuando una misma IP solicita un mismo recurso (una misma URI o elementos de un mismo sitio) más de n veces en m segundos. La acción por default que ejecuta el mod_evasive es, una vez superado el máximo de requests por segundo permitidos, bloquear durante una cantidad de segundos al cliente (la IP) devolviendo un error 403 (Forbidden) a la petición HTTP. Pero lo interesante es que también permite ejecutar un comando de sistema al registrarse un intento de ataque, con lo cual se puede agregar una regla al iptables para bloquear la IP del cliente.

Instalación

La instalación es muy sencilla. Basta con descargar el tar, descomprimirlo, compilarlo con apxs y habilitarlo en el httpd.conf.

# cd /usr/src
# wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
# tar zxvf mod_evasive_1.10.1.tar.gz
# cd mod_evasive
# apxs -cia mod_evasive20.c # para Apache 1.3 el comando sería apxs -cia mod_evasive.c
# vi /etc/httpd/conf/httpd.conf # editamos la configuracion
# service httpd restart # reiniciamos el Apache

En el httpd.conf habría que agregar las siguientes líneas.

<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 300
</IfModule>

Opciones de configuración

A continuación transcribo la descripción de las distintas opciones de configuración tomada de esta excelente guía de Xombra Team.

  • DOSHashTableSize <valor> – Establece el número de nodos a almacenar para cada proceso de peticiones de la tabla hash (contenedor asociativo de recuperación de peticiones por medio de claves que agiliza las respuestas del servidor). Si aplicamos un número alto a este parámetro obtendremos un rendimiento mayor, ya que las iteraciones necesarias para obtener un registro de la tabla son menores. Por contra, y de forma evidente, aumenta el consumo de memoria necesario para el almacenamiento de una tabla mayor. Se hace necesario incrementar este parámetro si el servidor atiende un número abultado de peticiones, aunque puede no servir de nada si la memoria de la máquina es escasa.
  • DOSPageCount <valor> – Indica el valor del umbral para el número de peticiones de una misma página (o URI) dentro del intervalo definido en DOSPageInterval. Cuando el valor del parámetro es excedido, la IP del cliente se añade a la lista de bloqueos.
  • DOSSiteCount <valor> – Cuenta cuántas peticiones de cualquier tipo puede hacer un cliente dentro del intervalo definido en DOSSiteInterval. Si se excede dicho valor, el cliente queda añadido a la lista de bloqueos.
  • DOSPageInterval <valor> – El intervalo, en segundos, para el umbral de petición de páginas.
  • DOSSiteInterval <valor> – El intervalo, en segundos, para el umbral de petición de objetos de cualquier tipo.
  • DOSBlockingPeriod <valor> – Establece el tiempo, en segundos, que un cliente queda bloqueado una vez que ha sido añadido a la lista de bloqueos. Como ya se indicó unas líneas atrás, todo cliente bloqueado recibirá una respuesta del tipo 403 (Forbidden) a cualquier petición que realice durante este periodo.
  • DOSEmailNotify <e-mail> – Un e-mail será enviado a la dirección especificada cuando una dirección IP quede bloqueada. La configuración del proceso de envío se establece en el fichero mod_evasive.c de la forma /bin/mail -t %s, siendo %s el parámetro que queda configurado en este parámetro. Será necesario cambiar el proceso si usamos un método diferente de envío de e-mails y volver a compilar el módulo con apxs (por ejemplo, la opción t ha quedado obsoleta en las últimas versiones del comando).
  • DOSSystemCommand <comando> – El comando reflejado se ejecutará cuando una dirección IP quede bloqueada. Se hace muy útil en llamadas a herramientas de filtrado o firewalls. Usaremos %s para especificar la dirección IP implicada. Por ejemplo, podemos establecer su uso con iptables de la forma siguiente:
    DOSSystemCommand “/sbin/iptables –I INPUT –p tcp –dport 80 –s %s –j DROP”
  • DOSLogDir <ruta> – Establece una ruta para el directorio temporal. Por defecto, dicha ruta queda establecida en /tmp, lo cual puede originar algunos agujeros de seguridad si el sistema resulta violado.
  • DOSWhitelist <IP> – La dirección IP indicada como valor del parámetro no será tenida en cuenta por el módulo en ningún caso. Para cada dirección IP a excluir ha de añadirse una nueva línea con el parámetro. Por ejemplo, dejaremos fuera del chequeo del módulo a un posible bot que use los siguientes rangos de direcciones:
    DOSWhitelist 66.249.65.*
    DOSWhitelist 66.249.66.*

Probarlo

¿Y cómo sé si está funcionando? mod_evasive viene con un pequeño script en perl para probar el funcionamiento del módulo. Para eso vamos al directorio de mod_evasive y ejecutamos el script test.pl:

# cd /usr/src/mod_evasive
# perl test.pl
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden

Y si pusimos la directiva para bloquear la IP por iptables podemos verlo con:

# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp --  anywhere tcp dpt:http

Referencias

Autenticación PAM mediante USB

Autenticación USB

Autenticación USB

Aprovecho para reproducir un aporte de House of Sysadmins.

En este articulo veremos una forma de augmentar la seguridad de los servidores solo permitiendo autenticar root mediante un lápiz usb.

  • Una maquina con linux
  • Librerías pam usb
  • Lápiz USB

Instalando PAM USB

# apt-get  install libpam-usb

Instalando las PAM USB Tools

# apt-get  install pamusb-tools

Añadiendo nuestro lápiz como Token de autenticación

Primero de todo tendremos de pinchar el pendrive en el puerto usb y ejecutar:

#  pamusb-conf —add-device MyToken

Donde MyToken es un nombre identificativo para el pendrive puede ser cualquier otro

Añadiendo Usuarios a PAM USB

Podemos añadir fácilmente usuarios en este ejemplo añadiremos el usuario root como usuario autenticado de PAM USB

# pamusb-conf —add-user root

Probando si funciona la autenticación

Si tenemos el Pendrive Conectado y ejecutamos

# pamusb-check root

* Authentication request for user «root» (pamusb-check)
* Device “MyToken” is connected (good).
* Performing one time pad verification…
*
                Access granted.

Veremos que al final aparece Acces Granted

Si sacamos el pendrive veremos que al ejecutar lo anterior nos devuelve

Access denied.

PAM USB como sistema de autenticación

Editaremos el fichero /etc/pam.d/common-auth y añadiremos la siguiente linea al principio del mismo:

auth sufficient pam_usb.so

En este momento podriamos iniciar una sesión gdm sin necesidad de introducir password , simplemente conectando la llave usb.
Otras opciones interesantes es que permite la ejecucion de comandos al conectar el lápiz , podriamos por lo tanto crear un sistema para hacer copias automáticas de seguridad al conectar la llave usb.

La autenticación se puede realizar con cualquier llave usb al realizar estos pasos no se modifica en ningun momento el contenido de los datos del usb , si no que se extraen los datos que hace que cada dispositivo sea único.

  • Fabricante
  • Uuid
  • No de serie

Por lo tanto aunque realizáramos una copia bit a bit del dispositivo no podriamos crear otro dispositivo igual para autenticar.

Fuente: House Of Sysadmins Wiki

Samba 4 incorpora soporte para Active Directory

GNU/Linux

GNU/Linux

Leo en Slashdot que Andrew Bartlett, desarrollador de Samba en Camberra, dijo en la linux.conf.au que Samba 4 planea ser un reemplazo de Active Directory a nivel enterprise a partir de la implementación libre de los protocolos de Microsoft. De acuerdo con Bartlett, como AD es más que LDAP y Kerberos, Samba 4 no se trata únicamente de trabajar con la customización de Microsoft de esos protocolos, sino también de llevar el proyecto al punto de proveer un domain manager compatible con NT 4.

Para más detalles pueden acceder a la nota de Computerworld (en inglés), donde entre otras cosas comentan que Bartlett reconoció que Samba tiene una mala reputación por ser “imposible de configurar” y cree que Samba 4 debería funcionar “así nomás” sin que los administradores tengan que leer toda la documentación antes. Quien alguna vez haya tenido que configurar un Samba ya sabrá de qué estamos hablando.

El artículo está lleno de novedades interesantes de esta nueva versión de Samba. Si no entendí mal (porque me da la impresión de que hay algún problema con la organización de los párrafos en el artículo original), Samba ya no estaría desarrollado puramente en C sino que habrían incorporado algunas cosas en Python que es un lenguaje más accesible para los administradores y que tiene una excelente integración con otras herramientas. De esta forma, en términos del proceso de desarrollo, agregar nuevos features de Windows a Samba via scripting será mucho más sencillo.

Personalmente me parecen muy interesantes las novedades y no veo la hora de poder probar esta nueva versión. Lo que me resulta particularmente interesante es que no se encare el desarrollo como una mera implementación de funcionalidades de productos de Microsoft sino como una herramienta de red de más amplios propósitos.