Почтовые серверы · 5 min read · Nov 11, 2025

Виртуальные пользователи и домены с Postfix, Courier и MySQL (+ SMTP-AUTH, квота, SpamAssassin, ClamAV)

Это “копировать и вставить” руководство! Самый простой способ следовать этому учебнику - использовать клиент командной строки/SSH-клиент (например, PuTTY для Windows) и просто копировать и вставлять команды (за исключением случаев, когда вам нужно предоставить собственную информацию, такую как IP-адреса, имена хостов, пароли и т. д.). Это помогает избежать опечаток.

Виртуальные пользователи и домены с Postfix, Courier и MySQL (+ SMTP-AUTH, квота, SpamAssassin, ClamAV)

Версия 1.0
Автор: Фалко Тимме

Этот учебник является объектом авторского права (c) 2005 года Фалко Тимме. Он основан на учебнике Кристофа Хааса, который вы можете найти по адресу http://workaround.org. Вы можете свободно использовать этот учебник в соответствии с лицензией Creative Commons 2.5 или любой более поздней версией.

Этот документ описывает, как установить почтовый сервер на основе Postfix, который основан на виртуальных пользователях и доменах, т.е. пользователях и доменах, которые находятся в базе данных MySQL. Я также продемонстрирую установку и настройку Courier (Courier-POP3, Courier-IMAP), чтобы Courier мог аутентифицироваться с помощью той же базы данных MySQL, которую использует Postfix.

Получившийся сервер Postfix способен на SMTP-AUTH и TLS и квоту (квота по умолчанию не встроена в Postfix, я покажу, как правильно патчить ваш Postfix). Пароли хранятся в зашифрованном виде в базе данных (большинство документов, которые я нашел, имели дело с паролями в открытом виде, что является риском безопасности). В дополнение к этому, этот учебник охватывает установку Amavisd, SpamAssassin и ClamAV, чтобы электронные письма проверялись на спам и вирусы.

Преимущество такой “виртуальной” настройки (виртуальные пользователи и домены в базе данных MySQL) заключается в том, что она гораздо более производительна, чем настройка, основанная на “реальных” системных пользователях. С этой виртуальной настройкой ваш почтовый сервер может обрабатывать тысячи доменов и пользователей. Кроме того, его легче администрировать, потому что вам нужно иметь дело только с базой данных MySQL, когда вы добавляете новых пользователей/домены или редактируете существующие. Больше никаких команд postmap для создания файлов базы данных, больше никаких перезагрузок Postfix и т. д. Для администрирования базы данных MySQL вы можете использовать веб-инструменты, такие как phpMyAdmin, которые также будут установлены в этом руководстве. Третье преимущество заключается в том, что у пользователей есть адрес электронной почты в качестве имени пользователя (вместо имени пользователя + адреса электронной почты), что легче понять и запомнить.

Этот учебник основан на Debian Sarge (Debian 3.1). Вы уже должны были настроить базовую систему Debian, как описано здесь: https://www.howtoforge.com/perfect_setup_debian_sarge и https://www.howtoforge.com/perfect_setup_debian_sarge_p2.

Этот учебник предназначен как практическое руководство; он не охватывает теоретические основы. Они рассматриваются во многих других документах в сети.

Этот документ предоставляется без каких-либо гарантий! Я хочу сказать, что это не единственный способ настройки такой системы. Существует множество способов достижения этой цели, но это тот путь, который я выбрал. Я не даю никаких гарантий, что это сработает для вас!

1 Установите Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Все это можно установить одной командой:

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authmysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin (1 строка!)

Вам будет задано несколько вопросов:

Включить suExec? <– Да
Создать каталоги для веб-администрирования? <– Нет
Общий тип конфигурации? <– Интернет-сайт
Куда должна идти почта для root? <– НИКУДА
Имя почтового сервера? <– server1.example.com
Другие назначения для приема почты? (пусто для ничего) <– server1.example.com, localhost, localhost.localdomain
Принудить синхронные обновления в очереди почты? <– Нет
Требуется SSL-сертификат <– Ок
Установить подсказки <– Ок
Какой веб-сервер вы хотите автоматически перенастроить? <– apache, apache2
Хотите, чтобы я сейчас перезапустил apache? <– Да

2 Примените патч квоты к Postfix

Нам нужно получить исходники Postfix, патчить их с помощью патча квоты, собрать новые пакеты Postfix .deb и установить эти .deb пакеты:

apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient10-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch (1 строка!)
cd /usr/src
apt-get source postfix
wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.1.5-trash.patch.gz
gunzip postfix-2.1.5-trash.patch.gz
cd postfix-2.1.5
patch -p1 < ../postfix-2.1.5-trash.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.1.5-9_i386.deb
dpkg -i postfix-mysql_2.1.5-9_i386.deb
dpkg -i postfix-tls_2.1.5-9_i386.deb

3 Создайте базу данных MySQL для Postfix/Courier

По умолчанию MySQL устанавливается без пароля root, который мы сразу изменим (замените yourrootsqlpassword на пароль, который вы хотите использовать):

mysqladmin -u root password yourrootsqlpassword

Теперь мы создаем базу данных с именем mail:

mysqladmin -u root -p create mail

Далее мы переходим в оболочку MySQL:

mysql -u root -p

В оболочке MySQL мы создаем пользователя mail_admin с паролем mail_admin_password (замените его на свой собственный пароль), который имеет привилегии SELECT, INSERT, UPDATE, DELETE на базе данных mail. Этот пользователь будет использоваться Postfix и Courier для подключения к базе данных mail:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;

Все еще в оболочке MySQL, мы создаем таблицы, необходимые Postfix и Courier:

USE mail;

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) TYPE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) TYPE=MyISAM;

quit;

Как вы могли заметить, с помощью команды quit; мы вышли из оболочки MySQL и вернулись в оболочку Linux.

Таблица domains будет хранить каждый виртуальный домен, для которого Postfix должен получать электронные письма (например, example.com).

domain
example.com

Таблица forwardings предназначена для алиасов одного адреса электронной почты на другой, например, перенаправление писем для [email protected] на [email protected].

sourcedestination
[email protected][email protected]

Таблица users хранит всех виртуальных пользователей (т.е. адреса электронной почты, потому что адрес электронной почты и имя пользователя совпадают) и пароли (в зашифрованном виде!) и значение квоты для каждого почтового ящика (в этом примере значение по умолчанию составляет 10485760 байт, что означает 10 МБ).

emailpasswordquota
[email protected]No9.E4skNvGa. (“секрет” в зашифрованном виде)10485760

Таблица transport является необязательной, она предназначена для продвинутых пользователей. Она позволяет перенаправлять письма для отдельных пользователей, целых доменов или всех писем на другой сервер. Например,

domaintransport
example.comsmtp:[1.2.3.4]

перенаправит все электронные письма для example.com через протокол smtp на сервер с IP-адресом 1.2.3.4 (квадратные скобки [] означают “не выполнять поиск записи MX DNS” (что имеет смысл для IP-адресов…). Если вы используете полностью квалифицированное доменное имя (FQDN), то квадратные скобки не используются.).

Кстати, (я предполагаю, что IP-адрес вашей почтовой серверной системы 192.168.0.100) вы можете получить доступ к phpMyAdmin через http://192.168.0.100/phpmyadmin/ в браузере и войти как mail_admin. Затем вы можете взглянуть на базу данных. Позже вы можете использовать phpMyAdmin для администрирования вашего почтового сервера.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.