Módulo de Correo#

El módulo principal de correo implementa la funcionalidad básica de un servidor proxy de correo: esto incluye soporte para los protocolos SMTP, IMAP y POP3, configuración de bloques de servidor, enrutamiento de solicitudes de correo, autenticación de usuarios y soporte SSL/TLS para asegurar las conexiones de correo.

Los otros módulos en esta sección amplían esta funcionalidad, permitiéndote configurar y optimizar de manera flexible el servidor de correo para varios escenarios y requisitos.

Cuando se compila desde el código fuente, este módulo no se compila de forma predeterminada; debe habilitarse con la opción de compilación --with-mail. En paquetes e imágenes de nuestros repositorios, el módulo está incluido en la compilación.

Ejemplo de Configuración#

worker_processes auto;

error_log /var/log/angie/error.log info;

events {
    worker_connections  1024;
}

mail {
    server_name       mail.example.com;
    auth_http         localhost:9000/cgi-bin/auth.cgi;

    imap_capabilities IMAP4rev1 UIDPLUS IDLE LITERAL+ QUOTA;

    pop3_auth         plain apop cram-md5;
    pop3_capabilities LAST TOP USER PIPELINING UIDL;

    smtp_auth         login plain cram-md5;
    smtp_capabilities "SIZE 10485760" ENHANCEDSTATUSCODES 8BITMIME DSN;
    xclient           off;

    server {
        listen   25;
        protocol smtp;
    }
    server {
        listen   110;
        protocol pop3;
        proxy_pass_error_message on;
    }
    server {
        listen   143;
        protocol imap;
    }
    server {
        listen   587;
        protocol smtp;
    }
}

Directivas#

listen#

Sintaxis

listen dirección[:puerto] [ssl] [proxy_protocol] [backlog=número] [rcvbuf=tamaño] [sndbuf=tamaño] [bind] [ipv6only=on | off] [reuseport] [so_keepalive=on|off|[keepidle]:[samp:keepintvl]:[samp:keepcnt]];

Predeterminado

Contexto

server

Establece la dirección y el puerto para el socket en el que el servidor aceptará conexiones. Es posible especificar solo el puerto, de modo que Angie escuche en todas las interfaces IPv4 disponibles (y IPv6, si está habilitado). La dirección también puede ser un nombre de host, por ejemplo:

listen 127.0.0.1:110;
listen *:110;
listen 110;     # equivalente a *:110
listen localhost:110;

Las direcciones IPv6 se especifican entre corchetes:

listen [::1]:110;
listen [::]:110;

Los sockets de dominio UNIX se especifican con el prefijo unix::

listen unix:/var/run/angie.sock;

Nota

Los diferentes servidores deben escuchar en distintos pares dirección:puerto.

ssl

permite especificar que todas las conexiones aceptadas en este puerto funcionen en modo SSL.

proxy_protocol

permite especificar que todas las conexiones aceptadas en este puerto usen el protocolo PROXY. La información obtenida se pasa al servidor de autenticación y puede usarse para cambiar la dirección del cliente.

La directiva listen puede tener varios parámetros adicionales específicos para llamadas al sistema relacionadas con sockets.

backlog=número

establece el parámetro backlog en la llamada listen() que limita la longitud máxima de la cola de conexiones pendientes. Por defecto, backlog se establece en -1 en FreeBSD, DragonFly BSD y macOS, y en 511 en otras plataformas.

rcvbuf=tamaño

establece el tamaño del buffer de recepción (la opción SO_RCVBUF) para el socket de escucha.

sndbuf=tamaño

establece el tamaño del buffer de envío (la opción SO_SNDBUF) para el socket de escucha.

bind

este parámetro indica hacer una llamada bind() separada para un par dirección:puerto dado. Si existen varias directivas listen con el mismo puerto pero diferentes direcciones, y una de las directivas listen escucha en todas las direcciones para el puerto dado (*:puerto), Angie solo hará bind() a *:puerto. Debe tenerse en cuenta que en este caso se ejecutará la llamada al sistema getsockname() para determinar la dirección que aceptó la conexión. Si se utilizan los parámetros backlog, rcvbuf, sndbuf, ipv6only, reuseport o so_keepalive, entonces para un par dirección:puerto dado siempre se realizará una llamada bind() separada.

ipv6only=on | off

este parámetro determina (mediante la opción de socket IPV6_V6ONLY) si un socket IPv6 que escucha en una dirección comodín [::] aceptará solo conexiones IPv6 o tanto IPv6 como IPv4. Este parámetro está activado por defecto. Solo puede configurarse una vez al inicio.

multipath

habilita la aceptación de conexiones a través de Multipath TCP (MPTCP), compatible desde la versión 5.6 del kernel de Linux.

so_keepalive=on | off | [keepidle]:[keepintvl]:[keepcnt]

Configura el comportamiento "TCP keepalive" para el socket de escucha.

''

si se omite este parámetro, se aplicarán los valores predeterminados del sistema operativo para el socket

on

la opción SO_KEEPALIVE se activa para el socket

off

la opción SO_KEEPALIVE se desactiva para el socket

Algunos sistemas operativos permiten configurar parámetros de TCP keepalive por socket mediante las opciones de socket TCP_KEEPIDLE, TCP_KEEPINTVL y TCP_KEEPCNT. En dichos sistemas (actualmente, Linux 2.4+, NetBSD 5+ y FreeBSD 9.0-STABLE), pueden configurarse mediante los parámetros keepidle, keepintvl y keepcnt. Se pueden omitir uno o dos parámetros, en cuyo caso se aplicarán los valores predeterminados del sistema para la opción de socket correspondiente.

Por ejemplo:

so_keepalive=30m::10

establecerá el tiempo de inactividad (TCP_KEEPIDLE) en 30 minutos, dejará el intervalo de sondeo (TCP_KEEPINTVL) en su valor predeterminado del sistema y establecerá el número de sondeos (TCP_KEEPCNT) en 10.

Los diferentes servidores deben escuchar en distintos pares dirección:puerto.

mail#

Sintaxis

mail { ... }

Predeterminado

Contexto

main

Proporciona el contexto del archivo de configuración en el que se especifican las directivas del servidor de correo.

max_commands#

Added in version 1.7.0.

Sintaxis

max_commands número;

Predeterminado

max_commands 1000;

Contexto

mail, server

Establece el número máximo de comandos emitidos durante la autenticación para mejorar la protección contra ataques DoS.

max_errors#

Sintaxis

max_errors número;

Predeterminado

max_errors 5;

Contexto

mail, server

Establece el número de errores de protocolo tras los cuales se cierra la conexión.

protocol#

Sintaxis

protocol imap | pop3 | smtp;

Predeterminado

Contexto

server

Establece el protocolo para un servidor proxy. Los protocolos admitidos son IMAP, POP3 y SMTP.

Si la directiva no se especifica, el protocolo puede detectarse automáticamente en función del puerto bien conocido indicado en la directiva listen:

imap: 143, 993
pop3: 110, 995
smtp: 25, 587, 465

Cuando se compila desde el código fuente, pueden deshabilitarse los protocolos innecesarios usando las opciones de compilación --without-mail_imap_module, --without-mail_pop3_module y --without-mail_smtp_module.

resolver#

Sintaxis

resolver dirección ... [valid=tiempo] [ipv4=on | off] [ipv6=on | off] [status_zone=zona];

Predeterminado

resolver off;

Contexto

mail, server

Configura los servidores de nombres usados para obtener el nombre de host del cliente y pasarlo al servidor de autenticación, así como en el comando XCLIENT al hacer proxy de SMTP. Por ejemplo:

resolver 127.0.0.53 [::1]:5353;

La dirección puede especificarse como un nombre de dominio o una dirección IP, con un puerto opcional. Si no se especifica el puerto, se usa el 53. Los servidores de nombres se consultan de forma round-robin.

Por defecto, Angie almacena en caché las respuestas usando el valor TTL de la respuesta. El parámetro opcional valid permite sobrescribirlo:

valid

parámetro opcional que permite sobrescribir la validez de las entradas en caché

resolver 127.0.0.53 [::1]:5353 valid=30s;

De forma predeterminada, Angie buscará tanto direcciones IPv4 como IPv6 al resolver.

ipv4=off

deshabilita la resolución de direcciones IPv4

ipv6=off

deshabilita la resolución de direcciones IPv6

status_zone

parámetro opcional que habilita la recopilación de estadísticas para la zona especificada

Truco

Para prevenir ataques de spoofing DNS, se recomienda configurar servidores DNS en una red local de confianza debidamente asegurada.

Truco

Al ejecutar en Docker, usa la dirección interna de su servidor DNS, como 127.0.0.11.

resolver_timeout#

Sintaxis

resolver_timeout tiempo;

Predeterminado

resolver_timeout 30s;

Contexto

mail, server

Establece el tiempo de espera para las operaciones DNS, por ejemplo:

resolver_timeout 5s;

server#

Sintaxis

server { ... }

Predeterminado

Contexto

mail

Establece la configuración de un servidor.

server_name#

Sintaxis

server_name nombre;

Predeterminado

server_name hostname;

Contexto

mail, server

Establece el nombre del servidor que se usa:

  • en el saludo inicial del servidor POP3/SMTP;

  • en la sal durante la autenticación SASL CRAM-MD5;

  • en el comando EHLO al conectarse al backend SMTP, si el envío del comando XCLIENT está habilitado.

Si la directiva no se especifica, se usará el hostname de la máquina.

timeout#

Sintaxis

timeout tiempo;

Predeterminado

timeout 60s;

Contexto

mail, server

Establece el tiempo de espera que se utiliza antes de iniciar el proxy hacia el backend.