miércoles, 19 de agosto de 2015

Recuperar GRUB 2 EFI utilzando rEFInd

Recientemente tuve un problema con un laptop dual-boot (widows/linux) al actualizar el Windosw 8.1 a 10. 

En una de las tantas reiniciadas de windows me quede sin el gestor de arranque grub, por lo que les explico como hice para recuperarlo, finalizar la actualización y dejar intacto mi querido debian.

Se que se puede recuperar el grub con una distro live y seguir algunos pasos, pero como comente la actualización a windows 10 aun no terminaba así que no quería tener que hacer esto a cada rato por lo que me decidí a probar rEFInd.


Lo primero es decidir que imagen utilizar, yo tenia a disposición un viejo USB de 512M así que baje la imagen A USB flash drive image file (les recomiendo revisar la web por si existe una nueva versión)

Una vez descargado el archivo podemos copiarlo al USB, para lo que utilizaremos el comando dd. Esto borrara toda la información que tenían en el mismo.
root@lenovoG480 #~ dd if=refind-flashdrive-0.9.0.img of=/dev/sdg1

13696+0 registros leídos
13696+0 registros escritos
7012352 bytes (7,0 MB) copiados, 0,0424837 s, 165 MB/s

Si no saben con que identificador se monto tu USB, lo puedes ver con fdisk -l ó dmseg

Continuar con la actualización

Ya con el USB listo lo colocamos en le PC y arrancamos desde el mismo, la forma de hacerlo varia de equipo en equipo pero en mi caso, una lenovo G480 basta con pulsar F12 al inicio y escoger el USB

Al iniciar se nos muestran las diferentes opciones de arranque, para este paso escogemos la de windows (hacer esto tantas veces reinicie windows, hasta culminar la instalación)



Reparar grub

Ahora si vamos a reparar definitivamente el gestor de arranque, para ello iniciamos nuevamente desde el USB rEFInd, pero en esta ocasión escojemos nuetra distribución linux, en mi caso es la 3 opción, la 2 es el arranque grub dañado

[ -d /sys/firmware/efi ] && echo "Modo EFI" || echo "Modo Legacy"


Debe retornar "Modo EFI" de lo contrario esta guía no te va a funcionar.

  • Paso 1: reinstalamos grub-efi
    root@lenovoG480:~# apt-get install --reinstall grub-efi
  • Paso 2: Colocamos el bootloader en su sitio y lo actualizamos
    root@lenovoG480:~# grub-install /dev/sda ; update-grub
    Installing for x86_64-efi platform.
    Instalación terminada. No se notificó ningún error.

    Generating grub configuration file ...
    Found background image: /usr/share/images/desktop-base/desktop-grub.png
    Encontrada imagen de linux: /boot/vmlinuz-4.1.0-1-amd64
    Encontrada imagen de memoria inicial: /boot/initrd.img-4.1.0-1-amd64
    Encontrada imagen de linux: /boot/vmlinuz-4.0.0-2-amd64
    Encontrada imagen de memoria inicial: /boot/initrd.img-4.0.0-2-amd64
    Encontrado Windows Boot Manager en /dev/sda2@/EFI/Microsoft/Boot/bootmgfw.efi
    Adding boot menu entry for EFI firmware configuration
    hecho
  • Paso 3: Si no se presento ningún error en los pasos anteriores, ya puedes reiniciar el equipo
Como de costumbre, mis créditos a quienes me sirvieron como fuente de información, el wiki de debian y la web de rEFInd

miércoles, 12 de agosto de 2015

Como monitorear servidores remotos con Icinga2

Continuando con la publicación anterior instalar cinga2 en debian wheezy ahora les indico como monitorear nuestros servidores remotos utilizando el nuevo método desarrollado por Icinga el cual supone mejoras de seguridad frene a NRPE, aunque este último aun se puede utilizar.

Lo primero es utilizar el asistente para crear los certificados. Ten en cuenta que debes contestar que no (n)  a la primera pregunta puesto que estamos configurando el nodo central.

root@master ~# icinga2 node wizard
Welcome to the Icinga 2 Setup
Wizard!

We'll guide you through all required configuration details.
Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: n

Ya creado el certificado del master podemos crear las claves para realizar la conexión de los satelites ó nodos a monitorear, el primero en este caso es otro servidor debian wheezy (satelite1.localdomain) y el segundo será un servidor Windows Server 2008 R2 (satelite2.localdomain). Creo que es obvio que debes cambiar estos nombres por los FQDN de tus servidores

root@master ~# icinga2 pki ticket --cn 'satelite1.localdomain'
10b849e68cd01572c86003f88c0bcaa21877c4a1

Servidor Linux


En el servidor a monitorear "satelite1.localdomain" debemos hacer una instalación básica de icinga2, recuerda que con este tipo de instalación lo que se quiere es que el servidor corra todos los chequeos internamente y luego pase el resultado de estos al nodo principal, para ello hacemos lo siguiente:

root@satelite1 ~# echo "deb http://debmon.org/debmon debmon-wheezy main" > /etc/apt/sources.list.d/wheezy-debmon.list
~# wget -O - http://debmon.org/debmon/repo.key 2>/dev/null | apt-key add - OK
root@satelite1 ~# echo "deb http://http.debian.net/debian wheezy-backports main" > /etc/apt/sources.list.d/wheezy-backports.list
root@satelite1 ~# apt-get update
root@satelite1 ~# apt-get install icinga2 nagios-plugins
root@satelite1 ~# icinga2 feature enable command
root@satelite1 ~# service icinga2 restart

Si quieres más detalles del proceso de instalación revisa instalar cinga2 en debian wheezy 

Ya con icinga2 instalado procedemos a correr el wizard para configurar la conexión con el master, esta vez contestamos que si a la primera pregunta (Y) y respondemos las preguntas del asistente, a continuación un ejemplo:


root@satelite1 ~# icinga2 node wizard
Welcome to the Icinga 2 Setup Wizard!  

We'll guide you through all required configuration details. 

Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]:  

Starting the Node setup routine...
Please specifiy the common name (CN) [satelite1.localdomain]: satelite1.localdomain
Please specifiy the local zone name [
satelite1.localdomain]:
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): master.localdomain
Do you want to establish a connection to the master from this node? [Y/n]: Y

Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN): 192.168.0.13
Master endpoint port [5665]:
Add more master endpoints? [y/N]:

Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host [192.168.0.13]:

Port [5665]: 
information/base: Writing private key to '/etc/icinga2/pki/satelite1.localdomain.key'.
information/base: Writing X509 certificate to '/etc/icinga2/pki/satelite1.localdomain.crt'.
information/cli: Generating self-signed certifiate:
information/cli: Fetching public certificate from master (192.168.0.13, 5665):
information/cli: Created backup file '/etc/icinga2/pki/trusted-master.crt.orig'.
information/cli: Writing trusted certificate to file '/etc/icinga2/pki/trusted-master.crt'. 

information/cli: Stored trusted master certificate in '/etc/icinga2/pki/trusted-master.crt'.

Please specify the request ticket generated on your Icinga 2 master.
(Hint: # icinga2 pki ticket --cn '
satelite1.localdomain'): 10b849e68cd01572c86003f88c0bcaa21877c4a1
information/cli: Processing self-signed certificate request. Ticket '10b849e68cd01572c86003f88c0bcaa21877c4a1'.

information/cli: Created backup file '/etc/icinga2/pki/
satelite1.localdomain.crt.orig'.
information/cli: Writing signed certificate to file '/etc/icinga2/pki/
satelite1.localdomain.crt'.
information/cli: Writing CA certificate to file '/etc/icinga2/pki/ca.crt'.
Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:
Accept config from master? [y/N]: y
Accept commands from master? [y/N]: y
information/cli: Disabling the Notification feature.

Disabling feature notification. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Enabling the Apilistener feature.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Created backup file '/etc/icinga2/features-available/api.conf.orig'.
information/cli: Generating local zones.conf.
information/cli: Dumping config items to file '/etc/icinga2/zones.conf'.
information/cli: Created backup file '/etc/icinga2/zones.conf.orig'. 

information/cli: Updating constants.conf.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
Done.

Now restart your Icinga 2 daemon to finish the installation!


Con esto ya tenemos configurado el nodo, solo falta reiniciar el servicio



root@satelite1 ~# service icinga2 restart

Ahora nos conectamos al servidor principal "master" y actualizamos nuestra configuración para que se muestre el nuevo host



root@master ~# icinga2 node update-config
root@master ~# service icinga2 reload

Listo, ya nos podemos dirigir a nuestra interfaz web del servidor master y podremos observar el nuevo host

Servidor Windows


Lo primero que debemos hacer es descargar el agente para Windows desde http://packages.icinga.org/windows/ ten en cuenta que debes tener instalado .NET Framework 2.0

El proceso de instalación es como el de cualquier paquete de Windows, es decir.. siguiente, siguiente, siguiente

Una vez instalado configuramos lo siguiente


Luego nos conectamos al servidor master y actualizamos nuestra configuración

root@master ~# icinga2 node update-config
root@master ~# service icinga2 reload


Hasta acá el ejemplo de monitorización con el uso de agentes, como mencione en una entrada anterior en la pagina de Icinga encuentras información más detallada del proceso así como otras formas de configurar los agentes sin utilizar el wizard.


jueves, 30 de julio de 2015

Instalar Icinga2 en debian Wheezy con BD Postgres

A continuación les dejo una guía rápida para la instalación de Icinga2 en debian wheezy,  cuando tenga que hacerlo en jessie actualizo el manual.

Lo primero que debes tener en cuenta es que en la pagina de Icinga tienes bastante documentación sobre como hacer esto mismo, de hecho este manual esta basado en lo que allí aparece. Otro detalle es que parto de la idea que ya tienes configurado Apache2 y Postgres

Comencemos por agregar los repositorios necesarios.

Debian Monitoring Project

~# echo "deb http://debmon.org/debmon debmon-wheezy main" > /etc/apt/sources.list.d/wheezy-debmon.list
~# wget -O - http://debmon.org/debmon/repo.key 2>/dev/null | apt-key add - OK

Según lo referido en esta pagina es posible que existan problemas de dependencias con icinga2 así que es recomendable agregar también el repositorio backports

Debian Backports

~# echo "deb http://http.debian.net/debian wheezy-backports main" > /etc/apt/sources.list.d/wheezy-backports.list

Recuerda que para instalar un paquete de backports debes hacerlo así:

apt-get -t wheezy-backports install "package"

Finalmente actualizamos la panquería

~# apt-get update

Ahora si procedemos con la instalación.

~# apt-get install icinga2 nagios-plugins

Instalamos la interfaz web

~# apt-get install icingaweb2

Instalamos la interfaz web (icingaweb2)

Debemos definir con que base de datos vamos a trabajar (mysql o postgres), en este caso opte por postgres que ya estaba instalada en el servidor. Si no tienes ninguna instalada es conveniente que lo hagas antes de este paso.

~# apt-get install icinga2-ido-pgsql

En la pantalla donde se pregunta si queremos configurar la base de datos automáticamente decimos que no (2 veces)


Luego en consola hacemos lo siguiente:

Crear el usuario dueño del BD
~# sudo -u postgres createuser icinga2 -P

Se nos solicitara la clave para el usuario y luego decimos que no a todas las preguntas

Crear la BD
~# sudo -u postgres createdb -O icinga2 -E UTF8 icinga2

Editamos el archivo /etc/postgresql/9.1/main/pg_hba.conf y agregamos lo siguiente:

# Database administrative login by Unix domain socket
local   all             postgres                                peer
local   icinga2         icinga2                            md5
local   icinga2         icingaweb2                      md5

Reiniciamos a hacemos un reload de postgres para que tome los cambios

~# service postgresql restart

Ahora cargamos el contenido de la BD

~# export PGPASSWORD=<la clave que colocaste anteriormente>
~# psql -U icinga2 -d icinga2 < /usr/share/icinga2-ido-pgsql/schema/pgsql.sql

Una vez que se crearon todas las tablas, debemos configurar  el modulo

~# vi /etc/icinga2//features-available/ido-pgsql.conf

Debe quedar más o menos así:
object IdoPgsqlConnection "ido-pgsql" {
  user = "icinga2",
  password = "<clave>",
  host = "localhost",
  database = "icinga2"
}
Luego lo habilitamos y reiniciamos icinga2

~# icinga2 feature enable ido-pgsql
~# service icinga2 restar

Permitimos el uso comandos externos (usado por icingaweb2 y otras herramientas)

~# icinga2 feature enable command
~# usermod -a -G nagios www-data
~# service icinga2 restart

Con esto ya tenemos funcionando icinga2

viernes, 17 de julio de 2015

Configurar el DDNS de HE


Si necesitas utilizar un servicio de DNS dinamico gratuito y te aburriste de noip o similares, el servicio ofrecido Hurrican Electrics (HE) es una buena alternativa (https://dns.he.net).

Una vez que te registras y creas tu dominio, debes agregar el registro tipo A o AAAA (si funciona para IPv6) para tu servidor

Acá unas capturas del proceso








 Con esto tenemos listo el registro dinamico para que sea actualizado desde nuestro equipo, existen varias formas para esto como se puede ver en la pagina de HE, pero lo mas sencillo es con un cliente como ddclient

En debian, es tan fácil como:

aptitude install ddclient ó apt-get install ddclient

luego editamos el archivo /etc/ddclient.conf y debe quedar así

Es la configuración a usar si tu ip dinamica es publica de lo contrario utiliza la del ejemplo de windows

# Hurricane Electric
# dyn.dns.he.net
protocol=dyndns2    # default
use=if                          # use the eithernet card (to get the current IP)
if=eth0                         # use certain interface (ifconfig -a, to get the current IP)
server=dyn.dns.he.net # default
login=elnombre.de.dominio        # the name of the A/AAAA record
password=tuclave  # the key of the A/AAAA recor:d
el.dominio                   # the domain name


En windows nos podemos bajar el cliente desde acá.


Una vez instalado es necesario ajustar la configuración


Esta configuración te debería funcionar tanto en windows como en Linux y es especialmente útil si no tienes una IP publica

# ddclient.conf
#
daemon=5m
use=web
web=checkip.dns.he.net
server=dyn.dns.he.net
protocol=dyndns2  login=nombre.tudominio.dinamico, password=tuclave
nombre.tudominio.dinamico
ssl=no

Espero que sea útil

martes, 7 de mayo de 2013

Migrar cuentas entre servidores de correo usando pop2imap

A continuación les dejo una forma sencilla de migrar cuentas de correo entre 2 servidores de correo utilizando para ello un script en perl creado por LinuxFrance pop2imap el cual posee entre sus ventajas: transferencias incrementales (solo descarga los mensajes que no estén en el servidor de destino) y que el mismo puede ser ejecutado desde un equipo distinto a los servidores de origen y destino. La gente de LinuxFrance también tiene otro script llamado imapsync que funciona de manera similar pero para IMAP.

Yo estoy usando debian 7 así que las dependencia a instalar para mi distro son estas:
aptitude install libmail-pop3client-perl libmail-imapclient-perl libdigest-hmac-perl libemail-simple-perl libdate-manip-perl
Una vez que tenemos instaladas las dependencia podemos extraer y ejecutar el script, para ello basta con ejecutar:
tar -xzvf pop2imap-1.18.tgz
Con lo cual se descomprime el archivo en la carpeta pop2imap-1.18 
cd pop2imap-1.18
Ahora si estamos listos para migrar las cuentas. 

Por ejemplo, si queremos sincronizar "cuenta1" en el servidor "origen.com" con "cuenta1" en el servidor "destino.com" se ejecutaria lo siguiente

./pop2imap --host1 origen.com --user1 cuenta1 --password1 clave --host2 destino.com --user2 cuenta1 --password2 clave
Un dato interesante es que las cuentas de origen y destino no tiene porque ser iguales, es decir, se podría sincronizar una cuenta "correo1@algo.com" con otra totalmente diferente "test@prueba.com". Tambien es posible hacer otras cosas como borrar el correo de la cuenta origen al realizar la copia, vena pop2imap --help par mas detalles.

Como una utilidad adicional les dejo este sencillo script en AWK que hice para leer los datos de un archivo csv y migrar las cuentas entre 2 servidores, espero les sea de utilidad. La estructura del archivo es: cuenta@origen;clave;cuenta@destino;clave



#!/bin/sh

ARCH="correos.csv"

awk '
BEGIN {
    FS=";"
    HOST1="mail.origen.com"
    HOST2="mail.destino.com"
}
{
    cmd="pop2imap-1.18/pop2imap --host1 "HOST1" --user1 "$1" --password1 "$2" --host2 "HOST2" --user2 "$3" --password2 "$4
    #print cmd
    if (system(cmd) != 0)
        print "usuario=",$1,"[ERROR!]" > "migrar_error.log"
       
}' $ARCH
 Espero que sea de utilidad.