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.
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/
Hola … Los archivos que hacen referencia a http://vivani.site40.net/ no se pueden descargar … Tienes alguna otra manera de obtenerlos ??? Saludos …
Muchas Gracias Carlos por avisar ! Por favor, verifica nuevamente que he corregido los links.
Saludos !
Excelente … Muchas gracias (y) …Saludos …