DbMail
DBMail es el nombre de un grupo de programas que permite la posibilidad de almacenar y guardar mensajes de correo electrónico desde una base de datos. Actualmente se utiliza MySQL, PostgreSQL y SQLite como sistema persitente de datos.
Contenido
Instalación
Para tener instalado DBMail, seguimos los siguientes pasos:
Instalación y configuración de PostgreSQL
- Primero instalamos PostgreSQL, a partir del paquete postgresql-8.2 de los repositorios oficiales de Ubuntu.
- Hay que tocar un parámetro de configuración de PostgreSQL para que nos deje autentificarnos como usuarios que no estón dados de alta. Para eso, editamos el archivo /etc/postgresql/8.2/main/pg_hba.conf, por ejemplo con gEdit:
$ sudo gedit /etc/postgresql/8.2/main/pg_hba.conf
- Buscamos la línea:
local all all ident sameuser
Y la sustituimos por esta otra:
local all all md5
Guardamos los cambios y cerramos el editor.
- Reiniciamos PostgreSQL con el siguiente comando:
$ sudo /etc/init.d/postgresql-8.2 restart
Instalación de Postfix
- Ahora, para el servidor de correo Postfix, instalamos los paquetes postfix, postfix-pgsql y mailx de los repositorios. En los asistentes de configuración, introducimos los siguientes datos:
General type of configuration? Internet Site Nombre de correo? miservidor.midominio
Instalación y configuración de DBMail
- Agregamos el repositorio para instalar DBMail . Editamos el archivo sources.list, por ejemplo con gEdit:
$ sudo gedit /etc/apt/sources.list
Y añadimos al final del archivo la siguiente línea:
deb http://debian.nfgd.net/debian stable main
Finalmente guardamos y cerramos el editor.
- Actualizamos la lista de paquetes:
$ sudo aptitude update
- Luego instalamos el paquete dbmail-psgql de los repositorios que acabamos de añadir.
Existe un paquete dbmail-pgsql en los repositorios oficiales de Ubuntu, pero se trata de una versión muy antigua de DBMail, por eso es recomendable añadir el repositorio mencionado antes. |
- Vamos a crear la base de datos y el usuario en PostgreSQL para DbMail:
$ sudo -s $ su postgres $ psql template1
- Nos aparecerá este texto de bienvenida e instrucciones:
Bienvenido a psql 8.2.4, la terminal interactiva de PostgreSQL. Digite: \copyright para ver los términos de distribución \h para obtener ayuda sobre comandos SQL \? para obtener ayuda sobre comandos internos \g o punto y coma (;) para ejecutar consulta \q para salir
- Introducimos las siguientes órdenes:
template1=# CREATE USER dbmail PASSWORD 'aleluya'; CREATE USER template1=# CREATE DATABASE dbmail OWNER dbmail; CREATE DATABASE template1=# \q
- Lo probamos:
$ psql -U dbmail dbmail Contraseña: (aquí tecleamos la contraseña: aleluya) Bienvenido a psql 8.2.4, el terminal interactivo de PostgreSQL. Digite: \copyright para ver los términos de distribución \h para obtener ayuda sobre comandos SQL \? para obtener ayuda sobre comandos internos \g o punto y coma (;) para ejecutar consulta \q para salir
dbmail=> \q
- Editamos el archivo de configuración de DbMail, con gEdit:
$ sudo gedit /etc/dbmail/dbmail.conf
Cambiamos:
driver = pgsql authdriver = sql host = localhost pass = aleluya [POP] POP_BEFORE_SMTP = yes, [IMAP] IMAP_BEFORE_SMTP = yes
- Ahora editamos este otro archivo:
$ sudo gedit /etc/default/dbmail
Descomentamos las líneas:
START_POP3D START_IMAPD START_LMTPD
Guardamos los cambios y cerramos.
- Y aún falta crear las tablas. Teclamos estos comandos:
$ cp /usr/share/doc/dbmail-pgsql/examples/create_tables.pgsql.gz . $ gunzip create_tables.pgsql.gz . $ psql -U dbmail dbmail < create_tables.pgsql
- Comprobamos que todo va bien:
$ sudo /etc/init.d/dbmail restart Stopping dbmail servers: No dbmail-pop3d found running; none killed. done. Starting dbmail servers: dbmail-pop3d .done. $ telnet localhost 110 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. +OK DBMAIL pop3 server ready to rock quit +OK see ya later Connection closed by foreign host.
- Bien, ya tenemos funcionando el servidor de POP3.
- Para agregar un usuario:
$ sudo dbmail-users -a frodo -w mitesoro -s fbolson@midominio Opening connection to database... Opening connection to authentication... Ok. Connected Adding user frodo with password type ,0 bytes mailbox limit and clientid 0... Ok, user added id [3] Adding INBOX for new user Ok. added [fbolson@mitesoro] Done
- Para comprobarlo, hacemos lo siguiente:
$ telnet localhost 110 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. +OK DBMAIL pop3 server ready to rock <66dcba87dbc642906b8410fc1f2223a0@urisma> > user frodo +OK Password required for frodo > pass mitesoro +OK frodo has 0 messages (0 octets) > quit +OK see ya later Connection closed by foreign host.
Aún queda un problema con Dbmail y PostgreSQL. Existe un problema con ciertas codificaciones. Es necesario editar el archivo /etc/init.d/dbmail y agregar un par de lineas. Se deben poner al principio ya que se trata de una variable de entorno utilizada en la conexion con PostgreSQL. Un buen lugar es despues de
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Las líneas son:
PGCLIENTENCODING=LATIN1 export PGCLIENTENCODING
Instalación y configuración de ClamSMTP y Postgrey
Vamos a configurar ahora Postfix con el antivirus, y el antispam, haciendo al mismo tiempo la conexión con DBMail para no perder más tiempo en detalles.
- Instalamos los paquetes clamsmtp, clamav-daemon y postgrey de los repositorios.
- Editamos el siguiente archivo, con gEdit por ejemplo:
$ sudo gedit /etc/postfix/main.cf
- Realizamos los siguientes cambios:
# resuelve en /etc/hosts (no solo dns) smtp_host_lookup = dns, native local_recipient_maps = # utilizo POP BEFORE SMTP para no actuar de OpenRelay mynetworks = 127.0.0.0/8, pgsql:/etc/postfix/sql-pop-before-smtp.cf # se pueden añadir dominios en la base de datos transport_maps = pgsql:/etc/postfix/sql-transport.cf mydestination = localhost, localhost.localdomain, $transport_maps # para clamav content_filter = scan:localhost:10026 receive_override_options = no_address_mappings # el postgrey correo en el puerto 60000 smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, check_policy_service inet:127.0.0.1:60000
Guardamos los cambios y cerramos.
- Editamos el archivo /etc/postfix/master.cf:
$ sudo gedit /etc/postfix/master.cf
- Añadimos estas líneas al final:
dbmail-lmtp unix - - n - - lmtp -o disable_dns_lookups=yes # AV scan filter (used by content_filter) scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes # For injecting mail back into postfix from the filter 127.0.0.1:10025 inet n - n - 16 smtpd -o content_filter= -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks_style=host -o smtpd_authorized_xforward_hosts=127.0.0.0/8,pgsql:/etc/postfix/sql-pop-before-smtp.cf
Guardamos y cerramos.
Aún quedan 2 archivos por editar:
- El primero le indica a Postfix las IPs que tienen permiso para enviar (SMTP) por haber leido correo previamente (POP3). Es el archivo /etc/postfix/sql-pop-before-smtp.cf:
user=dbmail password=aleluya dbname=dbmail hosts=localhost table=dbmail_pbsp select_field=since where_field=ipnumber
- El segundo nos va a permitir agregar nuevos dominios desde la base de datos. Es el archivo etc/postfix/sql-transport.cf:
user=dbmail password=aleluya dbname=dbmail table=dbmail_transport select_field=transport where_field=domain hosts=localhost
- Antes tenemos que crear la tabla "dbmail_transport" en nuestra base de datos.
$ psql dbmail -W dbmail Contraseña: Bienvenido a psql 8.2.4, el terminal interactivo de PostgreSQL. Digite: \copyright para ver los términos de distribución \h para obtener ayuda sobre comandos SQL \? para obtener ayuda sobre comandos internos \g o punto y coma (;) para ejecutar consulta \q para salir dbmail=> CREATE TABLE dbmail_transport ( dbmail(> domain VARCHAR(100) NOT NULL, dbmail(> transport VARCHAR(100) NOT NULL DEFAULT 'dbmail-lmtp:localhost:24' dbmail(> ); CREATE TABLE dbmail=> INSERT INTO dbmail_transport (domain) VALUES ('midominio');
No olvidar este INSERT, de lo contrario no llegarán los mensajes de 'midominio' a DBMail. |
- Vamos a ver cómo va la cosa:
$ sudo /etc/init.d/postfix restart * Stopping Postfix Mail Transport Agent postfix [ ok ] * Starting Postfix Mail Transport Agent postfix [ ok ]