Почтовый модуль#
Базовый почтовый модуль реализует основную функциональность почтового прокси-сервера: это поддержка протоколов SMTP, IMAP и POP3, настройка серверных блоков, маршрутизация почтовых запросов, аутентификация пользователей и поддержка SSL/TLS для защиты почтовых соединений.
Остальные модули этого раздела расширяют эту функциональность, позволяя гибко настраивать и оптимизировать работу почтового сервера под различные сценарии и требования.
При сборке из исходного кода модуль не собирается по умолчанию; его необходимо
включить с помощью параметра сборки
По умолчанию — server Задает адрес и порт для сокета, на котором сервер будет принимать соединения. Можно указать только порт, и тогда Angie будет слушать на всех доступных IPv4-интерфейсах (и IPv6, если он включен). Кроме того, адрес может быть именем хоста, например: IPv6-адреса задаются в квадратных скобках: UNIX-сокеты задаются префиксом Важно Разные серверы должны слушать на разных парах адрес:порт. указывает на то, что все соединения, принимаемые на данном слушающем сокете, должны работать в режиме SSL. указывает на то, что все соединения, принимаемые на данном порту, должны использовать протокол PROXY. Полученная информация передается серверу аутентификации и может быть использована для изменения адреса клиента. В директиве задает параметр backlog в вызове listen(), который ограничивает максимальный размер очереди ожидающих приема соединений. По умолчанию backlog устанавливается равным -1 для FreeBSD, DragonFly BSD и macOS, и 511 для других платформ. задает размер буфера приема (параметр SO_RCVBUF) для слушающего сокета. задает размер буфера передачи (параметр SO_SNDBUF) для слушающего сокета. указывает, что для данного слушающего сокета нужно делать bind() отдельно. Это нужно потому, что если описаны несколько директив определяет (через параметр сокета если параметр опущен, для сокета будут действовать настройки операционной системы для сокета включается параметр SO_KEEPALIVE для сокета параметр SO_KEEPALIVE выключается Некоторые операционные системы поддерживают настройку параметров "TCP keepalive" на уровне сокета посредством параметров TCP_KEEPIDLE, TCP_KEEPINTVL и TCP_KEEPCNT. На таких системах их можно сконфигурировать с помощью параметров keepidle, keepintvl и keepcnt. Один или два параметра могут быть опущены, в таком случае для соответствующего параметра сокета будут действовать стандартные системные настройки. Например, установит таймаут бездействия ( Разные серверы должны слушать на разных парах адрес:порт. Предоставляет контекст конфигурационного файла, в котором указываются директивы почтового сервера. Добавлено в версии 1.7.0. Задает максимальное количество команд, отправляемых во время аутентификации,
для усиления защиты от DoS-атак. Задает число ошибок протокола, по достижении которого соединение закрывается. Задает протокол проксируемого сервера. Поддерживаются протоколы IMAP, POP3 и SMTP. Если директива не указана, то протокол может быть определен автоматически по общеизвестному порту, указанному в директиве При сборке из исходного кода поддержку
ненужных протоколов можно отключить с помощью параметров сборки По умолчанию 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
listen
можно также указать несколько дополнительных параметров, специфичных для связанных с сокетами системных вызовов.backlog=
числоrcvbuf=
размерsndbuf=
размерbind
listen
с одинаковым портом, но разными адресами, и одна из директив listen
слушает на всех адресах для данного порта (*:порт), то Angie сделает bind() только на *:порт. Необходимо заметить, что в этом случае для определения адреса, на который пришло соединение, делается системный вызов getsockname(). Если же используются параметры backlog, rcvbuf, sndbuf, ipv6only, reuseport или so_keepalive, то для данной пары адрес:порт всегда делается отдельный вызов bind().ipv6only=on
| off
IPV6_V6ONLY
), будет ли слушающий на wildcard-адресе [::] IPv6-сокет принимать только IPv6-соединения, или же одновременно IPv6- и IPv4-соединения. По умолчанию параметр включен. Установить его можно только один раз на старте.so_keepalive=on
| off
| [`keepidle
]:[keepintvl]:[keepcnt]` конфигурирует для слушающего сокета поведение "TCP keepalive".''
on
off
so_keepalive=30m::10
TCP_KEEPIDLE
) в 30 минут, для интервала проб (TCP_KEEPINTVL
) будет действовать стандартная системная настройка, а счетчик проб (TCP_KEEPCNT
) будет равен 10.mail#
max_commands#
max_errors#
protocol#
listen
: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#