Help - Search - Members - Calendar
Full Version: Instalación de un Servidor de Correo (Postfix)
Hackerss.com > Informática > Sistemas Operativos > GNU/Linux - UNIX > Articulos de UNIX
TEC-DIEGO
Instalación de un Servidor de Correo en Debian


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

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:
Imagen IPB

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


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';

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';

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

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:
Imagen IPB

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


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

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

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:
Imagen IPB
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:
Imagen IPB
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):
Imagen IPB

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:
Imagen IPB
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.

El conocimiento es patrimonio del mundo
By TEC-DIEGO para Hackerss.com
Bajo Licencia GNU/GPL
Imagen IPB
viaris
Hola a Todos,

El articulo es perfecto, pero mi situacion es la siguiente:

Actualmente tengo todos mis usuarios como usuarios reales y no virtuales, quiero pasarlos a usuarios virtuales, por tal razon mi consulta es: como exporto estos usuarios que estan /etc/passwd y /etc/shadow a las base de datos sin tenes traumas en el password, los password que se estan usando con MD% y shadow.

Gracias.
Alejandra
Hola soy nueva por acá... y estoy instalando mi servidor de correo Postfix,CourierPOP3,CourierImap con usuarios virtuales via Mysql... pero me sale este error, ya llevo como 3 dias con el y he repetido he repetido las configuraciones :

authdaemond.mysql: failed to connect to mysql server (server=127.0.0.1 , userid=postfix)

No se ya he revisado todas las posibles fallas de configuracion, pero no tengo idea... podria ser la version de Courier con Mysql 5.0.24a

:S
winsmurf
Revisa que funciona bien lo de los usuarios y revisa que el demonio este andando
saludos
Alejandra
Pues nada... mira lo q me sale en el log...

ubuntu authdaemond.mysql: failed to connect to mysql server (server=localhost, userid=courier)
Dec 1 20:12:49 ubuntu postfix/smtpd[10157]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory
Dec 1 20:12:49 ubuntu last message repeated 3 times
Dec 1 20:12:49 ubuntu postfix/smtpd[10157]: warning: SASL authentication failure: Password verification failed
Dec 1 20:12:49 ubuntu postfix/smtpd[10157]: warning: localhost[127.0.0.1]: SASL PLAIN authentication failed
Dec 1 20:12:51 ubuntu postfix/smtpd[10157]: disconnect from localhost[127.0.0.1]
Dec 1 20:12:52 ubuntu courierpop3login: LOGIN FAILED, ip=[::ffff:127.0.0.1]
Dec 1 20:13:15 ubuntu courierpop3login: LOGOUT, ip=[::ffff:127.0.0.1]

Pero lo curioso es que hago el telnet de prueba que muestran en el tutorial y si lo envia... Sera cuestion de diferencias en la manera de autentificar los usuarios :S

ayuda, pleaes
Dinosaurio
CITA(Alejandra @ Dec 1 2006, 09:37 PM) *
Pues nada... mira lo q me sale en el log...

ubuntu authdaemond.mysql: failed to connect to mysql server (server=localhost, userid=courier)
Dec 1 20:12:49 ubuntu postfix/smtpd[10157]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory
Dec 1 20:12:49 ubuntu last message repeated 3 times
Dec 1 20:12:49 ubuntu postfix/smtpd[10157]: warning: SASL authentication failure: Password verification failed
Dec 1 20:12:49 ubuntu postfix/smtpd[10157]: warning: localhost[127.0.0.1]: SASL PLAIN authentication failed
Dec 1 20:12:51 ubuntu postfix/smtpd[10157]: disconnect from localhost[127.0.0.1]
Dec 1 20:12:52 ubuntu courierpop3login: LOGIN FAILED, ip=[::ffff:127.0.0.1]
Dec 1 20:13:15 ubuntu courierpop3login: LOGOUT, ip=[::ffff:127.0.0.1]

Pero lo curioso es que hago el telnet de prueba que muestran en el tutorial y si lo envia... Sera cuestion de diferencias en la manera de autentificar los usuarios :S

ayuda, pleaes




H0l@,



Tienes problemas de autenticacion con la BD de Datos y por ende con los servicios de correo, por eso no te cargan. O contra que estas autenticando tus usuarios?





Dino

winsmurf
CITA
Berkeley db /etc/sasldb2: No such file or directory


Como que no tienes instalado eso
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.