Servidor de Correo Postfix con Courier y soporte Mysql

julio 27, 2007 at 12:31 pm (linux, Servidores)

Postfix es un MTA OpenSource para sistemas *nix.

El hecho de elegir postfix es porque segun mis experiencias lo veo algo mas sencillo de configurar que sendmail , Todo depende la utilidad que se le quiera dar claro està, en versiones posteriores de MacOSX es el MTA por defecto.

En este articulo presentaremos la Instalación y configuración de Postfix, Courier y MySQL para operar juntos y conseguir un completo servidor de correo (SMTP e IMAP) con usuarios “virtuales” en una Base de Datos.

Instalando Postfix

# apt-get install postfix

Instalando el soporte Mysql para postfix

# apt-get install postfix-mysql

Modificando /etc/postfix/main.cf

con vuestro editor de textos favorito tiene de quedar algo asi

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
myhostname = host.domain.com
mydomain = domain.com
myorigin = $myhostname
mydestination =
domain.com, localhost, host.domain.com

home_mailbox = Maildir/
mail_spool_directory = /var/spool/mail/
relay_domains = $mydestination
mynetworks = 192.168.1.0/24
smtpd_banner = $myhostname ESMTP $mail_name
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
debug_peer_level = 2
debugger_command = PATH=/usr/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

virtual_mailbox_base=/

virtual_uid_maps=mysql:/etc/postfix/ids.cf
virtual_gid_maps=mysql:/etc/postfix/gids.cf

virtual_mailbox_maps=mysql:/etc/postfix/mysql_virt.cf local_transport = virtual
program_directory = /usr/lib/postfix

#END

_______________________________________________________________

Donde logicamente domain.com sera vuestro dominio.

host.domain.com sera el nombre de vuestro host seguido de “.” dominio FQDN

mynetworks = 192.168.1.0/24 Aqui debeis cambiar por los parametros de vuestra red

smtpd_banner = $myhostname ESMTP $mail_name Podeis cambiarlo por motivos de seguridad para que no muestre versiones

Archivo /etc/postfix/mysql_virt.cf

#Usuario y password para acceder al servidor MySQL
user=postfix
password=postfix
#Nombre de la Base de Datos y la tabla
dbname=mail
table=passwd
#El campo que elegimos es maildir (lugar donde esta el buzon), donde el id del usuario coincida con el destinatario del mensaje
select_field=maildir
where_field=id
#El host que tiene el MySQL
hosts=unix:mysqld.sock

Archivo /etc/postfix/ids.cf

#Usuario y password para acceder al servidor MySQL
user=postfix
password=postfix
#Nombre de la Base de Datos y la tabla
dbname=mail
table=passwd
#El campo que elegimos es uid
select_field=uid
where_field=id
#El host que tiene el MySQL
hosts=unix:mysqld.sock

Archivo /etc/postfix/gid.cf

#Usuario y password para acceder al servidor MySQL
user=postfix
password=postfix
#Nombre de la Base de Datos y la tabla
dbname=mail
table=passwd
#El campo que elegimos es gid
select_field=gid
where_field=id
#El host que tiene el MySQL
hosts=unix:mysqld.sock

Modificando /etc/postfix/master.cf

# echo virtual unix – n n – – virtual >>/etc/postfix/master.cf

Archivo /etc/login.defs

Antes

#QMAIL_DIR Mailidir

Despues

QMAIL_DIR Mailidir

debemos eliminar “#”

Instalando Mysql

# apt-get install mysql-server

Una vez instalado tenemos de comentar la linea skip-networking del fichero /etc/mysql/my.cfg

quedando

# skip-networking

Creando las tablas de mysql

mysql -h localhost -u root -p
#Creamos la Base de Datos llamada mail
mysql>create database mail;
#Vemos si está creada:
mysql>show databases;
#Seleccionamos con la que vamos a trabajar:
mysql>use mail;
#Creamos la tabla en la que guardaremos la información de los usuarios virtuales:
mysql>create table passwd(
id char(128)DEFAULT '' NOT NULL,
clear char(128)DEFAULT '' NOT NULL,
name char(128)DEFAULT '' NOT NULL,
uid int(10) unsigned NOT NULL,
gid int(10) unsigned NOT NULL,
home char(255)DEFAULT '' NOT NULL,
maildir char(255)DEFAULT '' NOT NULL,
KEY id (id(128))
);

#Vemos como ha quedado la tabla recien creada:
mysql> describe passwd;

+---------+------------------+------+-----+---------+-------+
| Field   | Type             | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+-------+
| id      | char(128)        |      | MUL |         |       |
| clear   | char(128)        |      |     |         |       |
| name    | char(128)        |      |     |         |       |
| uid     | int(10) unsigned |      |     |         |       |
| gid     | int(10) unsigned |      |     |         |       |
| home    | char(255)        |      |     |         |       |
| maildir | char(255)        |      |     |         |       |
+---------+------------------+------+-----+---------+-------+

#Creamos un usuario postfix y le damos todos los permisos en esta tabla:
mysql>GRANT ALL ON mail.passwd TO postfix@localhost IDENTIFIED BY "postfix";
#Dependiendo de la configuración, quizas haya que crear algun usuario del estilo postfix@HOSTNAME... para que postfix pueda acceder desde otras maquinas por ejemplo.

#Creamos tres entradas de ejemplo:
mysql>insert into passwd (id,clear,name,uid,gid,home,maildir) values(“user1@splitfoo.homeip.net”,”user1pass”,”usuario1″,”1003″,”8″,”/”,”/var/spool/mail/user1/Maildir/”);
mysql>insert into passwd (id,clear,name,uid,gid,home,maildir) values(“user2@splitfoo.homeip.net.net”,”user2pass”,”usuario2″,”1002″,”8″,”/”,”/var/spool/mail/user2/Maildir/”);
mysql>insert into passwd (id,clear,name,uid,gid,home,maildir) values(“user3@splitfoo.homeip.net”,”user3pass”,”usuario3″,”1004″,”8″,”/”,”/var/spool/mail/user3/Maildir/”);

#Vamos a hacer una select a ver que es lo que tenemos
mysql> select * from passwd;

+--------------------------------+------------+--------------------+------+-----+------+-------------------------------------+
| id                             | clear      | name               | uid  | gid | home | maildir                             |
+--------------------------------+------------+--------------------+------+-----+------+-------------------------------------+
| user1@splitfoo.homeip.net      | user1pass  | usuario1           | 1002 |   8 | /    | /var/spool/mail/user1/Maildir/      |
| user2@splitfoo.homeip.net      | user2pass  | usuario2           | 1003 |   8 | /    | /var/spool/mail/user2/Maildir/      |
| user3@splitfoo.homeip.net      | user3pass  | usuario3           | 1004 |   8 | /    | /var/spool/mail/user3/Maildir/      |
+--------------------------------+------------+--------------------+------+-----+------+-------------------------------------+

mysql>quit
#Ahora cambiamos la pass de root de mysql
mysql> SET PASSWORD FOR root@localhost=password('nuevapass');
mysql> FLUSH PRIVILEGES;

###

Instalando Courier

# apt-get install courier-imap courier-authdaemon courier-authmysql courier-base

Una vez instalado modificamos la configuracion de autenticacion de pam a mysql

en el archivo /etc/courier/authdaemonrc

modificamos authmodulelist=”authpam” por authmodulelist=”authmysql”

modificamos /etc/courier/authmysqlrc

MYSQL_SERVER host
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE passwd
MYSQL_CLEAR_PWFIELD clear
DEFAULT_DOMAIN domain.com
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD id
MYSQL_HOME_FIELD home
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir

donde tendras de cambiar el nombre de host y dominio por el tuyo

ejecutamos los servicios siguientes con el metodo

etc/init.d

  • courier-authdaemon start
  • courier-imap start
  • postfix start
  • mysqld start

Glosario:

  • Mysql: Es un gestor de Bases de Datos multiusuario que gestiona bases de datos relacionales poniendo las tablas en ficheros diferenciados. Es muy criticado porque carece de muchos elementos vitales en bases de datos relacionales y no es posible lograr una integridad referencial verdadera. Es mas utilizado en plataformas Linux aunque puede usarse en otras plataformas. Su uso en un servidor web es gratuito salvo en los casos que se necesite el uso de aplicaciones especiales.
  • Courier: Es el sistema de transporte del servidor Pop3*
  • Pop3 del ingles Post Office Protocol (POP3) se usa en clientes locales de correo para obtener los mensajes de correo electrónico almacenados en un servidor remoto. La mayoría de los suscriptores de los proveedores de internet acceden a sus correos a través de POP3
  • Postfix es un Agente de Transporte de Correos (MTA) de código abierto, un programa informático para el enrutamiento y envío de correo electrónico, creado con la intención de que sea una alternativa más rápida, fácil de administrar y segura al ampliamente utilizado Sendmail. Formalmente conocido como VMailer e IBM Secure Mailer, fue originalmente escrito por Wietse Venema durante su estancia en el Thomas J. Watson Research Center de IBM, y continúa siendo desarrollado activamente.
  • IMAP (acrónimo inglés de Internet Message Access Protocol) es un protocolo de red de acceso a mensajes electrónicos almacenados en un servidor. Mediante IMAP se puede tener acceso al correo electrónico desde cualquier equipo que tenga una conexión a Internet. IMAP tiene varias ventajas sobre POP, que es el otro protocolo empleado para obtener correo desde un servidor. Por ejemplo, es posible especificar en IMAP carpetas del lado servidor. Por otro lado, es más complejo que POP.

En estos momentos ya tenemos funcionando nuestro servidor con soporte mysql ahora ya hos dejo para vostros crear un archivo php que haga las consultas añada usuarios etc

4 comentarios

  1. Stefanos said,

    Interesting…

  2. Integración de Clamav y DSPAM a nuestro postfix « Linux HardLabs said,

    […] En un articulo anterior concretamente Servidor de Correo Postfix con Courier y soporte Mysql […]

  3. alexander said,

    tengo una configuracion con sendmail, mysql dovecot, que se puede hacer para crear usuarios des de al web asi como lo hace uno des de ya_oo.com _otmail.com

  4. Gabriel said,

    QMAIL_DIR Mailidir? Is it right?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: