Почтовые серверы · 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].
| source | destination |
| [email protected] | [email protected] |
Таблица users хранит всех виртуальных пользователей (т.е. адреса электронной почты, потому что адрес электронной почты и имя пользователя совпадают) и пароли (в зашифрованном виде!) и значение квоты для каждого почтового ящика (в этом примере значение по умолчанию составляет 10485760 байт, что означает 10 МБ).
| password | quota | |
| [email protected] | No9.E4skNvGa. (“секрет” в зашифрованном виде) | 10485760 |
Таблица transport является необязательной, она предназначена для продвинутых пользователей. Она позволяет перенаправлять письма для отдельных пользователей, целых доменов или всех писем на другой сервер. Например,
| domain | transport |
| example.com | smtp:[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 для администрирования вашего почтового сервера.
Get new posts in your inbox
No spam. Unsubscribe anytime.