jueves, 12 de junio de 2008

SSL Dovecot

Notas sencillas sobre como configurar Dovecot con SSL.

1.- Descargamos el fichero http://dovecot.org/doc/mkcert.sh
#!/bin/sh

# Generates a self-signed certificate.
# Edit dovecot-openssl.cnf before running this.

OPENSSL=${OPENSSL-openssl}
SSLDIR=${SSLDIR-/etc/ssl}
OPENSSLCONFIG=${OPENSSLCONFIG-dovecot-openssl.cnf}

CERTDIR=$SSLDIR/certs
KEYDIR=$SSLDIR/private

CERTFILE=$CERTDIR/dovecot.pem
KEYFILE=$KEYDIR/dovecot.pem

if [ ! -d $CERTDIR ]; then
echo "$SSLDIR/certs directory doesn't exist"
exit 1
fi

if [ ! -d $KEYDIR ]; then
echo "$SSLDIR/private directory doesn't exist"
exit 1
fi

if [ -f $CERTFILE ]; then
echo "$CERTFILE already exists, won't overwrite"
exit 1
fi

if [ -f $KEYFILE ]; then
echo "$KEYFILE already exists, won't overwrite"
exit 1
fi

$OPENSSL req -new -x509 -nodes -config $OPENSSLCONFIG -out $CERTFILE -keyout $KEYFILE -days 365 || exit 2
chmod 0600 $KEYFILE
echo
$OPENSSL x509 -subject -fingerprint -noout -in $CERTFILE || exit 2

2.- Creamos el fichero /etc/dovecot/dovecot-openssl.cnf
[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
# country (2 letter code)
C=ES

# State or Province Name (full name)
ST=Madrid

# Locality Name (eg. city)
L=Leganes

# Organization (eg. company)
O=ISIDISI

# Organizational Unit Name (eg. section)
OU=IMAP SSL Server

# Common Name (*.example.com is also possible)
CN=imap.isidisi.com

# E-mail contact
emailAddress= info@isidisi.com

[ cert_type ]
nsCertType = server

3.- Hacemos backup de los certificados que vienen por defecto en Dovecot:
mv /etc/ssl/private/dovecot.pem /etc/ssl/private/dovecot.pem.bak
mv /etc/ssl/certs/dovecot.pem /etc/ssl/certs/dovecot.pem.bak

4.- Modificamos /etc/dovecot/dovecot.conf

protocols = imap imaps
ssl_disable = no
ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem

5.- Reiniciamos dovecot
[root@imap.isidisi.com] /etc/init.d/dovecot restart
Restarting mail server: dovecot.

martes, 3 de junio de 2008

BSC, simplemente alucinante!

A quién no le gustaría administrar esto ?

Backup IOS Router Cisco

Bueno... ya falta cada vez menos para el examen final de CCNA. Repasando esta tarde, no recordaba(en realidad sí, pero era una escusa para postear!!!!) cómo hacer un backup del IOS y ni como cambiar password a un router.Es muy fácil.

Backup IOS.
  • Tener un tftp server funcionando
  • Modo enable, hacemos un show flash, y deberíamos ver algo como esto:
System flash directory:
File Length Name/status
1 4306080 c820-sy6-xxxxx.xxxxxxx
[4306144 bytes used, 4082464 available, 8388608 total]
8192K bytes of processor board System flash (Read/Write)
  • Luego un copy flash tftp, y deberíamos ver algo como esto:
router-01#copy flash tftp Source filename []? c820-sy6-xxxx.xxxx Address or name of remote host []? 192.168.12.253 Destination filename [c827-y6-mz.121-1.XB]? !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
En pocos segundos tendremos en nuestra máquina una imagen del IOS sana y salva.Sólo falta quemar un CD para mayor seguridad y meterlo en la caja fuerte.Aunque muchos no lo sepan, las imágenes de IOS cuestan €, y bajarlas de la "mula" no es del todo "legal".

Recuperar contraseña.
  • Con el router mosqueado, lo reiniciamos y cuando veamos:
System Bootstrap, Version 12.2(4r)XM1, RELEASE SOFTWARE (fc1)
TAC Support: http://www.cisco.co
Copyright (c) 2001 by cisco Systems, Inc.
C800/SOHO series (Board ID: 13-62) platform with 24576 Kbytes of main memory

pulsamos CTRL+Pausa.
  • Entramos en modo ROMmom, y escribimos
rommon 2 > confreg 0x2142
rommon 2 > reset
  • Después de un par de minutos...voilá:
Would you like to enter the initial configuration dialog? [yes]
Sencillo, no, pues a trastear!

VPN y Perl

NO soy programador, con lo cual, asumo los errores y barbaridades de este post.
Supuesto: Se necesita chequear el acceso a una red, y en caso de no poder acceder a la misma, levantar el cliente de Cisco VPN para GNU/Linux.
Solucion: Script en perl que compruebe vía ICMP la disponibilidad el router remoto y en caso de no poder llegar a esta red,levantar el cliente de Cisco.He estado trasteando un poco con CPAN y demás, y esto es lo que he conseguido.

#!/usr/bin/perl
use Net::Ping;
$gateway = "192.168.1.254";
$p = Net::Ping->new();
if($p->ping($gateway))
{
print "El gateway $gateway responde\n";

}
else
{
print "El gateway no responde\n";
system ("matavpnc");
print "Lanzando conexion VPN\n";
system ("vpnc-connect miempresa");
system ("ping -c 5 192.168.1.254");
system ("route -n");

}
$p->close();


Pero esto no es todo.Como sabréis, el Cliente de Cisco crea subinterfaces del tipo tun0, tun1...por cada una de las conexiones VPN.Si sólo existe esa conexión el script anterior nos llega, pero qué sucede si existen más conexiones establecidas? Fácil. El cliente retorna un error indicando que no puede crear la interfaz tun0 por que ya está en uso.Para solucionarlo, he estado probando un script en bash que compruebe si está corriendo(muy fácil comprobando el pid o ps) ya el vpnc-connect, y en caso afirmativo, añada --local-port 0 o --local-port n+1 como parámetro a vpnc-connect..Con ps aux y awk encontré la pista para seguir adelante.
#!/bin/bash
for i in `ps aux|grep vpnc-connect| awk '{ print $2 }'`;
do
kill -9 $i
done
echo "Fin Script MataVPN"

Este ejemplo en concreto mata todos los procesos vpnc-connect, y no hace exactamente lo que queremos, pero el awk '{ print $2 }' creo que es la clave.
Salud y gnuismo para todos!

viernes, 30 de mayo de 2008

md5

MD5 es un algoritmo de reducción criptográfico de 128 bits, que nos permite entre otras muchas cosas, comprobar la integridad de un fichero. Es muy útil cuando copiamos ficheros entre sistemas, para verificar que no se han producido errores.Veamos un ejemplo:Necesitamos copiar(scp, siempre!!!), descargar... el fichero postfix_2.3.8.orig.tar.gz desde la máquina stewie a la máquina brian. Primero generamos la suma md5 en la máquina origen.
[user@stewie]#md5sum -b postfix_2.3.8.orig.tar.gz | awk '{ print $1 }' > postfix.md5
[user@stewie]#cat postfix.md5
[user@stewie]#a6c560657788fc7a5444fa9ea32f5513

Luego copiamos el fichero a la máquina destino
[user@stewie]# scp postfix_2.3.8.orig.tar.gz user@brian:/tmp
Generamos la suma md5 y comprobamos el resultado.
[user@brian]#
md5sum -b postfix_2.3.8.orig.tar.gz | awk '{ print $1 }' > postfix2.md5
[user@brian]#diff postfix.md5 postfix2.md5
Si el resultado es positivo , diff no devuelve nada.Supongamos que el fichero es alterado en el proceso de copia.Aplicamos diff de nuevo, y obtendríamos:
[user@brian]#diff postfix2.md5 postfix.md5
1c1
< aa6c560657788fc7a5444fa9ea32f5513
---
> a6c560657788fc7a5444fa9ea32f5513

Probablemente esto no sirva de mucho a Administradores poco avispados, pero si lo sois ,o simplemente quereis verificar la integridad de vuestras copias o ficheros...aplícate md5sum!
Saludos! I'm back!