lunes, 21 de septiembre de 2009

Manejo servidor de correo

HOW TO SERVIDOR DE CORREO


CREAR USUARIO

Se crea el usuario con el nombre que queramos
$ adduser jc

Con este comando se crea el /bin/bash y el /home/ del usuario. Le ponemos una contraseña y volcamos el contenido.
$ passwd jc
$ pwconv

Si queremos que entren correos con algun alias lo tenemos que poner en /etc/aliases
$ vi /etc/aliases

...
jc: jc
juancarlos: jc
...
$ newaliases
Se actualiza el fichero con los alias nuevos

Estos usuarios son mas peligrosos porque al tener /home prodrian lanzar procesos a traves de procmail en caso de que nos entrasen.
Si no usamos los alias podemos usar los usuarios virtuales los cuales no tienen /home solo un buzon de correo. El fichero que controla los usuarios es el virtusertable $ /etc/mail/virtusertable
...
jc@blom.es          jc
juancarlos@blom.es  jc
...
$ cd /etc/mail
$ make
Con esto actualizamos y se compila el fichero con los nuevos usuarios virtuales.





BORRADO

La limpieza requiere un mínimo de intervención humana para asegurarse que la cuenta está realmente muerta.

Vemos si ha accedido en las últimas 5 semanas
$ grep -i usuario /var/log/maillog.* | grep pop3

Vemos si sólo le llega spam
$ mutt -f /var/spool/mail/usuario

Procedemos a borrar el usuario abandonado
$ userdel usuario
$ locate usuario
$ locate usuario | xargs \rm -f
$ \rm -fr /home/usuario

Faltaria limpiar los alias y la tabla de usuarios virtuales
$ cd /etc/
$ vi /etc/aliases
$ newaliases
$ cd /etc/mail
$ vi /etc/mail/virtusertable
$ make

Para que se guarden los cambios tenemos que ejecutar newaliases para los alias y make para virtusertable

Comprobamos que no quedan rastros en el sistema despues del borrado
$ updatedb
$ locate usuario

Fijaros que este procedimiento no funcionaría con usuarios que no lean el buzón con pop3.... así que cuidado...

Será conveniente también avisar a la gente de que si guardan su correo en local, les dará mejor servicio el pop3 si permiten borrar los restantes en el servidor. También que no hay riesgo de pérdida aunque pierdan la máquina entera, ya que se mantiene un backup.





RESCATAR SPAM - FALSOS POSITIVOS


Cuando un usuario informa de que no le está llegando tal o cual correo. Se procede de la siguiente forma:

Las razones más comunes porque no habrá llegado:

1. El usuario miente
2. No lo mandaron
3. Lo mandaron a la direccion equivocada
4. Los servidores smtp se rechazan
5. Se quedó en la trampa de spam
6. El servidor SMTP se fue al pique

Procedimiento:

Preguntarle al usuario:
1. La dirección de destino
2. La dirección del origen
3. La fecha/hora aproximada

Comprobar que realmente tenemos servidor SMTP...

$ telnet 192.168.33.10 25
Trying 192.168.33.10...
Connected to mail.bom.es (192.168.33.10).
Escape character is '^]'.
220 mail.bom.es ESMTP Sendmail 8.12.5/8.12.5; Tue, 16 Jan 2007 14:20:34 +0100
HELO renera.bom.lan
250 mail.bom.es Hello presentaciones.bom.local [192.168.33.118]
(may be forged), pleased to meet you
QUIT
221 2.0.0 mail.bom.es closing connection
Connection closed by foreign host.
_________________________________________

Aquí determinamos cual de las razones acierta más:

grep -i [dirección de destino] /var/log/maillog | less
Ejemplo:
$ grep -i jc /var/log/maillog | less
____________________________________________
Jan 16 10:24:22 mail sendmail[30176]: AUTH=server,
relay=12-33-62-85.red-acceso.airtel.net [12.33.62.85],
authid=jc, mech=LOGIN, bits=0
Jan 16 10:24:26 mail sendmail[30176]: l0G9OKaY030176:
from=, size=1324, class=0, nrcpts=1,
msgid=<000a01c73950$3078f9b0$553e49d4@bom.local>, proto=ESMTP,
daemon=MTA, relay=12-33-62-85.red-acceso.net [12.33.62.85]
Jan 16 10:24:33 mail sendmail[30178]: l0G9OKaY030176:
to=, ctladdr=
(611/612), delay=00:00:10, xdelay=00:00:07, mailer=esmtp, pri=30549,
relay=antonius.berlitz.de. [217.111.63.57], dsn=2.0.0, stat=Sent (Ok: queued as 7210D100000CD)
Jan 16 10:27:02 mail sendmail[30218]: AUTH=server,
relay=12-33-62-85.red-acceso.net [12.33.62.85],
authid=jc, mech=LOGIN, bits=0
Jan 16 10:31:44 mail spamd[26569]: spamd: setuid to jc succeeded
Jan 16 10:31:44 mail spamd[26569]: spamd: processing message
<01c73951$46304050$6c822ecf@administrator> for jc:611
______________________________________________

Y ahora buscando la dirección de origen ej: /
_____________________________________________
Jan 14 14:01:18 mail spamd[6845]: spamd: setuid to jc succeeded
Jan 14 14:01:18 mail spamd[6845]: spamd: processing message
<20070114130245.E4BFB36A4AF@mail1.amadeus.net> for jc:611
Jan 14 14:01:35 mail spamd[6845]: spamd: identified spam (5.1/5.0) for jc:611 in 16.5 seconds, 18604 bytes.
Jan 14 14:01:35 mail spamd[6845]: spamd: result: Y 5 -HTML_10_20,HTML_FONT_BIG,HTML_MESSAGE,HTML_TAG_BALANCE_BODY,
MIME_BASE64_TEXT,SUBJ_ALL_CAPS,UPPERCASE_75_100
scantime=16.5,size=18604,user=jc,uid=611,required_score=5.0,rhost=localhost.localdomain,raddr=127.0.0.1,
rport=36502,mid=<20070114130245.E4BFB36A4AF@mail1.amadeus.net>,autolearn=no
________________________________________________

Se nota que fueron declarados "spam", por lo tanto los tenemos que buscar en /home/jmvitores/spam

$ mutt -f /home/jc/spam

Nos muestra todo el spam recibido por el usuario desde hace tiempo. Y efectivamente allí están los SpamAir desde amadeus net. Con el "S" (save) de mutt() los escribimos a disco a ficheros rescatado1 - rescatado5 . Y se los volvemos a mandar al usuario, asegurandono que no vuelvan a caer en la trampa.

Para evitar que el correo vuelva a caer en el filtro de spam, le ajustamos un poco a spamassassin()
Enseñamos al spamassassin que esto no es spam
$ sa-learn --ham rescatado1
Ahora concatenamos el correo rescatado al mbox del usuario
$ cat rescatado1 >> /var/spool/mail/jc

Si fueran varios los correos rescatados tendriamos que hacerlo para cada uno de ellos
$ cat rescatado1 | mail -s "SpamAir" jc@bom.es
$ cat rescatado2 | mail -s "SpamAir" jc@bom.es
$ cat rescatado3 | mail -s "SpamAir" jc@bom.es
$ cat rescatado4 | mail -s "SpamAir" jc@bom.es
$ cat rescatado5 | mail -s "SpamAir" jc@bom.es

Aquí vemos que efectivamente le han llegado al mbox del usuario.
$ mutt -f /var/spool/mail/jc

Borramos el correo rescatado
$ rm rescatado1

Si fueran varios los correos rescatados
$ sa-learn --ham --mbox rescatado1 &
$ sa-learn --ham --mbox rescatado2 &
$ sa-learn --ham --mbox rescatado3 &
$ sa-learn --ham --mbox rescatado4 &
$ sa-learn --ham --mbox rescatado5 &

$ spamassassin --add-addr-to-whitelist=bom.es
$ spamassassin --add-addr-to-whitelist=amadeus.net
$ spamassassin --add-addr-to-whitelist=apache.org

$ locate /spam | grep home | xargs ls -l
rw------- 1 valvarez valvarez 120016 Jan 10 13:26 /home/valvarez/spam
-rw------- 1 vgarcia vgarcia 120042 Jan 10 13:26 /home/vgarcia/spam
-rw------- 1 vgarrido vgarrido 120024 Jan 10 13:26 /home/vgarrido/spam
-rw------- 1 yinza yinza 119986 Jan 10 13:27 /home/yinza/spam
________________________________________

Hay mucho spam accumulado y como no hemos tenido más quejas, limpiamos un poquito

< $ locate /spam | grep home | xargs rm
(¡Con 2 cojones!... o con mucha conciencia revisamos todos los ficheros de todos los usuarios y corregimos a spamassassin() igual que en el anterior)

Para alimentar al correo con spam reconocidos que hemos visto con mutt que asi es dentro del buzon de un usuario, lo hacemos con el comando
$ sa-learn --spam --mbox /var/spool/mail/jc




MENSAJES ENTRANTES

Para ver el movimiento del servidor de correo tenemos que mirar el siguiente archivo /var/log/maillog


Vemos si ha accedido un usuario en las últimas 5 semanas
$ grep -i usuario /var/log/maillog.* | grep pop3
Vemos el correo que ha recibido un usuario en las últimas 5 semanas
$ grep -i usuario /var/log/maillog.* | grep to=usuario@dominio.es 





REDIRIGIR CORREO A CUENTA EXTERNA


  • Lo inmediato:
Esta sentencia coge mensage por mensaje todos los que tengo en mi buzon en mail.blom.es y los manda a mi cuenta en Gmail.
$ formail -ds sendmail -oi jc@gmail.com < /var/spool/mail/jc


  • lo corto:
Conectamos con el servidor de correo
$ ssh root@mail.bom.es

Hay un script que lo hace automaticamente. Ponemos la direccion interna y la direccion de correo donde se envia
$ /root/bin/mailfwd jc jc@yahoo.es

Probamos que lo hace bien
$ echo "Test for mail forwarding." | mail -s "test for mail forwarding" jc@bom.es
Debe haber el record del re-envio
$ less /home/jc/.procmail/log

Mira a ver si en Yahoo te ha llegado el correo de prueba

Si prefieres practicar primero sin riesgos podemos crear un usuario de prueba
$ useradd test
$ bin/mailfwd test jc@bom.es
$ echo "Test for mail forwarding." | mail -s "test for mail forwarding" test@bom.es
$ less /home/test/.procmail/log
$ mutt -f /var/spool/mail/jc
$ userdel test


  • Lo largo:
Se crean y configuran un par de ficheros procmail en el $HOME del usuario. Ver "man procmail" y "man procmailx"
Este es el script que hace todo el tomate automaticamente
$ vi /root/bin/mailfwd
___________________________________________________
#!/bin/bash
# script que crea los ficheros para hace un traspaso de correo a un usuario con procmail()
# mrp 18/10/2007

username=$1
fwdaddr=$2
mailhead=*@
mailtail=@*

if [ -z $1 ] || [ -z $2 ]; then echo "Usage: $0 username foward_mail_address"; exit 1;fi
id -u $username > /dev/null 2>&1
if [ ! $? ] || [ ! -d /home/$username ]; then
      echo "Bad user $username or Home \"/home/$username\" does not exist."
      exit 1
fi
echo $fwdaddr | grep -q -E '^[a-zA-Z0-9._%+-]+\@[a-zA-Z0-9.-]+\.[a-zA:-Z]{2,4}$'
if [ ! $? ]; then
      echo -e "Bad mail address \"${fwdaddr}\".\n"
      exit 1
fi
host -t MX ${fwdaddr#$mailhead} > /dev/null
if [ ! $? ]; then
   echo -e "Mail server address \@${fwdaddr#$mailhead} does not resolve.\n"
   exit 1
fi

cat > /home/$username/.procmailrc << EOF

MAILDIR=\$HOME/mail # elm users might use $HOME/Mail instead
PMDIR=\$HOME/.procmail
DEFAULT=/var/spool/mail/$username
LOGFILE=\$PMDIR/log
INCLUDERC=\$PMDIR/forward.rc
# add as many INCLUDERC's as you like

EOF

mkdir -p /home/$username/mail
mkdir -p /home/$username/.procmail

cat > /home/$username/.procmail/forward.rc << EOF
# forward to external account if smaller than 1MB
   :c
   * < 1000000
! $fwdaddr

EOF

_________________________________________________________________________

QUITAR REDIRECCION CORREO A CUENTA EXTERNA


Eliminamos dentro del home del usuario que queramos el directorio .procmail que esta oculto y el fichero .procmailrc
$rm -rf /home/jc/.procmail
$rm -rf /home/jc/.procmailrc




JUBILACION DE DOMINIOS DE CORREO



Al observar que el 90% del spam que entra y entretiene cantidad al servidor de correo vienen a los dominios antiguos, hice la decisión de jubilar estos. El proceso es simple:


  1. Se comentan los records MX en el DNS, aunque se dejan los records A y la asignación SOA en los dnscaches.
  2. Se comenta los nombres de los dominios en mail.blom.es de sendmail().
  3. Se reinicializan los servicios mencionados.

Los efectos que se notarán:

  1. Se rechazará el 85% del spam desde el DNS, simplemente no llegará.
  2. Se rechazará el 10% desde sendmail de los MX que siguen en caches por el mundo sin entrar en los filtros caros de spam.
  3. Todos los usuarios que siguen utilizando los dominios antiguos recibirán un rechazo al intentar enviar correo, ya sería hora que actualizaran el cliente de correo.
  4. Alguna gente que tienen direcciones antiguas guardadas recibirán rebotes para esas direcciones. Si realmente tienen interés en comunicar con nosotros cogerán el teléfono y corregirán sus direcciones. El resto es spam.

Los dominios jubilados incluyen:

  • grafos.es
  • grafos.net
  • cpca.es
  • trabajosaereos.es
  • geocart.es

Esto lo vemos en los siguientes ficheros
$ vi /etc/mail/local-host-names
#grafos.local
#grafos.es
#grafos.net
#cpca.es
#cpca.local
bom.es
bom.lan
#trabajosaereos.es
#geocart.es
localhost
localhost.localdomain

$ vi /etc/mail/relay-domains
#grafos.es
#grafos.net
#grafos.local
#cpca.es
#cpca.local
bom.es
bom.lan
#trabajosaereos.es
#geocart.es



PROBLEMAS CORREOS MUY GRANDES


Si tenemos en un buzon de un usuarjo correos muy grandes, y el cliente si no esta en la oficina o tiene un ancho de banda grande no va a poder descargarselos con lo que se le quedara bloqueado su correo. Para solucionarlo temporalmente tenemos que buscar esos correos y los movemos a otro sitio:
Con mutt nos conectamos a su buzon y buscamos los correos que tienen un tamaño muy grande
$mutt -f /var/spool/mail/usuario
Seleccionamos el correo que queremos mover y escogemos la opcion s para salvar el correo en otra parte (nuevo buzon). Si por ejemplo le decimos que lo salve en =nuevo_usuario nos lo salvaria en /root/Mail/nuevo_usuario. Asi con todos los correos que creamos que por tamaño esten bloqueando el correo. En la nueva ruta tendremos un fichero con formato mail con todos los correos que hayamos salvado con la opcion s en mutt.
Con mutt podemos ver que efectivamente tenemos todos los correos que queremos salvados en la nueva ruta.
$mutt -f /root/Mail/nuevo_usuario
Cuando queramos volver a mover esos correos de nuevo al buzon del usuario, podemos hacerlo con cat ya que tiene el formato adecuado
$cat /root/Mail/nuevo_usuario >> /var/spool/mail/usuario




COMANDOS CORREO


  • Para ver los correos que estan en cola
$ mailq


  • Para forzar la entrega de los correos que estan en cola
$ sendmail -q

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.