LinuxParty
Postfix utiliza bases de datos de varios tipos para almacenar y buscar información. Las bases de datos de Postfix se especifican como del "type:name". Berkeley DB implementa el tipo de base de datos Postfix "hash" y "btree". El nombre de una base de datos Postfix Berkeley DB es el nombre del archivo de base de datos sin el sufijo ".db". Las bases de datos Berkeley DB se mantienen con el comando postmap (1) .
Como se ve en la imagen crear una base de datos Berkeley es realmente sencillo, haciéndolo a partir de un texto plano.
Consultas a la base de datos:
Como se aprecia es muy sencillo consultar de la existencia del usuario "Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.", en la base de datos de usuarios "usuarios", pudiendo hacerlo incluyendo el prefijo "hash:" delante de la base de datos, o sin él, como se ve en la imagen de abajo.
Con "postmap -s", haremos una "show" (muestra) de todo el contenido de la base de datos.
Con "postmap -q", haremos una "query" (consulta) de a la base de datos.
ff
Nota: la versión 4 de Berkeley DB no es compatible con las versiones de Postfix anteriores a la 2.0.
Este documento describe:
Cómo construir Postfix sin soporte para Berkeley DB incluso si el sistema viene con Berkeley DB.
Cómo construir Postfix en sistemas que normalmente no tienen una biblioteca de Berkeley DB
Cómo construir Postfix en sistemas BSD o Linux con múltiples versiones de Berkeley DB.
Cómo ajustar el rendimiento.
Falta el problema de la biblioteca de pthread.
Creación de Postfix sin soporte para Berkeley DB incluso si el sistema viene con Berkeley DB
Nota: Las siguientes instrucciones se aplican a Postfix 2.9 y posteriores.
Postfix normalmente habilitará el soporte de Berkeley DB si se sabe que el sistema lo tiene. Para compilar Postfix sin el soporte de Berkeley DB, compile los makefiles de la siguiente manera:
(éste paso generalmente puede ahorrarse cuando se instala desde los repositorios, pues instalará un binario ya precompilado)
% make makefiles CCARGS="-DNO_DB" % make
Esto deshabilitará el soporte para los archivos "hash" y "btree".
Creación de Postfix en sistemas que normalmente no tienen una biblioteca de Berkeley DB
Algunos UNIX se envían sin el soporte de Berkeley DB; por razones históricas, estos usan archivos DBM en su lugar. Un problema con los archivos DBM es que solo pueden almacenar cantidades limitadas de datos. Para compilar Postfix con soporte para Berkeley DB, necesita descargar e instalar el código fuente de http://www.oracle.com/database/berkeley-db/ .
Advertencia: algunas bibliotecas del sistema Linux utilizan Berkeley DB, al igual que algunas bibliotecas de terceros, como SASL. Si compila Postfix con una implementación diferente de Berkeley DB, entonces cada programa de Postfix volcará el núcleo porque la biblioteca del sistema, la biblioteca SASL o el propio Postfix terminan usando la versión incorrecta.
Las versiones más recientes de Berkeley DB tienen un interruptor en tiempo de compilación, "--with-uniquename", que cambia el nombre de los símbolos para que puedan coexistir múltiples versiones de Berkeley DB en la misma aplicación. Aunque es un desperdicio, esta puede ser la única forma de evitar que las cosas se caigan.
Para construir Postfix después de instalar Berkeley DB desde el código fuente, use algo como:
(éste paso generalmente puede ahorrarse cuando se instala desde los repositorios, pues instalará un binario ya precompilado)
% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \ AUXLIBS="-L/usr/local/BerkeleyDB/lib -ldb" % make
Solaris necesita esto:
% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \ AUXLIBS="-R/usr/local/BerkeleyDB/lib -L/usr/local/BerkeleyDB/lib -ldb" % make
Los nombres de ruta exactos dependen de la versión de Berkeley DB y de cómo se instaló.
Advertencia: el formato de archivo producido por Berkeley DB versión 1 no es compatible con el de las versiones 2 y 3 (las versiones 2 y 3 tienen el mismo formato). Si cambia entre las versiones de base de datos, es posible que tenga que reconstruir todos sus archivos de base de datos de Postfix.
Advertencia: si usa Berkeley DB versión 2 o posterior, no habilite el modo de compatibilidad DB 1.85. Si lo hace, rompería el bloqueo de archivos fcntl.
Advertencia: si usa Perl para manipular los archivos Berkeley DB de Postfix, entonces necesita usar la misma versión de Berkeley DB en Perl que en Postfix.
Construyendo Postfix en sistemas BSD con múltiples versiones de Berkeley DB
Algunos sistemas BSD se envían con múltiples implementaciones de Berkeley DB. Normalmente, Postfix se compila con la versión de base de datos predeterminada que viene con el sistema.
Para construir Postfix en sistemas BSD con una versión de base de datos no predeterminada, use una variante de los siguientes comandos:
% make makefiles CCARGS=-I/usr/include/db3 AUXLIBS=-ldb3 % make
Advertencia: el formato de archivo producido por Berkeley DB versión 1 no es compatible con el de las versiones 2 y 3 (las versiones 2 y 3 tienen el mismo formato). Si cambia entre las versiones de base de datos, es posible que tenga que reconstruir todos sus archivos de base de datos de Postfix.
Advertencia: si usa Berkeley DB versión 2 o posterior, no habilite el modo de compatibilidad DB 1.85. Si lo hace, rompería el bloqueo de archivos fcntl.
Advertencia: si usa Perl para manipular los archivos Berkeley DB de Postfix, entonces necesita usar la misma versión de Berkeley DB en Perl que en Postfix.
Construyendo Postfix en sistemas Linux con múltiples versiones de Berkeley DB
Algunos sistemas Linux se envían con múltiples implementaciones de bases de datos Berkeley. Normalmente, Postfix se compila con la versión de base de datos predeterminada que viene con el sistema.
Advertencia: algunas bibliotecas del sistema Linux utilizan Berkeley DB. Si compila Postfix con una implementación de Berkeley DB no predeterminada, entonces todos los programas de Postfix volcarán el núcleo porque la biblioteca del sistema o el propio Postfix terminan usando la versión incorrecta.
En Linux, debe editar el script makedefs para especificar una biblioteca de base de datos no predeterminada. El motivo es que la ubicación del archivo db.h predeterminado incluye cambios aleatorios entre los proveedores y entre las versiones, de modo que Postfix tiene que elegir el archivo por usted.
Advertencia: el formato de archivo producido por Berkeley DB versión 1 no es compatible con el de las versiones 2 y 3 (las versiones 2 y 3 tienen el mismo formato). Si cambia entre las versiones de base de datos, es posible que tenga que reconstruir todos sus archivos de base de datos de Postfix.
Advertencia: si usa Berkeley DB versión 2 o posterior, no habilite el modo de compatibilidad DB 1.85. Si lo hace, rompería el bloqueo de archivos fcntl.
Advertencia: si usa Perl para manipular los archivos Berkeley DB de Postfix, entonces necesita usar la misma versión de Berkeley DB en Perl que en Postfix.
Rendimiento retorcido
Postfix proporciona dos parámetros de configuración que controlan la cantidad de memoria de búfer que usará Berkeley DB.
-
berkeley_db_create_buffer_size (predeterminado: 16 MBytes por tabla). Esta configuración es utilizada por los comandos que mantienen los archivos de la base de datos de Berkeley: postalias (1) y postmap (1) . Para los archivos "hash", cree que el rendimiento se degrada rápidamente a menos que el grupo de memoria sea O (tamaño de archivo). Para archivos "btree", crear rendimiento es bueno con la entrada ordenada incluso para grupos de memoria pequeños, pero con entrada aleatoria se degrada rápidamente a menos que el grupo de memoria sea O (tamaño de archivo).
-
berkeley_db_read_buffer_size (predeterminado: 128 kBytes por tabla). Esta configuración es utilizada por todos los demás programas de Postfix. El tamaño del buffer es adecuado para la lectura. Si la memoria caché es más pequeña que la tabla, el rendimiento de lectura aleatoria no depende del tamaño de la memoria caché, excepto en las tablas de btree, donde el tamaño de la memoria caché debe ser lo suficientemente grande como para contener la ruta completa desde el nodo raíz. La evidencia empírica muestra que 64 kBytes pueden ser suficientes. Duplicamos el tamaño para jugar de forma segura y para anticipar cambios en la implementación y la expansión.
Falta el problema de la biblioteca de pthread
Cuando la construcción de Postfix falla con:
undefined reference to `pthread_condattr_setpshared' undefined reference to `pthread_mutexattr_destroy' undefined reference to `pthread_mutexattr_init' undefined reference to `pthread_mutex_trylock'
Agregue la biblioteca "-lpthread" al comando "make makefiles".
% make makefiles .... AUXLIBS="... -lpthread"
Más información está disponible en http://www.oracle.com/database/berkeley-db/.
Para ver el contenido de cualquier hash, bastará escribir:
postmap -s hash:/nombre/de/la/basededatos
Como se puede apreciar en la imagen, podemos tener en un hash varios dominios, definidos en la variable:
virtual_mailbox_maps = hash:/ubicacion/de/la/bbdd
Otros artículos que te gustarán:
- Introducción a la Instalación y Configuración de un Servidor de Correo (postfix y dovecot)
- Instalar y configurar Postfix y Dovecot, con autenticación y TLS
- Comandos de Postfix (servidor de correo)
- Cómo configurar un servidor de correo con Postfix y Dovecot para diferentes necesidades
- Cómo configurar el servidor de correo Postfix y Dovecot con base de datos (MariaDB) de forma segura: parte 1
- Cómo configurar Postfix usando bases de datos Berkeley DB
-
Email
- Crear o generar un certificado digital para Postifx y Dovecot.
- Instalar y configurar Postfix y Dovecot, con autenticación y TLS
- Detectar y encontrar envíos de Spam desde los propios servidores con Postfix
- Como evitar que el servidor envíe Spam
- Prevenir o evitar el envío de spam saliente (verificando si existe el remitente)
- Mostrar y vaciar la cola de postfix
- Introducción a la Instalación y Configuración de un Servidor de Correo (postfix y dovecot)
- Sustituir MS Exchange: por Linux Email Servers II
- Visualizar la ruta que ha seguido un email con Mail Hops (Thunderbird)
- RainLoop Webmail - Un moderno cliente Web de Email para Linux
- Monitorizar / Vigilar usuario de correo Postfix y eMails
- Tutorial de mailman con postfix
- Usuarios virtuales y dominios con Postfix & Courier
- Cómo combatir virus usando Postfix
- Usando DSPAM & ClamAV con Postfix (Virtual Users) en Debian Etch