www.tuxapuntes.com

Buscar Contacto Colabora... Libro de Visitas
 
.
TuxInicio arrow TuxApuntes arrow p2p arrow Configurar Postfix Courier y MySQL
Configurar Postfix Courier y MySQL PDF Imprimir E-Mail
Escrito por utopianegra, on 12-08-2007 01:00
Visitas 2916

1. ¿Por que este documento?

Me he decidido a escribir este documento ya que los que busqué al intentar hacer la instalación de este trío no llegaron a gustarme.


2.¿Por que usar la autentificación en un SQL?

Lo que vamos ha hacer con este trío es conseguir un sistema de correo completo con una autentificación es un sistema de bases de datos SQL, con lo cual conseguiremos manejar varios dominios virtuales con cientos de usuarios los cuales no existen en el sistema realmente.

3. ¿Que necesito?

Bien yo hice la instalación sobre Debian GNU/Linux aunque no debería cambiar mucho para otros Linux o *BSD.
Los paquetes Debian necesarios para esta gesta son:

postfix A high-performance mail transport agent
postfix-mysql MYSQL map support for Postfix
courier-authdaemon Courier Mail Server authentication daemon
courier-authmysql MySQL Authentication for Courier Mail Server
courier-base Courier Mail Server Base System
courier-imap IMAP daemon with PAM and Maildir support
courier-imap-ssl IMAP daemon with SSL, PAM and Maildir suppor

Estos deberían estar en la misma máquina la BBDD puede ser remota y el servidor MySQL podemos instalarlo en la maquina local o no , eso tendrá que ser valorado a la hora de instalar.

mysql-client - mysql database client binaries
mysql-common - mysql database common files (e.g. /etc/mysql/my.cnf)
mysql-server - mysql database server binaries

En distintas distribuciones a Debian o si instalamos desde código fuente debemos fijarnos en que postfix y courier estén compilados con soporte de MySQL.

4. Después de la instalación de paquetes.

Lo primero que hice fue hacer las tablas de la base de datos.


# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.23.53-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database maildb;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on maildb.* to postfix@localhost identified by 'elapassque quieras';
Query OK, 0 rows affected (0.00 sec)

y seleccionamos la base de datos:

mysql> use mail;
Database changed

La primera que creo es la de transport , viene a ser como el mailertable de sendmail indicamos que acción que se debe ejecutar dependiendo del dominio al que se dirige el email, la estructura es la siguiente.

CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE=MyISAM;

Domain indica el dominio sobre el cual se debe ejecutar la acción y transport la acción a realizar, recomiendo un man 5 transport para ver las opciones , aunque las más comunes son:

smtp: con lo que redirigiremos el correo de ese servidor hacia otro dominio

local: hará un relay local es decir chequeara si ese usuario existe en la maquina local y si es afirmativo le entregará el email

virtual: este es relativo a los dominios virtuales normalmente los que autentificamos conta la base de datos.

La tabla de transport deberia quedar similar a esta:

mysql> select * from transport;
+-----------------------------+---------------------+
| domain | transport |
+-----------------------------+---------------------+
| dominio.com | virtual: |
| paquito.dominio.com | smtp:192.168.0.2:25 |
| listas.dominio.com | local: |
+-----------------------------+---------------------+
3 rows in set (0.00 sec)

La segunda tabla y la más compleja por el número de campos es la de los usuarios, la estructura es la siguiente:

CREATE TABLE users (
id varchar(128) NOT NULL default '',
id_courier varchar(128) NOT NULL default '',
address varchar(128) NOT NULL default '',
crypt varchar(128) NOT NULL default '',
clear varchar(128) NOT NULL default '',
name varchar(128) NOT NULL default '',
uid smallint(5) unsigned NOT NULL default '1000',
gid smallint(5) unsigned NOT NULL default '1000',
home varchar(128) NOT NULL default '/',
domain varchar(128) NOT NULL default '',
maildir varchar(255) NOT NULL default '',
imapok tinyint(3) unsigned NOT NULL default '1',
bool1 tinyint(3) unsigned NOT NULL default '1',
bool2 tinyint(3) unsigned NOT NULL default '1',
PRIMARY KEY (id),
UNIQUE KEY id (id),
UNIQUE KEY address (address),
KEY id_2 (id),
KEY address_2 (address)
) TYPE=MyISAM;


Paso a explicar que es cada campo.
id Nombre de usuario. Sirve para identificar al usuario de correo en la base de datos normalmente se usa Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla
id_courier Nombre del usuario de IMAP, con este campo identificaremos el login de imap del usuario de esa cuenta de correo, por ejemplo Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla si quisiéramos que se identificase como paco en este campo pondríamos paco.

address Pues nada aquí obviamente tenemos que poner la dirección de correo electrónico completa Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla por ejemplo.

crypt Aqui irá la clave encriptada, se debe insertar como encrypt('tupasswd').

clear El password en texto plano.

name Nombre con el que se enviaran los emails, es decir Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla usaria Francisco Yonky Mas Jaco.

uid y gid Son el uid y el gid del usuario que puede escribir en el directorio de spool de mensajes, más adelante explicaré lo que es.

home En este campo se ha de poner el directorio general de spool este directorio ha de tener un gid y uid igual al que hemos puesto anteriormente, y será donde se almacenen las carpetas del usuario de un dominio en concreto. Seria algo similar a esto /var/spool/mail/dominio/paco/, normalmente meteremos todo un dominio con el mismo gid y uid.

domain Coincide con el dominio en nuestro caso jaco.com

maildir Es el directorio maildir de usuario. Por ejemplo /var/spool/mail/dominio/paco/Maildir/.

imapok Es un campo que pondremos a 1 si queremos que ese usuario posea cuenta imap

bol1 y bol2 La he colocado para usarlas como variables bit para imap y poder emprender distintas acciones según estén a 1 o 0.

La tabla quedaría mas o menos así:


| id | id_courier | address | crypt |clear | name| uid |gid | home| domain| maildir| imapok |bool1 | bool2 |

| Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla | paco| Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla | PyinZSuIE0lRs | mipassesjaco | Francisco Yonky Mas Jaco | 1000 | 1000 | /var/spool/mail/dominio/paco/ | dominio.com | /var/spool/mail/dominio/paco/Maildir/ | 1 | 1 | 1 |

La última tabla es virtual, esta tabla contendrá direcciones virtuales por ejemplo las del mailman, su estructura es:

CREATE TABLE virtual (
address varchar(255) NOT NULL default '',
goto varchar(255) NOT NULL default '',
UNIQUE KEY address (address)
) TYPE=MyISAM;

address Identifica la dirección virtual

goto dirección a la que apuntará la virtual.

Ejemplo de la tabla en concreto para mailman:

mysql> select * from virtual;
+----------------------------------------+-------------------+
| address | goto |
+----------------------------------------+-------------------+
| Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla | general-owner |
| Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla | general |
| Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla | general-admin |
| Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla | general-request |
+----------------------------------------+-------------------+
4 rows in set (0.00 sec)


5. Ya tengo las tablas que ¿mas necesito?

Bien ahora lo que necesitaremos será configurar el postfix para que use el mysql.
En /etc/postfix/main.cf necesitamos añadir lo siguiente normalmente se suelen poner sobre relayhost=


transport_maps=mysql:/usr/local/etc/postfix/transport.cf
virtual_mailbox_maps=mysql:/usr/local/etc/postfix/mysql_virt.cf
virtual_uid_maps=mysql:/usr/local/etc/postfix/uids.cf
virtual_gid_maps=mysql:/usr/local/etc/postfix/gids.cf
virtual_mailbox_base=/ #Esto lo puedes cambiar a otro sitio si quieres mas seguridad
mydestination = $mydomain, $myhostname, $transport_maps
virtual_maps =mysql:/usr/local/etc/postfix/virtual.cf

Chequea que en master.cf tengas:
virtual unix - n n - - virtual

Ahora vamos con los archivos de conexión a MySQL que hemos definido anteriormente en main.cf

Todos estos archivos los debemos crear en /etc/postfix:

# transport.cf
user= postfix <--Usuario de la base de datos
password= whatever <--pasword de ese usuario
dbname=maildb <-- nombre de la base de datos
table=transport
select_field=transport
where_field=domain
hosts= localhost <-- o servidor de base de datos remoto


Los demás contienen valores similares

# mysql_virt.cf
user= postfix
password= whatever
dbname=maildb
table=users
select_field=maildir
where_field=address
hosts=localhost

# uids.cf
user=postfix
password=whatever
dbname=maildb
table=users
select_field=uid
where_field=address
hosts=localhost

# gids.cf
user=postfix
password=whatever
dbname=maildb
table=users
select_field=gid
where_field=address
hosts=localhost

# virtual.cf
user=postfix
password=whatever
dbname=maildb
table=virtual
select_field=goto
where_field=address
hosts=localhost

Ahora configuramos el courier para que pueda acceder a la base de datos.

#archivo /etc/courier/authmysqlrc
MYSQL_SERVER localhost #Servidor mysql
MYSQL_USERNAME postfix #Usuario SQL
MYSQL_PASSWORD whatever #password SQL
MYSQL_SOCKET /tmp/mysql.sock #esto se ha de colocar si la base datos es local
MYSQL_DATABASE maildb #base de datos
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD crypt
MYSQL_CLEAR_PWFIELD clear
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD id_courier
MYSQL_HOME_FIELD home
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_WHERE_CLAUSE imapok=1 AND bool1=1 AND bool2=1

#archivo /etc/courier/authdaemon

authmodulelist="authmysql" <-- esto es para los posibles métodos de autentificación de usuarios en el imap se puede incluir desde PAM a LDAP man authdaemon.

Ahora reinicia los servicios de postfix y courier.

6.Añadiendo un dominio a transport

Muy fácil solo hay que ejecutar esta consulta:

insert into transport (domain,transport) values("dominio.com","virtual:");

7. ¿Como añado usuarios?

Los usuarios los debemos añadir en la base de datos y posteriormente crear los
directorios home y maildir con el gid y el uid que hemos especificado en el registro.

Debemos hacer algo así:
insert into users (id,id_courier,address,crypt,clear,name,uid,gid,home,domain,maildir,imapok,bool1,bool2)
values(" Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla ","paco"," Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla ",encrypt('passwordquequieras'),
"passwordquequieras","Francisco Yonky Mas Jaco","1000","1000","/var/spool/mail/dominio/paco/","dominio.com",
"/var/spool/mail/dominio/paco/Maildir/","1","1","1");

Luego creamos el directorio de este usuario y le damos permisos:

mkdir -p /var/spool/mail/dominio/paco/Maildir
chmod -R UID:GID /var/spool/mail/dominio/paco

8.Fin

Bueno ya debería estar funcionando todo pero si algo falla revisa los logs del sistema no creo que te sea difícil encontrar el fallo ya que los errores de postfix dan bastante información , te aconsejo que también si fallara algo miraras el log del mysql por si hay alguna consulta mal formada o te has equivocado en algún campo. Este Documento esta escrito por Omar López aka pollo puedes usarlo como quieras, no me hago responsable de los daños que puedas causar con el.

Autor: pollo www.valenciawireless.net
Comparteme:
Meneame
Delicious
Digg
Technorati
YahooMyWeb
MLinuxfera

Revisado el: 12-09-2007 01:12

Publicado el : Manuales (HowTo), Bases de Datos

Comentarios de usuarios (0)

Ningún comentario guardado

Añade tu comentario



mXcomment 1.0.5 © 2007-2008 - visualclinic.fr
License Creative Commons - Some rights reserved
 
< Anterior   Siguiente >


Si te resulta util esta informacion y quieres contribuir mediante alguna donación para el mantenimiento y mejora de ese site, te dejamos un enlace para que puedas ayudarnos por medio de paypal.

 Muchas gracias.








Enlaces

Cursos
Masters
MBA

Menu Principal

Login






¿Recuperar clave?
¿Quiere registrarse? Regístrese aquí
Hay 35 invitados y 1 usuario en línea
  • clara cagigal

Translate

Top WebLinks

Enlaces - Blogroll
feed image

Tux Estadisticas

OS: Linux h
PHP: 5.2.6
MySQL: 5.0.67-community-log
Hora: 20:36
Caching: Disabled
GZIP: Enabled
Usuarios: 4027
Noticias: 1051
Enlaces: 50
Visitantes: 3682740

Galaxia Linux

TUXrank .. SITES



Creative Commons License


Esta obra está bajo una
licencia de Creative Commons.


¿Quieres anunciarte aquí?

Tux del Dia

th_1629.jpg

Tux Encuesta

¿Aconsejas Ubuntu a tús amigos?
 
¿Has actualizado a Intepid Ibex 8.10?
 

[+]
  • Narrow screen resolution
  • Wide screen resolution
  • Auto width resolution
  • Increase font size
  • Decrease font size
  • Default font size
  • default color
  • blue color
  • green color