viernes, 27 de junio de 2008

Soy CCNA!

Con unos cuantos meses de retraso...por fin soy CCNA! El examen no me ha parecido difícil.La verdad es que estaba un poco nervioso,pero una vez contestada la primera pregunta,van como rosquillas....El examen fue un suplicio;debía comenzar a las 09:00 horas y lo terminé a las 18:45 de la tarde.SI! Algo así como unas 6-7 horas en la Academia, por culpa de no sé que error en la descarga de los exámenes!Lo bueno es que es sólo una anécdota.
Por fin tengo o tendré tiempo para mirar, leer y probar las cosas que, unas veces por cansancio y otras por ¿obligación moral? había dejado aparcadas.Entre ellas:
  • MAC, MAC, MAC. Voy a quemar el disco duro de tanto usarlo!
  • Acabar el libro "Seguridad en Servidores Linux".
  • Preparar el Artículo "Clustering HA con Squid". Después del artículo que me han publicado el año pasado,a finales de 2008 entregaré el segundo volumen.Tengo mucho que leer, muchas configuraciones que probar.Me gustan los retos.
Por lo demás todo como casi siempre.Mucho GNU/Linux en la oficina, y algún que otro "brown" resuelto con más o menos soltura.
Salud y gnuismo para todos!

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!