En este manual les voy a indicar con la mayor cantidad de detalles posibles todo lo que tienen que hacer para instalar un servidor de correo en linux debian o cualquier distro basada en debian tales como ubuntu, knoppix y bue, ahorita no se me viene otra a la cabeza. En caso de utilizar alguna distribución distinta, las secciones de instalación son básicamente las que cambian, los detalles de configuración son los mismos.
Hay muchos daemons de correo para linux, yo voy a utilizar postfix, me parece bastante seguro y sencillo de configurar y por ende de explicar.
Cabe mencionar que necesitan de paquetes como apache, php y mysql para poner a funcionar el cliente web. En este manual no les explicaré nada de cómo instalar ni php, ni mysql, ni apache, porque he creado otro manual exclusivo para eso. Asàque utilicen ese para esos detalles de instalación y configuración.También necesitan un servidor DNS para que su correo pueda realizar la tarea de recepción y envÃÂo de correos de manera adecuada, las especificaciones para la instalación y configuración también estarán en un manual aparte, ya que un servidor DNS es algo suficientemente robusto como para tratarlo como un tema aparte y además no quiero asfixiarlos si están haciendo todo esto por primera vez.
Introducción
Nuestro sistema de correos utilizará dominios y cuentas virtuales. Lo que significa que los usuarios no serán usuarios del sistema, sino usuarios almacenados en una base de datos, además se incluye SMTP autenticado, un servidor courier-Imap/pop3 que será el que se encargue del transporte de correos y el paquete Maildrop que nos brindará la posibilidad más adelante de poder controlar el spam y revisar la integridad de los datos que se envÃÂen en cada uno de los correos electrónicos.
También se utilizará PostfixAdmin para administración de postfix, asàcomo Squirrelmail como cliente Web del mismo, con lo que podrán dar a sus usuarios un servicio completo basado en sistemas webs y completamente mantenible.
En este manual no integraré el soporte SSL (que es el que se encarga de la seguridad), todos estos detalles serán tratados en manuales más adelante, cuando ya hayan personas encaminadas en esto del correo electrónico, además que podemos crear firmas digitales de máximo un año a menos que estén interesados en pagar alguna.
Supondré que ya tienen configurado correctamente sus servicios WEB, DNS y MySQL (yo mismo he creado manuales sobre instalación de estos servicios).
En sÃÂntesis podemos decir que este manual está creado para todas aquellas personas fanns de hacer algo diferente, algo nuevo, para personas interesadas en conocer cosas mucho más allá de un Next , Next ..., personas con sed de conocimiento y dispuestas a experimentar, tener paciencia e interés para aprender algo que los convertirá en algo más que usuarios comúnes de sistemas comúnes.
Bienvenidos a mi mundo:
Qué necesitamos?:
* Una máquina con acceso a internet (muy importante), no necesitamos la octava maravilla en pc y ya la podremos convertir en servidor :D, un pc con un procesador de 400 MHZ , 64 MB de memoria y poco disco duro (cualquier pc que tengan por ahàsin usar) y con eso nos bastarÃÂa. Asàque supongo que las computadoras de la mayorÃÂa son más que suficientes :P
* GNU-Linux Debian Testing(o cualquier distro debian based recomendablemente)
* Postfix, Postfix-mysql
* Apache, php, Mysql-server, Mysql-Client (ver el manual respectivo)
* Maildrop
* Courier-imap, Courier-pop3, courier-authdaemon
* PostfixAdmin
* Squirrelmail
Previo a la Instalación:
Antes de iniciar la instalación de paquetes, vamos a configurar nuestro sistema para que se conecte a un mirror de debian desde el cuál vamos a descargar e instalar los paquetes que necesitamos, para lo cuál utilizaremos apt. Hasta este punto, debe tener bien configurada su interfaz de red, este proceso se omitirá en este manual, en caso de necesitar ayuda con esto, puede contactarme o darse un googlazo en busca de un manual de configuración de red.
Con el editor de su agrado (recomiendo nano o vi que son de consola), edite el fichero /etc/apt/sources.list y agregue el enlace a un mirror de debian, de la siguiente manera:
CÓDIGO
vi /etc/apt/sources.list
CÓDIGO
deb http://ftp.us.debian.org/debian testing main contrig non-free
Si están utilizando el vi, para empezar a escribir basta con que presionen la tecla insert o la tecla Escape y posteriormente la i (minúscula). Para guardar los cambios basta con que presionen la tecla Escape y posteriormente las teclas w q (en ese orden y en minúscula también).
Una vez hecho esto, ejecutamos en consola:
CÓDIGO
apt-get update
Si todo está correctamente realizado, la salida deberÃÂa ser similar a la siguiente:
CÓDIGO
Des:1 http://ftp.us.debian.org testing/main Packages [3710kB]
Des:2 http://ftp.us.debian.org testing/main Release [81B]
Des:3 http://ftp.us.debian.org testing/contrib Packages [49.9kB]
Des:4 http://ftp.us.debian.org testing/contrib Release [84B]
Des:5 http://ftp.us.debian.org testing/non-free Packages [62.0kB]
Des:6 http://ftp.us.debian.org testing/non-free Release [85B]
Descargados 3822kB en 1m46s (35.9kB/s)
Leyendo lista de paquetes... Hecho
De no ser asày darles algún error, cerciorense de efectivamente tener internet funcionando y de haber realizado correctamente los pasos anteriores. De mantenerse el problema, los invito a comunicarlo abajo en la casilla de comentarios y con gusto trataré de ayudarles a solucionar cualquier inconveniente
Empecemos a instalar:
Vamos a hacer una instalación masiva de paquetes y luego los iremos configurando de uno en uno, les indico a qué servicio corresponde cada paquete:
Postfix con soporte para mysql:
CÓDIGO
apt-get install postfix postfix-mysql
SASL2:
CÓDIGO
apt-get install libsasl2 libsasl2-modules-sql libsasl2-modules
Courier(Servidor Imap/pop3)
CÓDIGO
apt-get install courier-imap courier-pop courier-authmysql
Pre-Requisitos para Maildrop
CÓDIGO
apt-get install libmysqlclient10-dev zlib1g-dev
Listos e instalados los paquetes (espero que no hayan tenido ningún inconveniente hasta este punto :roll: ) y con un par por delante que instalaremos de manera más manual :roll: :P , vamos a instalar el administrador del Correo Electrónico y la base de datos que utilizaremos para el correo.
PostfixAdmin:
Iniciaremos descargando el paquete PostfixAdmin .
Pueden simplemente dar clic sobre él y se descargará o bien descargarlo con wget(en caso de no tener instalado wget, basta con que digite apt-get install wget y el paquete será instalado):
CÓDIGO
wget http://tec.hackerss.com/packages/postfixadmin-2.1.0.tgz
Instalando PostfixAdmin:
Una vez descargado el paquete procederemos a descomprimirlo:
CÓDIGO
tar -xvzf postfixadmin-2.1.0.tgz
Se generará un nuevo directorio con el nombre postfixadmin-2.1.0, ingrese a él y edite el fichero DATABASE_MYSQL.TXT que es el script de la base de datos que utilizaremos para nuestro servidor de correo. Con el editor de su preferencia, cambie los datos como contraseña y el nombre de la base de datos al gusto(yo utilizaré vi):
CÓDIGO
cd postfixadmin-2.1.0
vi DATABASE_MYSQL.TXT
vi DATABASE_MYSQL.TXT
Una vez hecho esto vamos a ejecutar el script y con ello se crearán los usuarios de la base de datos que necesitamos, asàcomo la base de datos, lo haremos de la siguiente manera:
CÓDIGO
mysql -u root -p < DATABASE_MYSQL.TXT
Nota: la salida luego de ejecutar ese script no debe reportar ningún error, en caso de haber alguno mysql le reportará en qué lÃÂnea se encuentra(esto puede suceder si usted edita mal el fichero en el paso anterior).
Puede verificar que la base de datos se haya creado correctamente utilizando el paquete phpmyadmin, cuya instalación es tan sencilla como ejecutar el comando: apt-get install phpmyadmin e ingresando a su navegador digitando la dirección http://localhost/phpmyadmin/ . Allàdebe digitar el nombre de usuario y contraseña asignados durante la instalación de MySQL. Y se debieron crear tanto la base de datos como las tablas como se muestra en la imagen siguiente:

Una vez lista nuestra base de datos, vamos a terminar de instalar y publicar el sitio de administración de correo(postfixadmin) en el directorio que utiliza apache para esto, usualmente /var/www/ (a menos que usted lo haya cambiado en la configuración):
CÓDIGO
mv postfixadmin-2.1.0 admin_correo
cp -r admin_correo /var/www/
cd /var/www/admin_correo/
mv config.inc.php.sample config.inc.php
cp -r admin_correo /var/www/
cd /var/www/admin_correo/
mv config.inc.php.sample config.inc.php
Configurando PostfixAdmin:
En la última lÃÂnea estamos renombrando el archivo de configuración del PostfixAdmin, este archivo debemos editarlo para configurarle algunas cosas, tales como nuestro dominio, tipo de encriptación de las contraseñas, si queremos o no incluir el dominio en el nombre de los mailboxes y etc. Primero vamos a cambiar el dominio que trae el archivo por defecto por el nuestro (repito que en este punto, el Servidor DNS tiene que estar correctamente instalado), para ello ejecutaremos el comando replace con los siguientes parámetros:
CÓDIGO
replace "change-this-to-your.domain.tld" "sudominio.com" -- config.inc.php
* Nótese que debe colocar su nombre de dominio en en lugar de “sudominio.com�
Hecho esto edite el fichero config.inc.php para hacer los cambios que nos quedan pendientes:
CÓDIGO
vi config.inc.php
En las variables que pongo a continuación debe sustituir el nombre de usuario, el password y el nombre de la base de datos, por los que usted puso al editar el archivo DATABASE_MYSQL.TXT, unos cuántos pasos atrás. En caso de no haberlo modificado (lo que no recomiendo si se pretende prestar un servicio serio de correo) los datos se pueden quedar tal y como están:
CITA
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin'; //ponga la contraseña seleccionada
$CONF['database_name'] = 'postfix'; //el nombre de su base de datos
$CONF['database_prefix'] = '';
Cerciorese de que el valor encrypt sea md5 para que su correo administre password encriptados y no texto plano:
CITA
$CONF['encrypt'] = 'md5crypt';
Habilite la opción de generar passwords automáticos, ya que con ello podrá generar passwords aleatorios en caso de asàdesearlo (no es una mala opción):
CITA
$CONF['generate_password'] = 'YES';
Con esto se utilizará un directorio con el nombre del dominio en el que se encontrarán todos los buzones de correo asociados a ese dominio. En caso de tener más de un dominio virtual podrán ser referenciados sus buzones de manera más sencilla en caso de necesitarlo.
CITA
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['domain_in_mailbox'] = 'NO';
Con las siguientes le dirá al administrador de correo, que los dominios que cree soportarán infinita cantidad de aliases(son los mismos forwards), infinita cantidad de buzones de correo y que cada buzón tendrá la capacidad máxima de soportar 10 megas de almacenamiento, en caso de querer dejar ilimitado el tamaño de los buzones, cambie ese 10 por un 0 (ilimitado)
CITA
$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '10';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '10';
Lo siguiente le permitirá a Maildrop encargarse de la administración de quotas
CITA
$CONF['quota'] = 'YES';
La siguiente variable la dejaremos en NO por ahora, más adelante en los manuales de control de spam y antivirus, cambiaremos el transporte, entonces le daremos soporte a PostfixAdmin de escoger nosotros el transporte que deseemos, por ahora lo dejaremos asà(por lo que el tipo de transporte a utilizar será el tranporte virtual). Si quiere profundizar más sobre todos estos conceptos y los tipos de transporte extras con los que cuenta postfix, puede mirar el manual de postfix y transport disponible a partir del momento en que instalamos los paquetes.
CÓDIGO
man postfix
man virtual
man virtual
CITA
$CONF['transport'] = 'NO';
Acá sólo resta agregar un alias en el apache, para lo cuál editamos el fichero /etc/apache/httpd.conf y agregamos un alias hacia /var/www/admin_correo (no olvide reiniciar el apache luego de editar el fichero):
CÓDIGO
Alias /admin_correo/ /var/www/admin_correo
Nota: Cualquier duda sobre los aliases en apache, puede ser consultada en el manual respectivo.
Para ingresar al adminitrador de correo, digite en su navegador http://localhost/admin_correo/admin/ y verá algo como esto:

Postfix
Vaya, dense un break por si están cansados(as) o algo que las cosas entran mejor con la mente fresca :P. Eso por si necesitan un break, yo hasta acá lo necesité, ya estaba cansado de escribir :(
En fin, vamos preparando la cama xDD, algo asÃÂ, necesitamos hacer algunas cosas para que postfix funcione, asàque empecemos no?
Pre-configuración:
Necesitamos un usuario y un grupo para que postfix pueda hacer el envÃÂo de correos. PodrÃÂamos utilizar los usuarios que el mismo postfix creó durante la instalación de paquetes, que se llaman precisamente postfix , pero como utilizaremos maildrop como agente de envÃÂo y él no puede utilizar el user postfix, vamos a crearnos otro nosotros mismos. Como en la mayorÃÂa de manuales, podemos ponerle a este usuario mail, vmail, correo, pcorreo, infinidad de nombres, en realidad esto es indiferente. Yo como ya me acostumbré al nombrecito, voy a ponerle vmail:
CÓDIGO
groupadd vmail -g 1005
useradd vmail -u 1005 -g 1005
El identificador que le he puesto , en realidad lo elejàpor ponerle alguno. Si usted administra muchos users en su sistema, puede que ese identificador ya no lo tenga disponible, o puede que sÃÂ, en realidad es indiferente el número de identificador que elija, pero no lo olvide porque lo necesitaremos más adelante para la configuración de postfix y de maildrop.
Ahora vamos a crear un directorio en el cuál se almacenarán los correos y las cuentas de correo, es importante mencionar que para que maildrop pueda depositar los correos en ese directorio necesitamos que vmail(que es el usuario que utilizará maildrop para hacer sus maldades) sea propietario del mismo, asàque creamos el directorio y le asignamos los permisos:
CÓDIGO
mkdir /home/correos
chown -R vmail:vmail /home/correos
chmod -R 755 /home/correos
Nota:La ruta en la que cree el directorio es de su elección , sólo como le mencioné anteriormente, no la olvide porque la necesitaremos más adelante.
Configurando Postfix:
Y bueno, ahora sÃÂ, vamos a lo mero mero xDD, bueno, el archivo de configuración de postfix se llama main.cf y se encuentra localizado en la ruta /etc/postfix/. Además de ese fichero, vamos a crear nosotros algunos otros, yo les voy a poner el contenido de cada archivo y el nombre que deben llevar. Con ello le estaremos dando a postfix soporte para cuentas y dominios virtuales utilizando MySQL. Voy a ir documentando internamente los scripts, asàque cada vez que encuentren '#' será el inicio de mi explicación para ustedes, puede que algunas cosas no se las documente, porque no me parezcan importantes o porque quizá no encontré cómo explicarlo :P :
main.cf
CITA
#Este es como el saludo que dará nuestro correo cuando los usuarios se conecten(si te conectas por telnet a tu correo lo tendrás visible, cuando se haga con el cliente web como es obvio, nosotros no lo veremos)
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU/Mi-Servidor-de-Correo-con-Ayuda-de-Diego)
biff = no
# Acá indicamos si vamos a asignar la tarea al agente de transporte la tarea de proporcionar un dominio
append_dot_mydomain = no
# Esta lÃÂnea se descomenta sólo si queremos que los envÃÂos no éxitosos provoquen una alerta warning(dejemoslo asÃÂ)
#delay_warning_time = 4h
#el nombre del servidor de correo en el DNS (recuerde sustituirlo por su nombre)
myhostname = correo.sudominio.com
myorigin = /etc/mailname
#cuando un correo ingresa a nuestro servidor, tiene posibles destinos locales, acá se definen cuáles serÃÂan esos destinos. Si creamos los dominios virtuales él detectará esos otros también, al leer el archivo llamado virtual_mailbox_domains.cf utilizado más adelante.
mydestination = correo.sudominio.com, localhost.sudominio.com, localhost sudominio.com
relayhost =
#acá van las redes a las que el servidor de correo puede brindarle servicio. Si va a utilizar un cliente web para dar servicio de correo, no tiene mucho que preocuparse por esto(basta con que agregue la red del localhost), ya que cuando alguien se conecta vÃÂa web, en realidad no está haciendo ninguna solicitud de acceso a correo, sólo acceso web, la solicitud en ese caso la harÃÂa el servidor web, con que éste se encuentre dentro de las redes que estamos permitiendo basta. En caso de necesitar agregar más de una red, separela por comas, como hago yo a continuación
mynetworks = 127.0.0.0/8, 192.168.5.0/24, 192.168.0.0/24
#acá llama al archivo que le dirá quiénes son los dominios virtuales existentes en la base de datos
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
# Acá le indicamos a postfix en qué parte de nuestro disco duro serán almacenados los correos
virtual_mailbox_base = /home/correos
# Acá le decimos a postfix en qué ruta están ubicados los casilleros de los usuarios(esto es producto de una consulta a mysql, cuando veamos el archivo mysql_virtual_mailbox_maps.cf lo podrán apreciar
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
#acá indicamos cuál será el tranporte que utilizaremos por defecto, por ahora, dejemoslo en virtual, más adelante(en otro manual) lo modificaremos a tipo maildrop o bien lo indicamos en la base de datos por medio de Postfixadmin(por ahora éste sólo se encargará de la administración de quotas), este será utilizado para el transporte local
virtual_transport = virtual
# Acá le indicamos a postfix si hay otros transportes que utilizar(en caso de no haber ninguno, utiliza el que le hemos puesto por defecto(virtual)
transport_maps = mysql:/etc/postfix/mysql_virtual_transport_maps.cf
# Recuerdan el identificador que le tuvimos que dar al directorio donde almacenaremos los correos que yo dije que podÃÂa ser cualquiera pero que lo recordaran?, pues bueno, este es, podemos ponerlos estáticos(o sea, que no cambien nunca) o bien podemos tomarlos de la base de datos(yo lo tomaré de la bd). Dejarlo en la db es útil porque asàindependizamos a Postfix de este permiso el cuál es útil si quisieramos cambiar la ubicación de los datos(donde se almacenan los correos)
# virtual_uid_maps = static:1004
# virtual_gid_maps = static:1004
#como les mencioné antes, acá se indica a postfix que tome los identificadores del directorio y grupo vmail de la base de datos
virtual_minimum_uid = 100
virtual_uid_maps = mysql:/etc/postfix/mysql_virtual_uid.cf
virtual_gid_maps = mysql:/etc/postfix/mysql_virtual_gid.cf
#acá se indica a postfix la lista de forwards que hay(utilizado cuando queremos que los correos nos lleguen a algún otro)
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
# le indicamos cuáles dominios están habilitados para envÃÂar/recibir correos, de esta manera si no pueden ser envÃÂados en algún momento, postfix los encola hasta que se puede llevar a cabo la transacción
relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf
relocated_maps = mysql:/etc/postfix/mysql_virtual_relocated_maps.cf
#utilizamos smtp autenticado gracias a sasl, permitimos utilización de las redes que habilitamos antes y de quiénes se autentiquen, lo demás lo rechazamos
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
# le indicamos que habilite sasl
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
# Permitir que clientes como Outlook Express, Kmail, mozilla thunderbird puedan conectarse a utilizar nuestro correo
broken_sasl_auth_clients = yes
#le indicamos que utilice maildrop para el transporte de dominios virtuales
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1
Como han podido observar, se llama a varios archivos *.cf, estos archivos son los que se encargarán de conectarnos con mysql y hasta ahora no existen, vamos a crearlos va?
mysql_relay_domains_maps.cf
CITA
#usuario de la base de datos
user = postfix
#contraseña de la base de datos(recuerde poner la contraseña y usuario que puso al instalar postfixadmin cuando edito el archivo con el script de la base de datos)
password = postfix
#acá ponemos el ip del servidor mysql, en mi caso lo tengo en el mismo servidor de correo, asàque he utilizado su ip, asàhacemos la configuración por tcpip para evitar uno de los tantos problemas de enjaulamiento que les explicaré cómo resolver más adelante
hosts = 127.0.0.1
#acá va el nombre que le puso a la base de datos del correo
dbname = postfix
#lo que viene de acá en adelante es la consulta que le permitirá a mysql responderle a postfix por lo que le está pidiendo, en este caso los relay domains
table = domain
select_field = domain
where_field = domain
additional_conditions = and active = 1 and backupmx = '1'
Colocaré el resto de archivos y no los documentaré internamente ya que todos siguen el mismo esquema del archivo anterior, no olviden cambiar los datos de la base de datos tales como user y password por los respectivos.
mysql_virtual_alias_maps.cf
CITA
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = alias a, domain d
select_field = a.goto
where_field = a.address
additional_conditions = and d.active = 1 and d.backupmx = 0 and d.domain = a.domain and a.active = 1
mysql_virtual_domains_maps.cf
CITA
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = 0 and active = 1
mysql_virtual_gid.cf
CITA
user = postfix
password = postfix
dbname = postfix
table = mailbox
select_field = gidnumber
where_field = username
additional_conditions = and active = 1
hosts = 127.0.0.1
mysql_virtual_mailbox_maps.cf
CITA
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = mailbox m, domain d
select_field = m.maildir
where_field = m.username
additional_conditions = and d.active = 1 and d.backupmx = 0 and d.domain = m.domain and m.active = 1
mysql_virtual_relocated_maps.cf
CITA
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = relocated
select_field = destination
where_field = email
mysql_virtual_transport_maps.cf
CITA
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = transport
where_field = domain
additional_conditions = and backupmx = 0 and active = 1
mysql_virtual_uid.cf
CITA
user = postfix
password = postfix
dbname = postfix
table = mailbox
select_field = uidnumber
where_field = username
additional_conditions = and active = 1
hosts = 127.0.0.1
Hecho esto, necesitamos darle permiso a postfix de poder utilizar estos archivos, por lo que ejecutamos lo siguiente:
CÓDIGO
chown root:postfix /etc/postfix/mysql_*
Editamos el archivo /etc/aliases y agregamos al final del mismo las siguientes lÃÂneas:
CÓDIGO
vmail: root
postfix: root
Luego de editar ese archivo debemos ejecutar el comando newaliases
CÓDIGO
newaliases
En este punto, nos quedan aún pendientes dos cosas en postfix: la creación del archivo smtpd que utilizará sasl para realizar la autenticación y sacar a postfix de la jaula.
Configurando SMTP-SASL
Primero pues lo primero, para poder llevar a cabo la autenticación por medio de sasl necesitamos crear en la base de datos una tabla más con el siguiente nombre y estructura(para ver detalles sobre cómo crear bases de datos y usuarios vea el manual respectivo):
CÓDIGO
CREATE TABLE saslauth (
id int(255) NOT NULL auto_increment,
domain varchar(50) NOT NULL default '',
username varchar(50) NOT NULL default '',
password varchar(255) NOT NULL default '',
PRIMARY KEY (id),
KEY id (id)
) TYPE=MyISAM COMMENT='SASL Auth - Users';
El usuario serÃÂa smtpauth(o el que usted guste siempre y cuando lo recuerde), deberá asignarle una contraseña y darle permisos de consulta sobre la tabla saslauth.
Ahora debemos crear un archivo llamado smtpd en la ruta /etc/postfix/sasl , de la siguiente manera:
CÓDIGO
vi /etc/postfix/sasl/smtpd
Dentro de él podremos lo siguiente:
/etc/postfix/smtpd
CITA
#le decimos que utilice a mysql para la autenticación
pwcheck_method: auxprop
auxprop_plugin: sql
#le decimos que tenga soporte para texto plano y md5
mech_list: plain login cram-md5 digest-md5
sql_engine: mysql
#ip de la base de datos
sql_hostnames: 127.0.0.1
#usuario(y contraseña) de la base de datos que tiene privilegios en la tabla saslauth creados anteriormente
sql_user: smtpauth
sql_passwd: smtpauth
#nombre de la base de datos del correo
sql_database: postfix
sql_select: select password from saslauth where username='%u' and domain='%r'
Sacando a Postfix de la Jaula
Bueno, pues resulta que postfix puede trabajar enjaulado y no enjaulado, esto significa que no puede ver más allá de su propio directorio home que es /var/spool/postfix, esto es bueno, porque si alguien penetra por medio de nuestro servidor de correo, en buena teorÃÂa no podrÃÂa hacer daño más allá que del servidor de correo mismo. Pero resulta y sucede que para poder utilizar MySQL que no está en /var/spool/postfix sino en /var/run/mysql postfix de alguna manera necesita salir de esa jaula. Muchos optan por modificar la configuración de postfix y decirle que no se ejecute con enjaulamiento(chrooteado utilizando los términos anglos), pero nosotros no lo haremos asÃÂ, asàque la solución será otra.
Primero que nada, verifiquemos que el fichero /etc/postfix/master.cf le esté diciendo a postfix que funcione enjaulado, para ello la opción smtp debe encontrarse igual a la siguiente:
CITA
smtp inet n - - - - smtpd
Nota:Si en lugar de algunos de los guiones del medio huviese alguna n reemplacela por un guión(teniendo la n le estarÃÂamos diciendo que no se ejecute enjaulado)
Bueno, pues ahora que le dijimos que se ejecute enjaulado tenemos que solucionar el problema de que no se pueda comunicar con mysql no?, para lo cual crearemos un enlace “duro� para que postfix pueda realizar una conexión con MySQL, esto lo lograremos de la siguiente manera:
CÓDIGO
ln -f /var/run/mysqld/mysqld.sock /var/spool/postfix/mysqld.sock
Pero debemos asegurarnos que cada vez que se reinicie MySQL este enlace sea hecho nuevamente(en caso de no existir), para evitar futuros problemas de comunicación, para lo cual modificaremos el script /etc/init.d/mysql, buscaremos la sección que dice: “# Start daemon� y modificaremos su contenido para que quede de la siguiente manera:
CÓDIGO
vi /etc/init.d/mysql
CÓDIGO
# Start daemon
echo -n "Starting MySQL database server: mysqld"
if mysqld_status check_alive nowarn; then
echo "...already running."
else
/usr/bin/mysqld_safe > /dev/null 2>&1 &
for i in 1 2 3 4 5 6; do
sleep 1
if mysqld_status check_alive nowarn; then break; fi
done
if mysqld_status check_alive warn; then
echo "."
#>>>>>[AQUI SE AGREGA EL ENLACE DURO]<<<<<<
ln -f /var/run/mysqld/mysqld.sock /var/spool/postfix/mysqld.sock
# Now start mysqlcheck or whatever the admin wants.
/etc/mysql/debian-start
else
echo "...failed."
/bin/echo -e "tPlease take a look at the syslog."
fi
fi
Hecho esto, reiniciaremos postfix y mysql:
CÓDIGO
/etc/init.d/postfix restart
CÓDIGO
/etc/init.d/mysql restart
Revise los logs para comprobar que no hay ningún problema hasta este paso, con el siguiente comando podrá explorar los sucesos reportados al sistema (en caso de no tener el tail instalado simplemente ejecute el comando apt-get install tail)
CÓDIGO
tail -f /var/log/syslog
Courier Imap/pop3
Bueno, sino están cansados hasta este punto, es porque definitivamente a los manuales es más cansado hacerlos que seguirlos :P , yo me doy un descansito y usted deberÃÂa darse otro xD, bueno, proseguimos.
Acá necesitamos decirle a courier que utilice a mysql para la autenticación de usuarios.
Para ello editaremos el fichero /etc/courier/autdaemonrc buscamos la variable con el nombre authmodulelist y le decimos que utilice mysql:
CÓDIGO
authmodulelist=�authmysql�
Necesitamos crear un usuario para courier en la base de datos que tenga permisos de consulta en la tabla mailbox (utilice phpmyadmin)
Posteriormente editamos el archivo que utilizará courier para poder conectarse a MySQL:
CÓDIGO
vi /etc/courier/authmysqlrc
Asegúrese de que los valores de cada entrada sean equivalentes a los siguientes:
/etc/courier/authmysqlrc
CITA
MYSQL_SERVER localhost
#usuario y contraseña que le puso usted al usuario para courier que acaba de crear
MYSQL_USERNAME courier
MYSQL_PASSWORD courier
MYSQL_PORT 0
MYSQL_OPT 0
#nombre de la base de datos del correo
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uidnumber
MYSQL_GID_FIELD gidnumber
MYSQL_LOGIN_FIELD username
#directorio en el cuál se almacenarán los correos
MYSQL_HOME_FIELD "/home/correos"
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_WHERE_CLAUSE access=1
Ahora edite el fichero /etc/courier/imapd y busque la entrada MAXPERIP y póngale algún valor alto, dependiendo de la utilización que le vaya a dar a su servidor de correo, yo lo tengo en 200 conexiónes por ip, recuerden que al utilizar un cliente web quién hará las conexiones con el server de correo no será el usuario, sino el servidor de correo, por esto es que esta variable es tan importante.
Podemos dar por completada la configuración de courier, ahora reinicie los demonios:
CÓDIGO
/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-authdaemon restart
Maildrop:
Bueno, este es otro de los paquetes que nos habÃÂan quedado pendientes de instalar. Puede descargar Maildrop pulsando clic sobre el enlace o utilizando wget
CÓDIGO
wget http://tec.hackerss.com/packages/maildrop-1.6.3.tar.bz2
Descomprimalo e ingrese al directorio que se generará para poder proceder a compilarlo y posteriormente instalarlo.
CÓDIGO
tar -xvjf maildrop-1.6.3.tar.bz2
cd maildrop-1.6.3
Compilando e instalando Maildrop:
Antes de proceder a compilarlo, recuerde que habÃÂan una serie de paquetes que habÃÂa que instalar antes de compilar maildrop, se señalan como pre-requisitos en la sección de instalaciones al inicio de este manual. Una vez hecho esto podemos iniciar a compilar maildrop con soporte para mysql y administración de quotas:
CÓDIGO
./configure --enable-syslog=1 --enable-maildropmysql --with-mysqlconfig=/etc/maildropmysql.config --without-db --enable-maildirquota
make
make install-strip
make install-man
make
make install-strip
make install-man
Ahora editaremos el fichero /etc/postfix/master.cf y agregaremos la siguiente lÃÂnea que habilita a maildrop la utilización de quotas, la prevención a los usuarios en caso de excederla en un 75% y que se ejecute en modo delivery(que sea nuestro agente de envÃÂo de correos(MUA)):
CÓDIGO
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -V 10 -w 75 -d ${recipient}
Configurando Maildrop:
Necesitamos crear otro usuario más en la base de datos, esta vez para que lo utilice maildrop, pueden ponerle el nombre y contraseña que gusten, sólo no lo olviden para que lo utilicen en el archivo de configuración que pondremos a continuación(ese usuario tiene que tener permisos de consulta sobre la tabla mailbox de la base de datos del correo)
Una vez hecho esto, crearemos un archivo llamado maildropmysql.config en la ruta /etc/ con el siguiente contenido:
/etc/maildropmysql.config
CITA
hostname localhost
port 3306
#nombre de la base de datos del correo
database postfix
#nombre de usuario y contraseña del usuario que les dije que crearan para maildrop en la base de datos
dbuser maildrop
dbpw maildrop
dbtable mailbox
uid_field username
#acá va el identificador que utilizaron al crear el usuario y grupo vmail(o el nombre que le hayan puesto)
uid_numberfield '1005'
gidnumber_field '1005'
#Ruta donde se almacenarán los correos
homedirectory_field concat('/home/correos/',maildir)
maildir_field maildir
quota_field concat(quota, 'S')
mailstatus_field active
Anteriomente les mencioné que al llegar al 75% del uso del buzón, maildrop le enviará una advertencia a los usuarios del correo electrónico. Vamos a crear el archivo que contiene la información que enviará maildrop a sus usuarios. Se llamará quotawarnmsg y estará ubicado en la ruta /usr/local/etc, primeramente crearemos el directorio etc en la ruta /usr/local/ y posteriormente creamos el archivo:
CÓDIGO
mkdir /usr/local/etc
vi /usr/local/etc/quotawarnmsg
El archivo contendrá lo siguiente(puede adaptar el contenido a su gusto):
/usr/local/etc/quotawarnmsg
CITA
#Reemplace sudominio.com por su propio dominio
From: postmaster@sudominio.com
Reply-To: postmaster@sudominio
To: User: user;
Subject: Mensaje de Aviso de Espacio - Uso de la cuenta superior al 75%
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit
Estimado Usuario,
Su casillero en el servidor sobrepasa el 75% de su capacidad.
Para continuar recibiendo correos, necesita eliminar algunos mensajes de su casillero. Le recomendamos que:
*Descargue los mensajes antiguos que quiera conservar a sus archivos locales
*VacÃÂe el directorio de correos spam
Por favor, tenga que en cuenta que si su cuenta no tiene el espacio suficiente para recibir un mensaje, éste será regresado a la persona que lo envÃÂe y no llegará a su casillero.
Le saluda muy cordialmente,
El Administrador del Sistema
postmaster@sudominio.com
En el fichero maildroprc definimos las polÃÂticas de spam tanto globales como la ubicación de los ficheros para control de spam por usuario. En este manual no profundizaremos sobre esos temas, los trataré en un manual aparte exclusivo para eso, ya que la instalación básica del servidor es bastante pesada por si sola(lo pueden comprobar los que sigan paso a paso este manual) máxime si se está instalando un servidor de correo por primera vez. Por ello simplemente crearemos el fichero con el siguiente contenido el cuál no explicaré(pero el Maildrop lo necesita para poder trabajar)
CÓDIGO
vi /etc/maildroprc
El contenido será el siguiente:
CITA
# Global maildrop filter file
# Uncomment this line to make maildrop default to ~/Maildir for
# delivery- this is where courier-imap (amongst others) will look.
#DEFAULT="$HOME/Maildir"
# turn logging on
logfile "/var/log/maildrop.log"
# default delivery
MAILDIR=$HOME/Maildir/
# spam to spam folder
# if (/.*X-Spam-Flag: YES/:h)
# {
# to "$MAILDIR/.Spam/"
# }
# import per-user filter rules
include $HOME/.mailfilter
# Uncomment this line to make maildrop default to ~/Maildir for
# delivery- this is where courier-imap (amongst others) will look.
#DEFAULT="$HOME/Maildir"
# turn logging on
logfile "/var/log/maildrop.log"
# default delivery
MAILDIR=$HOME/Maildir/
# spam to spam folder
# if (/.*X-Spam-Flag: YES/:h)
# {
# to "$MAILDIR/.Spam/"
# }
# import per-user filter rules
include $HOME/.mailfilter
Nos resta modificar el fichero /etc/courier/imapd y hacer que Maildrop nos brinde soporte para control de quotas, esto lo haremos localizando la entrada IMAP_CAPABILITY=
y poniendole los siguientes parámetros:
CÓDIGO
IMAP_CAPABILITY="IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT AUTH=CRAM-MD5 AUTH=CRAM-SHA1 QUOTA"
Cambiamos los permisos de los ficheros que hemos creado:
CÓDIGO
chown root:vmail /etc/maildropmysql.config
chown root:vmail /etc/maildroprc
chown root:vmail /usr/local/etc/quotawarnmsg
Reinicie postfix y courier-*
CÓDIGO
/etc/init.d/postfix restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-authdaemon restart
Hasta este punto contamos con un maildrop capaz de funcionar como Agente de Transporte. Si quieren dejar el servidor de correo listo para implementar las polÃÂticas de filtrado de correo y que sea capaz de controlar las quotas de los buzones, entonces en la base de datos en la tabla domain y el atributo transport cambie el tipo de transporte a maildrop o bien(si no está interesado) conserve el transporte virtual que es el que nos proporciona Postfix y ya tendrá un servidor de correo bastante funcional.
Como en este instante aún no contamos con un cliente de correo web, puede probar su servidor de correo utilizando algún cliente gráfico de correo(tal como kmail) o bien con telnet(lo que está en negrita es lo que he digitado yo, lo demás lo responde el servidor):
CITA
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
220 correo.sudominio.com ESMTP Postfix (Debian/GNU)
ehlo localhost
250-correo.sudomio.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH CRAM-MD5 DIGEST-MD5 LOGIN PLAIN
250-AUTH=CRAM-MD5 DIGEST-MD5 LOGIN PLAIN
250 8BITMIME
mail from: tec@sudominio.com
250 Ok
rcpt to: tec2@sudominio.com
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
Subject: tema
mensaje que estoy escribiendo para que puedan probar su servidor de correo con postfix
.
250 Ok: queued as 28AD4715D
Si la salida al enviar un correo es similar a la anterior, su servidor de correo está funcionando correctamente. Por lo que podemos proceder a instalar el webmail.
Instalando Squirrelmail
Para instalar squirrelmail basta con digitar:
CÓDIGO
apt-get install squirrelmail
Ya instalado agregaremos un alias en el apache, para que pueda ser accesado vÃÂa web:
CÓDIGO
Alias /correo/ /usr/share/squirrelmail
Nota: Recuerde reiniciar apache
Configurando Squirrelmail
Para configurarlo digitamos el comando(a modo de root):
CÓDIGO
squirrelmail-configure
Nos desplegará lo siguiente:

Para configurarlo digitamos el número 2 y presionamos Enter, lo que nos envÃÂa a una ventana como la que podré a continuación, para editar cada uno de los datos, digite el número o letra correspondiente, los datos deberÃÂan quedarle similares a los que se muestran en el screenshot:

Asegúse de guardar los cambios(presionando la letra S y Enter) y regrese a la pantalla principal(presionando la tecla R + Enter) y elija ahora la tercer opción(presionando 3 + Enter, la configuración ahàdeberÃÂa quedarle semejante a ésta(no omita el . en la primer opción):

Puede utilizar el test de squirrelmail para comprobar que esté configurado correctamente, digitando en su navegador: http://localhost/correo/src/configtest.php y se le deberÃÂa desplegar algo similar a esto:

Finalizada la configuración de squirrelmail podemos agregar buzones de correo(utilizando el postfixadmin) ir a nuestro navegador y digitar la url: http://localhost/correo/ iniciar sesión y poder acceder a su buzón de correo sin ningún inconveniente.
Cualquier problema, comentario o sugerencia sientase libre de colocarla en la casilla de los comentarios.
Pendientes:
* Habilitar Vacaciones
* Control de Spam
* Antivirus
Estos puntos los estaremos profundizando en manuales futuros.
Este manual es de libre distribución, puede utilizarlo, reproducirlo y distribuirlo a su antojo siempre y cuando respete los créditos del autor y haga públicas sus mejoras.

