GNU/Linux >> Tutoriales Linux >  >> Linux

Configuración del servidor de correo Postfix en Ubuntu 20.04

Verificado y probado el 27/02/2021

Introducción

En este artículo de instrucciones, lo guiaremos a través de la construcción de un servidor de correo completo en Ubuntu 20.04 con Postfix. Construir un servidor de correo Linux desde cero puede ser un proceso doloroso a menos que lo haga día tras día, pero le mostraremos cómo hacerlo de la manera más sencilla posible.

Un servidor de correo generalmente consta de una variedad de paquetes diferentes que manejan SMTP, POP3/IMAP, el almacenamiento del correo y las tareas relacionadas con el correo no deseado, y todos deben comunicarse entre sí. Este es un resumen de los paquetes y los objetivos de este artículo de instrucciones.

Resumen de paquetes y pasos de configuración

1 – Preparación básica del servidor
2 – Desarrollar el servidor web LAMP
3 – Configurar PHP
4 – Configurar Apache2
5 – Instalar y configurar Memcached
6 – Instalar los paquetes del servidor de correo
7 – Creación de una base de datos MySQL para el servidor de correo
8.1 – Instalación de Postfix Admin
8.2 – Configuración de Postfix Admin
9 – Adición de cuentas de usuario (buzones) a Postfix Admin
10 – Crear un usuario del sistema para manejar directorios de correo virtual
11 – Configurar Dovecot
12 – Configurar filtros de spam y antivirus
13 – Configurar Postfix
14 – Búsqueda inversa de DNS
15 – Instalar RoundCube Webmail

Requisitos

– Servidor Ubuntu 20.04 completamente actualizado, si no tiene un servidor Ubuntu ejecutándose en un servidor como los del alojamiento VPS Linux de Atlantic.net.

– Acceso al nombre de dominio para el que configurará el correo (usaremos “email.linuxbuz.com ” en los ejemplos de este artículo).
.

1 – Preparación básica del servidor

La instalación básica de Ubuntu viene con un conjunto limitado de paquetes, por lo que lo primero que queremos hacer es instalar las herramientas que usaremos para completar todas las tareas.

Primero, asegúrese de haber iniciado sesión con la cuenta de usuario raíz.

sudo su -

Ahora, instalemos las herramientas básicas para que podamos descargar archivos y editar archivos de configuración fácilmente.

apt-get install wget nano ssl-cert
  • wget :paquete para recuperar archivos usando HTTP, HTTPS y FTP, los protocolos de Internet más utilizados.
  • nano :editor de texto de línea de comandos con controles fáciles de usar.
  • certificado SSL :paquete que habilita la capacidad de crear certificados SSL.

A continuación, actualizaremos el nombre de host y el nombre de dominio del servidor para que cuando envíe un correo electrónico coincida con el registro DNS de puntero inverso que configuramos con su proveedor de alojamiento. También actualizaremos /etc/hostname expediente. Asegúrese de reemplazar el ejemplo con su nombre de host y nombre de dominio reales.

hostnamectl conjunto-nombre de host email.linuxbuz.com

Ahora vamos a editar manualmente el /etc/hosts archivo de configuración para que coincida con el nombre que acabamos de ingresar.

nano /etc/hosts

Edite la primera línea y agregue su FQDN (nombre de dominio completo) justo después de la dirección IP 127.0.0.1.

127.0.0.1 correo electrónico.linuxbuz.com localhost

Ahora vamos a actualizar el certificado SSL predeterminado en el servidor para que coincida con nuestro nuevo nombre de host. Si compró un certificado SSL para su servidor de correo, puede omitir este paso.

make-ssl-cert generar-default-snakeoil --force-overwrite

Este comando le dice al servidor que regenere el certificado SSL predeterminado del sistema y lo obliga a sobrescribir los archivos CRT y KEY originales.

Ahora hemos completado la preparación básica del servidor y podemos continuar con la instalación de nuestros servicios de servidor web.

[Volver arriba]

2:desarrollar el servidor web LAMP

Durante este paso, vamos a instalar los paquetes "LAMP". LAMP significa Linux, Apache, MySQL y PHP. Estos paquetes combinados permitirán que su servidor proporcione servicios web dinámicos con conectividad MySQL.

Primero, instalemos los paquetes. Esto se denomina instalación de un paquete de tareas.

apt-get install lámpara-servidor^

Para ver una lista de los paquetes que se incluyen en esta instalación grupal, puede ejecutar lo siguiente:

tasksel --task-packages lámpara-servidor

Después de instalar todos los paquetes, estaremos listos para instalar algunos módulos PHP adicionales. Estos módulos adicionales permitirán que su servidor sea compatible con APC User Cache para PHP 5, memcached, cURL, un analizador XML y procesamiento de imágenes GD.

apt-get install php-apcu php-memcache php-curl php-mbstring php-gd php-xml php-imap php-xmlrpc libdbi-perl libdbd-mysql-perl -y

A continuación, deberá configurar la contraseña raíz de MySQL y asegurar la instalación de MySQL. Puedes hacerlo con el siguiente comando:

instalación_segura_mysql

Responda todas las preguntas como se muestra a continuación:

Nueva contraseña:Vuelva a ingresar la nueva contraseña:¿Desea continuar con la contraseña proporcionada? (Presione y|Y para Sí, cualquier otra tecla para No):Y¿Eliminar usuarios anónimos? (Presione y|Y para Sí, cualquier otra tecla para No) :Y¿Deshabilitar el inicio de sesión raíz de forma remota? (Presione y|Y para Sí, cualquier otra tecla para No) :Y¿Recargar tablas de privilegios ahora? (Presione y|Y para Sí, cualquier otra tecla para No) :Y

A continuación, inicie sesión en MySQL y cambie la política de contraseñas a baja:

mysql -u root -pSET GLOBAL validar_contraseña.policy =0;VACIAR PRIVILEGIOS;SALIR;

[Volver arriba]

3 – Configurar PHP

Ahora vamos a actualizar la configuración de PHP. La configuración predeterminada suele ser suficiente para la mayoría de los sistemas; sin embargo, queremos asegurarnos de que PHP no exponga información a posibles atacantes. Vamos a editar el archivo /etc/php/7.4/apache2/php.ini .

nano /etc/php/7.4/apache2/php.ini

Localiza la variable expose_php y actualice el valor desde On a Off . Con nano, puedes buscar presionando CTRL-W y luego ingrese su palabra de búsqueda.

367;;;;;;;;;;;;;;;;;;368; Varios;369;;;;;;;;;;;;;;;;;370 371; Decide si PHP puede exponer el hecho de que está instalado en el servidor372; (por ejemplo, agregando su firma al encabezado del servidor web). No es seguridad373; amenaza de ninguna manera, pero permite determinar si usa PHP374; en su servidor o no.375; http://php.net/exponer-php376 exponer_php =Off377

[Volver arriba]

4 – Configurar Apache2

Ahora estamos listos para pasar a personalizar la configuración de los servicios web de Apache. El resultado final para Apache es que servirá un solo sitio web con un par de aplicaciones web en ejecución:Webmail (RoundCube) y Postfix Admin. Todo el tráfico se dirigirá a servicios web HTTPS (seguros).

Primero, vamos a minimizar la información que Apache expone al público. Usando nano, vamos a editar el archivo de configuración /etc/apache2/conf-available/security.conf .

nano /etc/apache2/conf-disponible/security.conf

Busque la variable de configuración ServerTokens y establezca el valor de OS a Prod .

# ServerTokens# Esta directiva configura lo que devuelve como el encabezado de respuesta HTTP del servidor. El valor predeterminado es 'Completo', que envía información sobre el tipo de SO# y se compila en módulos.# Establezca uno de los siguientes:Completo | SO | mínimo | Menor | mayor | Prod# donde Full transmite la mayor cantidad de información y Prod la menor.#ServerTokens MinimalServerTokens Prod#ServerTokens Full

Ahora busque la variable de configuración ServerSignature y establezca el valor de On a Off .

# Opcionalmente agregue una línea que contenga la versión del servidor y el nombre del host virtual# a las páginas generadas por el servidor (documentos de error internos, listados de directorios FTP, resultados de mod_status y mod_info, etc., pero no documentos generados por CGI# o documentos de error personalizados) .# Establézcalo en "Correo electrónico" para incluir también un enlace mailto:a ServerAdmin.# Establézcalo en uno de:On | Apagado | EMailServerSignature Off#ServerSignature On

Ahora puede guardar y salir de este archivo de configuración.

Ahora vamos a habilitar los módulos adicionales rewrite y ssl en Apache para que podamos redirigir el tráfico HTTP predeterminado al puerto HTTPS y admitir certificados SSL dentro de Apache.

a2enmod reescribir ssla2ensite default-ssl

Ahora estamos pasando a personalizar la configuración del sitio web. Estos archivos se encuentran en el directorio /etc/apache2/sites-available . Vamos a actualizar los archivos de configuración predeterminados existentes para admitir servicios SSL.

Primero, edite el archivo de configuración 000-default.conf . Puede reemplazar la configuración existente con la siguiente, simplemente reemplace el ServerName variable con su nombre de host.

nano /etc/apache2/sites-disponible/000-default.conf
 # La directiva ServerName establece el esquema de solicitud, el nombre de host y el puerto que # usa el servidor para identificarse. Esto se usa al crear # URL de redirección. En el contexto de los hosts virtuales, ServerName # especifica qué nombre de host debe aparecer en el encabezado Host:de la solicitud para # coincidir con este host virtual. Para el host virtual predeterminado (este archivo), este valor # no es decisivo, ya que se utiliza como host de último recurso independientemente. # Sin embargo, debe configurarlo explícitamente para cualquier host virtual adicional. ServerName email.linuxbuz.com DocumentRoot /var/www/html  Opciones FollowSymLinks AllowOverride All  # Niveles de registro disponibles:trace8, ..., trace1, debug, info, Notice, advertir, # error, crit, alerta, emerg. # También es posible configurar el nivel de registro para # módulos particulares, p. LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combinado # Para la mayoría de los archivos de configuración de conf-disponible/, que están # habilitados o deshabilitados a nivel global, es posible # incluir una línea solo para un host virtual en particular. Por ejemplo, la # siguiente línea habilita la configuración CGI para este host solo # después de que se haya deshabilitado globalmente con "a2disconf". #Incluir conf-disponible/serve-cgi-bin.conf

Ahora puede guardar y salir de este archivo de configuración.

Si no ha comprado su propio certificado SSL, el archivo de configuración SSL predeterminado del sistema default-ssl.conf funcionará para nuestras necesidades. Sin embargo, si ha comprado un certificado SSL personalizado, deberá editar el archivo de configuración y actualizar las variables SSLCertificateFile , SSLCertificateKeyFile y SSLCertificateChainFile para apuntar a la ubicación donde guardó su certificado y los archivos clave (consulte a su autoridad de certificación o proveedor para obtener asistencia de configuración adicional).

Ahora vamos a crear un .htaccess archivo de configuración que obligará a los visitantes de su servidor web a utilizar el protocolo HTTPS (SSL).

nano /var/www/html/.htaccess

Copie y pegue las siguientes variables en .htaccess configuración.

RewriteEngine OnRewriteCond %{SERVER_PORT} 80RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [L]

Estas variables de configuración le dicen a Apache que habilite el motor mod_rewrite y luego redirija a los visitantes en HTTP (puerto 80) a la URL HTTPS (puerto 443).

[Volver arriba]

5 – Instalar y configurar Memcached

Memcached es un sistema de almacenamiento en caché de objetos de memoria distribuida de alto rendimiento. Este paquete ayudará a acelerar las aplicaciones web dinámicas, como RoundCube y Postfix Webadmin.

Primero, instalemos el paquete usando apt-get.

apt-get install memcached

Para sistemas más pequeños, la configuración predeterminada suele ser suficiente. Bloquea el acceso al host local y proporciona suficientes valores de asignación de memoria. Sin embargo, si está construyendo un servidor más grande que puede tener un uso intensivo, lo más probable es que desee cambiar los valores de asignación de memoria para que sean más altos que el valor predeterminado de 64 MB.

Los archivos de configuración de memcached se encuentran en /etc/memcached.conf .

[Volver arriba]

6 – Instalar los paquetes del servidor de correo

Ahora estamos listos para instalar los paquetes del servidor de correo. Nuevamente, estos se encuentran en un tasksel grupo de paquetes.

apt-get install servidor de correo^

Para ver una lista de los paquetes que se incluyen en esta instalación grupal, puede ejecutar lo siguiente:

tasksel --task-packages servidor de correo

Durante la instalación del paquete, Postfix le hará una serie de preguntas:

  1. Tipo de configuración de instalación:
    Deberá seleccionar “Sitio de Internet ” como el tipo de configuración.
  2. Nombre de host del servidor de correo:
    Asegúrese de ingresar el mismo nombre de host (FQDN) que utilizó en el paso n.º 1
  3. Cree un certificado SSL autofirmado:
    Seleccione la opción "Sí"
  4. Configure el nombre común del certificado SSL:
    Ingrese el mismo nombre de host (FQDN) que usó en el paso n.º 1

Ahora vamos a instalar el resto de los paquetes que se necesitan para que el servidor de correo admita usuarios basados ​​en MySQL, así como los paquetes de detección de spam y antivirus. (Nota:estos paquetes se pueden instalar a través de un solo apt-get install comando, con cada nombre de paquete separado por un espacio, pero se presentan aquí como comandos separados para facilitar la lectura).

apt-get install postfix-mysql dovecot-mysql dovecot-imapd postgreyapt-get install amavis clamav clamav-daemon spamassassinapt-get install php-imap

Este próximo conjunto de paquetes opcionales amplía las capacidades de los paquetes de detección de antivirus y antispam al permitir una mayor inspección de los archivos adjuntos que llegan a su servidor de correo.

apt-get install libnet-dns-perl pyzor razorapt-get install arj bzip2 cabextract cpio archivo gzip nomarch pax descomprimir zip

Ahora, reiniciemos los servicios de Apache2 para que vea los nuevos módulos que le hemos proporcionado.

systemctl reiniciar apache2

[Volver arriba]

7 – Creación de una base de datos MySQL para el servidor de correo electrónico

Ahora estamos listos para crear la base de datos para nuestras cuentas de usuario y otras funciones del servidor de correo.

Para comenzar, debemos iniciar sesión en el servicio de base de datos MySQL como usuario raíz. Necesitará la contraseña que ingresó por primera vez en el paso n.º 2.

mysql -u raíz -p

Ahora verá un indicador de línea de comando diferente (mysql> ). Esta es la consola CLI de MySQL donde puede administrar las bases de datos y las tablas de su servidor MySQL.

Primero, vamos a crear una nueva base de datos llamada "correo", y luego crearemos una cuenta de usuario del sistema con permisos completos para esta nueva base de datos. Asegúrese de reemplazar el <secure password> variable con otra *nueva* contraseña segura para esta cuenta. No utilice la misma contraseña que utilizó para la cuenta de usuario root .

CREAR CORREO DE LA BASE DE DATOS;CREAR USUARIO 'correo'@'localhost' IDENTIFICADO POR 'micontraseña';CONCEDER TODOS LOS PRIVILEGIOS EN EL CORREO.* A 'correo'@'localhost' CON OTORGAR OPCIÓN;LIMPIAR PRIVILEGIOS;SALIR;

Ya hemos configurado la base de datos que usarán los servicios de su servidor de correo.

[Volver arriba]

8.1 – Instalación del administrador de Postfix

Postfix Admin es una herramienta de administración basada en web creada para Postfix. Es una aplicación basada en PHP que maneja dominios virtuales estilo Postfix y usuarios que están almacenados en MySQL o PostgreSQL.

Primero, necesitamos descargar la última versión de la aplicación. Este ejemplo descargará la versión 2.92:verifique siempre la versión en el sitio web del proveedor para asegurarse de que está obteniendo la versión más reciente .

wget https://excellmedia.dl.sourceforge.net/project/postfixadmin/postfixadmin-3.3.1/PostfixAdmin%203.3.1.tar.gz

Ahora vamos a extraer la aplicación y copiarla en el directorio HTML /var/www/html/postfixadmin en nuestro servidor.

tar -xvf PostfixAdmin%203.3.1.tar.gzmv postfixadmin-postfixadmin-cc23eba /var/www/html/postfixadmin

Ahora necesitamos crear un directorio de plantillas y actualizar los permisos de esta nueva carpeta para que www-data cuenta de usuario tiene acceso a ella.

mkdir /var/www/html/postfixadmin/templates_cchown -R www-data:www-data /var/www/html/postfixadmin

[Volver arriba]

8.2 – Configuración del administrador de Postfix

Ahora tenemos algunas configuraciones para actualizar en los archivos de administración de Postfix. Primero, modificaremos el config.inc.php archivo para que sepa cómo comunicarse con la base de datos que acabamos de crear en el Paso #7.

nano /var/www/html/postfixadmin/config.inc.php

Busque la variable 'configured' y restablecer el valor de false a true .

$CONF['configurado'] =verdadero;

Ahora busca la variable 'database_' y reemplace los valores para la configuración de su servidor MySQL. Asegúrate de reemplazar la variable mypassword con la contraseña para el usuario de la base de datos "correo" que ingresó en el Paso #7.

$CONF['database_type'] ='mysqli';$CONF['database_host'] ='localhost';$CONF['database_user'] ='mail';$CONF['database_password'] ='mypassword';$CONF['database_name'] ='correo';

Ahora busca la variable 'admin_email' y reemplace el valor con la dirección de correo electrónico que configurará para su cuenta de correo electrónico de administrador.

$CONF['admin_email'] ='[email protected]';

Ahora busca la variable 'domain_path' y reemplace el valor de 'YES ‘ a ‘NO ‘.

$CONF['ruta_del_dominio'] ='NO';

Ahora busca la variable 'domain_in_mailbox' y reemplace el valor de 'NO ‘ a ‘YES ‘.

$CONF['domain_in_mailbox'] ='SI';

Estas últimas variables de configuración no definen la ruta donde se almacenarán los datos reales del buzón del usuario en el servidor. Estos se definirán más adelante durante los pasos de configuración de Dovecot.

Ahora está listo para guardar el archivo de configuración, ¡pero no salga todavía!

Ahora vamos a abrir un navegador web ingrese la URL de su servidor de correo, apuntando directamente al setup.php página de configuración Asegúrese de reemplazar mail.example.tld con el nombre de host de su servidor real.

https://email.linuxbuz.com/postfixadmin/public/setup.php

Cuando acceda a la URL, la secuencia de comandos comprobará automáticamente el servidor y confirmará que todos los módulos de requisitos previos están instalados y funcionando.

Salida del comprobador de configuración del administrador de Postfix

Una vez completadas las comprobaciones, se le pedirá que introduzca una contraseña de configuración. Esta contraseña se utiliza para crear cuentas de administrador principal para la interfaz web de administración de Postfix.

Ingrese una contraseña segura y presione el botón "Generar hash de contraseña".

Postfix Admin genera hash de contraseña

Hash de contraseña de ejemplo de administrador de Postfix

¡NO cierres el navegador web todavía! Volveremos aquí en unos minutos.

Después de generar el hash de contraseña, necesitaremos actualizar config.inc.php archivo de nuevo con esta contraseña. Busque la variable 'setup_password' y reemplace el valor con el generado a partir del script.

// Para configurar Postfixadmin, DEBE especificar una contraseña hash aquí.// Para crear el hash, visite setup.php en un navegador y escriba una contraseña en el campo,// al enviar se repetirá a usted como un valor hash.$CONF['setup_password'] ='';

Ahora puede guardar y salir del archivo de configuración.

Ahora estamos listos para volver al navegador web y generar la cuenta de "superadministrador" para el portal de administración de Postfix.
Cuando hizo clic en el botón 'Generar hash de contraseña', los campos del formulario cambiaron para parecerse al siguiente ejemplo. Ahora puede completar el formulario para generar una cuenta de superadministrador.

Crear una cuenta de superadministrador con Postfix Admin

También puede crear un usuario administrador con el siguiente comando:

bash /var/www/html/postfixadmin/scripts/postfixadmin-cli admin add [email protected] --superadmin 1 --active 1 --contraseña [email protected] --contraseña2 [email protected]

Deberías obtener el siguiente resultado:

Bienvenido a Postfixadmin-CLI v0.3--------------------------------------- ------------------------¡Se ha agregado el administrador [email protected]!--------------- ------------------------------------------------

[Volver arriba]

9 – Adición de cuentas de usuario (buzones) a Postfix Admin

Ahora estamos listos para crear una cuenta de usuario virtual en nuestro servidor de correo. Para hacer esto, regresaremos a la URL de administración de Postfix en nuestro navegador web e ingresaremos la URL de su servidor de correo. Asegúrese de reemplazar mail.example.tld con el nombre de host de su servidor real.

https://email.linuxbuz.com/postfixadmin/public

Ahora podrá iniciar sesión en el portal de administración de Postfix, donde podrá administrar dominios virtuales y cuentas de usuarios virtuales. Ingrese el nombre de usuario y la contraseña de superadministrador que creó anteriormente durante la configuración del administrador de Postfix y luego presione el botón "Iniciar sesión".

Inicio de sesión de administrador para Postfix Admin

Una vez que haya iniciado sesión en el portal de administración de Postfix, verá un menú en la parte superior de la página.
Las opciones del menú brindan la capacidad de administrar los dominios y usuarios virtuales del servidor de correo de Postfix y ver los archivos de registro.

Menú de administración de Postfix

Postfix Admin Agregar opción de buzón

Para crear un buzón de usuario, haga clic en el enlace rápido "Agregar buzón". Ahora accederá a la pantalla "Asistente para agregar buzones". Complete los detalles en el formulario y presione el botón "Agregar buzón" una vez completado. El asistente creará su primera cuenta de usuario virtual (buzón de correo).

Creando un nuevo buzón en Postfix Admin

[Volver arriba]

10 – Crear un usuario del sistema para manejar directorios de correo virtual

Los usuarios virtuales son aquellos que técnicamente no existen en su servidor Linux y no utilizan los métodos estándar de Linux para la autenticación o la entrega y el almacenamiento de correo. Las cuentas de usuario virtual de su servidor de correo se definen dentro de la base de datos creada por Postfix Admin en lugar de existir como cuentas de usuario del sistema, por lo que debemos crear una sola cuenta de usuario del sistema que manejará servicios como el almacenamiento de correo y la autenticación de Dovecot.

Primero, creemos una cuenta de usuario del sistema llamada vmail y darle permisos a los directorios requeridos. Esta cuenta del sistema será responsable de las operaciones de back-end para el almacenamiento y los servicios del buzón.

useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Controlador virtual de MailDir" vmailmkdir -p /var/vmailchown vmail:mail /var/vmailchmod 770 /var/vmail 

Una explicación de los comandos anteriores:

  1. Creamos la cuenta de usuario del sistema vmail , asignó el directorio de inicio como /var/vmail y restringió la capacidad de esta cuenta para iniciar sesión a través de shell o consola.
  2. Luego creamos manualmente el directorio de inicio /var/vmail para la nueva cuenta de usuario del sistema.
  3. Luego establecemos el propietario y el grupo para /var/vmail directorio.
  4. Luego le dimos permisos completos al usuario del sistema vmail y el grupo de seguridad mail asignado al directorio /var/vmail .

[Volver arriba]

11 – Configuración de Dovecot

Dovecot es un servidor de correo electrónico IMAP y POP3 de código abierto escrito pensando en la seguridad. Dovecot tiene muchas funciones integradas, que puede ver en su sitio web público, http://www.dovecot.org.

Dovecot será responsable de administrar las conexiones IMAP y POP3, administrar los directorios de correo locales y recibir el correo entrante entregado desde el proceso del servidor de correo Postfix SMTP. Dovecot también gestionará la autenticación de las conexiones SMTP. Muchos archivos diferentes dentro de /etc/dovecot manejador de directorio configuración de Dovecot.

Primero, configuremos Dovecot para usar la base de datos configurada por Postfix Admin. Primero editaremos el archivo de configuración /etc/dovecot/conf.d/auth-sql.conf.ext

nano /etc/dovecot/conf.d/auth-sql.conf.ext

Edite o actualice el contenido para tener la siguiente configuración.

# Buscar contraseñas de usuario en una base de datos SQL como# se define en /etc/dovecot/dovecot-sql.conf.extpassdb { driver =sql args =/etc/dovecot/dovecot-sql.conf.ext}# Buscar información de usuario de una base de datos SQL como se define en /etc/dovecot/dovecot-sql.conf.extuserdb { driver =sql args =/etc/dovecot/dovecot-sql.conf.ext}

Una vez hecho esto, guarde y salga del archivo de configuración.

Archivo de configuración SQL

Ahora vamos a hacer una copia de seguridad del archivo de configuración de SQL original /etc/dovecot/dovecot-sql.conf.ext y cree un nuevo archivo de configuración para que lo use Dovecot.

mv /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.originalnano /etc/dovecot/dovecot-sql.conf.ext

Ahora copie el contenido a continuación en el archivo de configuración y actualice los valores para la base de datos de correo que configuró en el Paso 7.

# Controlador de base de datos:mysql, pgsql, sqlitedriver =mysql# Conexión de base de datos:# connect =host=192.168.1.1 dbname=users# connect =host=sql.example.com dbname=usuario virtual=contraseña virtual=blarg# connect =/etc/dovecot/authdb.sqlite#connect =host=localhost dbname=mail user=mail password=mypassword# Esquema de contraseña predeterminado.## La lista de esquemas admitidos se encuentra en# http://wiki2.dovecot.org/Authentication/ PasswordSchemes## Esquema de cifrado débil pero común:default_pass_scheme =MD5-CRYPT# # Comente lo anterior y elimine el comentario a continuación # para un cifrado más fuerte:#default_pass_scheme - SHA256-CRYPT# Defina la consulta para obtener una contraseña de usuario.password_query =\ SELECCIONE el nombre de usuario como usuario, contraseña, '/var/vmail/%d/%n' como userdb_home, \ 'maildir:/var/vmail/%d/%n' como userdb_mail, 150 como userdb_uid, 8 como userdb_gid \ FROM mailbox WHERE nombreusuario ='%u' AND active ='1'# Defina la consulta para obtener información del usuario.user_query =\ SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/% n' como correo , \ 150 AS uid, 8 AS gid, concat('dirsize:storage=', cuota) AS cuota \ FROM mailbox WHERE nombreusuario ='%u' AND activo ='1'

Una vez hecho esto, guarde y salga de este archivo de configuración.

Archivo de definición de autenticación

Ahora vamos a hacer una copia de seguridad del archivo de definición de autenticación /etc/dovecot/conf.d/10-auth.conf y crea uno nuevo.

mv /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.originalnano /etc/dovecot/conf.d/10-auth.conf

Ahora copie el contenido a continuación en el archivo de definición.

# Desactive el comando LOGIN y todas las demás autenticaciones de texto sin formato a menos que se use # SSL/TLS (capacidad LOGINDISABLED). Tenga en cuenta que si la IP remota # coincide con la IP local (es decir, se está conectando desde la misma computadora), la # conexión se considera segura y se permite la autenticación de texto simple.disable_plaintext_auth =yes# Lista separada por espacios de los mecanismos de autenticación buscados:# simple login digest-md5 cram-md5 ntlm rpa apop anónimo gssapi otp skey# gss-spnego# NOTA:Consulte también disabled_plaintext_auth setting.auth_mechanisms =plain login#### Bases de datos de usuarios y contraseñas## ## La base de datos de contraseñas se utiliza para verificar la contraseña del usuario (y nada más). # Puede tener múltiples passdbs y userdbs. Esto es útil si desea # permitir que los usuarios del sistema (/etc/passwd) y los usuarios virtuales inicien sesión sin # duplicar los usuarios del sistema en la base de datos virtual. ## ## La base de datos de usuarios especifica dónde se encuentran los correos electrónicos y qué ID de usuario/grupo los poseen. Para la configuración de UID único, use la base de datos "estática" userdb.## # Use la configuración de la base de datos SQL en lugar de cualquiera de las otras. 

Una vez hecho esto, guarde y salga del archivo.

Archivo de definición de correo

A continuación, le diremos a Dovecot dónde almacenar el correo de los usuarios virtuales. Realizaremos una copia de seguridad del archivo de definición de correo /etc/dovecot/conf.d/10-mail.conf y creando uno nuevo.

mv /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.originalnano /etc/dovecot/conf.d/10-mail.conf

Ahora copie el contenido a continuación en el archivo de definición.

# Ubicación de los buzones de correo de los usuarios. El valor predeterminado está vacío, lo que significa que Dovecot# intenta encontrar los buzones automáticamente. Esto no funcionará si el número de usuario aún no tiene ningún correo, por lo que debe decirle explícitamente a Dovecot la ubicación completa.## Si está utilizando mbox, proporcione una ruta al archivo INBOX (por ejemplo, /var/ mail/%u)# no es suficiente. También deberá decirle a Dovecot dónde se guardan los otros buzones. Esto se denomina "directorio de correo raíz" y debe ser la primera # ruta proporcionada en la configuración de ubicación de correo. ## Hay algunas variables especiales que puede usar, por ejemplo:## %u - nombre de usuario# %n - usuario parte en [email protected], igual que %u si no hay un dominio# %d - parte del dominio en [email protected], vacío si no hay un dominio# %h - directorio de inicio## Ver doc/wiki/Variables.txt para la lista completa. Algunos ejemplos:## mail_ubicación =maildir:~/Maildir# mail_ubicación =mbox:~/mail:INBOX=/var/mail/%u# mail_ubicación =mbox:/var/mail/%d/%1n/%n:INDEX =/var/indexes/%d/%1n/%n## #mail_location =maildir:/var/vmail/%d/%n# Usuario y grupo del sistema utilizados para acceder a los correos. Si usa varios, userdb# puede anularlos devolviendo los campos uid o gid. Puede usar números # o nombres. mail_uid =vmailmail_gid =mail# Rango de UID válido para usuarios, por defecto es 500 y superior. Esto es principalmente # para asegurarse de que los usuarios no puedan iniciar sesión como demonios u otros usuarios del sistema. el uid de usuario de vmail aquí.first_valid_uid =150last_valid_uid =150# Si necesita establecer varias ubicaciones de buzón de correo o desea cambiar la configuración del espacio de nombres predeterminado#, puede hacerlo definiendo secciones de espacios de nombres.## Puede tener espacios de nombres privados, compartidos y públicos. Los espacios de nombres privados # son para correos personales del usuario. Los espacios de nombres compartidos son para acceder a los buzones de correo de otros # usuarios que se han compartido. Los espacios de nombres públicos son para buzones de correo compartidos que son administrados por sysadmin. Si crea espacios de nombres # compartidos o públicos, normalmente también querrá habilitar el complemento ACL; de lo contrario, todos los # usuarios pueden acceder a todos los buzones de correo compartidos, suponiendo que tengan permisos # en el nivel del sistema de archivos para hacerlo. Bandeja de entrada de espacio de nombres { # Tipo de espacio de nombres:privado, compartido o público #tipo =privado # Separador de jerarquía a usar. Debe usar el mismo separador para todos los # espacios de nombres o algunos clientes se confundirán. '/' suele ser bueno. # Sin embargo, el valor predeterminado depende del formato de almacenamiento de correo subyacente. #separator =# Prefijo requerido para acceder a este espacio de nombres. Esto debe ser diferente para # todos los espacios de nombres. Por ejemplo, "Público/". #prefix =# Ubicación física del buzón. Tiene el mismo formato que # mail_ubicación, que también es el predeterminado. #ubicación =# Solo puede haber un INBOX, y esta configuración define qué espacio de nombres # lo tiene. bandeja de entrada =yes # Si el espacio de nombres está oculto, no se anuncia a los clientes a través de la extensión NAMESPACE #. Lo más probable es que también desee configurar list=no. Esto es principalmente # útil cuando se convierte desde otro servidor con diferentes espacios de nombres que # desea desaprobar pero seguir funcionando. Por ejemplo, puede crear # espacios de nombres ocultos con los prefijos "~/mail/", "~%u/mail/" y "mail/". #hidden =no # Show the mailboxes under this namespace with LIST command. This makes the # namespace visible for clients that don't support NAMESPACE extension. # "children" value lists child mailboxes, but hides the namespace prefix. #list =yes # Namespace handles its own subscriptions. If set to "no", the parent # namespace handles them (empty prefix should always have this as "yes") #subscriptions =yes}

Once done, save and exit the file.

SSL Definition File

If you have an SSL certificate that you would like to install, you will need to modify the Dovecot SSL definition file /etc/dovecot/conf.d/10-ssl.conf with your valid certificate. Remember, you will have to also include your CA certificate bundle if one has been provided by the certificate issuer.

Dovecot Master Definition File

We are now going to update the Dovecot master definition file /etc/dovecot/10-master.conf to include the system user account and the postfix settings.

nano /etc/dovecot/conf.d/10-master.conf

Search for the config definition service auth and replace the definition block with the following.

service auth { # auth_socket_path points to this userdb socket by default. It's typically # used by dovecot-lda, doveadm, possibly imap process, etc. Users that have # full permissions to this socket are able to get a list of all usernames and # get the results of everyone's userdb lookups. # # The default 0666 mode allows anyone to connect to the socket, but the # userdb lookups will succeed only if the userdb returns an "uid" field that # matches the caller process's UID. Also if caller's uid or gid matches the # socket's uid or gid the lookup succeeds. Anything else causes a failure. # # To give the caller full permissions to lookup all users, set the mode to # something else than 0666 and Dovecot lets the kernel enforce the # permissions (e.g. 0777 allows everyone full permissions). unix_listener auth-userdb { mode =0600 user =vmail group =mail } # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode =0660 # Assuming the default Postfix userid and groupid user =postfix group =postfix } }

Once done, save and exit the file.

LDA Definition File

In some cases, you may have to explicitly define the postmaster email address for your server. To do this, you will need to edit the LDA definition file /etc/dovecot/conf.d/15-lda.conf . If you see error messages like Invalid settings: postmaster_address setting not given showing up in the mail server logs, then this configuration change is the likely fix for that error.

nano /etc/dovecot/conf.d/15-lda.conf

Search for the definition postmaster_address and update the value to include your domain’s postmaster account.

# Address to use when sending rejection mails.# Default is [email protected]. %d expands to recipient domain.#postmaster_address =postmaster_address [email protected]

Once done, save and exit the file.

We now need to update the Dovecot configuration directory to be accessible to the Dovecot service account as well as the vmail system account.

chown -R vmail:dovecot /etc/dovecotchmod -R o-rwx /etc/dovecot

You have now completed the configuration of the Dovecot service and we can now move on to the antivirus and anti-spam services.
[Back to top]

12 – Configuring Amavis, ClamAV, and SpamAssassin

What are these packages?

– Amavis is an interface between Postfix and content filtering packages such as SpamAssassin and ClamAV.

– ClamAV is a high-performance antivirus engine for detecting trojans, viruses, malware &other malicious threats.

– SpamAssassin is a high-performance anti-spam platform famous for its Bayesian spam filtering capabilities. It gives system administrators a filter to classify messages and block unsolicited bulk email.

We will now walk you through the process of installing some protection for your mail server. For the most part, the default configurations are sufficient for a good line of defense against spam and viruses getting through your mail server. If you have special requirements, you can, of course, spend a good amount of time crafting intricate processing rules.

Let’s first create the two system user accounts, amavis and clamav, and allow them to collaborate together.

adduser clamav amavisadduser amavis clamav

We are now going to enable the Amavis daemon by editing the /etc/amavis/conf.d/15-content_filter_mode archivo de configuración.

nano /etc/amavis/conf.d/15-content_filter_mode
use strict; # You can modify this file to re-enable SPAM checking through spamassassin# and to re-enable antivirus checking. ## Default antivirus checking mode# Please note, that anti-virus checking is DISABLED by# default.# If You wish to enable it, please uncomment the following lines:@bypass_virus_checks_maps =( %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re); ## Default SPAM checking mode# Please note, that anti-spam checking is DISABLED by# default.# If You wish to enable it, please uncomment the following lines:@bypass_spam_checks_maps =( %bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re); 1; # ensure a defined return

Once done, you can save and exit the file.

We are now going to enable the SpamAssassin software by editing the /etc/default/spamassassin archivo de configuración.

nano /etc/default/spamassassin

Now search for the variable CRON=0 in the configuration file and change the value to 1.

# Cronjob# Set to anything but 0 to enable the cron job to automatically update# spamassassin's rules on a nightly basisCRON=1

Next, enable the SpamAssassin software with the following command:

update-rc.d spamassassin enable

We are now going to set up Amavis to use the database from Postfix Admin to identify mail that is arriving for local delivery. By default, SpamAssassin and Amavis will only check mail that is determined to be arriving for local delivery. Because we are set up to use virtual user mailboxes, we have to tell the services where to locate the user accounts.

To do this, we need to update the configuration file /etc/amavis/conf.d/50-user .

nano /etc/amavis/conf.d/50-user

Replace the contents of this configuration file with the below. Be sure to update the MySQL database password to use the password for the database user “mail” that you entered in Step #7.

use strict; ## Place your configuration directives here. They will override those in# earlier files.## See /usr/share/doc/amavisd-new/ for documentation and examples of# the directives you can use in this file# # Three concurrent processes. This should fit into the RAM available on an# AWS micro instance. This has to match the number of processes specified# for Amavis in /etc/postfix/master.cf.$max_servers =3; # Add spam info headers if at or above that level - this ensures they# are always added.$sa_tag_level_deflt =-9999; # Check the database to see if mail is for local delivery, and thus# should be spam checked.@lookup_sql_dsn =( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'mail', 'mypassword']);$sql_select_policy ='SELECT domain from domain WHERE CONCAT("@",domain) IN (%k)'; # Uncomment to bump up the log level when testing.# $log_level =2; #------------ Do not modify anything below this line -------------1; # ensure a defined return

Once done, save and exit the configuration file.

We will now need to restart the Amavis and SpamAssassin services so that they see the new configuration settings.

service amavis restartservices spamassassin restart

[Back to top]

13 – Configuring Postfix

We are now ready to configure the Postfix mail server. Postfix handles all of the incoming and outgoing mail via the SMTP protocol, and we are going to configure it to integrate will all of the other software packages that we have just configured.

From a high level view, we are needing Postfix to hand off incoming mail to the SpamAssassin and ClamAV scanners for filtering, and then to pass unblocked mail messages on to the Dovecot services for final mailbox delivery. Postfix will also authenticate the virtual users who connect via SMTP in order to send email messages.

We are going to create a definition file for Postfix to identify users and mailboxes. Please note that the “hosts” directive in these configuration files must be exactly the same as the “bind-address” in the /etc/mysql/my.cnf configuration files.

First, let’s look up the value of the bind-address in the MySQL configuration files.

cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep bind-address
<>bind-address =127.0.0.1

Now that we have the configuration value, we are going to create the required Postfix definition files.

Copy and paste the content for each file. Make sure to update the password value with the password for the database user “mail” that you entered in Step #7.

/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf

nano /etc/postfix/mysql_virtual_alias_domainaliases_maps.cf
user =mail password =mypassword hosts =127.0.0.1 dbname =mail query =SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain ='%d' AND alias.address=concat('%u', '@', alias_domain.target_domain) AND alias.active =1

Once done, save and exit the configuration file.

/etc/postfix/mysql_virtual_alias_maps.cf

nano /etc/postfix/mysql_virtual_alias_maps.cf
user =mailpassword =mypasswordhosts =127.0.0.1dbname =mailtable =aliasselect_field =gotowhere_field =addressadditional_conditions =and active ='1'

Once done, save and exit the configuration file.

/etc/postfix/mysql_virtual_domains_maps.cf

nano /etc/postfix/mysql_virtual_domains_maps.cf
user =mailpassword =mypasswordhosts =127.0.0.1dbname =mailtable =domainselect_field =domainwhere_field =domainadditional_conditions =and backupmx ='0' and active ='1'

Once done, save and exit the configuration file.

/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf

nano /etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf
user =mailpassword =mypasswordhosts =127.0.0.1dbname =mailquery =SELECT maildir FROM mailbox, alias_domain WHERE alias_domain.alias_domain ='%d' AND mailbox.username=concat('%u', '@', alias_domain.target_domain ) AND mailbox.active =1

Once done, save and exit the configuration file.

/etc/postfix/mysql_virtual_mailbox_maps.cf

nano /etc/postfix/mysql_virtual_mailbox_maps.cf
user =mailpassword =mypasswordhosts =127.0.0.1dbname =mailtable =mailboxselect_field =CONCAT(domain, '/', local_part)where_field =usernameadditional_conditions =and active ='1'

Once done, save and exit the configuration file.

We are now going to create the Postfix header-checking directives. These directives remove certain headers when relaying mail through the system. This helps improve privacy for sending users by removing specific headers like origin IP Address and the mail software identifiers. Copy and paste the below content into the file.

nano /etc/postfix/header_checks
/^Received:/ IGNORE/^User-Agent:/ IGNORE/^X-Mailer:/ IGNORE/^X-Originating-IP:/ IGNORE/^x-cr-[a-z]*:/ IGNORE/^Thread-Index:/ IGNORE

Once done, save and exit.

We are now ready to make some changes to the system default Postfix /etc/postfix/main.cf archivo de configuración.

This file contains a large amount of complex choices and options for a Postfix server installation. It is far beyond the scope of this article to explain every option or best practice available, so we strongly suggest that you read through the Postfix configuration options /usr/share/postfix/main.cf.dist or the software vendor online manual. O’Reilly has also published a very good book named Postfix:The Definitive Guide .

First, we are going to create a backup of the original main.cf configuration file and then create a new copy of the file.

mv /etc/postfix/main.cf /etc/postfix/main.cf.originalnano /etc/postfix/main.cf

Now, copy the below content into the /etc/postfix/main.cf archivo de configuración.

# See /usr/share/postfix/main.cf.dist for a commented, more complete version # The first text sent to a connecting process.smtpd_banner =$myhostname ESMTP $mail_namebiff =no# appending .domain is the MUA's job.append_dot_mydomain =noreadme_directory =no # SASL parameters# ---------------------------------# Use Dovecot to authenticate.smtpd_sasl_type =dovecot# Referring to /var/spool/postfix/private/authsmtpd_sasl_path =private/authsmtpd_sasl_auth_enable =yesbroken_sasl_auth_clients =yessmtpd_sasl_security_options =noanonymoussmtpd_sasl_local_domain =smtpd_sasl_authenticated_header =yes # TLS parameters# --------------------------------- # Replace this with your SSL certificate path if you are using one.smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pemsmtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key# The snakeoil self-signed certificate has no need for a CA file. But# if you are using your own SSL certificate, then you probably have# a CA certificate bundle from your provider. The path to that goes# here.#smtpd_tls_CAfile=/path/to/ca/file smtp_tls_note_starttls_offer =yessmtpd_tls_loglevel =1smtpd_tls_received_header =yessmtpd_tls_session_cache_timeout =3600stls_random_source =dev:/dev/urandom#smtpd_tls_session_cache_database =btree:${data_directory}/smtpd_scache#smtp_tls_session_cache_database =btree:${data_directory}/smtp_scache # Note that forcing use of TLS is going to cause breakage - most mail servers# don't offer it and so delivery will fail, both incoming and outgoing. This is# unfortunate given what various governmental agencies are up to these days. # These are Postfix 2.2 only.## Enable (but don't force) use of TLS on incoming smtp connections.smtpd_use_tls =yessmtpd_enforce_tls =no# Enable (but don't force) use of TLS on outgoing smtp connections.smtp_use_tls =yessmtp_enforce_tls =no # These are Postfix 2.3 and later.## Enable (but don't force) all incoming smtp connections to use TLS.smtpd_tls_security_level =may# Enable (but don't force) all outgoing smtp connections to use TLS.smtp_tls_security_level =may # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for# information on enabling SSL in the smtp client. # SMTPD parameters# --------------------------------- # Uncomment the next line to generate "delayed mail" warnings#delay_warning_time =4h# will it be a permanent error or temporaryunknown_local_recipient_reject_code =450# how long to keep message on queue before return as failed.# some have 3 days, I have 16 days as I am backup server for some people# whom go on holiday with their server switched off.maximal_queue_lifetime =7d# max and min time in seconds between retries if connection failedminimal_backoff_time =1000smaximal_backoff_time =8000s# how long to wait when servers connect before receiving rest of datasmtp_helo_timeout =60s# how many address can be used in one message.# effective stopper to mass spammers, accidental copy in whole address list# but may restrict intentional mail shots.smtpd_recipient_limit =16# how many error before back off.smtpd_soft_error_limit =3# how many max errors before blocking it.smtpd_hard_error_limit =12 # This next set are important for determining who can send mail and relay mail# to other servers. It is very important to get this right - accidentally producing# an open relay that allows unauthenticated sending of mail is a Very Bad Thing.## You are encouraged to read up on what exactly each of these options accomplish. # Requirements for the HELO statementsmtpd_helo_restrictions =permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit# Requirements for the sender detailssmtpd_sender_restrictions =permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit# Requirements for the connecting server# This is primarily the RBL (Realtime Blacklist) Filteringsmtpd_client_restrictions =reject_rbl_client b.barracudacentral.org, reject_rbl_client zen.spamhaus.org, reject_rbl_client spam.dnsbl.sorbs.net# Requirement for the recipient address. Note that the entry for# "check_policy_service inet:127.0.0.1:10023" enables Postgrey.smtpd_recipient_restrictions =reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permitsmtpd_data_restrictions =reject_unauth_pipelining# This is a new option as of Postfix 2.10+, and is required in addition to# smtpd_recipient_restrictions for things to work properly in this setup.smtpd_relay_restrictions =reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit # require proper helo at connectionssmtpd_helo_required =yes# waste spammers time before rejecting themsmtpd_delay_reject =yesdisable_vrfy_command =yes # General host and delivery info# ---------------------------------- myhostname =email.linuxbuz.commyorigin =/etc/hostname# Some people see issues when setting mydestination explicitly to the server# subdomain, while leaving it empty generally doesn't hurt. So it is left empty here.# mydestination =mail.example.com, localhostmydestination =# If you have a separate web server that sends outgoing mail through this# mailserver, you may want to add its IP address to the space-delimited list in# mynetworks, e.g. as 111.222.333.444/32.mynetworks =127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128mailbox_size_limit =0recipient_delimiter =+inet_interfaces =allmynetworks_style =host # This specifies where the virtual mailbox folders will be located.virtual_mailbox_base =/var/vmail# This is for the mailbox location for each user. The domainaliases# map allows us to make use of Postfix Admin's domain alias feature.virtual_mailbox_maps =mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf# and their user idvirtual_uid_maps =static:150# and group idvirtual_gid_maps =static:8# This is for aliases. The domainaliases map allows us to make# use of Postfix Admin's domain alias feature.virtual_alias_maps =mysql:/etc/postfix/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf# This is for domain lookups.virtual_mailbox_domains =mysql:/etc/postfix/mysql_virtual_domains_maps.cf # Integration with other packages# --------------------------------------- # Tell postfix to hand off mail to the definition for dovecot in master.cfvirtual_transport =dovecotdovecot_destination_recipient_limit =1 # Use amavis for virus and spam scanningcontent_filter =amavis:[127.0.0.1]:10024 # Header manipulation# -------------------------------------- # Getting rid of unwanted headers. See:https://posluns.com/guides/header-removal/header_checks =regexp:/etc/postfix/header_checks# getting rid of x-original-toenable_original_recipient =no

Once done, save and exit.

We are now ready to move on to the Postfix /etc/postfix/master.cf archivo de configuración. This configuration file also contains a large number of complex choices and options for a Postfix server installation that is far beyond the scope of this article to explain.

We are going to create a backup of the original master.cf configuration file and then create a new file.

mv /etc/postfix/master.cf /etc/postfix/master.cf.originalnano /etc/postfix/master.cf

Now, copy the below content into the /etc/postfix/master.cf archivo de configuración.

## Postfix master process configuration file. For details on the format# of the file, see the master(5) manual page (command:"man 5 master").## Do not forget to execute "postfix reload" after editing this file.## ==========================================================================# service type private unpriv chroot wakeup maxproc command + args# (yes) (yes) (yes) (never) (100)# ==========================================================================# SMTP on port 25, unencrypted.smtp inet n - - - - smtpd#smtp inet n - - - 1 postscreen#smtpd pass - - - - - smtpd#dnsblog unix - - - - 0 dnsblog#tlsproxy unix - - - - 0 tlsproxy # SMTP with TLS on port 587.submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_enforce_tls=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject -o smtpd_sasl_tls_security_options=noanonymous # SMTP over SSL on port 465.smtps inet n - - - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject -o smtpd_sasl_security_options=noanonymous,noplaintext -o smtpd_sasl_tls_security_options=noanonymous #628 inet n - - - - qmqpdpickup fifo n - - 60 1 pickup -o content_filter=-o receive_override_options=no_header_body_checkscleanup unix n - - - 0 cleanupqmgr fifo n - n 300 1 qmgr#qmgr fifo n - n 300 1 oqmgrtlsmgr unix - - - 1000? 1 tlsmgrrewrite unix - - - - - trivial-rewritebounce unix - - - - 0 bouncedefer unix - - - - 0 bouncetrace unix - - - - 0 bounceverify unix - - - - 1 verifyflush unix n - - 1000? 0 flushproxymap unix - - n - - proxymapproxywrite unix - - n - 1 proxymapsmtp unix - - - - - smtprelay unix - - - - - smtp# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5showq unix n - - - - showqerror unix - - - - - errorretry unix - - - - - errordiscard unix - - - - - discardlocal unix - n n - - localvirtual unix - n n - - virtuallmtp unix - - - - - lmtpanvil unix - - - - 1 anvilscache unix - - - - 1 scache## ====================================================================# Interfaces to non-Postfix software. Be sure to examine the manual# pages of the non-Postfix software to find out what options it wants.## Many of the following services use the Postfix pipe(8) delivery# agent. See the pipe(8) man page for information about ${recipient}# and other message envelope options.# ====================================================================## maildrop. See the Postfix MAILDROP_README file for details.# Also specify in main.cf:maildrop_destination_recipient_limit=1#maildrop unix - n n - - pipe flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}## ====================================================================## Recent Cyrus versions can use the existing "lmtp" master.cf entry.## Specify in cyrus.conf:# lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4## Specify in main.cf one or more of the following:# mailbox_transport =lmtp:inet:localhost# virtual_transport =lmtp:inet:localhost## ====================================================================## Cyrus 2.1.5 (Amos Gouaux)# Also specify in main.cf:cyrus_destination_recipient_limit=1##cyrus unix - n n - - pipe# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}## ====================================================================# Old example of delivery via Cyrus.##old-cyrus unix - n n - - pipe# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}## ====================================================================## See the Postfix UUCP_README file for configuration details.#uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)## Other external delivery methods.#ifmail unix - n n - - pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)bsmtp unix - n n - - pipe flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipientscalemail-backend unix - n n - 2 pipe flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}mailman unix - n n - - pipe flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user} # The next two entries integrate with Amavis for anti-virus/spam checks.amavis unix - - - - 3 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20127.0.0.1:10025 inet n - - - - smtpd -o content_filter=-o local_recipient_maps=-o relay_recipient_maps=-o smtpd_restriction_classes=-o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions=-o smtpd_sender_restrictions=-o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions=-o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks # Integration with Dovecot - hand mail over to it for local delivery, and# run the process under the vmail user and mail group.dovecot unix - n n - - pipe flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecot-lda -d $(recipient)

Once done, save and exit.

We are now ready to restart all of the mail services and test the server.

service postfix restartservice spamassassin restartservice clamav-daemon restartservice amavis restartservice dovecot restart

While testing your new mail server, make sure to watch the log files closely for any errors or unusual responses.
The mail server log files are located here:

  • General Logging:/var/log/mail.log
  • Error Logging:/var/log/mail.err

[Back to top]

14 – Reverse DNS Lookup

You will now need to set up reverse DNS lookup for your mail server.
Reverse DNS is IP-address-to-domain-name mapping – the opposite of forward (normal) DNS which maps domain names to IP addresses. Reverse DNS is mostly used by people for such things as tracking where a website visitor came from or where an email message originated, for example. Reverse DNS is also important for mail server applications. Many email servers on the Internet are configured to reject incoming emails from any IP address which does not have reverse DNS record configured.

Unless you also administer your own DNS server, you can update reverse DNS with your ISP (Internet Service Provider) or via the hosting provider of your server.

[Back to top]

15 – Install RoundCube Webmail

Now we are going to install the RoundCube Webmail application. This application will allow your remote users to connect to their mailbox through a web browser.

apt-get install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra

During the installation process, the system will ask you the prerequisite install questions. Note:you will need the password for the MySQL root user you set up in Step 2.

Configure database for roundcube with dbconfig-common?>> Select 'YES'Database type to be used by roundcube:>> Select 'mysql'Password of the database's administrative user:>> Enter the 'root' MySQL password that you created.MySQL application password for roundcube:>> Enter a new secure password for the RoundCube application to use.

Once you are finished with the pre-installation questions, you should see the following output. Double check the output to make sure there are not errors posted during the installation process.

dbconfig-common:writing config to /etc/dbconfig-common/roundcube.conf Creating config file /etc/dbconfig-common/roundcube.conf with new versionCreating config file /etc/roundcube/debian-db.php with new versiongranting access to database roundcube for [email protected]:success.verifying access for [email protected]:success.creating database roundcube:success.verifying database roundcube exists:success.populating database via sql... done.dbconfig-common:flushing administrative passwordCreating config file /etc/roundcube/config.inc.php with new versionapache2_invoke:Enable configuration roundcube.conf * Reloading web server apache2 * * Reloading web server apache2 * Setting up roundcube (1.4.3) ...Setting up roundcube-plugins (1.4.3) ...Setting up roundcube-plugins-extra (0.9.2-20130819) ...Processing triggers for dictionaries-common (1.20.5) ...aspell-autobuildhash:processing:en [en-common]aspell-autobuildhash:processing:en [en-variant_0]aspell-autobuildhash:processing:en [en-variant_1]aspell-autobuildhash:processing:en [en-variant_2]aspell-autobuildhash:processing:en [en-w_accents-only]aspell-autobuildhash:processing:en [en-wo_accents-only]aspell-autobuildhash:processing:en [en_CA-variant_0]aspell-autobuildhash:processing:en [en_CA-variant_1]aspell-autobuildhash:processing:en [en_CA-w_accents-only]aspell-autobuildhash:processing:en [en_CA-wo_accents-only]aspell-autobuildhash:processing:en [en_GB-ise-w_accents-only]aspell-autobuildhash:processing:en [en_GB-ise-wo_accents-only]aspell-autobuildhash:processing:en [en_GB-ize-w_accents-only]aspell-autobuildhash:processing:en [en_GB-ize-wo_accents-only]aspell-autobuildhash:processing:en [en_GB-variant_0]aspell-autobuildhash:processing:en [en_GB-variant_1]aspell-autobuildhash:processing:en [en_US-w_accents-only]aspell-autobuildhash:processing:en [en_US-wo_accents-only]Setting up aspell (0.60.7~20110707-1ubuntu1) ...Processing triggers for dictionaries-common (1.20.5) ...Setting up aspell-en (7.1-0-1) ...Processing triggers for libc-bin (2.19-0ubuntu6.6) ...Processing triggers for dictionaries-common (1.20.5) [email protected]#

Next, we need to customize some of the RoundCube configuration files. First, we are going to add the RoundCube application into our current Apache configuration files using path alias directives. The default configuration file is installed at /etc/apache2/conf-available/roundcube.conf

nano /etc/apache2/conf-available/roundcube.conf

We now need to remove the two comment flags in front of the alias directives. If you would like to use a different alias name, you can change that here as well. The default alias will use the URL http://<your-server-url>/roundcube/

 Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/ Alias /roundcube /var/lib/roundcube

Once done, save and exit the file.

Now we are going to modify the /etc/roundcube/config.inc.php archivo de configuración. This file is where you can customize the RoundCube advanced settings.

nano /etc/roundcube/config.inc.php

Locate the following directives and update the values to match the following.

$config['default_host'] ='';$config['smtp_server'] ='localhost';$config['smtp_port'] =25;$config['smtp_user'] ='%u';$config['smtp_pass'] ='%p';$config['support_url'] ='';

Once done, save and exit the configuration file.

Finally, restart the apache service to apply the changes:

systemctl reiniciar apache2

You should now be able to use your new RoundCube webmail application for sending and receiving message.

[Back to top]

Congratulations!

You have now set up a fully functional and secure mail server on your VPS hosting account from Atlantic.Net.

Obtenga más información sobre nuestros servicios de alojamiento VPS y servidores privados virtuales.


Linux
  1. Cómo configurar el servidor de correo Zimbra en Ubuntu 16

  2. Configurar el servidor Urbackup en Ubuntu 20.04

  3. Configurar el servidor Rsyslog en Ubuntu 20.04 - ¿Cómo hacerlo?

  4. Instale el servidor de correo Postfix y Dovecot en Ubuntu o Debian

  5. Configurar el reenvío de correo en postfix en Ubuntu o Debian

Servidor de correo Postfix

Cómo configurar un servidor de correo completo (Postfix) usando 'SquirrelMail' (Webmail) en Ubuntu/Debian

Cómo:Configuración inicial del servidor Ubuntu 15.04

Configuración del servidor de correo Postfix en Ubuntu 14.04

Configuración inicial del servidor con Ubuntu 18.04

Cómo configurar un servidor de correo SMTP con Postfix en Ubuntu 18.04