martes, 30 de junio de 2009

Tomcat SSL

keytool -genkey -alias tomcat -keyalg RSA

copiamos el keystore en por ejemplo /usr/share/tomcat6

Redirigimos el trafico del 8080 al conector ssl 8443 en el primer bloque y definimos el conector sslen el siguiente, todo esto en el fichero server.xml


No se ve bien por culpa de los "<"



Reiniciamos el server tomcat.

Bayes en Mysql + Mailscanner

Dependencias: perl-DBI and perl-DBD-MySQL

Datos:
SpamAssassin Bayes Database Name: sa_bayes
SpamAssassin
Bayes Database UserName: sa_user
SpamAssassin
Bayes Database Password: sa_password
Your database server’s real name: local_fqdn


Crear tabla bayes y usuario bayes desde phpmyadmin o consola
# mysql -u root -p #(some distros like redhat and clones have no password set by default.)
mysql> create database sa_bayes;
mysql> GRANT ALL ON sa_bayes.* TO sa_user@localhost IDENTIFIED BY 'sa_password';
mysql> GRANT ALL ON sa_bayes.* TO sa_user@local_fqdn IDENTIFIED BY 'sa_password';
mysql> GRANT ALL ON sa_bayes.* TO sa_user@remote_fqdn IDENTIFIED BY 'sa_password';
mysql> flush privileges;

Localizar el fichero bayes_mysql.sql

En sistemas RED HAT /usr/share/doc/spamassassin-%version%/sql/bayes_mysql.sql
Para Otros: find / -name bayes_mysql.sql

# mysql -u sa_user -p sa_bayes < /path/to/bayes_mysql.sql

Backup
sa-learn -p /path/to/spam.assassin.prefs.conf --backup > sa_bayes_backup.txt

Limpieza
sa-learn -p /path/to/spam.assassin.prefs.conf --clear #(entirely optional, incase you want to rollback)

cambios en spam.sassassin.prefs.conf
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:**sa_bayes**:**localhost**
bayes_sql_username **sa_user**
bayes_sql_password **sa_password**
bayes_sql_override_username root

comentar
bayes_path /etc/MailScanner/bayes/bayes
bayes_file_mode 0660

Pasar el backup al mysql
# sa-learn -p /path/to/spam.assassin.prefs.conf --restore sa_bayes_backup.txt

Comprobar
# spamassassin -x -D -p /path/to/spam.assassin.prefs.conf --lint

parar y arrancar mailscanner

añadir cron
minute hour * * * /path/to/sa-learn --force-expire --sync -p /path/to/spam.assassin.prefs.conf

jueves, 25 de junio de 2009

Optimizar OpenLDAP (Indexación)

Para agilizar las búsquedas, debes de crear índices para los atributos comúnmente buscados, En OpenLDAP, no solo puedes elegir que atributos indexar, si no que también puedes elegir que tipo de búsquedas indexar, por ejemplo, si indexas el campo "mail", tienes la opción de crear índices para búsquedas de "precense (press), equiality (eq), approximate, y/o substrings (sub)".

Nota:
"The index directive of slapd.conf (or olcDbIndex in cn=config configurations) is only effective on initial load of the directory (using ldapadd). If indexes are subsequently changed the directory needs to be re-indexed using slapindex (caution: must stop slapd first)."

index objectClass,uidNumber,gidNumber eq
index member,mail eq,pres
index cn,displayname,uid,sn,givenname sub,eq,pres
index SuSEMailClient,SUSEMailAcceptAddress,zoneName eq
index SuSEMailDomainMasquerading,relativeDomainName,suseMailDomainType eq
index suseTLSPerSitePeer,SuSEMailTransportDestination eq
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq

jueves, 18 de junio de 2009

IOERROR: opening ... cyrus.header

IOERROR: opening /var/spool/imap/user/ferran^serafini/TEST_FOLDER/cyrus.header: No such file or directory

su - cyrus -c "/usr/lib/cyrus/bin/reconstruct -r -f user/ferran.serafini"

viernes, 5 de junio de 2009

Script Backup Servicios OpenLDAP, BIND, CYRUS, Configs...

Buscando como se hace una copia de seguridad de cada servicio, hice el siguiente script que monta un arbol de directorios bajo el directorio /backups con cada uno de los servicios:

/backups/infbcn01-fecha -> DNS ETC IMAP LDAP

* DNS: se guardan las zonas master & slave y la config del servicio
* ETC: se guarda todo el directorio /etc
* IMAP: se guardan todos los buzones, bds de cyrus y config
* LDAP: Extrae un ldif con todo el contenido del árbol

No es un script óptimo en sentido de espacio ya que ni si comprime ni distingue incrementalidad o diferencialidad. Pero funciona.


#!/bin/bash
###BACKUP infbcn01 -infmaster

B_DIR=/backups
DEST=$B_DIR/infbcn01-`date +%d%m%Y`
OLD_BK=/backups2
ldiff=$DEST/LDAP/backupMasterLDAP.ldif
BIND_DIR=/var/lib/named
CONF_ETC=/etc
MASTER_BIND_DIR=$BIND_DIR/master
SLAVE_BIND_DIR=$BIND_DIR/slave
B_CYR_VAR_SPOOL=$DEST/IMAP/SPOOL/VAR
CYR_VAR_SPOOL=/var/spool/imap
CYR_SRV_SPOOL=/srv/imap/user
B_CYR_SRV_SPOOL=$DEST/IMAP/SPOOL/SRV
CYR_LIB=/var/lib/imap
B_CYR_LIB=$DEST/IMAP/LIB
MBOXLIST=mailboxdb`date +%d%m%Y`.dump

mv $B_DIR/* $OLD_BK/
rm -fr $B_DIR/*

#Arbre de directoris
mkdir $DEST > /dev/null 2>&1
mkdir -p $DEST/LDAP > /dev/null 2>&1
mkdir -p $DEST/DNS > /dev/null 2>&1
mkdir -p $DEST/DNS/master > /dev/null 2>&1
mkdir -p $DEST/DNS/slave > /dev/null 2>&1
mkdir -p $DEST/ETC > /dev/null 2>&1
mkdir -p $DEST/IMAP > /dev/null 2>&1
mkdir -p $DEST/IMAP/SPOOL/VAR > /dev/null 2>&1
mkdir -p $B_CYR_LIB
mkdir -p $B_CYR_SRV_SPOOL

#LDAP
slapcat > $ldiff

#DNS
cp -rvp $MASTER_BIND_DIR/* $DEST/DNS/master/
cp -rvp $SLAVE_BIND_DIR/* $DEST/DNS/slave/

#CONFIGS
tar -cjf $DEST/ETC/etc.tar.bz2 $CONF_ETC

#CYRUS
rsync -avz --delete $CYR_LIB root@localhost:$B_CYR_LIB

#CYRUS MAILBOXES
rsync -avz --delete $CYR_VAR_SPOOL root@localhost:$B_CYR_VAR_SPOOL
rsync -avz --delete $CYR_SRV_SPOOL root@localhost:$B_CYR_SRV_SPOOL
su cyrus -c "/usr/lib/cyrus/bin/ctl_mboxlist -d > $DEST/IMAP/$mboxlist"

Sincroniza dos BIND DNS servers

Es comun en una red tener dos servers DNS. Una buena opción es configurar bind para que use el soporte LDAP y que cada server utilice el árbol para exportarse las zonas en su /var/lib/named pero si por comodidad o por imposibilidad no se puede recurrir al LDAP, mediante este script, se sincronizaria un servidor con el otro siempre y cuando se cree una relación de confianza ssh (ssh-keygen -t dsa ...) de uno al otro. (sinó te va a pedir el passwd de root 4 veces).

Pues esta historia comienza así:

#/bin/bash
CONFIG="/etc/named.conf"

ZONES="/var/lib/named"
DNS2="172.26.0.91"
LOGFILE="/var/log/syncdns.log"
echo -en '\E[0;32m'"\033[1m * \033[0m"
echo " Sincronitzant servidors DNS (localhost -> $DNS2)..."
ssh root@$DNS2 -C "/etc/init.d/named stop" >> $LOGFILE
scp -r $CONFIG root@$DNS2:$CONFIG >> $LOGFILE
scp -r $ZONES/master/* root@$DNS2:/var/lib/named/master/ >> $LOGFILE
scp -r $ZONES/slave/* root@$DNS2:/var/lib/named/slave/ >> $LOGFILE
echo -en '\E[0;32m'"\033[1m * \033[0m"
echo " Recarregant DNS $DNS2 ..."
ssh root@$DNS2 -C "/etc/init.d/named start" >> $LOGFILE

Sincronizar correo CYRUS-IMAP por usuario (rsync)

En fases de migración de servidores de correo cyrus, es probable encontrase con que tenemos el nuevo servidor listo para ser utilizado pero que por motivos de seguridad, burocracia, etc... nos veamos obligados a tener el servidor de producción y el nuevo servidor practicamente parado. Es posible, que no nos interese, hacer un rsync de TODO el servidor de producción y que solo nos interese ir migrando buzones de algunos usuarios en concreto. Para eso hice este script.

se ejecuta:
./syncmailuser.sh nombre.apellido

Entonces mediante rsync copia del servidor en producción los ficheros del user en /var/lib/imap/user.. y luego tambien mediante rsync sincroniza el buzon tanto si esta en /srv/imap (suse) como si esta en /var/spool/imap.

Ahi va el script:

#!/bin/bash
USER=$1
IN_SRV=/mnt/server_act/srvspool/user
IN_VAR=/mnt/server_act/spool
IN_LIB=/mnt/server_act/lib/user
USERS=user.lst

USER2=`echo $USER sed -e 's,\.,\^,g'`
PATH1=$IN_VAR/user/$USER2
PATH2=$IN_SRV/$USER2
echo $PATH1
echo $PATH2


#Primera lletra per al dir
WORD=`echo $USER head -c 1`
echo "Sincronitzant $IN_LIB/$WORD/$USER2 /var/lib/imap/user/$WORD/"
rsync -avz --delete $IN_LIB/$WORD/$USER2* root@localhost:/var/lib/imap/user/$WORD/
su cyrus -c "/usr/lib/cyrus/bin/ctl_cyrusdb -r"
echo "Buscant ubicacio srv o var"
if [ -d $PATH1 ] ; then
echo "no esta en el srv"
rsync -avz --delete $IN_VAR/user/$USER2 root@localhost:/var/spool/imap/user/
fi
if [ -d $PATH2 ] ; then
echo "esta en srv"
rsync -avz --delete $IN_SRV/$USER2 root@localhost:/srv/imap/user/
fi

Sincronizar servidores de correo Cyrus-IMAP

Otro escenario puede ser el que hay el server cyrus en producción y tenemos uno nuevo que queremos que sea ENTERO sincronizado con el de producción. Para esto hice este script. Sincroniza todo el /var/lib/imap y las particiones imap /srv/imap y /var/spool/imap al nuevo server (donde se ejecuta el script). Le puse una regla EXCLUDE para el rsync donde se puede poner usuarios o carpetas que no se quiere sincronizar.

#!/bin/bash
IN_SRV=/mnt/server_act/srvspool/user
IN_VAR=/mnt/server_act/spool/
IN_LIB=/mnt/server_act/lib/
EXCLUDE=/root/exclude

rsync -avz --delete --exclude-from=$EXCLUDE $IN_LIB root@localhost:/var/lib/imap/
su cyrus -c "/usr/lib/cyrus/bin/ctl_cyrusdb -r"

rsync -avz --delete --exclude-from=$EXCLUDE $IN_VAR root@localhost:/var/spool/imap/
rsync -avz --delete --exclude-from=$EXCLUDE $IN_SRV root@localhost:/srv/imap/