Denyhosts e IPtables

Tengo bastante tiempo usando Denyhosts para proteger el servidor de mi trabajo contra intentos de intrusión por fuerza bruta, especialmente por el puerto 22 (servicio de ssh).

Denyhosts funciona perfecto y hace lo que promete; cada que un “hacker” [mejor escrito: script kiddie]  intenta acceder por SSH con un nombre de usuario o una contraseña incorrecta más de 3 veces, Denyhost bloquea su IP agregando una entrada al archivo /etc/hosts.deny
De esa manera, el IP ofensivo ya no puede establecer conexión al servidor por el puerto 22

Editando la configuración del script intenté que Denyhost bloqueara todos los puertos para el atacante y que así no tuviera acceso al servidor; ¡pero no lo conseguí!

Después de muchas horas, al final, hice un pequeño script en bash que lee la lista de IPs en /etc/hosts.deny (agregadas previamente por DenyHost) para agregarlas  a iptables; logrando así, bloquear totalmente al ofensor.

Para ejecutar el script, solo hay que darle permisos de ejecución y opcionalmente, agregarlo al crontab
Espero que a alguien más le sirva este script para bloquear con iptables los IPs registrados por Denyhosts.

#!/bin/bash

# I will be kind to the computers in my network segment
MY_NETWORK_SEGMENT=148.228.204.

# File to store IP address
MY_HOSTS_DENY=/root/.hosts_deny

# Die if /etc/hosts.deny file not found
[ ! -f "/etc/hosts.deny" ] && { echo "File /etc/hosts.deny not found."; exit 1; }

# Filter the /etc/hosts.deny to generate MY_HOSTS_DENY file
grep -vE "^#|^S" /etc/hosts.deny | awk {'print $2'} | grep -v $MY_NETWORK_SEGMENT | sort -n > $MY_HOSTS_DENY

while read -r IP
do
 # check if the IP isn't blank
 if [ -n "$IP" ]
  then
   CURRENT_IP=$(iptables-save | grep $IP)
   # if the current IP does not exists in iptables rules then...
   if [ -z "$CURRENT_IP" ]
    then
     # Die IP, Die!
     iptables -A INPUT -p all -s $IP -j DROP
     echo "IP: $IP banned in ALL ports"
   fi
 fi
done <"${MY_HOSTS_DENY}"

# Clean the mess
rm $MY_HOSTS_DENY
Anuncios

Cómo hacer el respaldo de moodle y todos los cursos

Empezaré por escribir que no soy un experto en moodle ni tampoco doy asesorías sobre su uso; lo cierto es que, como muchos; he tenido que ir aprendiendo paso a paso algunas cosas sobre la marcha, mientras se va utilizando esta magnífica plataforma educativa. Lo último con lo que me he tenido que enfrentar es con la realización de respaldos periódicos.

En este mini-micro tutorial, probablemente no logre escribir la octava maravilla, pero al menos espero que el compartir la forma en que yo he resuelto el asunto de los respaldos de moodle, le sirva a alguien más y lo ponga en práctica, o bien; que mejore la idea y la comparta con todos los lectores.

Considero que hay dos maneras de realizar respaldos, veamos la primera:

1.- Dentro de Moodle, en su interfaz gráfica se incluyen las herramientas para hacer respaldos de cada curso, de los alumnos inscritos, calificaciones, tareas, etc:

En el bloque administracion (dentro de tu curso) existe un botón llamado copia de seguridad que te permite crear un respaldo del curso con las opciones que tú elijas.

Este respaldo es un paquete zip que deberás restaurar cuando sea necesario, mediante la opción restaurar  en el bloque de administración del sitio.

El mayor dilema de este método es que se tiene que hacer, curso por curso y eso no es muy grato cuando tienes tantos cursos en la plataforma educativa o cuando quieres que cada determinado tiempo se hagan los respaldos de forma automática.

2.- La otra forma, es a través de un script que ejecuta algunas instrucciones directamente en el servidor; además este script se puede agregar al programador de tareas cron, para que se ejecute periodicamente.

Escencialmente lo que se tiene que respaldar es:

  • La base de datos de Moodle
  • La instalación de Moodle
  • Los archivos y recursos de todos los cursos, usuarios, etc.

He creado este script para hacer esas tres tareas consecutivamente; si te interesa usarlo, unicamente tienes que adaptarlo a tus variables de entorno:

#!/bin/bash
#Comprobamos que el usuario es root (super usuario) quien ejecuta este escript.
if [ $UID != 0 ]; then
 echo "No tienes los privilegios necesarios para ejecutar este script."
 echo "Debes ingresar como root, escribe \"su root\" sin las comillas."
 exit 1
fi

#Fecha actual
FECHA=$(date +%F);

#Hora actual
HORA=$(date +%H-%M-%S);

#Nombre del host en donde se ejecuta mysql (si hay dudas, ver moodle/config.php)
DBHOST=localhost

#Nombre de la base de datos  
DBNAME=moodledatabase

#Nombre del usuario que accede a la base de datos en mysql
DBUSER=moodleuser

#Clave de acceso a la base de datos en mysql
#Por defecto, se solicita cada vez que se ejecuta el script
#Pero se puede definir aqui
DBPASSWORD=""

#Directorio con la instalacion de moodle
MOODLE_DIR=/server/www/htdocs/moodle

#Directorio en donde se guardan los archivos de los cursos, las tareas, etc.
MOODLEDATA_DIR=/server/www/moodledata

#Directorio donde se guardaran los respaldos
BACKUP_DIR=/backups/moodle

#Respaldar la base de datos
if [ "$DBPASSWORD" = "" ]; then
 echo -n "Clave de acceso a la base de datos '$DBNAME' en mysql?: "
 read DBPASSWORD
fi
mysqldump -u $DBUSER -p$DBPASSWORD $DBNAME > $BACKUP_DIR/$DBNAME-$FECHA--$HORA.sql

#Comprimir el archivo de respaldo de la base de datos
echo "Desea comprimir el archivo de respaldo de la base de datos [Y/n]?"
echo -n " Valor por defecto [Y]: "
read COMPRESSDBFILE
if [ "$COMPRESSDBFILE" = "n" ]; then
 sleep 0
else
 bzip2 $BACKUP_DIR/$DBNAME-$FECHA--$HORA.sql
fi

#Hacer el archivo.tar.gz con el respaldo de moodle
tar czPf $BACKUP_DIR/moodle-$FECHA--$HORA.tar.gz $MOODLE_DIR

#Hacer el archivo.tar.gz con los archivos de los cursos, tareas, usuarios, etc
tar czPf $BACKUP_DIR/moodledata-$FECHA--$HORA.tar.gz $MOODLEDATA_DIR

##################################### FIN DEL SCRIPT ##################################

Puedes copiar y pegar el código de arriba y guardarlo en un archivo con extensión .sh o bien, bajar el script de este enlace; después sólo tienes que subirlo a tu servidor, editar las variables como son, el nombre de la base de datos, el nombre del usuario, la ubicacion a los directorios de moodle y el directorio donde se guarda el respaldo; para ejecutar el script tienes que cambiarle los permisos de ejecución; desde tu terminal escribe:

chmod +x backupMoodle.sh

y para ejecutarlo:

./backupMoodle.sh

Finalmente, espero que esa publicación sea de ayuda para más personas.

Script para la gestión de usuarios en bash

#!/bin/bash
#Comprobamos que el usuario es root.
if [ $UID != 0 ]; then
 echo "No tienes los privilegios necesarios para ejecutar este script."
 echo "Debes ingresar como root, escribe \"su root\" sin las comillas."
 exit 1
fi

echo
echo "Administración básica de usuarios y grupos en linux"
echo

while [ "$option" != "0" ]
 do
 clear
  echo
  echo "Opciones:"
  echo "---------"
  echo " 1. Agregar un usuario al sistema."
  echo " 2. Cambiar la clave de acceso de un usuario."
  echo " 3. Editar la información personal de un usuario."
  echo " 4. Borrar a un usuario del sistema."
  echo " 5. Crear grupo."
  echo " 6. Agregar un usuario a un grupo."
  echo " 7. Borrar un grupo."
  echo " 0. Salir."
  echo
  echo -n " Ejecutar: "
   read option
   case $option in
    1 )
     echo
     echo -n "Nombre del usuario a crear?: "
     read username
     echo "Con acceso a la línea de comandos bash [Y/n]?"
     echo -n " Valor por defecto [n]: "
     read shell_access
     if [ "$shell_access" = "Y" ]; then
       TERMINAL='/bin/bash'
     else
      TERMINAL='/bin/false'
     fi
     echo "Crear el directorio de trabajo para el nuevo usuario [Y/n]?"
     echo -n " Valor por defecto [Y]: "
     read home_directory
     if [ "$home_directory" = "n" ]; then
      useradd $username -s $TERMINAL
     else
      useradd $username -m -s $TERMINAL
     fi
     echo
    ;;
    2 )
     echo
     echo -n "Nombre del usuario del que se desea cambiar la clave?: "
     read username
     echo
     passwd $username
     echo
    ;;
    3 )
     echo
     echo -n "Nombre del usuario al cual cambiar la información personal?: "
     read username
     echo
     chfn $username
     echo
    ;;
    4 )
     echo
     echo -n "Nombre del usuario a borrar?: "
     read username
     if [ "$username" = "root" ]; then
      echo "Estúpido script, no puedes eliminar al Dios root"
      exit 0
     else
      echo
      echo "Desea borrar el directorio de trabajo y todo su contenido [Y/n]? "
      echo -n " Valor por defecto [n]: "
      read delete_home
     fi
     if [ "$delete_home" = "Y" ]; then
      userdel -r $username
     else
      userdel $username
     fi
     echo
    ;;
    5 )
     echo
     echo -n "Nombre del grupo a crear?: "
     read group
     echo
     groupadd $group
     echo    
    ;;
    6 )
     echo
     echo -n "Nombre del usuario para agregar al grupo?: "
     read username
     echo -n "Nombre del del grupo para agregar el usuario?: "
     read group
     echo
     groupadd $username $group
     echo
    ;;
    7 )
     echo -n "Nombre del grupo a borrar?: "
     read group
     echo
     groupdel $group
     echo
    ;;
    *) 
    ;;
   esac
  done
echo
exit 0

Tantas cosas por decir

Bueno, realmente he tenido poco tiempo para escribir en este blog y más que nada es por las diversas actividades en las que me he visto involucrado, una de ellas y la más importante es que mi novia y yo andamos de un lado a otro con los preparativos para la boda, ya sea ir a ver el salón, las bases para los centros de mesa, su vestido de novia, el diseño en photoshop de la invitación, el papel para imprimir las invitaciones, la tinta para la impresora, el papel para los sobres y así… mil cosas más que si bien, ocupan casi todo nuestro tiempo “libre” realmente no nos quejamos porque lo hemos disfrutado mucho Landy y yo; a mi me gustó el instante en que ella escogió el color del papel para los sobres y bueno, a mi me tocó ingeníarmelas para cortar los pliegos de papel y desperdiciar lo menos posible en base a una plantilla que hice. Por su parte, Landy ha estado haciendo unas mariposas de papel (origami) y las ha decorado tan bien, que estoy seguro que a mas de uno, le gustarán nuestras invitaciones 100% hechas por nosotros.

El fin de semana pasado, definitivamente nos dimos un respiro y nos la pasamos en la cocina, desde temprano fuimos a conseguir conejos frescos y compramos un par de mamíferos en un criadero, como a 30 minutos de distancia en un pueblito; después de escogerlos la señora que nos los vendió los sacrificó y los metió a una bolsa, nosotros pagamos y nos fuimos a su casa, ahí saqué mi super navaja Wallis (que tiene mucho filo por cierto) y les quité la piel, justo como recordé que me habían enseñado cuando yo tenía como 12 años. Total que ese día hasta mi suegro nos ayudó a trocear los conejos y aunque tardaron mucho en cocinarse, la verdad valió la pena la espera porque todos cenamos un adobo de conejo muuuy rico, 100% hecho por todos nosotros. (su papá, su hermano, ella y yo)

Pantallazo-OpenSolaris-11En el trabajo, pues las cosas van normales, aunque un nuevo reto se ha presentado pues nos han hecho la entrega de un nuevo servidor de Sun microsystems con el sistema operativo Unix Solaris 10, del cual, aunque los del departamento de sistemas (Juan, Roberto, Paco y yo) tenemos ciertas nociones o experiencia en Linux, con Solaris es otro universo porque realmente Linux no es Unix…
Como sea, estamos haciendo lo mejor que podemos para poder configurar y migrar nuestros datos y aplicaciones al nuevo servidor.
Por mi parte, para familiarizarme un poco más con unix, he instalado OpenSolaris en mi laptop (desde la cual estoy escribiendo esto) y he tenido que aprender almenos unos 30 comandos de Unix para cosas que ya sabía hacer en Linux.

De la maestría, pues qué decir… las clases de 5 a 10 pm cada martes y jueves a veces me resultan agotadoras y me dan más ganas de no ir que de ir, sin embargo continúo asistiendo, desvelándome, haciendo tareas, exposiciones y cosas por el estilo, por ejemplo, hace poco, dentro del equipo de trabajo, a mi me correspondió hacer la presentación de un caso para la materia de “Desarrollo organizacional” en la cual el planteamiento fue un caso de la revista Harvard Business Review que se llama “Mano conocida o Sangre nueva”. En parte, tengo la fortuna de estar en un equipo de trabajo que sí trabaja y eso es un gran apoyo incluso moralmente.

Finalmente, hace no mucho se derivó una charla-queja-opinión-desacuerdo sobre mi blog y las cosas que publico en la red… el punto central fue una publicación que he tenido que remover porque los argumentos ajenos me parecieron válidos, pero fuera de eso, creo que escribir aquí sobre cuestiones personales (no cuestiones privadas) no infringe ninguna ley moral o civil; incluso creo que más beneficios me ha dado que problemas.
Gracias a mi blog: (y a mi tesis): mi actual jefe (jefazo, sin afán de ser barbero) me localizó y me ofreció el trabajo que tengo actualmente.
Gracias a mi cuenta de flickr: me han pedido “permiso” en dos ocasiones (algo es algo) para publicar fotografìas mías (no de mi) en medios impresos.
Gracias a mi blog: localizaron mi CV y me invitaron a dar un taller de php en el tec de monterrey, campus puebla que si bien, aún no se concreta porque está programado para el 25 de septiembre, yo ya he aceptado la invitación y bueno, sólo resta esperar que así suceda y no se me frustre el asunto, como ocurrió con mi idea (vaga) de que iría a aguascalientes a presentar un proyecto en la primera semana de septiembre…

Finalmente, creo que cada día se debe aprender algo nuevo.

Según yo

Si está escrito, es por algo; y si lo escribo es para recordarlo más adelante porque mi memoria es muy mala.

Algún día me reiré de todas las tonterías que publico.

Fue lo que dije un día, al tratar de explicar el porqué escribía en un blog.

Lo que me da risa es que ese día no ha llegado aún y ya van 6 años y 8 meses desde que inicié este proyecto, esta rara idea de escribir pavadas personales en un sitio colgado en la nube de Internet sigue sin hacerme reír.

No me hace reír, mas bien me hace reflexionar y notar que en algunos aspectos de mi vida, he madurado, que he mejorado mi ortografía, que sigo escribiendo sobre mujeres y esos rollitos sentimentales que según yo, duelen pero que al final no son tan graves; sólo aspectos de la vida de un hombre común que se enamora rápidamente, que entrega todo lo posible, a quien le dan todo lo posible y que aún así no queda satisfecho del todo porque siempre hay detalles pequeños que no permiten la plenitud que tanto anhelo; ya sea por causas de incompatibilidad de caracteres, de visiones espirituales distintas, de acciones o inacciones determinadas, de familia recelosa, de distancias físicas, de amor furtivo, de indecisión o tantas cosas más que he considerado relevantes y determinantes…

Al leer mis escritos anteriores, he notado que ahora sobresale a la vista esa falta de frescura en las publicaciones recientes, porque al leer cosas como esta, me asombro de saber que soy el autor; esa manera de relatar cosas tan sencillas (sencillas, no simples) como recibir un libro de regalo, ir a desayunar con Silvia y llegar a pensar en esos momentos que igual y me casaba con ella, eso si es algo irónico pues aún seguía sin imaginar lo que ocurriría después y la historia que surgiría con ilian y todas esas cosas que han ocurrido desde entonces a la fecha; todo ello me pone a pensar más que a reír.

Lo cierto es que no se en qué momento perdí la capacidad de narrar sucesos cotidianos de mi vida como si fueran una gran historia y me quedé simplemente apegado a los hechos, breves, escritos en signos abiertos pero secretos al mismo tiempo, cosas que tal vez, solo yo y las personas más allegadas a mi, logran entender; las demás personas no saben del porqué escribo lo que escribo y la forma en que lo hago, y eso se nota en los comentarios fuera de lugar, desviados totalmente de la intención del mensaje medular o simplemente no hay palabras que comentar y realmente me es indistinta la falta de comentarios, de hecho ya pasó esa época en que me parecía relevante y necesario que otras personas comentaran.
Y bueno, los años no pasan en vano, a lo largo de estos 6 años, lo único que me sorprende realmente es saber que hay más de un par de personas (llamándoles amigos si es posible) que leen (aunque no necesariamente dejen un comentario) de manera frecuente las cosas que pienso; de verdad… un gran abrazo para ustedes y no escribo nombres porque se que este mensaje queda claro para quienes va dirigido; pero repito… me sorprende que aún se den una vuelta por aquí.

Como ha sido de un par de años a la fecha, este espacio es mi hoja en blanco en la cual puedo decir todo o decir nada, pero simplemente escribir lo que yo pienso.

Si hay que creer en algo, creo que hoy sería un buen día para cerrar mi blog.

valar-statistics

Hoy en día, podría comparar mi situación personal y creo firmemente que es distinta a la de hace 6 años, que mis planes son otros; mis pensamientos son otros, mis acciones son otras y hasta mis emociones… otras.

Sí, un poco menos de aquello, y más de esto… pero ese es el sentido de la vida: El movimiento constante; lo que no se mueve, se petrifica, se pudre, se desvanece.

Chao.

Postdata: Saludos a Ro, que seguido anda curioseando por aquí.

MacOS X en una laptop HP pavilion dv2000

Leyendo foros, wikis y demás información desde hace varias semanas, al fin pude instalar el sistema operativo X (10) de Mac denominado Leopard.

No fue la gran hazaña de mi vida, he de reconocer que fue relativamente sencillo y el tener el cargador de arranque (GRUB) para Linux/Windows me facilitó el trabajo.

Los pasos básicos fueron:

  1. Lo más importante: Leer el wiki para instalar Mac OS en una PC: http://wiki.osx86project.org/
  2. Usar mi liveCD de Gparted para cambiar el tamaño de la partición de Windows a menos 10Gb
  3. Crear una nueva partición en el espacio sin utilizar de 10Gb y formatearla de tipo NTFS
  4. Activar los cambios y salir de Gparted
  5. Usar el DVD de kaliway Intel-Amd 10.5.2 (ese lo bajé vía torrent) para formatear la partición (NTFS) como MacOS Journaled
  6. Configurar las preferencias e instalar MacOS X (para lo cual se requieren almenos 6.8Gb de espacio libre)
  7. Reiniciar el equipo
  8. Usar el DVD de instalación de OpenSuSE Linux 11 (la versión que tengo instalada en mi laptop) e iniciar el sistema en modo reparación
  9. Configurar el cargador de arranque GRUB añadiendo una entrada para poder iniciar Mac Os
  10. Guardar los cambios y reiniciar

Ahora al iniciar mi laptop, GRUB me muestra un listado para elegir que SO iniciar:
– Linux Suse 11
– Vista Ultimate
– MacOs X Leopard

Creo que lo último que me resta es disfrutar del sistema operativo de la manzanita aunque con ciertas limitaciones (espero que temporales) como el audio, la tarjeta wireless o las actualizaciones automáticas

Mi 1ra clase de microeconomía y algo mas

Ayer por la tarde, asistí a la primera sesión de la materia: Microeconomía, impartida por el Mtro. Jorge Jiménez Gómez. Si he acertado en algunas cosas de mi vida, es preciso decir que estudiar la maestría es uno de esos grandes aciertos.

Más allá de la adquisición de conocimientos y [obvio] la obtención del grado académico, el estudiar la maestría está abriendo mi panorama personal, renueva algunos pensamientos y sobre todo, me permite aprender cosas que de no estar en la maestría, seguramente no aprendería. Conceptos como el efecto inflacionario en términos entendibles, las sobre valuación o devaluación en términos prácticos, la renovación del pensamiento académico, la participación y formación de verdaderos equipos de trabajo, la unidad, el adquirir experiencia a través de experiencias ajenas, ese tipo de cosas que [repito] de no estar en la maestría, seguramente no aprendería.

No será una exageración si digo que este profesor es uno de los mejores que nos ha tocado y este mes pinta para ser de excelencia.

Anoche terminó la primera clase con un video instructivo sobre el planteamiento de problemas y soluciones; sinceramente opino que la mayoría estará complacido con la forma de educar de este catedrático.

En un orden diferente de ideas, hay una invitación abierta para asistir al foro “Trabajando juntos” organizado en conjunto por la Dirección de Bibliotecas del Tec. de Monterrey, campus Monterrey y la Biblioteca de la Universidad de Maryland; el evento se llevará a cabo precisamente, en el campus de Monterrey; el tema que me interesa específicamente es: Desarrollo de una biblioteca temática usando Software libre de Drupal y el Motor de Búsqueda Personalizado de Google. El evento se llevará acabo los días 13 y 14 de Octubre; afortunadamente he recibido la invitación por parte de la Lic. Merari Abihail para asistir a dicho evento.

Pasando a otras cosas, René un amigo del trabajo me preguntaba que si yo no tenía el programa Mechanical Desktop de la misma compañía que hace Autocad y obvio, le dije que no; traté de localizarlo utilizando el truco de google para descargar archivos pero no pude encontrar dicho programa, lo que si encontré fueron las imágenes (en formato .bin) del Autocad 2008 y como dicen por ahí “Venganos tu reino oh todo poderoso Internet” y sin dudarlo, bajé las imágenes. El problema, como era de esperarse, fue que no pude grabar las imágenes en Linux, así que buscando un poquito, encontre en esta página cómo convertir de un formato X a .iso y eso para mi representa una gran conveniencia ya que puedo montar la imagen en mi sistema antes de grabarla; el comando en linux que se utiliza para dicha tarea :
mount -t iso9660 myimage.iso /mnt/cdrom -o loop
Como siempre, espero que esta anotación sea útil para alguien más.

Por último, SuSE 11 no tiene nada del otro mundo, solo las actualizaciones del software relativamente al día (incluye Firefox 3 Beta 5 aún cuando la versión final tiene ya bastantes días circulando) y claro.. no podrían faltar las mejoras a la interfaz gráfica y a los efectos de ventanas mediante Compiz: