Limpiar la caché del cliente DNS

dominiosDejo aquí un apunte que espero sea útil para cualquier hacker. Todo “cliente” mantiene en el sistema operativo una caché donde guarda los nombres de dominio (DNS) según los va aprendiendo. Ahora bien, esta característica podría darnos la falsa impresión de que tenemos una dirección IP correcta cuando en realidad el equipo nos está entregando la dirección que tiene guardada (y podría ser que el servidor la haya cambiado).

Aunque pocas, hay situaciones donde necesitamos limpiar dicha “caché” pero no todos los sistemas operativos usan el mismo comando, así que ahí va una lista. Todos deben ejecutarse como administrador o root.

Linux – Hay varios proyectos que implementan un cliente DNS, así que depende, será uno de estos:

OSX 10.10

OSX 10.9

OSX 10.7 – 10.8

OSX 10.5 – 10.6

Windows o Windows Server

Backup incremental en Servidor Linux

En este artículo explico el metodo que uso para hacer backup de un directorio de datos persistentes de mi servidor Linux a un disco externo USB. La técnica está basada en Rsync y backups incrementales usando Hard Links y empleo el script RBME que facilita todo el proceso.

Datos fuentes y destino del backup:

  • /Apps –> Datos fuentes
  • /mnt/Backup –> Destino del backup (disco externo USB)

Instalación de RBME

Ejecuta los comandos siguientes para instalar el paquete RBME

Para que RBME funcione es necesario tener instalado un MTA smtp y procmail:

Por último preparamos el fichero de configuración de RBME y la programación del Cron diario

Conclusión

De momento el resultado es muy satisfactorio, todos los días se realiza una copia incremental (usando hardlinks) de los datos fuentes, por lo que puedo recuperar una copia COMPLETA del estado en el que se encontraban en cualquier día del pasado. He asignado un disco externo de 1TB completo a este método y el propio script se va a encargar de ir borrando las copias muy antiguas, pero a un ritmo de pocos “cambios” al día probablemente acabe con versiones de muchos meses en el pasado.

Varios ‘Servidores’ en contenedores Docker

En el post anterior hablé sobre cómo montar un servidor “gitolite” usando un contenedor Docker, el siguiente reto ha consistido en añadir varios “servicios” Web pero con una única IP pública. Una solución tradicional sería montar un único contendor con varios “vhosts”, pero la filosofía de Docker es distinta, así que voy a usar el programa “squid” un fantástico “proxy inverso con soporte de virtual hosts” (otros balanceadores posibles, por si quieres probarlos son: haproxy, nginx)

Diseño

En la figura siguiente puedes ver cómo quedaría el diseño de un contenedor aislado con “gitolite” (un contenedor) y un conjunto de contenedores (tres en el gráfico) para dar varios servicios “web”

undefined

Instalación

Partiendo del diseño anterior puedo ir añadiendo más servidores Web, empecé con dos pero ahora ya tengo 4 servicios (wordpress, roundcube, test y antiguo blog) y en el futuro iré añadiendo más, dejo a continuación varios ejemplos por si quieres aprender cómo montarlo:

Para entender la configuración… en mi caso dejo todo lo que considero “persistente” debajo del directorio /Apps de mi servidor: scripts y datos (directorio persistente) para los repositorios, páginas web, etc:

De esta forma tengo todo lo importante en un sitio distinto a los programas y aunque borre los contenedores, los datos se mantienen y podré reinstalar (docker/imagen/contenedor) para tener el servicio funcionando literalmente en 5 minutos…

Aunque ya vimos cómo levantar el servicio “gitolite” en el artículo anterior… veamos el proceso de instalación “completo”, verás que es muy sencillo:

Obviamente deberías tener bien preparados los directorios de datos (/Apps/data/*) a los que se hace referencia en los ficheros fig.yml, pero eso te le dejo a tí como ejercicio.

Servicio “GIT (gitolite)” en Contenedor Docker

Git-Logo-1788CDescubrí hace unos días y empecé a dar mis primeros pasos con Docker. En el post de hoy voy un paso más y describo cómo he creado mi primer contenedor real, un servidor GIT privado (con “gitolite”). Antes de empezar, Git es un software de control de versiones y Gitolite permite hospedar repositorios Git en tu propio servidor de forma sencilla y segura.

Instalación

Para poner en marcha un contenedor hay que partir de una “imagen” mínima con el Sistema Operativo y luego ir añadiendo Software. Mi primera intención fue usar también Gentoo para la “imagen mínima”, pero he sido incapaz de encontrar o crear yo mismo una imagen de menos de 750-900MB cuando lo ideal es quedarse por debajo de 100MB (debian) o como mucho 200-250MB (ubuntu y centos). El problema está en que se obliga a partir de un Stage3 en Gentoo y “eso” ocupa mucho…

Conclusión, para el Host uso GNU/Linux Gentoo en mi nuevo servidor) pero para los contenedores instalo desde “Debian (wheezy)” como imagen base (aunque también me gustó Ubuntu 10.04).

Preparar el Host

Lo primero es tener instalado docker en el host, aquí tienes un artículo sobre mi instalación.

Disco de datos persistente en el Host

Te recomiendo que el directorio donde vas a dejar los repositorios de tu servidor GIT sea un directorio en el Host, externo al contenedor, de modo que sea persistente.

He elegido el directorio /Apps de mi servidor como la raiz donde voy a dejar tanto los scripts como el directorio persistente para los repositorios:

De esta forma tengo todo lo importante en un solo sitio “persistente”, aunque borre el contenedor o imagen de docker los repositorios se mantienen y podré reinstalar (docker/imagen/contenedor) para tener el servicio funcionando literalmente en 5 minutos…

undefined

Usuarios en el Host

Creo dos usuarios importantes:

  • luis – Mi usuario, un usuario normal para no tener que usar root
  • git – Aunque no hace falta creo en el Host el usuario/grupo “git:git” con el mismo UID/GID que tendrá en el contenedor para darle los permisos y propietario al directorio de los repositorios y así tener coherencia dentro y fuera:

Directorio /Apps

Asigno mi usuario como propietario de la raiz

Usuario y grupo git:git

Para tener coherencia con lo que verán los contenedores:

Scripts y Dockerfile

En los enlaces siguientes tienes todo lo necesario:

Solo tienes que bajarte este último:

 

undefined

Servidor nuevo vs migración repositorios

Antes de arrancarlo, tenemos dos opciones:

  • Arrancar el servidor “vacío” sin repositorios y empezar desde cero
  • Arrancar el servidor usando respositorios de una instalación previa (migración)

1) Instalación nueva

Dejo el directorio /Apps/data/git/repositories vacío y asigno a git:git como el propietario del mismo.

Arranco la Aplicación (contenedor):

A continuación clonamos gitolite-admin y empiezo a trabajar, añadir otros puestos de trabajo, sus claves, etc.

 

2) Migrar “repositorios” desde otro servidor

En el caso de pasar los repositorios de un servidor antiguo a mi nuevo Host (a su directorio persistente) el proceso también es muy sencillo: hago un backup del antiguo, lo recupero en el nuevo y al arrancar el contenedor se dará cuenta y respetará la estructura existente.

Backup de repositorio existente

Empezamos haciendo un backup del directorio de repositorios del servidor antiguo.

Recuperar repositorio en el nuevo Host

Arrancar el contenedor

Creo y arranco el contenedor, detectará que el directorio repositories tiene repos existentes y actuará en consecuencia:

Comprobar que los repositorios están disponibles

Desde un cliente remoto que teníamos autorizado en el repositorio original

Acceso y consumo de los repositorios

Ahora que tenemos todo funcionando ya puedo consumir mis repositorios desde el programa “git”. Mucho más sencillo y visual, recomiendo SourceTree, una maravilla para MacOSX.

Línea de comandos

Herramienta gráfica SourceTree

undefined

 

Arranque durante el boot del Host

Para arrancar el contenedor durante el boot del equipo (recordar que el Host está basado en Gentoo con openrc) es tan sencillo como crear un scripten el dirctorio /etc/init.d

Por último programo el arranque automático en cada boot

No te pierdas el siguiente post sobre cómo configurar múltiples servicios en varios contenedores docker.

Gentoo Linux en NUC D54250WYK

En este artículo describo cómo instalar Gentoo GNU/Linux en un Intel® NUC D54250WYK. He optado por este kit después de investigar cual sería mi próximo servidor casero. Esta guía es un complemento al recomendadisimo manual oficial para este tipo de instalaciones: Gentoo Linux AMD64 Handbook, un manual perfecto con mucho detalle.

Considerar este post como la “Tabla de Contenidos” ya que he separado todo la documentación en múltiples posts para hacerlos más sencillos. Importante, notar que utilizo sysvinit, openrc y baselayout2 (no uso systemd ni udev, sino el fork de eudev de Gentoo).

Proceso de instalación

Si lo que quieres es ir rápido a ver ejemplos de configuración, te dejo aquí un enlace a los Ficheros de configuración que utilizo.

Dejo aquí enlaces adicionales, por ejemplo sobre cómo arrancar con USB de emergencia cuando la instalación se queda a medias o por algún error de configuración no consigues arrancar desde el SSD. También dejo aquí otro enlace para que sepas cómo conectar un disco externo USB 3.0 como disco secundario. Otro artículo relativo a cómo configurar SMB2.

Espero que esta guía sea de ayuda si necesitas montar Gento GNU/Linux en un Intel® NUC D54250WYK. Por cierto, también te dejo aquí algunos posts relacionados con Gentoo.

Gentoo en NUC: Crear USB de instalación

Nota: Este post pertenece a una “colección”, así que te recomiendo que empieces por la instalación Gentoo GNU/Linux en un Intel® NUC D54250WYK. En este artículo en concreto describo cómo preparar una USB para hacer la instalación

USB “bootable” de instalación

Lo primero que tienes que hacer es descargarte la última versión del ISO de instalación de Gentoo: install-amd64-minimal-AAAAMMDD.iso desde los mirrors de gentoo, que encontrarás en el directorio releases/amd64/current-iso

El siguiente paso es preparar un USB (te recomiendo mínimo 2.0 de 1GB) para instalar este ISO. El procedimiento que utilices tiene que asegurarte que finalmente hace boot. Hay decenas de métodos, algunos desde Linux, otros desde Windows, MacOSX, manuales, usando herramientas como unetbootin http://unetbootin.sourceforge.net/, etc.

En mi caso he optado por un disco externo USB3.0 de 1TB, donde formatearé una pequeña partición para instalar gentoo en el NUC, me servirá de emergencia para hacer boot desde él en caso de problemas y además usaré el resto del disco para crear una partición de datos (lo haré una vez termine de instalar el NUC, usando gparted).

undefined

Instalación manual desde linux

En mi caso he preferido documentar el proceso “largo y tedioso” porque se deduce bien qué hace falta para que una USB pueda hacer boot, así que ahí va:

Nota: Ojo que este proceso elimina por completo todo el contenido del USB

Con mi USB externa insertada (en mi caso un disco enorme de 1TB), identifico el nombre del “device” USB tal como lo reconoce el kernel

Nota: Si el disco es reconocible por el comando fdisk también puedes usar “fdisk -l” para identificar la USB, en cualquier caso lo más seguro es usar dmesg. En mi caso el dispositivo es el /dev/sdb.

Vacío por completo el USB, incluso elimino el MBR

Creo una única partición FAT32

En mi caso creo una partición única que ocupa solo 4GB del USB. Donde pongo Intro,Intro me refiero a aceptar los valores de primer y último sector que me ofrece por defecto (usar todo el disco)

  • Orden : o ==> Crea una nueva tabla de particiones msdos
  • Orden : n p 1 (Intro, +4G) ==> Acepto el sector de inicio e indico 4GB de tamaño
  • Orden : t b (W95 FAT32) ==> Cambiamos el tipo de la partición a W95 FAT32
  • Orden : a 1 ==> Convierte la partición en Bootable
  • Orden : w ==> Escribe todo lo anterior en el disco

Instalo un MBR

Montar la partición recien creada y el fichero ISO de instalación

Copiar todo el contenido del ISO a la USB

Podemos ya desmontar el ISO, no lo vamos a necesitar

Corregimos el fichero syslinux.cfg

Instalo el syslinux bootloader en el USB

Extraer el USB, ya está listo para ser utilizado

 

Volver al paso anterior: Preparar la BIOS o ir al siguiente: Iniciar la instalación

Disco USB 3.0 para backups con RBME

Cuando tienes un servidor casero<LINK> basado en GNU/Linux es conveniente tener un buen sistema de copia de seguridad, y si está automatizado pues mejor.

Me topé con el proyecto /rbme, que tenía buena pinta, así que he decidido conectar un disco USB 3.0 a mi servidor, configurar una partición dedicada a Backups incrementales y configurar este software para que trabaje de forma desatendida.

Disco externo USB 3.0 en GNU/Linux

En este post sobre crear un USB para hacer boot e instalar Gentoo en el NUC comentaba que usé los primeros 4GB de un disco externo USB 3.0 de 1TB. Me viene bien el resto del disco para lo que nos ocupa, así que voy a crear una partición de tipo EXT4 con el resto del espacio.

undefined

El proceso es muy sencillo, conectamos el USB, entramos como root y ejecutamos gparted. Seleccionamos el espacio libre y creamos una partición de tipo ext4. Volvemos a la shell y creamos la partición:

Por último añadimos una entrada al fichero /etc/fstab para montar este disco en /data

Monto el file system y muestro el contenido.

 

Backup incremental con RBME

Consulta este artículo para ver cómo hago backup incremental en mi servidor

Instalar rsync en MacOSX

rsync viene incluido con la instalación de Mac OSX. Sin embargo, si necesitas una versión más moderna y que soporte más funcionalidades, como por ejemplo preservar metadatos, soporte de caracteres extendidos, caracteres multiplataforma, etc, entonces vas a tener que instalarte una de las últimas versiones.

Para hacerlo necesitas lo siguiente en tu Mac:

  • Saber utilizar Terminal.app
  • Tener instaladas las Apple Developer Tools

Los pasos para realizar la instalación son los siguientes. Nota que en el momento en el que yo lo instalé la última versión era la 3.1.0 y la instalé en MacOSX 10.8.5 en modo 64 bits. Como root:

Instalación daemon rsyncd en MacOSX

Si lo consideras necesario puedes actualizar a la última versión de rsync tal como describo más arriba. En cualquier caso lo que describo a continuación vale tanto para la última versión como para versiones anteriores.

En esta sección vamos a ver cómo configurar el MacOSX para que arranque “rsync” en modo daemon, o lo que es lo mismo, se ejecute el comando “rsync –daemon” en el background.

Para poder ejecutar un “daemon” en el Mac y que arranque en cada boot hay que usar “launchd” y “launchdctl” para cargar un fichero XML que describa qué proceso quieres ejecutar en modo daemon. El fichero XML es un fichero “PLIST o property list” que se instala como root en /Library/LaunchDaemon.

Así que allá vamos. Crear el fichero “org.samba.rsync.plist”

Desde Terminal.app y como root copio el fichero a /Library/LaunchDaemons

Creo el fichero /etc/rsyncd.conf

Fichero de secretos /etc/rsync/rsyncd.secrets

Cargo el plist en el registro de launchd. El proceso “rsync –daemon” no arranca, lo que estamos haciendo es que se registre el servicio y cuando llegue una petición al puerto 783 el proceso launchd se encargará de arrancar “rsync –daemon”.

Desde un cliente podemos comprobar que está funcionando

Bienvenido a mi Blog

Este fué mi primer post, asi que lo dejo tal cual. En realidad lo hice con Nibbleblog, no con wordpress.

Mi primer apunte lo hice con Nibbleblog

En el 2002 instalé NibbleBlog, un motor muy sencillo para la creación y manipulación de mi bitácora, basado en archivos XML.

La verdad es que esta gente ha hecho un excelente trabajo, sencillo, rápido y productivo. Qué más decir que lo recomiendo. Más adelante en el tiempo me pasé a WordPress, pero dejo aquí unas nociones la instalación de Nibbleblog a modo de referencia.

Requisitos para su instalación en Gentoo

El orden es sencillo: Instlaa Apache y PHP (USE: simplexml). Se acabó.

Instalación

Descargar de forma manual el ZIP de NibbleBlog desde su página de descargas. Descomprimirlo y copiar todo su contenido a un directorio accesible por apache. Aquí pongo un ejemplo en mi caso:

 

Creo un nuevo vhost que apunta al nuevo directorio:

Configuración

Conecta con tu blog, en la página de admin (algo parecido a http://tu.servidor.com/admin)
Las preguntas son muy simples, si algo te salió mal, simplemente borra el contenido bajo el subdirectorio “content” y vuelve a intentarlo. Acceso al blog:

  • Como “lector” http://tublog.tudominio.com
    Como “admin” http://tublog.tudominio.com/admin
  • El resto es tan intuitivo que no merece la pena explicarlo :-)

Búsqueda en NibbleBlog

Vaya sorpresa que me he llevado. Al instalar NibbleBlog y estar un rato jugando con él me he dado cuenta que no trae un “buscador”.

La solución ha sido sencilla, en http://www.freefind.com tiene un servicio gratuito (apoyado en publicidad) que básicamente consiste en que ellos tienen el buscador e indexan tus páginas. En cinco minutos lo tienes funcionando. Solo hay que darse de de alta, activar el Plugin de inserción de “HTML” en NibbleBlog y marchando…

(actualización) -> En Noviembre de 2014 me pasé a WordPress que sí incluye un Buscador :-)