main.cf:
#
# /usr/local/etc/postfix/main.cf
## LOCAL PATHNAME INFORMATION
#
# Указываем месторасположения директории очереди postfix. Также данная
# директория является корнем, когда postfix запускается в chroot окружении.
queue_directory = /var/spool/postfix
# Задает месторасположение всех postXXX команд (postmap, postconf, postdrop)
command_directory = /usr/local/sbin
# Задаем корень конфигурационных файлов, для более "быстрой навигации".
# Например, теперь можно использовать $base/header_checks вместо
# /usr/local/etc/postfix/header_checks. Мелочь, а приятно.
base = /usr/local/etc/postfix
# Задает месторасположение всех программ демонов postfix. Это программы,
# перечисленные в файле master.cf. Владельцем этой директории должен быть root
daemon_directory = /usr/local/libexec/postfix
# QUEUE AND PROCESS OWNERSHIP
#
# Задает владельца очереди postfix, а также большинства демонов postfix.
# В целях безопасности, необходимо использовать выделенную учетную запись.
# Т.е. от данного пользователя не должны запускаться какие-либо процессы
# в системе, а также он не должен являться владельцем каких-либо файлов.
mail_owner = postfix
# Права по умолчанию, использующиеся local delivery agent. Не указывайте
# здесь привилегированного пользователя или владельца postfix.
default_privs = nobody
# INTERNET HOST AND DOMAIN NAMES
#
# Задает имя хоста в формате FQDN. По умолчанию, используется значение,
# возвращаемой функцией gethostname().
myhostname = mail.test.com.ua
# Задает имя нашего домена. По умолчанию используется значение $myhostname
# минус первый компонент.
mydomain = test.com.ua
# SENDING MAIL
#
# Данный параметр указывает имя домена, которое используется при отправлении
# почты с этой машины. По умолчанию, используется имя локальной машины -
# $myhostname. Для согласованности между адресами отправителя и получателя,
# myorigin также указывает доменное имя, которое добавляется к адресу
# получателя для которого не указана доменная часть.
# myorigin = $myhostname (отправлять письма от: "alex@mail.test.com.ua")
# myorigin = $mydomain (отправлять письма от: "alex@test.com.ua")
myorigin = $mydomain
# RECEIVING MAIL
#
# Указывает адреса сетевых интерфейсов, на которых будет принимать почту
# наша почтовая система. По умолчанию используются все активные интерфейсы
# на машине. При изменении этого праметра необходимо перезапустить postfix
inet_interfaces = all
# Данный параметр указывает список доменов, для которых почта будет доставляться
# локально, а не пересылаться на другой хост. Не указывайте здесь виртуальные
# домены, для этого есть специальный параметр virtual_mailbox_domains
mydestination = $myhostname, localhost.$mydomain, localhost
# REJECTING MAIL FOR UNKNOWN LOCAL USERS
#
# Таблица просмотра со всеми именами и адресами локальных получателей.
local_recipient_maps = unix:passwd.byname $alias_maps
# TRUST AND RELAY CONTROL
#
# Данный параметр задает список "доверенных" клиентов, которые обладают
# некоторыми привилегиями. В частности доверенным SMTP клиентам дозволено
# пересылать почту через postfix. Если вы не доверяете никому, то оставьте
# только 127.0.0.0/8
#mynetworks = 127.0.0.0/8
#mynetworks = 192.168.22.0/24
#mynetworks = 192.168.213.0/24
mynetworks = 192.168.0.0/16
# ALIAS DATABASE
#
# Данный параметр указывает список алиасов, используемый local delivery agent
# После внесения изменений в данный файл необходимо выполнить команду newaliases
# или postalias /etc/mail/aliases
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# SHOW SOFTWARE VERSION OR NOT
#
# Желательно сообщать как можно меньше информации о нашем почтовом сервере.
# Согласно требованиям SMTP протокола вы должны указать $myhostname вначале текста
smtpd_banner = $myhostname ESMTP
# DEBUGGING CONTROL
#
# Задает уровень информативности, когда имя или адрес SMTP клиента
# или сервера соответствует шаблону, заданному в параметре debug_peer_list.
# Следует использовать только во время отладки.
# debug_peer_list = 127.0.0.1, test.com.ua
debug_peer_level = 7
# RESTRICTIONS
#
# client, helo, sender, recipient, data, end-of-data
#
# Дополнительные ограничения доступа smtp сервера в контексте
# smtp запроса клиента
smtpd_client_restrictions = permit_mynetworks,
permit_sasl_authenticated,
check_client_access hash:$base/client_access,
reject_unknown_client_hostname
# Дополнительные ограничения, применяемые сервером Postfix
# в контексте SMTP команды HELO
smtpd_helo_restrictions = check_helo_access hash:$base/hello_access,
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname
# Дополнительные ограничения, применяемые сервером Postfix
# в контексте команды MAIL FROM
smtpd_sender_restrictions = permit_mynetworks,
check_sender_access hash:$base/sender_access,
reject_authenticated_sender_login_mismatch,
reject_unknown_sender_domain,
reject_unlisted_sender,
reject_unverified_sender
# Дополнительные ограничения, применяемые сервером Postfix
# в контексте команды RCPT TO
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_recipient_access hash:$base/recipient_access,
reject_unlisted_recipient,
reject_unknown_recipient_domain,
reject_non_fqdn_recipient,
reject_unverified_recipient
# Отклонять команду ETRN
smtpd_etrn_restrictions = reject
# Заставляем отклонять почту с неизвестным адресом отправителя.
# Позволяет бороться с червями и некоторыми вирусами.
smtpd_reject_unlisted_sender = yes
# Отключает SMTP команду VRFY. В результате чего, невозможно определить
# существование определенного ящика. Данная техника (применение команды
# VRFY) используется спамерами для сбора имен почтовых ящиков.
disable_vrfy_command = yes
# Требуем чтобы адреса, передаваемые в SMTP командах MAIL FROM и RCPT TO
# заключались в <>, а также не содержали стилей или фраз RFC 822.
strict_rfc821_envelopes = yes
# Скрываем отображение имени таблицы получателей в ответе "User unknown"
# yes: User unknown in virtual mailbox table
# no: User unknown
show_user_unknown_table_name = no
# Данный адрес будет использоваться при проверки существования адреса отправителя.
address_verify_sender = <>
# Числовой код ответа SMTP сервера Postfix в случае, когда адрес
# получателя отвергнут ограничением reject_unverified_sender.
unverified_sender_reject_code = 550
# Требуем, чтобы удаленный SMTP клиент представлял себя
# в начале SMTP сессии с помощью команды HELO или EHLO.
smtpd_helo_required = yes
# Всегда отправлять EHLO вначале SMTP сессии
smtp_always_send_ehlo = yes
# Максимальное количество ошибок, которое может сделать удаленный SMTP клиент.
# При превышение данного числа Postfix разорвет соединение.
smtpd_hard_error_limit = 8
# Включаем поддержку sasl аутентификации
smtpd_sasl_auth_enable = yes
# Имя приложения, используемого для инициализации SASL сервера.
# Данный параметр задает имя конфигурационного файла. Имя smtpd
# будет соответсвовать конфигурационному файлу SASL - smtpd.conf.
smtpd_sasl_application_name = smtpd
# Включает функциональную совместимость с SMTP клиентами, которые
# используют устаревшую версию команды AUTH (RFC 2554),
# например, outlook express 4 и MicroSoft Exchange version 5.0.
broken_sasl_auth_clients = yes
# Отвергаем методы, позволяющие анонимную аутентификацию
smtpd_sasl_security_options = noanonymous
# Optional lookup table with the SASL login names
# that own sender (MAIL FROM) addresses
smtpd_sender_login_maps = mysql:$base/mysqlLookupMaps/sender.conf
# Указываем, где postfix должен брать информацию о алиасах
virtual_alias_maps = mysql:$base/mysqlLookupMaps/alias.conf
# Указываем, где postfix должен брать информацию о доменах
virtual_mailbox_domains = mysql:$base/mysqlLookupMaps/domain.conf
# Указываем, где postfix должен брать информацию о почтовых ящиках
virtual_mailbox_maps = mysql:$base/mysqlLookupMaps/mailbox.conf
virtual_mailbox_base = /var/spool/mail
# Настраиваем поддержку квот
virtual_mailbox_limit_maps = mysql:$base/mysqlLookupMaps/quota.conf
virtual_maildir_extended=yes
virtual_mailbox_limit_override=yes
virtual_create_maildirsize = yes
virtual_overquota_bounce = yes
virtual_maildir_limit_message="Sorry, the user's maildir has overdrawn his diskspace quota, please try again later"
# Ограничиваем максимальный размер письма до 5 Мб
message_size_limit = 5242880
# 1981 - uid и gid пользователя и группы virtual соответственно
virtual_gid_maps = static:1981
virtual_uid_maps = static:1981
virtual_minimum_uid = 1000