Qmail Server: Actualización de Antivirus Clamav por RPM


Para los que tengan un servidor de mail qmail con escaneo de correo por clamav via qmail-scanner, acá va un pequeño ayuda memoria para aquellas ocasiones en que debemos actualizar la versión del antivirus. Esto es algo que debemos revisar cada cierto tiempo, dado que el antivirus puede quedar obsoleto por falta de actualización.

Primero descargamos los RPM de nuestra versión de sistema operativo. Puede ser desde acá:

http://pkgs.repoforge.org/clamav/

Para una instalación eh RHEL 4 de 32 bits, necesitaremos los siguientes paquetes:

clamav-0.97.7-1.el4.rf.i386.rpm

clamav-db-0.97.7-1.el4.rf.i386.rpm

clamav-devel-0.97.7-1.el4.rf.i386.rpm

clamd-0.97.7-1.el4.rf.i386.rpm

Una vez que los tenemos descargados, procedemos:

1) Detenemos qmail y clamd:

# qmailctl stop
# service clamd stop

2) Desinstalamos la version de clamav que tengamos instalada:

2.1) Verificamos las versiones instaladas:

# rpm -qa |grep clam
clamav-devel-0.96.2-2.el4.rf
clamd-0.96.2-2.el4.rf
clamav-db-0.96.2-2.el4.rf
clamav-0.96.2-2.el4.rf

2.2) Desinstalamos:

# rpm -e --nodeps clamd-0.96.2-2.el4.rf 
# rpm -e --nodeps clamav-devel-0.96.2-2.el4.rf
# rpm -e --nodeps clamav-db-0.96.2-2.el4.rf
# rpm -e --nodeps clamav-0.96.2-2.el4.rf

3) Instalamos la nueva versión

# rpm -ivh clamd-0.96.2-2.el4.rf clamav-db-0.96.2-2.el4.rf clamav-0.96.2-2.el4.rf clamd-0.96.2-2.el4.rf

4) Ahora, editamos el /etc/clamd.conf y en la linea donde dice:

User clamav

modificamos por

User qscand

5) Ahora, editamos el /etc/freshclam.conf y en la linea donde dice:

DatabaseOwner clamav

modificamos por

DatabaseOwner qscand

Esto es para que utilice el usuario del qmail-scanner para el antivirus. Ojo con algunas instalaciones de Qmailrocks que sugerían utilizar el clamdscan para escanear y consumen enormes cantidades de recursos en el servidor. Gracias JSimpson por esta info.

6) Luego, verificamos los permisos en los archivos que puedan existir de versiones anteriores:

# chown -R qscand:qscand /var/lib/clamav
# chown -R qscand:qscand /var/run/clamav
# chown -R qscand:qscand /var/log/clamav

7) Iniciamos nuevamente los servicios:

# service clamd start 
# qmailctl start

That’s All Folks !

Qmail – Problemas en envíos de mails – Lentitud respuesta al puerto 25


El síntoma era que tardaba unos 5 minutos en contestar el telnet al puerto 25
Por lo que no se podían enviar mails , si recibir.

El problema venia dado porque una de las rbls que usamos estaba inactiva (estaban en periodo de cierre, deja de existir).
Las rbls se configuran dentro del archivo run en /var/qmail/supervise/qmail-smtpd

“-a rwl.dominio.com \

-r “rbl.dominio.com:listado en rbl local” \

-b -r “IM-96Y6-Bxxxxxxxxxxxxxxx33-36QEL.r.mail-abuse.com:blocked using Trend Micro RBL+, please see http://www.mail-abuse.com/cgi-bin/lookup?ip_address=%IP%” \

-B -r “IM-96Y6-xxxxxxxxxxxxxxxxx-36QEL.q.mail-abuse.com:blocked using Trend Micro Network Anti-Spam see http://www.mail-abuse.com/cgi-bin/lookup?ip_address=%IP%” \

-r cbl.abuseat.org \

-r combined.njabl.org \”

Cada lista es la que se pone seguido al parametro -r
“combined.njabl.org” era la del problema,se bajó el servicio, se eliminó esa linea y se levantó el servicio nuevamente y su funcionamiento fue correcto.

qmailctl stop (baja servicio)
vi /var/qmail/supervise/qmail-smtpd/run (edito las rbls)
qmailctl start (levanta servicio)

qmail: deshabilitar mfcheck / disable mfcheck


Para aquellos que tengan qmail con el patch combinado del gran J.Simpson (http://qmail.jms1.net/patches/combined-details.shtml), tal vez se encuentren con el gran problema de no poder enviar mails si en algún momento nuestro dominio se cae o el proveedor tiene problemas con los DNS’s que gestionan nuestro dominio.
En estos casos, si queremos enviar mail/correo al menos internamente a nuestras direcciones, vamos a tener que deshabilitar el la opción MFCHECK del sitado patch.
Para hacer esto tenemos que editar el archivo:

# vi /var/qmail/supervise/qmail-smtpd/run

y cambiar el valor MFCHECK=3 a MFCHECK=0

Posibles valores de esta variable:

0 Deshabilita el chequeo
1 Chequea y rechaza cualquier sender inválido.
2 loguea errores MFCHECK
3 loguea toda la actividad de MFCHECK

 

hotmail: sender was rejected. Remote host said: 550 SC-001


Hotmail agregó nuevas reglas de validación para evitar la entrada de spam en sus servidores. Si tenemos un servidor de correo saliente (smtp) y la IP que utiliza está en alguna lista negra o un grupo de IPs cercano está listado, no nos van a permitir enviarles mail, obteniendo como resultado un rechazo similar a este:

Connected to 65.54.188.110 but sender was rejected. Remote host said: 550 SC-001 (BAY0-MC3-F3)
Unfortunately, messages from xxx.xxx.xxx.xxx weren't sent. Please contact your Internet service provider
since part of their network is on our block list. You can also refer your provider
to http://mail.live.com/mail/troubleshooting.aspx#errors.

Podemos verificar si la IP del servidor que envía (SMTP) está listada acá: http://www.mxtoolbox.com/blacklists.aspx

Si es un pool o grupo de IPs las baneadas, vamos a tener que hablarlo con el proveedor del servicio porque escapa a nuestro alcance solicitar la eliminación de las listas negras.
En cambio si es nuestra IP la que figura en el las listas negras, habiendo verificado y corregido la causa de la publicación, podemos solicitar al adminitrador de la lista correspondiente que nos remueva. En general, si la causa que nos colocó en la lista negra está solucionada, nos sacarán en 24 a 72 Hs. dependiendo de la entidad que las administre.
Adicionalmente, no está demás que realicemos el reclamo al soporte de e-mail de microsoft a través del siguiente formulario:

RBL (Real Time Block List) con qmail


La implementación de RBL en qmail es bastante simple en la instalación estandard. Solo debemos modificar el script qmail-smtpd agregando las lineas “-r algun_rbl”.

Este es un ejemplo de la parte del exec del script:

exec /usr/local/bin/softlimit -m 30000000 
 /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" 
 -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp 
 /usr/local/bin/rblsmtpd -b -r list.dsbl.org 
 -r cbl.abuseat.org 
 -r combined.njabl.org 
 -r relays.ordb.org 

Verificar servicios SMTP y POP con telnet por consola


Muchas veces necesitamos verificar o probar si los servicios POP o SMTP están levantados y en dicho caso establecer diálogo con el servidor de mail para verificar que no hay errores en sus instalación.

Para estos casos, estas son las pruebas básicas:

Leemos los mails disponibles para descarga por POP3:

# telnet localhost 110
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
+OK <16658.1054485137@yourserver.com>
user postmaster@mydomain.com (ingresar direccion de mail completa)
+OK
pass your_password
+OK
list
+OK
1 1349     (aqui muestra la lista de e-mails disponibles en la casilla)
.
quit
+OK
Connection closed by foreign host.
This is the sign of a successfull POP

Verificamos servicio SMTP con TLS (Transport Layer Security):

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 somewhere.anywhere.com ESMTP
ehlo localhost
250-somewhere.anywhere.com
250-AUTH LOGIN CRAM-MD5 PLAIN
250-AUTH=LOGIN CRAM-MD5 PLAIN
250-STARTTLS
250-PIPELINING
250 8BITMIME
starttls
220 ready for tls
quit
quit
Connection closed by foreign host.

 

Instalar Servidor de mail QMail


Hace ya varios años que tengo funcionando un  servidor QMail sobre un Fedora 4 !! y creo que lo he reiniciado solo en un par de ocasiones. Como me propuse modernizarlo un poco, acá dejo mis notas sobre la instalación de un servidor (MTA) de mail QMail del gran Dan Bernstein en un CentOS 5.5. También he realizado esta instalación sobre RHEL 4 y 5 sin problemas.
Esta instalación tiene como base la guía qmailrocks, pero con varias modificaciones de acuerdo a los patch’s creados por el gran jsimpson
Esto no pretende ser una receta de cocina de instalación de un MTA, son solo notas de instalación con algunos comentarios útiles para saber como encararla.
Entonces manos al a obra:

Necesitamos instalar:
1. Apache Web Server
2. PHP
3. Perl
4. GCC
5. MySQL
6. OpenSSL
7. OpenSSL-dev
8. libssl-dev
9. wget
10. patch & patchutils
NO necesitamos instalar:
1. Postfix
2. Ningún Pop Service
3. Ningún SMTP Service, salvo Sendmail

Modulos Perl a instalar:
Digest::SHA1
Digest::HMAC
Net::DNS
Time::HiRes
HTML::Tagset
HTML::Parser

Puertos Firewall:
Outbound ports (tcp) :
25 – SMTP
110 – POP services
143 – IMAP
783 – Spamassassin
993 – IMAPS
Inbound Ports (tcp) :
25 – SMTP
80 – HTTP
110 – POP services
143 – IMAP
443 – HTTPS
783 – Spamassassin
993 – IMAPS

Descargas:
Creamos un directorio /downloads y descargamos todo este soft en dicho directorio.
#mkdir /downloads
#cd /downloads

QMail:
# wget http://cr.yp.to/software/qmail-1.03.tar.gz
EZMLM
# wget http://www.ezmlm.org/archive/7.0.2/ezmlm-idx-7.0.2-1.x86_64.rpm
AUTORESPONDER
# wget http://www.inter7.com/devel/autorespond-2.0.5.tar.gz
VPOPMAIL
# wget http://ufpr.dl.sourceforge.net/project/vpopmail/vpopmail-stable/5.4.30/vpopmail-5.4.30.tar.gz
VQADMIN
# wget http://softlayer.dl.sourceforge.net/project/vqadmin/vqadmin/2.3.6/vqadmin-2.3.6.tar.gz
MAILDROP
# wget http://ufpr.dl.sourceforge.net/project/courier/maildrop/2.5.0/maildrop-2.5.0.tar.bz2
QMAILADMIN
wget http://ufpr.dl.sourceforge.net/project/qmailadmin/qmailadmin-stable/1.2.14/qmailadmin-1.2.14.tar.gz

Descargar ucspi-tcp & daemontools:
# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
# wget http://djbware.csi.hu/patches/daemontools-0.76.errno.patch
# wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/ucspi-tcp-0.88.errno.patch
# wget http://qmail.jms1.net/ucspi-tcp/ucspi-rss2.patch
# wget http://qmail.jms1.net/ucspi-tcp/tcpserver-limits-2007-12-22.patch

Descargar patches de John Simpson: ojo, verifiquemos las ultimas versiones.
# wget http://qmail.jms1.net/patches/qmail-1.03-jms1.7.08.patch
# wget http://qmail.jms1.net/patches/qmail-1.03-jms1.7.08.patch.asc

Descargamos scripts de inicialización, jsimpson_patch, finalización y otros:
# wget https://dl.dropboxusercontent.com/u/5878683/hvivani.com.ar/qmail/initial_install_script.sh
# wget https://dl.dropboxusercontent.com/u/5878683/hvivani.com.ar/qmail/aplica_jsimpson_patch.sh
# wget https://dl.dropboxusercontent.com/u/5878683/hvivani.com.ar/qmail/finalize_install_script.sh
# wget https://dl.dropboxusercontent.com/u/5878683/hvivani.com.ar/qmail/check_perlmods.script

Comenzamos:
ejecutamos script inicial:
# /downloads/initial_install_script.sh
# /downloads/aplica_jsimpson_patch.sh

compilamos QMAIL:
# cd /usr/src/qmail/qmail-1.03
# make man && make setup check

# config-fast mail.dominio.com

Instalamos Certificado:
# make cert

# chown -R vpopmail:qmail /var/qmail/control/clientcert.pem /var/qmail/control/servercert.pem

Compilamos ucspi-tcp:
# cd /usr/src/qmail/ucspi-tcp-0.88/
Aplicamos patch antes de compilar:
# patch < /downloads/ucspi-tcp-0.88.errno.patch
# patch < /downloads/ucspi-rss2.patch
3 patch < /downloads/tcpserver-limits-2007-12-22.patch
# make && make setup check

Compilamos daemontools:
# cd /package/admin/daemontools-0.76
Aplicamos patch antes de compilar:
# cd /package/admin/daemontools-0.76/src
# patch < /downloads/daemontools-0.76.errno.patch
# cd /package/admin/daemontools-0.76
# package/install

Ejecutamos la verificación de permisos de John Simpson:
# wget http://qmail.jms1.net/scripts/vfixpermissions
# /downloads/vfixpermissions

Instalamos EZMLM (listas de correo)
# cd /downloads
# rpm -i ezmlm-idx-7.0.2-1.x86_64.rpm

Instalamos AUTORESPONDER (autorespuesta)
# cd /downloads
# tar zxvf autorespond-2.0.5.tar.gz
# cd autorespond-2.0.5
# make && make install

Instalamos VPOPMAIL (dominios de mail virtuales)
# cd /downloads
# tar zxvf vpopmail-5.4.30.tar.gz
# cd vpopmail-5.4.30
# ./configure –enable-logging=p
#make && make install-strip

Instalamos VQADMIN (interfaz web para administrar vpopmail)
# cd /downloads
# tar zxvf vqadmin-2.3.6.tar.gz
# cd vqadmin-2.3.6
# ./configure –enable-cgibindir=/var/www/cgi-bin –enable-htmldir=/var/www/html
Error al configurar en 64bits. Ver este comentario:
vqadmin has old config.guess and config.sub files do not have the
definitions for the 64 bit operating systems. You can copy those files from a
recent vpopmail release and it should configure just fine. I did this
last week and it worked.
So:
# /downloads/vqadmin-2.3.6
# mv config.guess config.guess.20100907
# mv config.sub config.sub.20100907
# cp ../vpopmail-5.4.30/config.sub .
# cp ../vpopmail-5.4.30/config.guess .

Y hacemos de nuevo el configure:
# ./configure –enable-cgibindir=/var/www/cgi-bin –enable-htmldir=/var/www/html

make && make install-strip

Configuramos Apache:
# vi /etc/httpd/conf/httpd.conf
agregamos:

deny from all
Options ExecCGI
AllowOverride AuthConfig
Order deny,allow

Setear:
AllowOverride All

# cd /var/www/cgi-bin/vqadmin

creamos .htaccess:
# vi .htaccess

y agregamos:

AuthType Basic
AuthUserFile /etc/httpd/conf/vqadmin.passwd
AuthName vQadmin
require valid-user
satisfy any

luego:

# chown apache .htaccess
# chmod 644 .htaccess

luego agregamos al admin con su passwd:
# htpasswd -bc /etc/httpd/conf/vqadmin.passwd admin passwordquequeremos
# chmod 644 /etc/httpd/conf/vqadmin.passwd

luego:

# /sbin/service httpd restart

deberíamos poder navegar en la siguiente dirección:

http://localhost/cgi-bin/vqadmin/vqadmin.cgi

Instalamos MAILDROP (filtro de mensajes)
# cd /downloads
# tar jxvf maildrop-2.5.0.tar.bz2
# cd maildrop-2.5.0
# ./configure –prefix=/usr/local –exec-prefix=/usr/local –enable-maildrop-uid=root –enable-maildrop-gid=vchkpw –enable-maildirquota
# make && make install-strip && make install-man

QMAILADMIN  (interfaz web para administrar cuentas de mail)

# cd /downloads
# tar zxvf qmailadmin-1.2.14.tar.gz
# cd qmailadmin-1.2.14
# ./configure –enable-cgibindir=/var/www/cgi-bin –enable-htmldir=/var/www/html
# make && make install-strip

Deberiamos poder navegar a:
http://localhost/cgi-bin/qmailadmin/

Finalizamos la instalacion de QMAIL:
ejecutamos:
# ./finalize_install_script.sh

editamos y cambiamos mail.example.com en:
# vi /var/qmail/supervise/qmail-pop3d/run
editamos y cambiamos mail.example.com en:
# vi /var/qmail/supervise/qmail-smtpd/run

# qmailctl stop

# echo ‘127.:allow,RELAYCLIENT=””‘ >> /etc/tcp.smtp

# qmailctl cdb

Creamos Alias comunmente utilizados:
# echo postmaster@dominio.com > /var/qmail/alias/.qmail-root
# echo postmaster@dominio.com > /var/qmail/alias/.qmail-postmaster
# echo postmaster@dominio.com > /var/qmail/alias/.qmail-mailer-daemon
# ln -s /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-anonymous
# chmod 644 /var/qmail/alias/.qmail*

DESINSTALANDO SENDMAIL:
Verificamos si está instalado:
# rpm -qa | grep sendmail
si está instalado lo desinstalamos
# /etc/rc.d/init.d/sendmail stop (to stop Sendmail)
# rpm -e –nodeps sendmail-x.x.x.x
# rpm -e –nodeps sendmail-doc-x.x.x.x
# rpm -e –nodeps sendmail-devel-x.x.x.x
# rpm -e –nodeps sendmail-cf-x.x.x.x

Establecemos un “path artifical” para el sendmail:
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

Probando:
Si hacemos
# telnet localhost 110
o
# telnet localhost 25
tenemos que tener respuesta.

OJO en versiones de 64 bits modificar la varialbe softlimits en el run dado que da error. Aumentarla al menos a 40000000

Instalamos COURIER AUTH LIB:
Descargamos
wget https://sourceforge.net/projects/courier/files/authlib/0.63.0/courier-authlib-0.63.0.tar.bz2/download

# cd /downloads/
# tar jxvf courier-authlib-0.63.tar.bz2
# cd courier-authlib-0.63
# ./configure –prefix=/usr/local –exec-prefix=/usr/local –with-authvchkpw –without-authldap –without-authmysql –disable-root-check –with-ssl –with-authchangepwdir=/usr/local/libexec/authlib –with-redhat
# make && make check
# make install-strip && make install-configure

Editamos el rc.local para colocar el arranque al inicio del servicio:

# vi /etc/rc.local

Añadimos la siguiente línea:
/usr/local/sbin/authdaemond start

Instalamos COURIER-IMAP/IMAPS con Courierpassd (autenticación a través de IMAP)
Descargamos
wget https://sourceforge.net/projects/courier/files/imap/4.8.1/courier-imap-4.8.1.tar.bz2/download

OJO que COURIER-IMAP debe ser instalado por un usuario NO ROOT

$ cd /downloads/
$ tar jxvf courier-imap-4.8.1.tar.bz2
$ chown -R hvivani:users courier-imap-4.8.1
$ cd /downloads/courier-imap-4.8.1
$ su hvivani
$ ./configure –prefix=/usr/local –exec-prefix=/usr/local –with-authvchkpw –without-authldap –without-authmysql –disable-root-check –with-ssl –with-authchangepwdir=/usr/local/libexec/authlib –with-redhat

$ make && make check
Ahora volvemos al usuario ROOT:
$ exit
# make install-strip && make install-configure

Ahora crearemos un certificado SSL para el servidor IMAP-SSL
/usr/local/sbin/mkimapdcert

vi /usr/local/etc/imapd.cnf
cambiamos postmaster@example.com por una direccion de mail administrativa que usemos
Grabamos y salimos
vi /usr/local/etc/imapd
Verificar que la siguiente linea existe: IMAPDSTART=YES
vi /usr/local/etc/imapd-ssl
Verificar que la siguiente linea existe: IMAPDSSLSTART=YES
Verificar que la siguiente linea existe: TLS_CERTFILE=/usr/local/share/imapd.pem
Grabamos y salimos.
vi /usr/local/etc/authlib/authdaemonrc
Cerca de la linea 27 veremos la configuracion “authmodulelist”. Tenemos que verificar que “authvchkpw” es el unico modulo instalado.
Quedaría asi:
authmodulelist=”authvchkpw”
Grabamos y salimos.
Creamos los scripts de inicialización:
# cp /usr/local/libexec/imapd.rc /etc/rc.d/init.d/imap
# cp /usr/local/libexec/imapd-ssl.rc /etc/rc.d/init.d/imaps

Starteamos  Authdaemond, IMAP e IMAPS:
# /usr/local/sbin/authdaemond stop
# /usr/local/sbin/authdaemond start
# /etc/rc.d/init.d/imap stop
# /etc/rc.d/init.d/imaps stop
# /etc/rc.d/init.d/imap start
# /etc/rc.d/init.d/imaps start
Si hacemos un
# nmap localhost
deberíamos ver los puertos 143 y el 993 escuchando.
Los probamos:
#telnet localhost 143
Trying 192.168.1.10…
Connected to 192.168.1.10.
Escape character is ‘^]’.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE STARTTLS] Courier-IMAP ready. Copyright 1998-2003 Double Precision, Inc. See COPYING for distribution information.
a login postmaster@mydomain.com my_password
a OK LOGIN Ok. (successful login!)
a logout (logs you out)
* BYE Courier-IMAP server shutting down
a OK LOGOUT completed
Connection closed by foreign host.

Ahora Instalamos Courierpassd
cd /downloads/
tar zxvf courierpassd-1.1.0-RC1.tar.gz
cd courierpassd-1.1.0-RC1
./configure
make && make install

Si usamos Xinetd, agregamos el script de arranque:

# cd /etc/xinetd.d
Creamos el script de courierpassd
# vi courierpassd
service courierpassd
{
port = 106
socket_type = stream
protocol = tcp
user = root
server = /usr/local/sbin/courierpassd
server_args = -s imap
wait = no
only_from = 127.0.0.1
instances = 4
disable = no
}
Nota: Courierassd necesita abierto el puerto 106 por lo menos para el tráfico local (127.0.0.1).
Grabamos y salimos

Agregamos el servicio CourierPassd a los servicios del sistema:
# vi /etc/services
Agregamos la siguiente línea al archivo /etc/services :
courierpassd 106/tcp #for /etc/xinetd.d/courierpassd
Restarteamos el xinetd
# /etc/rc.d/init.d/xinetd restart

Ahora tratamos de hacer un cambio de password con este servicio:

# telnet localhost 106
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
200 courierpassd v0.30 hello, who are you?
user postmaster@dominio.com
200 Your password please.
pass my_password
200 Your new password please.
newpass my_new_password
200 Password changed, thank-you.
quit
200 Bye.
Connection closed by foreign host.

Instalamos SquirrelMail (Cliente WebMail)

Verifiquemos en el /etc/php.ini la opción file_uploads = On

Bajamos la ultima versión de Squirrelmail de http://www.squirrelmail.org/download.php
Cambiamos directorio al de instalación y descomprimimos:
# cd /var/www/html
# tar -zxvf /downloads/squirrelmail-x.x.x.tar.gz
# mv  squirrelmail-x.x.x to  webmail

Ahora lo configuramos:
# mkdir /var/sqattachements
# chown -R apache:apache /var/sqattachements
# cd webmail
# chown -R apache:apache data
# cd config
# ./conf.pl
Esto ejecutará el script de configuraciónd el squirrelMail, donde debemos configurar basicamente lo siguiente:
General
——-
1. Domain : 1.2.3.4 ( IP del Servidor )
2. Invert Time : false
3. Sendmail or SMTP : SMTP
IMAP Settings
————–
4. IMAP Server : localhost
5. IMAP Port : 143
6. Authentication type : login
7. Secure IMAP (TLS) : false
8. Server software : other
9. Delimiter : detect
SMTP Settings
————-
4. SMTP Server : localhost
5. SMTP Port : 25
6. POP before SMTP : false
7. SMTP Authentication : login
8. Secure SMTP (TLS) : false

Ahora configuramos el apache para definir el servidor, agregando esta entrada en el /etc/httpd/conf/httpd.conf

ServerName mail.dominio.com
ServerAlias mail.*
ServerAdmin postmaster@dominio.com
DocumentRoot /var/www/webmail

Reloadeamos el apache:
# service httpd reload

Ahora si ponemos la dirección http://www.dominio.com/webmail/ en el navegador, deberíamos ver el cliente web de mail squirrelmail.
Debemos ingresar usando:
Username: postmaster@dominio.com
Password: password
Algo importante es instalar el plugin para cambiar passwords e idioma:

# cd /var/www/html/webmail/plugins
Descargamos el modulo…
# wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fchange_pass-2.7-1.4.x.tar.gz
Descomprimimos…
# tar zxvf change_pass-2.7-1.4.x.tar.gz

Añadimos el módulo en el squirrel:
# cd /var/www/htmp/webmail/config
Ejecutamos el script de configuración…
# ./conf.pl

Elegimos la opción “plugins” y veremos para agregar el “change_pass”. Grabamos y listo.

Instalamos Clam Antivirus y SpamAssassin (Antivirus y AntiSpam)

Vamos a necesitar los siguientes módulos Perl:

Digest::SHA1
Digest::HMAC
Net::DNS
Time::HiRes
HTML::Tagset
HTML::Parser
Pod::Usage
Parse::Syslog
Statistics::Distributions
perl-suidperl
unzip

Podemos chequear si tenemos instalados estos modulos, ejecutando como usuario NO ROOT, el siguiente script:
$ /downloads/check_perlmods.script

Si nos falta algún módulo, podemos descargarlo directamente desde http://www.cpan.org

Instalamos el Clamav:
# yum install clamav clamav-devel

Verificamos la siguiente configuración en el /etc/clamd.conf:
“Example” – Debe estar comentada (#)
“LogFile” – seteamos /var/log/clamav/clamd.log
“LogTime” – descomentamos
“LogSyslog” – descomentamos
“User” – seteamos a qscand
“ScanMail” – descomentamos

Creamos el usuario qscand:
# useradd -c “Qmail-Scanner Account” -s /bin/false qscand

Starteamos el clamd:
# /etc/init.d/clamd stop
# /etc/init.d/clamd start

Actualizamos la base de virus:
# /usr/bin/freshclam -l /var/log/clamav/clam-update.log

[root@dominio.com clamav]# freshclam -l /var/log/clamav/clamav-update.log
ClamAV update process started at Sun Oct 24 23:36:22 2004
main.cvd is up to date (version: 27, sigs: 23982, f-level: 2, builder: tomek)
daily.cvd is up to date (version: 549, sigs: 1583, f-level: 3, builder: ccordes)

Creamos una entrada en el crontab para que la base se actualice sola:

# crontab -e
25 1 * * * /usr/bin/freshclam –quiet -l /var/log/clamav/freshclam.log
grabamos y salimos

Instalamos SpamAssassin

# yum install spamassassin spamassassin-tools

Instalamos QmailScanner

Descargamos el qmailscanner y el qms-analog. Verificar las últimas versiones:
# cd /downloads
# wget http://sourceforge.net/projects/qmail-scanner/files/qmail-scanner/2.08/qmail-scanner-2.08.tgz/download
# wget http://prdownloads.sourceforge.net/qms-analog/qms-analog-0.4.4.tar.gz?download

# tar -zxvf qmail-scanner-2.08.tgz
# tar -zxvf qms-analog.0.4.4.tgz

# cd qms-analog.0.4.4
# make all

# cd /downloads/qmail-scanner-2.08
# vi qms-config

modificamos lo marcado en rojo:

#!/bin/sh
if [ “$1” != “install” ]; then
INSTALL=
else
INSTALL=”–install”
fi
./configure –domain yourdomain.com \
–admin postmaster \
–local-domains “yourdomain.com,yourotherdomain.com” \
–add-dscr-hdrs yes \
–dscr-hdrs-text “X-Antivirus-MYDOMAIN” \
–ignore-eol-check yes \
–sa-quarantine 0 \
–sa-delete 0 \
–sa-reject no \
–sa-subject “:SPAM:” \
–sa-delta 0 \
–sa-alt yes \
–sa-debug no \
–notify admin \
“$INSTALL”
grabamos y salimos

# chmod 755 qms-config
#./qms-config
respondemos yes a todas las preguntas y si no tenemos errores, directamente instalamos:

# ./qms-config install

Inicializamos el scanner:
# setuidgid qscand /var/qmail/bin/qmail-scanner-queue.pl -z
# setuidgid qscand /var/qmail/bin/qmail-scanner-queue.pl -g

Si todo salió bien, deberíamos tener una salida similar a:
perlscanner: generate new DB file from /var/spool/qmailscan/quarantine-attachments.txt
perlscanner: total of 9 entries.

# chown -R qscand:qscand /var/spool/qmailscan

Para decirle al Qmail que utilice el scanner debemos editar el archivo run y agregar una línea:
# vi /var/qmail/supervise/qmail-smtpd/run
Agregamos la siguiente línea luego del #!/bin/bash
QMAILQUEUE=”/var/qmail/bin/qmail-scanner-queue.pl” ; export QMAILQUEUE
OJO en versiones de 64 bits modificar la varialbe softlimits en el run dado que da error. Aumentarla al menos a 40000000

El archivo run debería haber quedado parecido a esto:
#!/bin/sh
QMAILQUEUE=”/var/qmail/bin/qmail-scanner-queue.pl” ; export QMAILQUEUE
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
if [ -z “$QMAILDUID” -o -z “$NOFILESGID” -o -z “$MAXSMTPD” -o -z “$LOCAL” ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo “No /var/qmail/control/rcpthosts!”
echo “Refusing to start SMTP listener because it’ll create an open relay”
exit 1
fi
exec /usr/local/bin/softlimit -m 40000000 \
/usr/local/bin/tcpserver -v -R -l “$LOCAL” -x /etc/tcp.smtp.cdb -c “$MAXSMTPD” \
-u “$QMAILDUID” -g “$NOFILESGID” 0 smtp \
/var/qmail/bin/qmail-smtpd your_domain.com \
/home/vpopmail/bin/vchkpw /usr/bin/true 2>&1

Ahora restarteamos el qmail:
# qmailctl stop
# qmailctl start
# qmailctl stat

Probamos que el qmailscanner funcione con el qmail, clamav y spamassassin:

# cd /downloads/qmail-scanner-2.08/contrib
# chmod 755 test_installation.sh
# ./test_installation.sh -doit
Esto va a generar 2 mails que serán reconocidos como virus y almacenados en cuarentena por el clamav y dos mensajes que iran a la bandeja de entrada, uno de ellos marcado como spam:

setting QMAILQUEUE to /var/qmail/bin/qmail-scanner-queue.pl for this test…
Sending standard test message – no viruses…
done!
Sending eicar test virus – should be caught by perlscanner module…
done!
Sending eicar test virus with altered filename – should only be caught by commercial anti-virus modules (if you have any)…
Sending bad spam message for anti-spam testing – In case you are using SpamAssassin…
Done!
Finished test. Now go and check Email for postmaster@mydomain.com

Si esto funcionó correctamente, en este punto deberíamos teber Clam Antivirus, SpamAssassin y Qmail-Scanner funcionando juntos.
Si el mensaje contenía un virus, se almacenará en cuarentena en: /var/spool/qmailscan/quarantine.

https://dl.dropboxusercontent.com/u/5878683/hvivani.com.ar/qmail/

scripts: qmail usage statistics


Aquí varios scripts utilizados para analizar el uso del servidor de correo qmail. Se pueden utilizar independientemente o el primero llamará al resto:

[root@test scripts]# cat chkStatus.sh 
#!/bin/bash
echo ""
echo ""
echo "Consultas de estado. Servidor Qmail"
echo "==================================="
echo ""
echo "TCP Server Hits:"
/root/scripts/chkTcpServerHits.sh $1|cut -c12-50
echo "RBL Hits:"
/root/scripts/chkRblHits.sh $1|cut -c12-50
echo "SPAM Hits:"
/root/scripts/chkSpamHits.sh $1|cut -c13-50
echo "Spam Deleted: "
/root/scripts/chkSpamHitsDeleted.sh $1|cut -c13-50
echo "Virus Hits:"
/root/scripts/chkVirusHits.sh $1|cut -c13-50
echo "Qtrap Hits:"
/root/scripts/chkQtrapHits.sh $1|cut -c12-50
echo "Failure:"
/root/scripts/chkFailure.sh $1|cut -c12-50
echo "Pop3 Hits:"
/root/scripts/chkPopHits.sh $1|cut -c12-50
echo "Send Local:"
/root/scripts/chkSendLocal.sh $1|cut -c12-50
echo "Send Remote:"
/root/scripts/chkSendRemote.sh $1|cut -c12-50
echo ""
echo "Estado de las colas: "
qmailctl queue
echo ""
echo "Uptime: "
uptime
echo ""

[root@test scripts]# cat chkTcpServerHits.sh 
#!/bin/bash
# 20070417-hvivani-Obtiene total de tcpserver: pid de los logs de qmail para una fecha pasada por linea de comandos.
fecha=`date +%Y-%m-%d --date=$1`
# imprimo fecha. Puede cambiarse para otros dias
echo $fecha | \
# coloco una coma
awk '{printf $0","}' \
# busco "rblsmtpd" en los logs para determinar la cantidad de lineas que lo contienen
cat /var/log/qmail/qmail-smtpd/*|grep "tcpserver: pid"| \
# convert Time Atomic International timestamp to normal human readable format <-- motherfucker yeahhh!!!
/usr/local/bin/tai64nlocal | \
# busco el human readable timestamp para todas las instancias de la fecha
grep $fecha | \
# cuento numero de lineas
wc -l
# end
exit

[root@test scripts]# cat chkRblHits.sh 
#!/bin/bash
# 20070417-hvivani-Obtiene total de rblsmtpd de los logs de qmail para una fecha pasada por linea de comandos.
fecha=`date +%Y-%m-%d --date=$1`
# imprimo fecha. Puede cambiarse para otros dias
echo $fecha | \
# coloco una coma
awk '{printf $0","}' \
# busco "rblsmtpd" en los logs para determinar la cantidad de lineas que lo contienen
cat /var/log/qmail/qmail-smtpd/*|grep "rblsmtpd:"| \
# convert Time Atomic International timestamp to normal human readable format <-- motherfucker yeahhh!!!
/usr/local/bin/tai64nlocal | \
# busco el human readable timestamp para todas las instancias de la fecha
grep $fecha | \
# cuento numero de lineas
wc -l
# end
exit

[root@test scripts]# cat chkSpamHits.sh 
#!/bin/bash
# 20070417-hvivani-Obtiene total de SPAM de los logs de qmail para una fecha pasada por linea de comandos.
fecha=`date +%c --date=$1|cut -c5-15`
# imprimo fecha. Puede cambiarse para otros dias
echo $fecha | \
# coloco una coma
awk '{printf $0","}' \
# busco para determinar la cantidad de lineas que lo contienen
cat /var/spool/qscan/qmail-queue.log|grep "smells like SPAM"|cut -c6-16| \
# busco la fecha
grep "$fecha" | \
# cuento numero de lineas
wc -l
# end
exit

[root@einstein scripts]# cat chkSpamHitsDeleted.sh 
#!/bin/bash
# 20070417-hvivani-Obtiene total de SPAM eliminado de los logs de qmail para una fecha pasada por linea de comandos.
fecha=`date +%c --date=$1|cut -c5-15`
# imprimo fecha. Puede cambiarse para otros dias
echo $fecha | \
# coloco una coma
awk '{printf $0","}' \
# busco para determinar la cantidad de lineas que lo contienen
cat /var/spool/qscan/qmail-queue.log|grep "deleting message..."|cut -c6-16| \
# busco la fecha
grep "$fecha" | \
# cuento numero de lineas
wc -l
# end
exit

[root@test scripts]# cat chkVirusHits.sh 
#!/bin/bash
# 20070417-hvivani-Obtiene total de virus de los logs de qmail para una fecha pasada por linea de comandos.
fecha=`date +%c --date=$1|cut -c5-15`
# imprimo fecha. Puede cambiarse para otros dias
echo $fecha | \
# coloco una coma
awk '{printf $0","}' \
# busco para determinar la cantidad de lineas que lo contienen
cat /var/spool/qscan/qmail-queue.log|grep "there be a virus"|cut -c6-16| \
# busco la fecha
grep "$fecha" | \
# cuento numero de lineas
wc -l
# end
exit

[root@test scripts]# cat chkQtrapHits.sh 
#!/bin/bash
# 20070418-hvivani-Obtiene total dets del qtrap  de los logs de qmail para una fecha pasada por linea de comandos.
fecha=`date +%Y-%m-%d --date=$1`
fechaQtrap=`date +%m/%d/%y --date=$1`
# imprimo fecha. Puede cambiarse para otros dias
echo $fecha | \
# coloco una coma
awk '{printf $0","}' \
# busco en los logs para determinar la cantidad de lineas que lo contienen
cat /home/vpopmail/qtrap/logs/qtrap.log|grep "$fechaQtrap"|wc -l
# end
exit

[root@test scripts]# cat chkFailure.sh 
#!/bin/bash
# 20070418-hvivani-Obtiene total de failure de los logs de qmail para una fecha pasada por linea de comandos.
fecha=`date +%Y-%m-%d --date=$1`
# imprimo fecha. Puede cambiarse para otros dias
echo $fecha | \
# coloco una coma
awk '{printf $0","}' \
# busco en los logs para determinar la cantidad de lineas que lo contienen
cat /var/log/qmail/qmail-send/*|grep "failure: "| \
# convert Time Atomic International timestamp to normal human readable format <-- motherfucker yeahhh!!!
/usr/local/bin/tai64nlocal | \
# busco el human readable timestamp para todas las instancias de la fecha
grep $fecha | \
# cuento numero de lineas
wc -l
# end
exit

[root@test scripts]# cat chkPopHits.sh 
#!/bin/bash
# 20070417-hvivani-Obtiene total de tcpserver: pid de los logs de qmail para una fecha pasada por linea de comandos.
fecha=`date +%Y-%m-%d --date=$1`
# imprimo fecha. Puede cambiarse para otros dias
echo $fecha | \
# coloco una coma
awk '{printf $0","}' \
# busco "rblsmtpd" en los logs para determinar la cantidad de lineas que lo contienen
cat /var/log/qmail/qmail-pop3d/*|grep "tcpserver: pid"| \
# convert Time Atomic International timestamp to normal human readable format <-- motherfucker yeahhh!!!
/usr/local/bin/tai64nlocal | \
# busco el human readable timestamp para todas las instancias de la fecha
grep $fecha | \
# cuento numero de lineas
wc -l
# end
exit

[root@test scripts]# cat chkSendLocal.sh 
#!/bin/bash
# 20070417-hvivani-Obtiene total de entregas locales de los logs de qmail para una fecha pasada por linea de comandos.
fecha=`date +%Y-%m-%d --date=$1`
# imprimo fecha. Puede cambiarse para otros dias
echo $fecha | \
# coloco una coma
awk '{printf $0","}' \
# busco "rblsmtpd" en los logs para determinar la cantidad de lineas que lo contienen
cat /var/log/qmail/qmail-send/*|grep "to local "| \
# convert Time Atomic International timestamp to normal human readable format <-- motherfucker yeahhh!!!
/usr/local/bin/tai64nlocal | \
# busco el human readable timestamp para todas las instancias de la fecha
grep $fecha | \
# cuento numero de lineas
wc -l
# end
exit

[root@test scripts]# cat chkSendRemote.sh 
#!/bin/bash
# 20070417-hvivani-Obtiene total de entregas remotas de los logs de qmail para una fecha pasada por linea de comandos.
fecha=`date +%Y-%m-%d --date=$1`
# imprimo fecha. Puede cambiarse para otros dias
echo $fecha | \
# coloco una coma
awk '{printf $0","}' \
# busco "rblsmtpd" en los logs para determinar la cantidad de lineas que lo contienen
cat /var/log/qmail/qmail-send/*|grep  "to remote "| \
# convert Time Atomic International timestamp to normal human readable format <-- motherfucker yeahhh!!!
/usr/local/bin/tai64nlocal | \
# busco el human readable timestamp para todas las instancias de la fecha
grep $fecha | \
# cuento numero de lineas
wc -l
# end
exit