Почтовый модуль#
Базовый почтовый модуль реализует основную функциональность почтового прокси-сервера: это поддержка протоколов SMTP, IMAP и POP3, настройка серверных блоков, маршрутизация почтовых запросов, аутентификация пользователей и поддержка SSL/TLS для защиты почтовых соединений.
Остальные модули этого раздела расширяют эту функциональность, позволяя гибко настраивать и оптимизировать работу почтового сервера под различные сценарии и требования.
При сборке из исходного кода модуль не собирается по умолчанию; его необходимо
включить с помощью параметра сборки
По умолчанию — server Задает адрес и порт для сокета, на котором сервер будет принимать соединения. Можно указать только порт. Кроме того, адрес может быть именем хоста, например: IPv6-адреса задаются в квадратных скобках: UNIX-сокеты задаются префиксом Важно Разные серверы должны слушать на разных парах адрес:порт. указывает на то, что все соединения, принимаемые на данном слушающем сокете, должны работать в режиме SSL. указывает на то, что все соединения, принимаемые на данном порту, должны использовать протокол PROXY. Полученная информация передается серверу аутентификации и может быть использована для изменения адреса клиента. В директиве listen можно также указать несколько дополнительных параметров, специфичных для связанных с сокетами системных вызовов. задает параметр backlog в вызове listen(), который ограничивает максимальный размер очереди ожидающих приема соединений. По умолчанию backlog устанавливается равным -1 для FreeBSD, DragonFly BSD и macOS, и 511 для других платформ. задает размер буфера приема (параметр SO_RCVBUF) для слушающего сокета. задает размер буфера передачи (параметр SO_SNDBUF) для слушающего сокета. указывает, что для данного слушающего сокета нужно делать bind() отдельно. Это нужно потому, что если описаны несколько директив listen с одинаковым портом, но разными адресами, и одна из директив listen слушает на всех адресах для данного порта (*:порт), то Angie сделает bind() только на *:порт. Необходимо заметить, что в этом случае для определения адреса, на который пришло соединение, делается системный вызов getsockname(). Если же используются параметры backlog, rcvbuf, sndbuf, ipv6only, reuseport или so_keepalive, то для данной пары адрес:порт всегда делается отдельный вызов bind(). определяет (через параметр сокета IPV6_V6ONLY), будет ли слушающий на wildcard-адресе [::] IPv6-сокет принимать только IPv6-соединения, или же одновременно IPv6- и IPv4-соединения. если параметр опущен, для сокета будут действовать настройки операционной системы для сокета включается параметр SO_KEEPALIVE для сокета параметр SO_KEEPALIVE выключается Некоторые операционные системы поддерживают настройку параметров "TCP keepalive" на уровне сокета посредством параметров TCP_KEEPIDLE, TCP_KEEPINTVL и TCP_KEEPCNT. На таких системах их можно сконфигурировать с помощью параметров keepidle, keepintvl и keepcnt. Один или два параметра могут быть опущены, в таком случае для соответствующего параметра сокета будут действовать стандартные системные настройки. Например, установит таймаут бездействия (TCP_KEEPIDLE) в 30 минут, для интервала проб (TCP_KEEPINTVL) будет действовать стандартная системная настройка, а счетчик проб (TCP_KEEPCNT) будет равен 10. Разные серверы должны слушать на разных парах адрес:порт. Предоставляет контекст конфигурационного файла, в котором указываются директивы почтового сервера. Добавлено в версии 1.7.0. Задает максимальное количество команд, отправляемых во время аутентификации,
для усиления защиты от DoS-атак. Задает число ошибок протокола, по достижении которого соединение закрывается. Задает протокол проксируемого сервера. Поддерживаются протоколы IMAP, POP3 и SMTP. Если директива не указана, то протокол может быть определен автоматически по общеизвестному порту, указанному в директиве listen: При сборке из исходного кода поддержку
ненужных протоколов можно отключить с помощью параметров сборки По умолчанию mail, server Задает серверы DNS, используемые для преобразования имени хоста клиента для передачи его на сервер аутентификации и в команде XCLIENT при проксировании SMTP, например: Адрес может быть указан в виде доменного имени или IP-адреса, и необязательного порта. Если порт не указан, используется порт 53. Серверы DNS опрашиваются циклически. По умолчанию Angie кэширует ответы, используя значение TTL из ответа. Необязательный параметр valid позволяет это переопределить: необязательный параметр, позволяет переопределить срок кэширования ответа По умолчанию Angie будет искать как IPv4-, так и IPv6-адреса при преобразовании имен в адреса. запрещает поиск IPv4-адресов запрещает поиск IPv6-адресов необязательный параметр, включает сбор информации о запросах и ответах сервера DNS в указанной зоне Совет Для предотвращения DNS-спуфинга рекомендуется использовать DNS-серверы в защищенной доверенной локальной сети. Подсказка При запуске в Docker используйте соответствующий внутренний адрес DNS-сервера, например Задает таймаут для преобразования имени в адрес, например: Задает конфигурацию для сервера. Задает имя сервера, используемое: в начальном приветствии POP3/SMTP-сервера; в salt при аутентификации SASL-методом CRAM-MD5; в команде EHLO при подключении к SMTP-бэкенду, если разрешена передача команды XCLIENT. Если директива не указана, используется имя хоста (hostname) машины. Задает таймаут, который используется до начала проксирования на бэкенд.‑‑with‑mail
.
В пакетах и образах из
наших репозиториев
модуль включен в сборку.Пример конфигурации#
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;
}
}
Директивы#
listen#
listen
адрес[:порт] [ssl
] [proxy_protocol
] [backlog=
число] [rcvbuf=
размер] [sndbuf=
размер] [bind
] [ipv6only=
on
| off
] [reuseport
] [so_keepalive=
on|off|[keepidle]:[keepintvl]:[keepcnt]];listen 127.0.0.1:110;
listen *:110;
listen 110; # то же, что и *:110
listen localhost:110;
listen [::1]:110;
listen [::]:110;
unix:
listen unix:/var/run/angie.sock;
ssl
proxy_protocol
backlog=
числоrcvbuf=
размерsndbuf=
размерbind
ipv6only=on
| off
По умолчанию параметр включен. Установить его можно только один раз на старте.so_keepalive=on
| off
| [keepidle]:[keepintvl]:[keepcnt]
конфигурирует для слушающего сокета поведение "TCP keepalive".''
on
off
so_keepalive=30m::10
mail#
max_commands#
max_errors#
protocol#
imap: 143, 993
pop3: 110, 995
smtp: 25, 587, 465
‑‑without‑mail_imap_module
,
‑‑without‑mail_pop3_module
и ‑‑without‑mail_smtp_module
.resolver#
resolver
адрес ... [valid=
время] [ipv4=
on
| off
] [ipv6=
on
| off
] [status_zone=
зона];resolver off;
resolver 127.0.0.53 [::1]:5353;
valid
resolver 127.0.0.53 [::1]:5353 valid=30s;
ipv4=off
ipv6=off
status_zone
127.0.0.11
.resolver_timeout#
resolver_timeout 5s;
server#
server_name#
timeout#